-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
84 lines (69 loc) · 3.19 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
cmake_minimum_required (VERSION 3.9)
project ("imaGL" VERSION 0.1.1 DESCRIPTION "A lightweight lib to load images in OpenGL applications")
option(BUILD_TESTING "Build test program" OFF)
option(BUILD_DOCUMENTATION "Build doxygen documentation" OFF)
option(STATIC_LIB "Build ImaGL as a static library" OFF)
option(ENABLE_MULTITHREAD "Build ImaGL with multithread support" ON)
option(SUPPORT_PNG "Build ImaGL with PNG file format support" ON)
option(SUPPORT_JPEG "Build ImaGL with JPEG file format support" ON)
set(CONAN_PROFILE default CACHE STRING "The conan profile you need to use to compile. See conan documentation on https://conan.io")
#set CC and CXX environment variables to this cmake instance compiler (needed if conan needs to build some packages)
set(ENV{CC} ${CMAKE_C_COMPILER})
set(ENV{CXX} ${CMAKE_CXX_COMPILER})
#for some mystical reasons, clang sometimes use a very old stdlib (libstdc++)
if(CMAKE_CXX_COMPILER MATCHES [[clang\+\+.*]])
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
# Generate conanfile.txt from current cmake cache configuration
file(STRINGS conanfile.in CONANFILE)
file(WRITE "${CMAKE_BINARY_DIR}/conanfile.txt" "# Do not modify this file, it is automatically generated by CMake\n")
foreach(CONANFILE_LINE ${CONANFILE})
#Test for new section
string(REGEX MATCH [[^[ \t\r\n]*\[]] THISLINE ${CONANFILE_LINE})
if(THISLINE)
string(PREPEND CONANFILE_LINE "\n")
endif()
#Test for libPNG
string(REGEX MATCH [[^.*libpng]] THISLINE ${CONANFILE_LINE})
if(THISLINE AND NOT SUPPORT_PNG)
string(PREPEND CONANFILE_LINE "# ")
endif()
#Test for libJPEG
string(REGEX MATCH [[^.*libjpeg]] THISLINE ${CONANFILE_LINE})
if(THISLINE AND NOT SUPPORT_JPEG)
string(PREPEND CONANFILE_LINE "# ")
endif()
#Test for catch2 (for testing)
string(REGEX MATCH [[^.*catch2]] THISLINE ${CONANFILE_LINE})
if(THISLINE AND NOT BUILD_TESTING)
string(PREPEND CONANFILE_LINE "# ")
endif()
file(APPEND "${CMAKE_BINARY_DIR}/conanfile.txt" "${CONANFILE_LINE}\n")
endforeach()
# Execute conan to install dependencies in Release and / or Debug mode
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(is_multi_config)
message("Multi config generator")
execute_process(COMMAND conan install "${CMAKE_BINARY_DIR}" --profile=${CONAN_PROFILE} --build missing -s build_type=Debug -if "${CMAKE_BINARY_DIR}" -g cmake_multi)
execute_process(COMMAND conan install "${CMAKE_BINARY_DIR}" --profile=${CONAN_PROFILE} --build missing -s build_type=Release -if "${CMAKE_BINARY_DIR}" -g cmake_multi)
else()
message("Build type : ${CMAKE_BUILD_TYPE}")
execute_process(COMMAND conan install "${CMAKE_BINARY_DIR}" --profile=${CONAN_PROFILE} --build missing -s build_type=${CMAKE_BUILD_TYPE} -if "${CMAKE_BINARY_DIR}")
endif()
if(EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake)
include(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake)
else()
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
endif()
conan_basic_setup(TARGETS)
set(CMAKE_DEBUG_POSTFIX d)
set(CMAKE_STATIC_LIBRARY_SUFFIX "s${CMAKE_STATIC_LIBRARY_SUFFIX}")
# Add subdirectories
add_subdirectory ("imaGL")
if(BUILD_TESTING)
enable_testing()
add_subdirectory ("test")
endif()
if(BUILD_DOCUMENTATION)
add_subdirectory("doc")
endif()