-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
155 lines (124 loc) · 3.86 KB
/
CMakeLists.txt
File metadata and controls
155 lines (124 loc) · 3.86 KB
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
148
149
150
151
152
153
154
155
cmake_minimum_required(VERSION 3.25)
cmake_policy(VERSION 3.25)
project(FCollada
VERSION 3.5.99
DESCRIPTION "Fork of Feeling Softwares FCollada"
HOMEPAGE_URL "https://github.com/seragh/fcollada"
LANGUAGES CXX
)
include(CTest)
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "No build type selected, defaulting to Debug")
set(CMAKE_BUILD_TYPE "Debug")
endif()
if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
option(BUILD_SHARED_LIBS "Build FCollada as a shared library." OFF)
option(BUILD_UNICODE "Build FCollada in wide-character mode." OFF)
option(BUILD_TESTING "Build the test suite." OFF)
option(BUILD_DOCS "Build html docs using doxygen" OFF)
option(USE_FMT_HEADER_ONLY "Use header only fmt library" OFF)
option(FCOLLADA_ENABLE_COVERAGE "Build with coverage support." OFF)
mark_as_advanced(FCOLLADA_ENABLE_COVERAGE)
find_package(LibXml2 REQUIRED)
find_package(fmt REQUIRED)
if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
add_definitions(-D_DEBUG)
endif()
if(BUILD_UNICODE)
add_definitions(-DUNICODE -D_UNICODE)
endif()
if(USE_FMT_HEADER_ONLY)
add_definitions(-DFMT_HEADER_ONLY)
endif()
if(NOT MSVC)
# clang-14 enabled it by default and on aarch64 this results
# in a loss of precision enough to fail the tests.
add_compile_options(-ffp-contract=off)
endif()
set(LIBRARY_NAME FCollada)
if(NOT BUILD_SHARED_LIBS AND NOT MSVC)
set(LIBRARY_NAME "${LIBRARY_NAME}S")
endif()
if(BUILD_UNICODE)
set(LIBRARY_NAME "${LIBRARY_NAME}U")
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT MSVC)
set(LIBRARY_NAME "${LIBRARY_NAME}D")
endif()
add_library(FCollada)
target_compile_features(FCollada PUBLIC cxx_std_17)
target_link_libraries(FCollada
LibXml2::LibXml2
fmt::fmt
${CMAKE_DL_LIBS})
set_target_properties(FCollada
PROPERTIES
OUTPUT_NAME "${LIBRARY_NAME}"
)
include(GenerateExportHeader)
generate_export_header(FCollada)
target_sources(FCollada
PUBLIC
FILE_SET HEADERS
BASE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/FCollada"
"${CMAKE_CURRENT_BINARY_DIR}"
FILES
${CMAKE_CURRENT_BINARY_DIR}/fcollada_export.h
)
add_executable(FColladaTest)
set_target_properties(FColladaTest
PROPERTIES
EXCLUDE_FROM_ALL "$<NOT:$<BOOL:${BUILD_TESTING}>>"
)
target_link_libraries(FColladaTest FCollada)
target_include_directories(FColladaTest PRIVATE FCollada/FColladaTest)
add_custom_command(
TARGET FColladaTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/FCollada/FColladaTest/Samples/Eagle.DAE
"$<TARGET_FILE_DIR:FColladaTest>"
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/FCollada/FColladaTest/Samples/TestSphere.dae
"$<TARGET_FILE_DIR:FColladaTest>"
)
add_test(NAME runTests
COMMAND FColladaTest
WORKING_DIRECTORY "$<TARGET_FILE_DIR:FColladaTest>"
)
# TODO: clumsy approch without changing the test runner
set(TEST_LOG "$<SHELL_PATH:$<TARGET_FILE_DIR:FColladaTest>/FColladaTestLog.txt>")
if(WIN32 AND NOT MINGW)
add_test(NAME checkTestLog
COMMAND powershell type ${TEST_LOG}
)
else()
add_test(NAME checkTestLog
COMMAND cat ${TEST_LOG}
)
endif()
set_tests_properties(checkTestLog PROPERTIES
FAIL_REGULAR_EXPRESSION "failed"
)
if(FCOLLADA_ENABLE_COVERAGE)
include(cmake/coverage.cmake)
endif()
if(BUILD_DOCS)
find_package(Doxygen REQUIRED)
doxygen_add_docs(doxygen
"${CMAKE_SOURCE_DIR}/FCollada"
"${CMAKE_SOURCE_DIR}/FColladaPlugins"
"${CMAKE_SOURCE_DIR}/FColladaTools"
ALL
COMMENT "Generate html pages")
endif()
install(TARGETS FCollada
FILE_SET HEADERS
)
configure_file("fcollada.pc.in" "fcollada.pc" @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/fcollada.pc"
DESTINATION "lib/pkgconfig")
add_subdirectory(FCollada)
add_subdirectory(FColladaPlugins)