Skip to content

Commit fb52ec6

Browse files
committed
Working versions with targets
1 parent 6a6e784 commit fb52ec6

File tree

7 files changed

+111
-33
lines changed

7 files changed

+111
-33
lines changed

CMakeLists.txt

Lines changed: 71 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,26 @@ project(LibAPR)
66
set(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)
1012
option(APR_BUILD_EXAMPLES "Build APR examples" OFF)
1113
option(APR_TESTS "Build APR tests" OFF)
1214
option(APR_PREFER_EXTERNAL_GTEST "When found, use the installed GTEST libs instead of included sources" OFF)
1315
option(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
###############################################################################
1925
set (APR_VERSION_MAJOR 1)
2026
set (APR_VERSION_MINOR 0)
2127
set (APR_VERSION_PATCH 0)
28+
set (APR_VERSION_STRING ${APR_VERSION_MAJOR}.${APR_VERSION_MINOR}.${APR_VERSION_PATCH})
2229
execute_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
)
3037
include_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})
3338
message("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+
8996
set(SOURCE_FILES src/io/blosc_filter.c src/io/hdf5functions_blosc.cpp)
9097
set(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
###############################################################################
114134
if(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)
136176
endif(APR_INSTALL)
137177

@@ -140,6 +180,7 @@ endif(APR_INSTALL)
140180
# Examples
141181
###############################################################################
142182
if(APR_BUILD_EXAMPLES)
183+
include_directories(src)
143184
message(STATUS "APR: Building examples")
144185
add_subdirectory(examples)
145186
endif(APR_BUILD_EXAMPLES)
@@ -149,6 +190,7 @@ endif(APR_BUILD_EXAMPLES)
149190
# Tests
150191
###############################################################################
151192
if(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)

cmake/AprConfig.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include("${CMAKE_CURRENT_LIST_DIR}/AprTargets.cmake")

cmake/apr.pc.in

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
exec_prefix=${prefix}
3+
libdir=${exec_prefix}/lib
4+
sharedlibdir=${libdir}
5+
includedir=${prefix}/include
6+
7+
Name: apr
8+
Description: LibAPR - Adaptive Particle Representation library
9+
URL: https://github.com/cheesema/LibAPR
10+
Version: @APR_VERSION_STRING@
11+
12+
Requires:
13+
Libs: -L${libdir} -L${sharedlibdir} -lblosc
14+
Cflags: -I${includedir}

cmake/cmake-uninstall.cmake.in

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
2+
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
3+
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
4+
5+
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
6+
string(REGEX REPLACE "\n" ";" files "${files}")
7+
list(REVERSE files)
8+
foreach (file ${files})
9+
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
10+
if (EXISTS "$ENV{DESTDIR}${file}")
11+
execute_process(
12+
COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
13+
OUTPUT_VARIABLE rm_out
14+
RESULT_VARIABLE rm_retval
15+
)
16+
if(NOT ${rm_retval} EQUAL 0)
17+
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
18+
endif (NOT ${rm_retval} EQUAL 0)
19+
else (EXISTS "$ENV{DESTDIR}${file}")
20+
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
21+
endif (EXISTS "$ENV{DESTDIR}${file}")
22+
endforeach(file)

examples/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
macro(buildTarget TARGET)
22
add_executable(${TARGET} ${TARGET}.cpp)
3-
target_link_libraries(${TARGET} libapr_static)
3+
target_link_libraries(${TARGET} ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} ${APR_BUILD_LIBRARY})
44
endmacro(buildTarget)
55

66
buildTarget(Example_get_apr)

src/ConfigAPR.h.in

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ namespace ConfigAPR {
1212
const unsigned int APR_VERSION_MINOR = @APR_VERSION_MINOR@;
1313
const unsigned int APR_VERSION_PATCH = @APR_VERSION_PATCH@;
1414
const char * const APR_GIT_HASH = "@APR_GIT_HASH@";
15-
// do not change name of this variable unless you do same in CmakeLists.txt
16-
const char * const APR_VERSION = "@APR_VERSION_MAJOR@.@APR_VERSION_MINOR@.@APR_VERSION_PATCH@";
15+
const char * const APR_VERSION = "@APR_VERSION_STRING@";
1716
}
1817

1918
#endif

test/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
macro(buildTarget TARGET SRC)
22
add_executable(${TARGET} ${SRC})
3-
target_link_libraries(${TARGET} ${GTEST_LIBRARIES} libapr_dynamic)
3+
target_link_libraries(${TARGET} ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} ${GTEST_LIBRARIES} ${APR_BUILD_LIBRARY})
44
endmacro(buildTarget)
55

66
buildTarget(testMeshData MeshDataTest.cpp)

0 commit comments

Comments
 (0)