blob: 502105142b45090870056020b714fc76589e77d6 (
plain)
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
project(jom)
cmake_minimum_required(VERSION 2.8.11)
set(CMAKE_AUTOMOC ON)
option(JOM_ENABLE_TESTS "Enable unit-testing for jom" OFF)
if(JOM_ENABLE_TESTS)
enable_testing()
endif(JOM_ENABLE_TESTS)
# where to look first for cmake modules
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules;${CMAKE_MODULE_PATH}")
find_package(Qt5Core)
include_directories(
${CMAKE_BINARY_DIR}
src/jomlib
)
if(MSVC)
add_definitions(
-D_CRT_SECURE_NO_DEPRECATE
)
# Qt disables the native wchar_t type, do it too to avoid linking issues
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Zc:wchar_t-" )
endif(MSVC)
add_definitions(
-DQT_NO_CAST_TO_ASCII
-DQT_USE_FAST_CONCATENATION
-DQT_USE_FAST_OPERATOR_PLUS
-DUNICODE
)
# in subdirectory src:
#
set(JOM_MOCS
src/jomlib/targetexecutor.h
src/jomlib/jomprocess.h
src/jomlib/commandexecutor.h
src/jomlib/jobclient.h
src/jomlib/jobclientacquirehelper.h
)
set(JOM_SRCS
src/jomlib/commandexecutor.cpp
src/jomlib/dependencygraph.cpp
src/jomlib/exception.cpp
src/jomlib/fastfileinfo.cpp
src/jomlib/filetime.cpp
src/jomlib/helperfunctions.cpp
src/jomlib/jobclient.cpp
src/jomlib/jobclientacquirehelper.cpp
src/jomlib/jobserver.cpp
src/jomlib/macrotable.cpp
src/jomlib/makefile.cpp
src/jomlib/makefilefactory.cpp
src/jomlib/makefilelinereader.cpp
src/jomlib/options.cpp
src/jomlib/parser.cpp
src/jomlib/ppexpr_grammar.cpp
src/jomlib/ppexprparser.cpp
src/jomlib/preprocessor.cpp
src/jomlib/targetexecutor.cpp
src/jomlib/dependencygraph.h
src/jomlib/exception.h
src/jomlib/fastfileinfo.h
src/jomlib/filetime.h
src/jomlib/helperfunctions.h
src/jomlib/macrotable.h
src/jomlib/makefile.h
src/jomlib/makefilefactory.h
src/jomlib/makefilelinereader.h
src/jomlib/options.h
src/jomlib/parser.h
src/jomlib/ppexpr_grammar_p.h
src/jomlib/ppexprparser.h
src/jomlib/preprocessor.h
src/jomlib/stable.h
)
# run moc on all headers and add the moc files to the SRCS
list(APPEND JOM_SRCS ${JOM_GENERATED_SRCS} ${JOM_MOCS})
if(WIN32)
list(APPEND JOM_SRCS
src/jomlib/iocompletionport.h
src/jomlib/iocompletionport.cpp
src/jomlib/jomprocess.cpp
)
else()
add_definitions(
-DUSE_QPROCESS
)
list(APPEND JOM_SRCS
src/jomlib/jomprocess_qt.cpp
)
endif()
set(JOM_APP_MOCS
src/app/application.h
)
set(JOM_APP_SRCS
src/app/main.cpp
src/app/application.cpp
)
list(APPEND JOM_APP_SRCS ${JOM_APP_GENERATED_SRCS} ${JOM_APP_MOCS})
source_group("Generated Sources" FILES ${JOM_GENERATED_SRCS} ${JOM_APP_GENERATED_SRCS})
add_executable(jom ${JOM_APP_SRCS} ${JOM_SRCS})
if(WIN32)
target_link_libraries(jom Qt5::Core ws2_32)
else(WIN32)
target_link_libraries(jom Qt5::Core)
endif(WIN32)
# install binaries to bin/, libraries to lib/ and import libraries to lib/ too
install(TARGETS jom RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
# if we want to use tests:
if(JOM_ENABLE_TESTS)
# in subdirectory tests:
set(TESTS_SRCS tests/tests.cpp tests/tests.h)
add_executable(jom-test ${TESTS_SRCS} ${JOM_SRCS})
target_link_libraries(jom-test Qt5::Core Qt5::Test)
# copy the data directory 'makefiles' over into the build directory as the tests should be run from there
file(GLOB_RECURSE JOM_TEST_DATA RELATIVE ${CMAKE_SOURCE_DIR}/tests/makefiles/ "tests/makefiles/*")
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/makefiles)
foreach(_file ${JOM_TEST_DATA})
configure_file(${CMAKE_SOURCE_DIR}/tests/makefiles/${_file} ${CMAKE_BINARY_DIR}/makefiles/${_file} COPY_ONLY)
endforeach(_file ${JOM_TEST_DATA})
# add one unit test per function:
# you can run the unittests all at once using 'make test' from the build directory
# to produce the list: jom-test --functions | sed 's|[(][)]||'
set(TEST_NAMES
includeFiles
includeCycle
macros
invalidMacros
preprocessorExpressions
preprocessorDivideByZero
preprocessorInvalidExpressions
conditionals
dotDirectives
descriptionBlocks
inferenceRules
cycleInTargets
dependentsWithSpace
multipleTargets
comments
fileNameMacros
fileNameMacrosInDependents
windowsPathsInTargetName
caseInsensitiveDependents
environmentVariables
ignoreExitCodes
inlineFiles
unicodeFiles
builtin_cd
suffixes
nonexistentDependent
outOfDateCheck
)
foreach(TEST_NAME ${TEST_NAMES})
add_test(${TEST_NAME} jom-test ${TEST_NAME})
endforeach()
endif(JOM_ENABLE_TESTS)
|