-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
147 lines (114 loc) · 5.15 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
cmake_minimum_required(VERSION 2.8)
project(libCGeo)
set(CMAKE_BUILD_TARGET "Both")
set(CMAKE_BUILD_TYPE "Debug")
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "Did not select build type, will build Release")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
endif()
if(NOT CMAKE_BUILD_TARGET)
message(STATUS "No build target selected, will build both static and shared library")
set(CMAKE_BUILD_TARGET "Both" CACHE STRING "" FORCE)
endif()
option(BUILD_EXAMPLES "Build example programs" ON)
option(BUILD_UTESTS "Build library unit tests" ON)
set(libCGeo_VERSION_MAJOR 0)
set(libCGeo_VERSION_MINOR 0)
set(libCGeo_VERSION_PATCH 1)
set(libCGeo_VERSION ${libCGeo_VERSION_MAJOR}.${libCGeo_VERSION_MINOR}.${libCGeo_VERSION_PATCH})
set(libCGeo_DESCRIPTION "A fast cross platform Computational Geometry Library written in C")
set(libCGeo_URL "https://github.com/jwlodek/libCGeo")
include(GNUInstallDirs)
set(INSTALL_CMAKE_DIR "${libCGeo_SOURCE_DIR}/lib/cmake/libCGeo" CACHE PATH
"Installation dir for CMake files")
set(SOURCES src/libCGeo.c src/diagnostics.c src/convex_hull.c)
include_directories(${libCGeo_SOURCE_DIR}/include ${libCGeo_BINARY_DIR}/include)
if(${CMAKE_BUILD_TARGET} MATCHES "Shared")
set(BUILD_CGEO_SHARED TRUE)
elseif(${CMAKE_BUILD_TARGET} MATCHES "Static")
set(BUILD_CGEO_STATIC TRUE)
elseif(${CMAKE_BUILD_TARGET} MATCHES "Both")
set(BUILD_CGEO_SHARED TRUE)
set(BUILD_CGEO_STATIC TRUE)
else()
message(FATAL_ERROR "Invalid build type ${CMAKE_BUILD_TARGET}")
endif()
if(BUILD_CGEO_SHARED)
add_library(CGeo SHARED ${SOURCES})
set_property(TARGET CGeo PROPERTY VERSION ${libCGeo_VERSION})
set_property(TARGET CGeo PROPERTY SOVERSION ${libCGeo_VERSION_MAJOR})
list(APPEND CGEO_TARGETS CGeo)
endif()
if(BUILD_CGEO_STATIC)
add_library(CGeo_static STATIC ${SOURCES})
set_target_properties(CGeo_static PROPERTIES OUTPUT_NAME CGeo)
list(APPEND CGEO_TARGETS CGeo_static)
endif()
configure_file(include/libCGeo/libCGeo_config.h.in ${PROJECT_BINARY_DIR}/include/libCGeo/libCGeo_config.h @ONLY)
foreach(target_name ${CGEO_TARGETS})
set_target_properties(${target_name} PROPERTIES
PUBLIC_HEADER "include/libCGeo/libCGeo.h;${libCGeo_BINARY_DIR}/include/libCGeo/libCGeo_config.h")
endforeach()
if(BUILD_EXAMPLES)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
add_executable(diag_example example/diagnostics_example.c)
add_executable(parse_example example/csv_reading_example.c)
add_executable(convex_hull_example example/convex_hull_example.c)
if(WIN32)
target_link_libraries(diag_example CGeo)
target_link_libraries(parse_example CGeo)
target_link_libraries(convex_hull_example CGeo)
else()
target_link_libraries(diag_example m CGeo)
target_link_libraries(parse_example m CGeo)
target_link_libraries(convex_hull_example m CGeo)
endif()
endif()
find_package(PkgConfig)
if(BUILD_UTESTS)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/test)
find_package(criterion QUIET)
if(CRITERION_FOUND)
set(CRITERION_LINK_FLAGS ${CRITERION_LIBRARIES})
else()
pkg_check_modules(CRITERION QUIET criterion)
if(CRITERION_FOUND)
set(CRITERION_INCLUDE_DIR ${CRITERION_INCLUDE_DIRS})
set(CRITERION_LINK_FLAGS ${CRITERION_LDFLAGS})
endif()
endif()
if(CRITERION_FOUND)
add_executable(libCGeo_Core_tests test/libCGeo_tests.c)
target_link_libraries(libCGeo_Core_tests CGeo m criterion)
add_executable(libCGeo_hull_tests test/convex_hull_tests.c)
target_link_libraries(libCGeo_hull_tests CGeo m criterion)
else()
message("Criterion library not found, not building unit tests")
endif()
endif()
if(BUILD_CGEO_SHARED)
if(WIN32)
target_link_libraries(CGeo)
else()
target_link_libraries(CGeo m)
endif()
endif()
install(TARGETS ${CGEO_TARGETS}
EXPORT libCGeoTargets
LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}"
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_PREFIX}/include/libCGeo")
export(TARGETS ${CGEO_TARGETS} FILE "${PROJECT_BINARY_DIR}/libCGeoTargets.cmake")
export(PACKAGE libCGeo)
set(CONF_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include")
set(CONF_LIBRARY_DIR "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}")
set(CONF_LIBRARY "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}/${CMAKE_SHARED_LIBRARY_PREFIX}CGeo${CMAKE_SHARED_LIBRARY_SUFFIX}")
configure_file(libCGeoConfig.cmake.in ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libCGeoConfig.cmake)
configure_file(libCGeoConfigVersion.cmake.in ${PROJECT_BINARY_DIR}/libCGeoConfigVersion.cmake @ONLY)
configure_file(libCGeo.pc.in ${PROJECT_BINARY_DIR}/libCGeo.pc @ONLY)
install(FILES
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libCGeoConfig.cmake"
"{$PROJECT_BINARY_DIR}/libCGeoConfigVersion.cmake"
DESTINATION "${INSTALL_CMAKE_DIR}")
install(EXPORT libCGeoTargets DESTINATION "${INSTALL_CMAKE_DIR}")
install(FILES "${PROJECT_BINARY_DIR}/libCGeo.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")