1- cmake_minimum_required (VERSION 3.7 )
1+ cmake_minimum_required (VERSION 3.5 )
22
33project (open_simulation_interface)
44
5+ # Set a default build type if none was specified
6+ set (default_build_type "Release" )
7+ if (EXISTS "${CMAKE_SOURCE_DIR} /.git" )
8+ set (default_build_type "Debug" )
9+ endif ()
10+
11+ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES )
12+ message (STATUS "Setting build type to '${default_build_type} ' as none was specified." )
13+ set (CMAKE_BUILD_TYPE "${default_build_type} " CACHE
14+ STRING "Choose the type of build." FORCE)
15+ # Set the possible values of build type for cmake-gui
16+ set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
17+ "Debug" "Release" "MinSizeRel" "RelWithDebInfo" )
18+ endif ()
19+
20+ # Offer the user the choice of overriding the installation directories
21+ set (INSTALL_LIB_DIR /usr/local/lib CACHE PATH "Installation directory for libraries" )
22+ set (INSTALL_INCLUDE_DIR /usr/local/include CACHE PATH "Installation directory for header files" )
23+
24+ if (WIN32 AND NOT CYGWIN )
25+ set (DEF_INSTALL_CMAKE_DIR CMake)
26+ else ()
27+ set (DEF_INSTALL_CMAKE_DIR lib/cmake/${PROJECT_NAME} )
28+ endif ()
29+ set (INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH
30+ "Installation directory for CMake files" )
31+
532# read the version number from the file "VERSION"
633file (STRINGS "VERSION" VERSION_CONTENTS)
734foreach (LINE ${VERSION_CONTENTS} )
@@ -10,10 +37,15 @@ foreach(LINE ${VERSION_CONTENTS})
1037 string (REPLACE "${VERSION_NAME} =" "" VERSION_VALUE ${LINE} )
1138 set (${VERSION_NAME} "${VERSION_VALUE} " )
1239endforeach ()
40+ set (OPEN_SIMULATION_INTERFACE_VERSION ${VERSION_MAJOR} .${VERSION_MINOR} .${VERSION_PATCH} )
41+
42+ set (INSTALL_LIB_DIR ${INSTALL_LIB_DIR} /osi${VERSION_MAJOR} )
43+ set (INSTALL_INCLUDE_DIR ${INSTALL_INCLUDE_DIR} /osi${VERSION_MAJOR} )
1344
1445configure_file (osi_version.proto.in ${CMAKE_CURRENT_SOURCE_DIR} /osi_version.proto)
1546
1647find_package (Protobuf 2.6.1 REQUIRED)
48+ set (PROTOBUF_IMPORT_DIRS ${PROTOBUF_INCLUDE_DIRS} )
1749
1850set (OSI_PROTO_FILES
1951 osi_version.proto
@@ -41,16 +73,21 @@ add_library(${PROJECT_NAME}_static STATIC ${PROTO_SRCS} ${PROTO_HEADERS})
4173target_include_directories (${PROJECT_NAME} _static
4274 PUBLIC
4375 ${PROTOBUF_INCLUDE_DIR}
44- ${CMAKE_CURRENT_BINARY_DIR}
76+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
77+ $<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR} >
4578)
4679target_link_libraries (${PROJECT_NAME} _static PUBLIC ${PROTOBUF_LIBRARY} )
80+ install (TARGETS ${PROJECT_NAME} _static
81+ EXPORT ${PROJECT_NAME} _targets
82+ ARCHIVE DESTINATION "${INSTALL_LIB_DIR} " COMPONENT lib)
4783
4884
4985add_library (${PROJECT_NAME} _obj OBJECT ${PROTO_SRCS} ${PROTO_HEADERS} )
5086target_include_directories (${PROJECT_NAME} _obj
5187 PUBLIC
5288 ${PROTOBUF_INCLUDE_DIR}
53- ${CMAKE_CURRENT_BINARY_DIR}
89+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
90+ $<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR} >
5491)
5592set_property (TARGET ${PROJECT_NAME} _obj PROPERTY POSITION_INDEPENDENT_CODE ON )
5693
@@ -59,20 +96,58 @@ add_library(${PROJECT_NAME}_pic STATIC $<TARGET_OBJECTS:${PROJECT_NAME}_obj>)
5996target_include_directories (${PROJECT_NAME} _pic
6097 PUBLIC
6198 ${PROTOBUF_INCLUDE_DIR}
62- ${CMAKE_CURRENT_BINARY_DIR}
99+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
100+ $<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR} >
63101)
64102target_link_libraries (${PROJECT_NAME} _pic PUBLIC ${PROTOBUF_LIBRARY} )
65103set_property (TARGET ${PROJECT_NAME} _pic PROPERTY POSITION_INDEPENDENT_CODE ON )
66104
105+ install (TARGETS ${PROJECT_NAME} _pic
106+ EXPORT ${PROJECT_NAME} _targets
107+ ARCHIVE DESTINATION "${INSTALL_LIB_DIR} " COMPONENT lib)
108+
67109
68110add_library (${PROJECT_NAME} SHARED $<TARGET_OBJECTS:${PROJECT_NAME} _obj>)
69111target_include_directories (${PROJECT_NAME}
70112 PUBLIC
71113 ${PROTOBUF_INCLUDE_DIR}
72- ${CMAKE_CURRENT_BINARY_DIR}
114+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
115+ $<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR} >
73116)
74117target_link_libraries (${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY} )
75-
118+ install (TARGETS ${PROJECT_NAME}
119+ EXPORT ${PROJECT_NAME} _targets
120+ DESTINATION "${INSTALL_LIB_DIR} " COMPONENT lib)
121+
122+ # Create the open_simulation_interface.cmake and open_simulation_interface-version files
123+
124+ # ... for the build tree
125+ set (CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR} " "${PROJECT_BINARY_DIR} " )
126+ configure_file (open_simulation_interface-config.cmake.in
127+ "${PROJECT_BINARY_DIR} /${PROJECT_NAME} -config.cmake" @ONLY)
128+ # ... for the install tree
129+ set (CONF_INCLUDE_DIRS ${INSTALL_INCLUDE_DIR} ${PROTOBUF_INCLUDE_DIR} )
130+ configure_file (open_simulation_interface-config.cmake.in
131+ "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /open_simulation_interface-config.cmake" @ONLY)
132+ # ... for both
133+ configure_file (open_simulation_interface-config-version .cmake.in
134+ "${PROJECT_BINARY_DIR} /${PROJECT_NAME} -config-version.cmake" @ONLY)
135+
136+ # Install the *cmake files
137+ install (FILES
138+ "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /open_simulation_interface-config.cmake"
139+ "${PROJECT_BINARY_DIR} /${PROJECT_NAME} -config-version.cmake"
140+ DESTINATION "${INSTALL_CMAKE_DIR} "
141+ COMPONENT dev)
142+
143+ # Header files
144+ install (FILES ${PROTO_HEADERS}
145+ DESTINATION "${INSTALL_INCLUDE_DIR} " )
146+
147+ # Install the export set for use with the install-tree
148+ install (EXPORT ${PROJECT_NAME} _targets
149+ DESTINATION "${INSTALL_CMAKE_DIR} "
150+ COMPONENT dev)
76151
77152# add a target to generate API documentation with Doxygen
78153# Dependencies: Doxygen and proto2cpp.py
@@ -102,4 +177,5 @@ else()
102177
103178 endif (NOT EXISTS ${FILTER_PROTO2CPP_PY_PATH} /proto2cpp.py)
104179
105- endif (NOT DOXYGEN_FOUND)
180+ endif (NOT DOXYGEN_FOUND)
181+
0 commit comments