Skip to content

Commit c868eb4

Browse files
committed
Implementing the "make install" for the OSI 2.
The cmake file from current master branch is reuse and adjusted to allow several OSI versions on the same computer. The main idea is to install the into a directory that takes the version into account. This draft uses the major version described inside the version file to configure the installation path.
1 parent 8950185 commit c868eb4

File tree

5 files changed

+1513
-29
lines changed

5 files changed

+1513
-29
lines changed

CMakeLists.txt

Lines changed: 83 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,34 @@
1-
cmake_minimum_required(VERSION 3.7)
1+
cmake_minimum_required(VERSION 3.5)
22

33
project(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"
633
file(STRINGS "VERSION" VERSION_CONTENTS)
734
foreach(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}")
1239
endforeach()
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

1445
configure_file(osi_version.proto.in ${CMAKE_CURRENT_SOURCE_DIR}/osi_version.proto)
1546

1647
find_package(Protobuf 2.6.1 REQUIRED)
48+
set(PROTOBUF_IMPORT_DIRS ${PROTOBUF_INCLUDE_DIRS})
1749

1850
set(OSI_PROTO_FILES
1951
osi_version.proto
@@ -41,16 +73,21 @@ add_library(${PROJECT_NAME}_static STATIC ${PROTO_SRCS} ${PROTO_HEADERS})
4173
target_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
)
4679
target_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

4985
add_library(${PROJECT_NAME}_obj OBJECT ${PROTO_SRCS} ${PROTO_HEADERS})
5086
target_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
)
5592
set_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>)
5996
target_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
)
64102
target_link_libraries(${PROJECT_NAME}_pic PUBLIC ${PROTOBUF_LIBRARY})
65103
set_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

68110
add_library(${PROJECT_NAME} SHARED $<TARGET_OBJECTS:${PROJECT_NAME}_obj>)
69111
target_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
)
74117
target_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+

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
VERSION_MAJOR = 2
22
VERSION_MINOR = 2
3-
VERSION_PATCH = 0
3+
VERSION_PATCH = 1

0 commit comments

Comments
 (0)