summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
blob: 3c32845877de9fa33741ecde56f40795254c7d60 (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
project(jom)
cmake_minimum_required(VERSION 2.6)


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}")

# search for Qt4 - it is required
find_package(Qt4 REQUIRED)

# some general definitions & the directories that should be included
add_definitions(${QT_DEFINITIONS})
include_directories(
  ${QT_INCLUDES}
  ${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_FROM_ASCII
  -DQT_NO_CAST_TO_ASCII
  -DQT_USE_FAST_CONCATENATION
  -DQT_USE_FAST_OPERATOR_PLUS
)

# in subdirectory src:
#
set(JOM_MOCS
	src/jomlib/targetexecutor.h
	src/jomlib/process.h
	src/jomlib/commandexecutor.h
)

set(JOM_SRCS
	src/jomlib/commandexecutor.cpp
	src/jomlib/consolecolorrestorer.cpp
	src/jomlib/dependencygraph.cpp
	src/jomlib/exception.cpp
	src/jomlib/fileinfo.cpp
	src/jomlib/filetime.cpp
	src/jomlib/helperfunctions.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/process.cpp
	src/jomlib/targetexecutor.cpp
	src/jomlib/consolecolorrestorer.h
	src/jomlib/dependencygraph.h
	src/jomlib/exception.h
	src/jomlib/fileinfo.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
 qt4_wrap_cpp(JOM_GENERATED_SRCS ${JOM_MOCS})
 list(APPEND JOM_SRCS ${JOM_GENERATED_SRCS} ${JOM_MOCS})


 set(JOM_APP_MOCS
	src/app/application.h
)
 set(JOM_APP_SRCS
	src/app/main.cpp
	src/app/application.cpp
)
 qt4_wrap_cpp(JOM_APP_GENERATED_SRCS ${JOM_APP_MOCS})
 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})
 target_link_libraries(jom ${QT_QTMAIN_LIBRARY} ${QT_QTCORE_LIBRARY} ws2_32)

 # 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)
     qt4_wrap_cpp(TESTS_SRCS tests/tests.h)
     add_executable(jom-test ${TESTS_SRCS} ${JOM_SRCS})
     target_link_libraries(jom-test ${QT_QTMAIN_LIBRARY}
                                    ${QT_QTCORE_LIBRARY}
                                    ${QT_QTTEST_LIBRARY})

     # 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
     add_test(includeFiles jom-test includeFiles)
     add_test(includeCycle jom-test includeCycle)
     add_test(macros jom-test macros)
     add_test(inferenceRules jom-test inferenceRules)
     add_test(cycleInTargets jom-test cycleInTargets)
     add_test(multipleTargets jom-test multipleTargets)
     add_test(multipleTargetsFail jom-test multipleTargetsFail)
     add_test(comments jom-test comments)
     add_test(fileNameMacros jom-test fileNameMacros)

 endif(JOM_ENABLE_TESTS)