Skip to content

Commit d9a5e62

Browse files
author
nkoenig
committed
Merged wigh ign-math
1 parent 980fbe8 commit d9a5e62

21 files changed

+473
-239
lines changed

AUTHORS

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
OSRFoundation
1+
Open Robotics

CMakeLists.txt

+81-50
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,37 @@
1-
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
2-
3-
set(IGN_PROJECT_NAME "<project-name>")
4-
5-
project (ignition-${IGN_PROJECT_NAME})
6-
string (TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
7-
string (TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
1+
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
82

3+
# Set the project name and version number here
4+
set(IGN_PROJECT_NAME "project_name")
95
set (PROJECT_MAJOR_VERSION 0)
106
set (PROJECT_MINOR_VERSION 1)
117
set (PROJECT_PATCH_VERSION 0)
128

9+
#################################################
10+
# Only change values below here if you know
11+
# what you're doing
12+
#################################################
13+
14+
project (ignition-${IGN_PROJECT_NAME}${PROJECT_MAJOR_VERSION})
15+
16+
set(PROJECT_NAME_NO_VERSION "ignition-${IGN_PROJECT_NAME}")
17+
string (TOLOWER ${PROJECT_NAME_NO_VERSION} PROJECT_NAME_NO_VERSION_LOWER)
18+
string (TOUPPER ${PROJECT_NAME_NO_VERSION} PROJECT_NAME_NO_VERSION_UPPER)
19+
string (TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
20+
string (TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
21+
set(PROJECT_EXPORT_NAME ${PROJECT_NAME_LOWER})
22+
set(PROJECT_LIBRARY_TARGET_NAME ${PROJECT_NAME_LOWER})
23+
1324
set (PROJECT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION})
14-
set (PROJECT_VERSION_FULL ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION})
25+
set (PROJECT_VERSION_FULL
26+
${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION})
1527

16-
message (STATUS "${PROJECT_NAME} version ${PROJECT_VERSION_FULL}")
28+
message (STATUS "${PROJECT_NAME_NO_VERSION} version ${PROJECT_VERSION_FULL}")
1729

1830
set (project_cmake_dir ${PROJECT_SOURCE_DIR}/cmake
1931
CACHE PATH "Location of CMake scripts")
2032

2133
include (${project_cmake_dir}/Utils.cmake)
34+
include (CMakePackageConfigHelpers)
2235

2336
########################################
2437
# Package Creation:
@@ -91,9 +104,10 @@ if(LD_LIBRARY_PATH)
91104
endif()
92105

93106

94-
set (INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/ignition")
107+
set (INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}")
108+
set (INCLUDE_INSTALL_DIR_POSTFIX "ignition/${IGN_PROJECT_NAME}${PROJECT_MAJOR_VERSION}")
109+
set (INCLUDE_INSTALL_DIR_FULL "${INCLUDE_INSTALL_DIR}/${INCLUDE_INSTALL_DIR_POSTFIX}")
95110
set (LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
96-
set (LIB_INSTALL_DIR_ARCH_INDEPENDENT "lib/")
97111
set (BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR})
98112

99113
set (USE_FULL_RPATH OFF CACHE BOOL "Set to true to enable full rpath")
@@ -167,26 +181,23 @@ endif()
167181
unset (CMAKE_C_FLAGS_ALL CACHE)
168182
unset (CMAKE_CXX_FLAGS CACHE)
169183

170-
# USE_HOST_CFLAGS (default TRUE)
171-
# Will check building host machine for proper cflags
172-
if(NOT DEFINED USE_HOST_CFLAGS OR USE_HOST_CFLAGS)
173-
message(STATUS "Enable host CFlags")
174-
include (${project_cmake_dir}/HostCFlags.cmake)
175-
endif()
176-
177-
# USE_UPSTREAM_CFLAGS (default TRUE)
178-
# Will use predefined ignition developers cflags
179-
if(NOT DEFINED USE_UPSTREAM_CFLAGS OR USE_UPSTREAM_CFLAGS)
180-
message(STATUS "Enable upstream CFlags")
181-
include(${project_cmake_dir}/DefaultCFlags.cmake)
184+
# Check if warning options are avaliable for the compiler and return WARNING_CXX_FLAGS variable
185+
# MSVC generates tons of warnings on gtest code.
186+
# Recommended to use /W4 instead of /Wall
187+
if (MSVC)
188+
set(WARN_LEVEL "/W4")
189+
else()
190+
set(WARN_LEVEL "-Wall")
182191
endif()
183192

184-
# Check if warning options are avaliable for the compiler and return WARNING_CXX_FLAGS variable
185-
filter_valid_compiler_warnings(-Wall -Wextra -Wno-long-long
193+
filter_valid_compiler_warnings(${WARN_LEVEL} -Wextra -Wno-long-long
186194
-Wno-unused-value -Wno-unused-value -Wno-unused-value -Wno-unused-value
187195
-Wfloat-equal -Wshadow -Winit-self -Wswitch-default
188196
-Wmissing-include-dirs -pedantic)
189197
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}${WARNING_CXX_FLAGS}")
198+
if (DEFINED EXTRA_CMAKE_CXX_FLAGS)
199+
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CMAKE_CXX_FLAGS}")
200+
endif()
190201

191202
#################################################
192203
# OS Specific initialization
@@ -231,16 +242,12 @@ else (build_errors)
231242

232243
########################################
233244
# Write the config.hh file
234-
configure_file (${project_cmake_dir}/config.hh.in
235-
${PROJECT_BINARY_DIR}/include/ignition/${IGN_PROJECT_NAME}/config.hh)
245+
configure_file ("${project_cmake_dir}/config.hh.in"
246+
"${PROJECT_BINARY_DIR}/include/ignition/${IGN_PROJECT_NAME}/config.hh")
236247
ign_install_includes(
237-
${IGN_PROJECT_NAME}${PROJECT_MAJOR_VERSION}/ignition/${IGN_PROJECT_NAME}
238-
${PROJECT_BINARY_DIR}/include/ignition/${IGN_PROJECT_NAME}/config.hh)
248+
"${INCLUDE_INSTALL_DIR_POSTFIX}/ignition/${IGN_PROJECT_NAME}"
249+
"${PROJECT_BINARY_DIR}/include/ignition/${IGN_PROJECT_NAME}/config.hh")
239250

240-
include_directories(
241-
${PROJECT_SOURCE_DIR}/include
242-
${PROJECT_BINARY_DIR}/include
243-
)
244251
link_directories(${PROJECT_BINARY_DIR}/src)
245252

246253
if (DEFINED CMAKE_CXX_FLAGS)
@@ -260,25 +267,35 @@ else (build_errors)
260267

261268
########################################
262269
# Make the package config files
263-
configure_file(
264-
${CMAKE_SOURCE_DIR}/cmake/pkgconfig/ignition.in
265-
${CMAKE_CURRENT_BINARY_DIR}/cmake/pkgconfig/${PROJECT_NAME_LOWER}.pc @ONLY)
266-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/pkgconfig/${PROJECT_NAME_LOWER}.pc
267-
DESTINATION ${LIB_INSTALL_DIR_ARCH_INDEPENDENT}/pkgconfig
268-
COMPONENT pkgconfig)
270+
set (pkgconfig_files ${PROJECT_NAME_NO_VERSION_LOWER})
271+
272+
foreach (pkgconfig ${pkgconfig_files})
273+
configure_file(${CMAKE_SOURCE_DIR}/cmake/pkgconfig/${pkgconfig}.in
274+
${CMAKE_CURRENT_BINARY_DIR}/cmake/pkgconfig/${pkgconfig}${PROJECT_MAJOR_VERSION}.pc @ONLY)
275+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/pkgconfig/${pkgconfig}${PROJECT_MAJOR_VERSION}.pc
276+
DESTINATION ${LIB_INSTALL_DIR}/pkgconfig COMPONENT pkgconfig)
277+
endforeach()
269278

270279
########################################
271280
# Make the cmake config files
272-
set(PKG_NAME ${PROJECT_NAME_UPPER})
273-
set(PKG_LIBRARIES ${PROJECT_NAME_LOWER}${PROJECT_MAJOR_VERSION})
274-
set(cmake_conf_file "${PROJECT_NAME_LOWER}${PROJECT_MAJOR_VERSION}-config.cmake")
275-
set(cmake_conf_version_file "${PROJECT_NAME_LOWER}${PROJECT_MAJOR_VERSION}-config-version.cmake")
281+
set(PKG_NAME ${PROJECT_NAME_NO_VERSION_UPPER})
282+
set(cmake_conf_file "${PROJECT_NAME_LOWER}-config.cmake")
283+
set(cmake_conf_version_file "${PROJECT_NAME_LOWER}-config-version.cmake")
284+
set(cmake_targets_file "${PROJECT_NAME_LOWER}-targets.cmake")
276285

277286
set(PKG_DEPENDS)
278287

279-
configure_file(
280-
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME_LOWER}-config.cmake.in"
281-
"${CMAKE_CURRENT_BINARY_DIR}/${cmake_conf_file}" @ONLY)
288+
if(WIN32 AND NOT CYGWIN)
289+
set(CMAKE_CONFIG_INSTALL_DIR CMake)
290+
else()
291+
set(CMAKE_CONFIG_INSTALL_DIR ${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME_LOWER}/)
292+
endif()
293+
294+
configure_package_config_file(
295+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/ignition-config.cmake.in"
296+
"${CMAKE_CURRENT_BINARY_DIR}/${cmake_conf_file}"
297+
PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR_FULL
298+
INSTALL_DESTINATION ${CMAKE_CONFIG_INSTALL_DIR})
282299

283300
# Use write_basic_package_version_file to generate a ConfigVersion file that
284301
# allow users of gazebo to specify the API or version to depend on
@@ -293,16 +310,30 @@ else (build_errors)
293310
install(FILES
294311
${CMAKE_CURRENT_BINARY_DIR}/${cmake_conf_file}
295312
${CMAKE_CURRENT_BINARY_DIR}/${cmake_conf_version_file}
296-
DESTINATION ${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME_LOWER}${PROJECT_MAJOR_VERSION}/ COMPONENT cmake)
313+
DESTINATION ${CMAKE_CONFIG_INSTALL_DIR} COMPONENT cmake)
314+
315+
# Create *-targets.cmake file for build directory
316+
# TODO: keep this instruction until we depend on CMake 3
317+
# then change the first line from TARGETS ...
318+
# to EXPORT ... to match the format used in install(EXPORT
319+
export(TARGETS ${PROJECT_LIBRARY_TARGET_NAME}
320+
FILE ${CMAKE_BINARY_DIR}/${cmake_targets_file})
321+
322+
# Install *-targets.cmake file
323+
install(EXPORT ${PROJECT_EXPORT_NAME}
324+
DESTINATION ${CMAKE_CONFIG_INSTALL_DIR}
325+
FILE ${cmake_targets_file})
326+
297327

298328
########################################
299329
# If present, load platform-specific build hooks. This system is used,
300-
# for example, by the Ubuntu overlay, to arrange for installation of
301-
# Ubuntu-specific application-launching configuration.
330+
# for example, by the Ubuntu overlay, to
331+
# arrange for installation of Ubuntu-specific application-launching
332+
# configuration.
302333
if (EXISTS ${PROJECT_SOURCE_DIR}/cmake/packager-hooks/CMakeLists.txt)
303334
message(STATUS "Loading packager build hooks from cmake/packager-hooks")
304335
add_subdirectory(cmake/packager-hooks)
305336
endif()
306337

307-
message(STATUS "Configuration successful. Type make to compile ${PROJECT_NAME_LOWER}")
338+
message(STATUS "Configuration successful.")
308339
endif(build_errors)

cmake/DefaultCFlags.cmake

+12-18
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,15 @@ set (CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_C_FLAGS_COVERAGE} -fno-elide-constructors
2828

2929
#####################################
3030
# Set all the global build flags
31-
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
32-
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}} -std=c++11")
33-
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_LINK_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
34-
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_LINK_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
35-
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_LINK_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
36-
37-
# Compiler-specific C++11 activation.
38-
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
39-
execute_process(
40-
COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
41-
if (NOT (GCC_VERSION VERSION_GREATER 4.7))
42-
message(FATAL_ERROR "${PROJECT_NAME} requires g++ 4.8 or greater.")
43-
endif ()
44-
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
45-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
46-
else ()
47-
message(FATAL_ERROR "Your C++ compiler does not support C++11.")
48-
endif ()
31+
if (UNIX)
32+
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
33+
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
34+
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_LINK_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
35+
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_LINK_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
36+
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_LINK_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}}")
37+
# Add visibility in UNIX
38+
check_gcc_visibility()
39+
if (GCC_SUPPORTS_VISIBILITY)
40+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
41+
endif()
42+
endif()

cmake/DissectVersion.cmake

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Find version components
22
STRING (REGEX REPLACE "^([0-9]+).*" "\\1" PROJECT_MAJOR_VERSION "${PROJECT_VERSION_FULL}")
33
STRING (REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" PROJECT_MINOR_VERSION "${PROJECT_VERSION_FULL}")
4-
STRING (REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" IGNITION_REVISION_VERSION ${PROJECT_VERSION_FULL})
5-
STRING (REGEX REPLACE "^[0-9]+\\.[0-9]+\\.[0-9]+(.*)" "\\1" IGNITION_CANDIDATE_VERSION ${PROJECT_VERSION_FULL})
4+
STRING (REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" PROJECT_REVISION_VERSION ${PROJECT_VERSION_FULL})
5+
STRING (REGEX REPLACE "^[0-9]+\\.[0-9]+\\.[0-9]+(.*)" "\\1" PROJECT_CANDIDATE_VERSION ${PROJECT_VERSION_FULL})

0 commit comments

Comments
 (0)