Skip to content

Commit 87060f0

Browse files
committed
CMake: integrate additional build system
* SortFilterProxyModel (sources, test, doc) * CTest support for subdir: test run the actual test in build directory * CPack support CMake
1 parent 6211989 commit 87060f0

File tree

4 files changed

+373
-0
lines changed

4 files changed

+373
-0
lines changed

CMakeLists.txt

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
cmake_minimum_required(VERSION 3.10.2)
2+
cmake_policy(VERSION 3.10.2)
3+
project(SortFilterProxyModel)
4+
5+
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
6+
# MinGW: 1) cd; mkdir ./build; cd ./build;
7+
# 2) cmake -G "MinGW Makefiles" <src_path>
8+
# 2) mingw32-make
9+
set(QT_STYLE_OVERRIDE Windows)
10+
# MinGW bases Qt Tree
11+
set(Qt5_DIR "C:/Qt/Qt5.10.0/5.10.0/mingw53_32/lib/cmake/Qt5")
12+
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
13+
# Install adwaita-qt5 (GTK+ style)
14+
set(QT_STYLE_OVERRIDE adwaita)
15+
endif()
16+
17+
# Use our modified modules
18+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${SORTFILTERPROXYMODEL_SOURCE_DIR}/cmake")
19+
set(SORTFILTERPROXYMODEL_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR})
20+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
21+
22+
if(NOT CMAKE_BUILD_TYPE)
23+
set(CMAKE_BUILD_TYPE Release CACHE STRING
24+
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
25+
endif()
26+
27+
# run moc when necessary:
28+
set(CMAKE_AUTOMOC ON)
29+
30+
# As moc files are generated in the binary dir, tell CMake
31+
# to includes this location
32+
set(CMAKE_INCLUDE_CURRENT_DIR ON)
33+
34+
# run rcc code generator automatically
35+
set(CMAKE_AUTORCC ON)
36+
37+
# enable tests (seated in subdir tests)
38+
enable_testing()
39+
40+
# Bump up warning levels appropriately for clang, gcc & msvc and build in debug mode
41+
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU"
42+
OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
43+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -std=c++11 -fPIC")
44+
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} -g")
45+
#set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} -O3")
46+
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
47+
if (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
48+
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
49+
else()
50+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
51+
endif()
52+
endif()
53+
54+
message(STATUS "Using C++ Compiler specific attributes for ${CMAKE_CXX_COMPILER_ID}: ${CMAKE_CXX_FLAGS}")
55+
#message(STATUS "Using C++ Compiler specific warnings for ${CMAKE_C_COMPILER_ID}: ${CMAKE_CXX_FLAGS_WARNINGS}")
56+
57+
####
58+
# Makefile Rules
59+
###
60+
if(EXISTS "rules.ninja")
61+
add_custom_target(release COMMAND ${CMAKE_COMMAND} -GNinja -DCMAKE_BUILD_TYPE=Release . WORKING_DIRECTORY .)
62+
add_custom_target(debug COMMAND ${CMAKE_COMMAND} -GNinja -DCMAKE_BUILD_TYPE=Debug . WORKING_DIRECTORY .)
63+
else()
64+
add_custom_target(release COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release . WORKING_DIRECTORY .)
65+
add_custom_target(debug COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug . WORKING_DIRECTORY .)
66+
endif()
67+
68+
###
69+
# Project Settings: Global
70+
###
71+
set(SORTFILTERPROXYMODEL_VERSION_MAJOR 0)
72+
set(SORTFILTERPROXYMODEL_VERSION_MINOR 2)
73+
set(SORTFILTERPROXYMODEL_VERSION_PATCHLEVEL 0)
74+
set(SORTFILTERPROXYMODEL_VERSION_STRING ${SORTFILTERPROXYMODEL_VERSION_MAJOR}.${SORTFILTERPROXYMODEL_VERSION_MINOR}.${SORTFILTERPROXYMODEL_VERSION_PATCHLEVEL})
75+
76+
message(STATUS "${project}: global definitions:")
77+
message(STATUS " SORTFILTERPROXYMODEL_VERSION_MAJOR='${SORTFILTERPROXYMODEL_VERSION_MAJOR}'")
78+
message(STATUS " SORTFILTERPROXYMODEL_VERSION_MINOR='${SORTFILTERPROXYMODEL_VERSION_MINOR}'")
79+
message(STATUS " SORTFILTERPROXYMODEL_VERSION_PATCHLEVEL='${SORTFILTERPROXYMODEL_VERSION_PATCHLEVEL}'")
80+
message(STATUS " SORTFILTERPROXYMODEL_VERSION_STRING='${SORTFILTERPROXYMODEL_VERSION_STRING}'")
81+
message(STATUS " Qt5_DIR: ${Qt5_DIR}")
82+
message(STATUS " QT_STYLE_OVERRIDE: ${QT_STYLE_OVERRIDE}")
83+
84+
set(SORTFILTERPROXYMODEL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin")
85+
set(SORTFILTERPROXYMODEL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
86+
set(SORTFILTERPROXYMODEL_HEADER_DIR "${CMAKE_INSTALL_PREFIX}/inclde/${project}")
87+
set(SORTFILTERPROXYMODEL_PLUGINS_DIR "${CMAKE_INSTALL_PREFIX}/etc/${project}/plugins")
88+
set(SORTFILTERPROXYMODEL_DOC_DIR "${CMAKE_INSTALL_PREFIX}/share/doc")
89+
set(SORTFILTERPROXYMODEL_LOCAL_DIR "${CMAKE_INSTALL_PREFIX}/share/locale")
90+
91+
if(AQBANKING_ENABLE_DEV_OPTIONS)
92+
set(CPACK_PACKAGE_INSTALL_DIRECTORY "SortFilterProxyModel")
93+
set(CPACK_PACKAGE_VENDOR "")
94+
set(CPACK_PACKAGE_CONTACT "http://")
95+
set(CPACK_PACKAGE_VERSION_MAJOR ${SORTFILTERPROXYMODEL_VERSION_MAJOR})
96+
set(CPACK_PACKAGE_VERSION_MINOR ${SORTFILTERPROXYMODEL_VERSION_MINOR})
97+
set(CPACK_PACKAGE_VERSION_DATABASE ${SORTFILTERPROXYMODEL_VERSION_DATABASE})
98+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
99+
set(CPACK_PACKAGE_VERSION "${AQBANKING_VERSION}")
100+
include(CPack)
101+
endif()
102+
103+
###
104+
# Project Settings: pre-processor
105+
###
106+
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
107+
string(APPEND CMAKE_C_FLAGS " -D_FORTIFY_SOURCE=2")
108+
endif()
109+
110+
add_definitions(
111+
"-DQT_SYLE_OVERRIDE")
112+
113+
get_directory_property(DirDefs COMPILE_DEFINITIONS)
114+
message(STATUS "SortFilterProxyModel: active pre-processor definitions:")
115+
foreach(d ${DirDefs})
116+
message( STATUS " " ${d})
117+
endforeach()
118+
119+
#feature_summary(INCLUDE_QUIET_PACKAGES WHAT ALL)
120+
if (NOT DEFINED SortFilterProxyModule_SOURCE_DIR)
121+
# sources in {CMAKE_CURRENT_SOURCE_DIR} include headers seated in given subdirs
122+
set(SortFilterProxyModule_SOURCE_DIR
123+
${CMAKE_CURRENT_SOURCE_DIR})
124+
include_directories(AFTER ${SortFilterProxyModule_SOURCE_DIR})
125+
message(STATUS "Project Source-Dir: ${SortFilterProxyModule_SOURCE_DIR}")
126+
endif()
127+
128+
###
129+
# HEADERS / SOURCES
130+
###
131+
set(sortfilterproxymodel_HEADERS
132+
qqmlsortfilterproxymodel.h
133+
filter.h
134+
sorter.h
135+
proxyrole.h)
136+
137+
set(sortfilterproxymodel_SOURCES
138+
qqmlsortfilterproxymodel.cpp
139+
filter.cpp
140+
sorter.cpp
141+
proxyrole.cpp)
142+
143+
###
144+
# LIBRARY
145+
###
146+
# Find QT5 libraries
147+
find_package(Qt5 COMPONENTS Qml Core REQUIRED)
148+
149+
# Qt libraries
150+
set(sortfilterproxymodel_LIBRARIES
151+
Qt5::Core
152+
Qt5::Qml)
153+
154+
# Object library
155+
add_library(sortfilterproxymodel OBJECT
156+
${sortfilterproxymodel_SOURCES})
157+
158+
# include needed QT-Headers (they are referenced by MOC)
159+
target_include_directories(sortfilterproxymodel
160+
PUBLIC
161+
#${sortfilterproxymodel_LIBRARIES}
162+
$<TARGET_PROPERTY:Qt5::Core,INTERFACE_INCLUDE_DIRECTORIES>
163+
$<TARGET_PROPERTY:Qt5::Qml,INTERFACE_INCLUDE_DIRECTORIES>
164+
)
165+
166+
###
167+
# Project Structure: subdirectories
168+
###
169+
add_subdirectory(docs)
170+
add_subdirectory(tests)
171+
172+
set("SORTFILTERPROXYMODEL_DOC"
173+
LICENSE
174+
SortFilterProxyModel.pri
175+
README.md)
176+
177+
###
178+
# Installing
179+
###
180+
install(FILES ${SORTFILTERPROXYMODEL_DOC}
181+
COMPONENT ${project}
182+
DESTINATION ${SORTFILTERPROXYMODEL_DOC_DIR}/${project}
183+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)

docs/CMakeLists.txt

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Qt >=5.7 requires C++11, which will be implicitly checked with CMake >3.1.0
2+
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
3+
cmake_policy(VERSION 3.10.2)
4+
5+
set(docs_SOURCES
6+
index.html
7+
qml-allof.html
8+
qml-allof-members.html
9+
qml-anyof.html
10+
qml-anyof-members.html
11+
qml-expressionfilter.html
12+
qml-expressionfilter-members.html
13+
qml-expressionrole.html
14+
qml-expressionrole-members.html
15+
qml-expressionsorter.html
16+
qml-expressionsorter-members.html
17+
qml-filter.html
18+
qml-filter-members.html
19+
qml-indexfilter.html
20+
qml-indexfilter-members.html
21+
qml-joinrole.html
22+
qml-joinrole-members.html
23+
qml-proxyrole.html
24+
qml-proxyrole-members.html
25+
qml-rangefilter.html
26+
qml-rangefilter-members.html
27+
qml-regexpfilter.html
28+
qml-regexpfilter-members.html
29+
qml-rolefilter.html
30+
qml-rolefilter-members.html
31+
qml-rolesorter.html
32+
qml-rolesorter-members.html
33+
qml-sorter.html
34+
qml-sorter-members.html
35+
qml-sortfilterproxymodel.html
36+
qml-sortfilterproxymodel-members.html
37+
qml-stringsorter.html
38+
qml-stringsorter-members.html
39+
qml-switchrole.html
40+
qml-switchrole-members.html
41+
qml-valuefilter.html
42+
qml-valuefilter-members.html
43+
sortfilterproxymodel.index)
44+
45+
###
46+
# Project Structure: subdirectories
47+
###
48+
add_subdirectory(style)
49+
50+
51+
###
52+
# Installing
53+
###
54+
install(FILES ${docs_SOURCES}
55+
COMPONENT ${project}
56+
DESTINATION ${SORTFILTERPROXYMODEL_DOC_DIR}/${project}/
57+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
58+

docs/style/CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Qt >=5.7 requires C++11, which will be implicitly checked with CMake >3.1.0
2+
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
3+
cmake_policy(VERSION 3.10.2)
4+
5+
set(doc_SOURCES
6+
offline.css)
7+
8+
###
9+
# Installing
10+
###
11+
install(CODE "message(\"Installing Documentation: ...\")")
12+
install(FILES ${doc_SOURCES}
13+
COMPONENT ${project}
14+
DESTINATION ${SORTFILTERPROXYMODEL_DOC_DIR}/${project}/style
15+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
16+

tests/CMakeLists.txt

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# Qt >=5.7 requires C++11, which will be implicitly checked with CMake >3.1.0
2+
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)
3+
cmake_policy(VERSION 3.10.2)
4+
5+
set(SORTFILTERPROXYMODEL_BIN_DIR bin)
6+
set(SORTFILTERPROXYMODEL_QML_DIR qmldir)
7+
8+
# Set target complile flags
9+
#get_target_property(QtTestFLAGS ${tst_sortfilterproxymodel} COMPILE_FLAGS)
10+
if(QtTestFLAGS STREQUAL "QtTest_FLAGS-NOTFOUND")
11+
SET(QtTestFLAGS "") # set to empty string
12+
else()
13+
# a space to cleanly separate from existing content
14+
SET(QtTestFlags "${QtTestFLAGS} ")
15+
endif()
16+
# append our values
17+
SET(QtTestFLAGS "${QtTestFLAGS}warn_on qmltestcase qml_debug no_keywords" )
18+
set_target_properties(${tst_sortfilterproxymodel} PROPERTIES COMPILE_FLAGS ${QtTestFLAGS} )
19+
message(STATUS "QtTest Compiler flags for target 'tst_sortfilterproxymodel': '${QtTestFLAGS}'")
20+
21+
add_definitions(
22+
#"-DQT_QML_DEBUG"
23+
"-DQUICK_TEST_SOURCE_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"")
24+
25+
# Find QT5 libraries
26+
#find_package(Qt5 COMPONENTS Test Widgets Gui QuickTest Quick Qml REQUIRED)
27+
find_package(Qt5 COMPONENTS QuickTest Quick Qml REQUIRED)
28+
29+
INCLUDE_DIRECTORIES(${SortFilterProxyModule_SOURCE_DIR} ${Qt5_INCLUDE_DIR} )
30+
31+
set(test_quickpages_SOURCES
32+
tst_rangefilter.qml
33+
tst_indexfilter.qml
34+
tst_sourceroles.qml
35+
tst_sorters.qml
36+
tst_helpers.qml
37+
tst_builtins.qml
38+
tst_rolesorter.qml
39+
tst_stringsorter.qml
40+
tst_proxyroles.qml
41+
tst_joinrole.qml
42+
tst_switchrole.qml
43+
tst_expressionrole.qml)
44+
45+
###
46+
# binary creation
47+
###
48+
set(test_sortfilterproxymodel_HEADERS
49+
indexsorter.cpp
50+
testroles.cpp)
51+
52+
set(test_sortfilterproxymodel_SOURCES
53+
indexsorter.cpp
54+
testroles.cpp
55+
tst_sortfilterproxymodel.cpp)
56+
57+
add_executable(test_sortfilterproxymodel
58+
${test_sortfilterproxymodel_SOURCES})
59+
60+
# Qt test libraries
61+
set(test_LIBRARIES
62+
Qt5::QuickTest
63+
Qt5::Qml
64+
Qt5::Core)
65+
66+
# include needed QT-Headers (and referenced for MOC)
67+
target_include_directories(test_sortfilterproxymodel
68+
PUBLIC
69+
${test_LIBRARIES})
70+
71+
target_link_libraries(test_sortfilterproxymodel
72+
$<TARGET_OBJECTS:sortfilterproxymodel>
73+
${test_LIBRARIES})
74+
75+
foreach(page ${test_quickpages_SOURCES})
76+
add_custom_command(TARGET test_sortfilterproxymodel POST_BUILD
77+
COMMAND ${CMAKE_COMMAND} -E copy
78+
${CMAKE_CURRENT_SOURCE_DIR}/${page}
79+
${CMAKE_CURRENT_BINARY_DIR}/
80+
COMMENT "Copying QtQuick 'Source-Pages (qml)' to '${CMAKE_CURRENT_BINARY_DIR}'")
81+
endforeach(page)
82+
83+
SET_TARGET_PROPERTIES(
84+
test_sortfilterproxymodel
85+
PROPERTIES
86+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
87+
88+
###
89+
# Tests
90+
###
91+
#set(TestTarget SortFilterProxyModel)
92+
set(TestTarget test_sortfilterproxymodel)
93+
94+
add_test(NAME ${TestTarget}
95+
#CONFIGURATIONS [Debug|Release]
96+
COMMAND ./${TestTarget})
97+
98+
add_custom_command(
99+
TARGET ${TestTarget}
100+
COMMENT "Run tests"
101+
POST_BUILD
102+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
103+
#COMMAND ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> -R "^${TestTarget}$" --output-on-failures
104+
COMMAND ${TestTarget})
105+
106+
###
107+
# Installing
108+
###
109+
#install(CODE "message(\"Installing TARGETS: ...\")")
110+
#install(TARGETS test_sortfilterproxymodel
111+
# COMPONENT Test_SortFilterProxyModel
112+
# RUNTIME DESTINATION ${SORTFILTERPROXYMODEL_BIN_DIR} )
113+
114+
#install(TARGETS test_quickpages_SOURCES
115+
# COMPONENT Test_SortFilterProxyModel
116+
# RUNTIME DESTINATION ${SORTFILTERPROXYMODEL_QML_DIR} )

0 commit comments

Comments
 (0)