@@ -6,19 +6,26 @@ project(LibAPR)
66set (CMAKE_CXX_STANDARD 14)
77
88# APR build options:
9- option (APR_INSTALL "Install APR library" OFF )
9+ option (APR_INSTALL "Install APR library" ON )
10+ option (APR_BUILD_SHARED_LIB "Builds shared library" ON )
11+ option (APR_BUILD_STATIC_LIB "Builds shared library" ON )
1012option (APR_BUILD_EXAMPLES "Build APR examples" OFF )
1113option (APR_TESTS "Build APR tests" OFF )
1214option (APR_PREFER_EXTERNAL_GTEST "When found, use the installed GTEST libs instead of included sources" OFF )
1315option (APR_BUILD_JAVA_WRAPPERS "Build APR JAVA wrappers" OFF )
1416
17+ # Validation of options
18+ if (NOT APR_BUILD_SHARED_LIB AND NOT APR_BUILD_STATIC_LIB)
19+ message (FATAL_ERROR "At least one target: APR_BUILD_SHARED_LIB or APR_BUILD_STATIC_LIB must be build!" )
20+ endif ()
1521
1622###############################################################################
1723# Generate configuration file
1824###############################################################################
1925set (APR_VERSION_MAJOR 1)
2026set (APR_VERSION_MINOR 0)
2127set (APR_VERSION_PATCH 0)
28+ set (APR_VERSION_STRING ${APR_VERSION_MAJOR} .${APR_VERSION_MINOR} .${APR_VERSION_PATCH} )
2229execute_process (COMMAND git rev-parse HEAD
2330 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
2431 OUTPUT_VARIABLE APR_GIT_HASH)
@@ -28,8 +35,6 @@ configure_file (
2835 "${PROJECT_BINARY_DIR} /ConfigAPR.h"
2936)
3037include_directories ("${PROJECT_BINARY_DIR} " )
31- file (READ "${PROJECT_BINARY_DIR} /ConfigAPR.h" ConfigAPRcontent)
32- string (REGEX REPLACE ".*APR_VERSION[ \t ]+=[ \t ]+\" ([-0-9A-Za-z.]+)\" .*" "\\ 1" APR_VERSION_STRING ${ConfigAPRcontent} )
3338message ("Configuring for APR version: " ${APR_VERSION_STRING} )
3439
3540###############################################################################
@@ -86,52 +91,87 @@ endif()
8691# Generate APR library
8792###############################################################################
8893
94+ set (LIBRARY_NAME apr)
95+
8996set (SOURCE_FILES src/io/blosc_filter.c src/io/hdf5functions_blosc.cpp)
9097set (SOURCE_FILES_RAYCAST src/numerics/APRRaycaster.cpp src/vis/Camera.cpp src/vis/Object.cpp src/vis/RaytracedObject.cpp)
9198
92- # generate static library used as a intermediate step in generating fat lib
93- add_library (libapr_static STATIC ${SOURCE_FILES} ${SOURCE_FILES_RAYCAST} )
94- set_target_properties (libapr_static PROPERTIES OUTPUT_NAME apr)
95- target_include_directories (libapr_static INTERFACE src)
99+ if (APR_BUILD_STATIC_LIB)
100+ # generate static library used as a intermediate step in generating fat lib
101+ set (STATIC_TARGET_NAME staticLib)
102+ add_library (${STATIC_TARGET_NAME} STATIC ${SOURCE_FILES} ${SOURCE_FILES_RAYCAST} )
103+ set_target_properties (${STATIC_TARGET_NAME} PROPERTIES OUTPUT_NAME ${LIBRARY_NAME} )
96104
97- # generate fat static library by adding dependencies
98- include (cmake/AddStaticLibs.cmake)
99- addStaticLibs(libapr_static blosc_static)
105+ # generate fat static library by adding dependencies
106+ include (cmake/AddStaticLibs.cmake)
107+ addStaticLibs(${STATIC_TARGET_NAME} blosc_static)
108+ endif ()
100109
110+ if (APR_BUILD_SHARED_LIB)
101111# generate fat shared library
102- add_library (libapr_dynamic SHARED ${SOURCE_FILES} ${SOURCE_FILES_RAYCAST} )
103- add_dependencies (libapr_dynamic blosc_static)
104- set_target_properties (libapr_dynamic PROPERTIES OUTPUT_NAME apr)
105- set_property (TARGET libapr_dynamic PROPERTY VERSION ${APR_VERSION_STRING} )
106- set_property (TARGET libapr_dynamic PROPERTY SOVERSION ${APR_VERSION_MAJOR} )
107- target_include_directories (libapr_dynamic INTERFACE src)
108- target_link_libraries (libapr_dynamic PUBLIC ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} -Wl,-force_load,$<TARGET_FILE:blosc_static>)
112+ set (SHARED_TARGET_NAME sharedLib)
113+ add_library (${SHARED_TARGET_NAME} SHARED ${SOURCE_FILES} ${SOURCE_FILES_RAYCAST} )
114+ set_target_properties (${SHARED_TARGET_NAME} PROPERTIES OUTPUT_NAME ${LIBRARY_NAME} )
115+ set_target_properties (${SHARED_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_NAME ${LIBRARY_NAME} )
116+ set_target_properties (${SHARED_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_NAME ${LIBRARY_NAME} )
117+ add_dependencies (${SHARED_TARGET_NAME} blosc_static)
118+ set_property (TARGET ${SHARED_TARGET_NAME} PROPERTY VERSION ${APR_VERSION_STRING} )
119+ set_property (TARGET ${SHARED_TARGET_NAME} PROPERTY SOVERSION ${APR_VERSION_MAJOR} )
120+ target_link_libraries (${SHARED_TARGET_NAME} PRIVATE ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} -Wl,-force_load,$<TARGET_FILE:blosc_static>)
121+ endif ()
122+
123+ # choose one of the build libraries to be used later for tests and/or examples
124+ if (APR_BUILD_SHARED_LIB)
125+ set (APR_BUILD_LIBRARY ${SHARED_TARGET_NAME} )
126+ else ()
127+ set (APR_BUILD_LIBRARY ${STATIC_TARGET_NAME} )
128+ endif ()
109129
110130
111131###############################################################################
112132# Install APR library
113133###############################################################################
114134if (APR_INSTALL)
135+ set (INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries" )
136+ set (INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files" )
137+ set (INSTALL_INCLUDE_PROJECT_DIR ${INSTALL_INCLUDE_DIR} /${LIBRARY_NAME} CACHE PATH "Installation directory for header files" )
138+ set (INSTALL_CMAKE_DIR ${INSTALL_LIB_DIR} /cmake/${LIBRARY_NAME} CACHE PATH "Installation directory for cmake files" )
139+
115140 message (STATUS "APR: Install library in [${CMAKE_INSTALL_PREFIX} ]" )
116- install (TARGETS libapr_static DESTINATION lib COMPONENT LIB)
117- install (TARGETS libapr_dynamic DESTINATION lib COMPONENT LIB)
118- install (DIRECTORY src/algorithm DESTINATION include /apr COMPONENT DEV FILES_MATCHING PATTERN "*.hpp" )
119- install (DIRECTORY src/data_structures DESTINATION include /apr COMPONENT DEV FILES_MATCHING PATTERN "*.hpp" )
120- install (DIRECTORY src/io DESTINATION include /apr COMPONENT DEV FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h" )
121- install (DIRECTORY src/misc DESTINATION include /apr COMPONENT DEV FILES_MATCHING PATTERN "*.hpp" )
122- install (DIRECTORY src/numerics DESTINATION include /apr COMPONENT DEV FILES_MATCHING PATTERN "*.hpp" )
123- install (DIRECTORY src/vis DESTINATION include /apr COMPONENT DEV FILES_MATCHING PATTERN "*.h" )
124- install (FILES ${PROJECT_BINARY_DIR} /ConfigAPR.h COMPONENT DEV DESTINATION include /apr/io)
125- install (FILES ${PROJECT_BINARY_DIR} /ConfigAPR.h COMPONENT DEV DESTINATION include /apr)
141+ set (INC_DIRS src/algorithm src/data_structures src/io src/misc src/numerics src/vis)
142+ install (DIRECTORY ${INC_DIRS} DESTINATION ${INSTALL_INCLUDE_PROJECT_DIR} COMPONENT DEV FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h" )
143+ # TODO: It is installed twice since it is used by different compoonents - it must be fixed
144+ install (FILES ${PROJECT_BINARY_DIR} /ConfigAPR.h COMPONENT DEV DESTINATION ${INSTALL_INCLUDE_PROJECT_DIR} /io)
145+ install (FILES ${PROJECT_BINARY_DIR} /ConfigAPR.h COMPONENT DEV DESTINATION ${INSTALL_INCLUDE_PROJECT_DIR} )
146+
147+ set (APR_TARGETS LibAprTargets)
148+ install (TARGETS ${SHARED_TARGET_NAME} ${STATIC_TARGET_NAME}
149+ EXPORT ${APR_TARGETS}
150+ LIBRARY DESTINATION ${INSTALL_LIB_DIR}
151+ ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
152+ INCLUDES DESTINATION ${INSTALL_INCLUDE_DIR} )
126153
127154 # pkg-config
128155 configure_file ("${CMAKE_CURRENT_SOURCE_DIR} /cmake/apr.pc.in" "${CMAKE_CURRENT_BINARY_DIR} /apr.pc" @ONLY)
129156 install (FILES "${CMAKE_CURRENT_BINARY_DIR} /apr.pc" DESTINATION lib/pkgconfig COMPONENT DEV)
130157
158+ # AprTargets
159+ set (APR_NAMESPACE ${LIBRARY_NAME} ::)
160+ export ( EXPORT ${APR_TARGETS} FILE "${CMAKE_CURRENT_BINARY_DIR} /AprTargets.cmake" NAMESPACE ${APR_NAMESPACE} )
161+ install (EXPORT ${APR_TARGETS} FILE AprTargets.cmake NAMESPACE ${APR_NAMESPACE} DESTINATION ${INSTALL_CMAKE_DIR} )
162+
163+ # AprConfig
164+ configure_file (cmake/AprConfig.cmake "${CMAKE_CURRENT_BINARY_DIR} /AprConfig.cmake" @ONLY)
165+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /AprConfig.cmake ${CMAKE_CURRENT_BINARY_DIR} /AprConfigVersion.cmake DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT DEV)
166+
167+ # AprConfigVersion
168+ include (CMakePackageConfigHelpers)
169+ write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR} /AprConfigVersion.cmake" VERSION ${APR_VERSION_STRING} COMPATIBILITY AnyNewerVersion)
170+
131171 # uninstall
132172 configure_file ("${CMAKE_CURRENT_SOURCE_DIR} /cmake/cmake-uninstall.cmake.in"
133- "${CMAKE_CURRENT_BINARY_DIR} /cmake-uninstall.cmake"
134- IMMEDIATE @ONLY)
173+ "${CMAKE_CURRENT_BINARY_DIR} /cmake-uninstall.cmake"
174+ IMMEDIATE @ONLY)
135175 add_custom_target (uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR} /cmake-uninstall.cmake)
136176endif (APR_INSTALL)
137177
@@ -140,6 +180,7 @@ endif(APR_INSTALL)
140180# Examples
141181###############################################################################
142182if (APR_BUILD_EXAMPLES)
183+ include_directories (src)
143184 message (STATUS "APR: Building examples" )
144185 add_subdirectory (examples)
145186endif (APR_BUILD_EXAMPLES)
@@ -149,6 +190,7 @@ endif(APR_BUILD_EXAMPLES)
149190# Tests
150191###############################################################################
151192if (APR_TESTS)
193+ include_directories (src)
152194 message (STATUS "APR: Building tests" )
153195 if (APR_PREFER_EXTERNAL_GTEST)
154196 find_package (GTest 1.8.0)
0 commit comments