2
set(FREECAD_VERSION "0.7")
4
cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
6
# include local modules
7
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
9
if(COMMAND cmake_policy)
10
cmake_policy(SET CMP0003 NEW)
11
endif(COMMAND cmake_policy)
13
set(COMPILE_DEFINITIONS_DEBUG "-DFC_DEBUG=1")
15
if(CMAKE_CFG_INTDIR STREQUAL .)
16
# No Debug/Release output paths
17
set(DEBUG_MAIN_OUTPUT_PATH ${CMAKE_BINARY_DIR}/src/Main)
18
set(RELEASE_MAIN_OUTPUT_PATH ${CMAKE_BINARY_DIR}/src/Main)
19
else(CMAKE_CFG_INTDIR STREQUAL .)
20
set(DEBUG_MAIN_OUTPUT_PATH ${CMAKE_BINARY_DIR}/src/Main/Debug)
21
set(RELEASE_MAIN_OUTPUT_PATH ${CMAKE_BINARY_DIR}/src/Main/Release)
22
endif(CMAKE_CFG_INTDIR STREQUAL .)
25
set(PLATFORM_CP xcopy /Y /S)
31
# ================================================================================
34
if(CMAKE_COMPILER_IS_GNUCC)
35
include(cmake/ConfigureChecks.cmake)
36
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
37
add_definitions(-DHAVE_CONFIG_H)
38
add_definitions(-Wno-write-strings)
39
add_definitions(-Wno-deprecated)
40
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
41
endif(CMAKE_COMPILER_IS_GNUCC)
44
# ================================================================================
48
SET(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR})
50
SET(CMAKE_INSTALL_PREFIX "/usr/lib/freecad")
54
# ================================================================================
55
# == Win32 is default behaviour use the LibPack copied in Source tree ============
58
# --------------------------------------------------------------------------------
61
link_directories(${CMAKE_SOURCE_DIR}/lib)
62
include_directories(${CMAKE_SOURCE_DIR}/include)
68
set(PYTHON_DEBUG_LIBRARY python25_d.lib)
69
set(PYTHON_LIBRARY python25.lib)
70
set(PYTHON_INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include/python)
71
set(PYTHON_EXECUTABLE ${CMAKE_SOURCE_DIR}/bin/python.exe)
72
set(PYTHONLIBS_FOUND TRUE)
75
set(XERCESC_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/xercesc)
76
set(XERCESC_LIBRARIES xerces-c_2.lib)
77
set(XERCESC_DEBUG_LIBRARIES xerces-c_2D.lib)
78
set(XERCESC_FOUND TRUE)
81
set(Boost_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/boost)
83
optimized boost_filesystem-vc80-mt.lib
84
#optimized boost_graph-vc80-mt.lib
85
optimized boost_program_options-vc80-mt.lib
86
optimized boost_regex-vc80-mt.lib
87
optimized boost_signals-vc80-mt.lib
89
set(Boost_DEBUG_LIBRARIES
90
debug boost_filesystem-vc80-mt-gd.lib
91
#debug boost_graph-vc80-mt-gd.lib
92
debug boost_program_options-vc80-mt-gd.lib
93
debug boost_regex-vc80-mt-gd.lib
94
debug boost_signals-vc80-mt-gd.lib
99
set(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/zlib)
100
set(ZLIB_LIBRARIES zlib1.lib)
104
set(COIN_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/coin)
105
set(COIN3D_LIBRARY_DEBUG coin2d.lib)
106
set(COIN3D_LIBRARY_RELEASE coin2.lib)
107
set(COIN3D_FOUND TRUE)
112
${CMAKE_SOURCE_DIR}/include/QT/
113
${CMAKE_SOURCE_DIR}/include/QT/Qt
114
${CMAKE_SOURCE_DIR}/include/QT/QtCore
115
${CMAKE_SOURCE_DIR}/include/QT/QtGui
116
${CMAKE_SOURCE_DIR}/include/QT/QtDesigner
117
${CMAKE_SOURCE_DIR}/include/QT/QtSvg
118
${CMAKE_SOURCE_DIR}/include/QT/QtNetwork
119
${CMAKE_SOURCE_DIR}/include/QT/QtSql
120
${CMAKE_SOURCE_DIR}/include/QT/QtTest
121
${CMAKE_SOURCE_DIR}/include/QT/QtUiTools
122
${CMAKE_SOURCE_DIR}/include/QT/QtXml
123
${CMAKE_SOURCE_DIR}/include/QT/QtOpenGl
127
optimized QtCore4.lib
129
optimized QtDesigner4.lib
131
optimized QtNetwork4.lib
133
optimized QtTest4.lib
135
optimized QtOpenGl4.lib
137
set(QT_DEBUG_LIBRARIES
140
debug QtDesignerd4.lib
142
debug QtNetworkd4.lib
148
set(QT_UIC_EXECUTABLE ${CMAKE_SOURCE_DIR}/bin/uic.exe)
149
set(QT_MOC_EXECUTABLE ${CMAKE_SOURCE_DIR}/bin/moc.exe)
150
set(QT_RCC_EXECUTABLE ${CMAKE_SOURCE_DIR}/bin/rcc.exe)
154
MACRO (QT4_EXTRACT_OPTIONS _qt4_files _qt4_options)
157
#SET(_QT4_DOING_OPTIONS FALSE)
158
FOREACH(_currentArg ${ARGN})
159
# IF ("${_currentArg}" STREQUAL "OPTIONS")
160
# SET(_QT4_DOING_OPTIONS TRUE)
161
# ELSE ("${_currentArg}" STREQUAL "OPTIONS")
162
# IF(_QT4_DOING_OPTIONS)
163
# LIST(APPEND ${_qt4_options} "${_currentArg}")
164
# ELSE(_QT4_DOING_OPTIONS)
165
LIST(APPEND ${_qt4_files} "${_currentArg}")
166
# ENDIF(_QT4_DOING_OPTIONS)
167
# ENDIF ("${_currentArg}" STREQUAL "OPTIONS")
168
ENDFOREACH(_currentArg)
169
ENDMACRO (QT4_EXTRACT_OPTIONS)
171
# macro used to create the names of output files preserving relative dirs
172
MACRO (QT4_MAKE_OUTPUT_FILE infile prefix ext outfile )
173
STRING(LENGTH ${CMAKE_CURRENT_BINARY_DIR} _binlength)
174
STRING(LENGTH ${infile} _infileLength)
175
SET(_checkinfile ${CMAKE_CURRENT_SOURCE_DIR})
176
IF(_infileLength GREATER _binlength)
177
STRING(SUBSTRING "${infile}" 0 ${_binlength} _checkinfile)
178
IF(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
179
FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_BINARY_DIR} ${infile})
180
ELSE(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
181
FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile})
182
ENDIF(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
183
ELSE(_infileLength GREATER _binlength)
184
FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile})
185
ENDIF(_infileLength GREATER _binlength)
186
SET(_outfile "${CMAKE_CURRENT_BINARY_DIR}/${rel}")
187
STRING(REPLACE ".." "__" _outfile ${_outfile})
188
GET_FILENAME_COMPONENT(outpath ${_outfile} PATH)
189
GET_FILENAME_COMPONENT(_outfile ${_outfile} NAME_WE)
190
FILE(MAKE_DIRECTORY ${outpath})
191
SET(${outfile} ${outpath}/${prefix}${_outfile}.${ext})
192
ENDMACRO (QT4_MAKE_OUTPUT_FILE )
194
MACRO (QT4_WRAP_CPP outfiles )
195
QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN})
197
foreach(it ${moc_files})
198
get_filename_component(it ${it} ABSOLUTE)
199
QT4_MAKE_OUTPUT_FILE(${it} moc_ cpp outfile)
200
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
201
COMMAND ${QT_MOC_EXECUTABLE}
202
ARGS ${moc_options} ${it} -o ${outfile}
203
MAIN_DEPENDENCY ${it}
205
SET(${outfiles} ${${outfiles}} ${outfile})
207
ENDMACRO (QT4_WRAP_CPP)
210
# This is a special version of the built in macro qt4_wrap_cpp
211
# It is required since moc'ed files are now included instead of being added to projects directly
212
# It adds a reverse dependency to solve this
213
# This has the unfortunate side effect that some files are always rebuilt
214
# There is probably a cleaner solution than this
216
include(AddFileDependencies)
218
macro(fc_wrap_cpp outfiles )
219
QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN})
221
foreach(it ${moc_files})
222
get_filename_component(it ${it} ABSOLUTE)
223
QT4_MAKE_OUTPUT_FILE(${it} moc_ cpp outfile)
224
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
225
COMMAND ${QT_MOC_EXECUTABLE}
226
ARGS ${moc_options} ${it} -o ${outfile}
227
MAIN_DEPENDENCY ${it}
229
SET(${outfiles} ${${outfiles}} ${outfile})
230
add_file_dependencies(${it} ${outfile})
232
endmacro(fc_wrap_cpp)
235
MACRO (QT4_ADD_RESOURCES outfiles )
236
QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN})
238
FOREACH (it ${rcc_files})
239
GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE)
240
GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
241
GET_FILENAME_COMPONENT(rc_path ${infile} PATH)
242
SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx)
243
# parse file for dependencies
244
# all files are absolute paths or relative to the location of the qrc file
245
FILE(READ "${infile}" _RC_FILE_CONTENTS)
246
STRING(REGEX MATCHALL "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}")
248
FOREACH(_RC_FILE ${_RC_FILES})
249
STRING(REGEX REPLACE "^<file[^>]*>" "" _RC_FILE "${_RC_FILE}")
250
STRING(REGEX MATCH "^/|([A-Za-z]:/)" _ABS_PATH_INDICATOR "${_RC_FILE}")
251
IF(NOT _ABS_PATH_INDICATOR)
252
SET(_RC_FILE "${rc_path}/${_RC_FILE}")
253
ENDIF(NOT _ABS_PATH_INDICATOR)
254
SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}")
256
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
257
COMMAND ${QT_RCC_EXECUTABLE}
258
ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}
259
MAIN_DEPENDENCY ${infile}
260
DEPENDS ${_RC_DEPENDS})
261
SET(${outfiles} ${${outfiles}} ${outfile})
263
ENDMACRO (QT4_ADD_RESOURCES)
265
MACRO (QT4_WRAP_UI outfiles )
266
QT4_EXTRACT_OPTIONS(ui_files ui_options ${ARGN})
268
FOREACH (it ${ui_files})
269
GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
270
GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
271
SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
272
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
273
COMMAND ${QT_UIC_EXECUTABLE}
274
ARGS -o ${outfile} ${infile}
275
MAIN_DEPENDENCY ${infile})
276
SET(${outfiles} ${${outfiles}} ${outfile})
278
ENDMACRO (QT4_WRAP_UI)
284
set(SOQT_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/soqt)
285
set(SOQT_LIBRARY_RELEASE soqt1.lib)
286
set(SOQT_LIBRARY_DEBUG soqt1d.lib)
290
set(OPENCV_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/opencv)
291
set(OPENCV_LIBRARIES cv.lib cvaux.lib cxcore.lib cxts.lib highgui.lib)
292
set(OPENCV_FOUND TRUE)
295
set(OCC_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/OpenCascade)
296
#set(OCC_LIBRARIES cv.lib cvaux.lib cxcore.lib cxts.lib highgui.lib)
302
# ================================================================================
303
# == for other OSes search the packages ==========================================
306
# -------------------------------- OpenGL --------------------------------
310
# -------------------------------- Python --------------------------------
313
find_package(PythonLibs REQUIRED)
314
find_package(PythonInterp REQUIRED)
316
IF(NOT PYTHONLIBS_FOUND)
317
MESSAGE("Python not found, install python!")
318
ENDIF(NOT PYTHONLIBS_FOUND)
321
# -------------------------------- Qt --------------------------------
323
# sets ${QT_LIBRARIES}
325
SET(QT_MIN_VERSION 4.1.4)
326
set(QT_USE_QTNETWORK TRUE)
327
set(QT_USE_QTOPENGL TRUE)
328
set(QT_USE_QTSVG TRUE)
329
set(QT_USE_QTUITOOLS TRUE)
330
set(QT_USE_QTXML TRUE)
331
set(QT_USE_QTWEBKIT TRUE)
334
include(${QT_USE_FILE})
337
MESSAGE("Library qt-4.3 or above is not available, install QT or FreeCAD Gui version will not be built")
340
IF(NOT QT_QTWEBKIT_FOUND)
341
MESSAGE("QT Webkit not found, will not build browser integration!")
342
ENDIF(NOT QT_QTWEBKIT_FOUND)
345
# This is a special version of the built in macro qt4_wrap_cpp
346
# It is required since moc'ed files are now included instead of being added to projects directly
347
# It adds a reverse dependency to solve this
348
# This has the unfortunate side effect that some files are always rebuilt
349
# There is probably a cleaner solution than this
350
include(AddFileDependencies)
351
macro(fc_wrap_cpp outfiles )
353
QT4_GET_MOC_FLAGS(moc_includes)
354
QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN})
356
foreach(it ${moc_files})
357
get_filename_component(it ${it} ABSOLUTE)
358
QT4_MAKE_OUTPUT_FILE(${it} moc_ cpp outfile)
359
QT4_CREATE_MOC_COMMAND(${it} ${outfile} "${moc_includes}" "${moc_options}")
360
set(${outfiles} ${${outfiles}} ${outfile})
361
add_file_dependencies(${it} ${outfile})
363
endmacro(fc_wrap_cpp)
365
# -------------------------------- Coin3D --------------------------------
367
find_package(Coin3D REQUIRED)
368
find_package(SoQt REQUIRED)
370
# -------------------------------- Boost --------------------------------
372
SET( _boost_TEST_VERSIONS ${Boost_ADDITIONAL_VERSIONS} "1.38.0" "1.37.0"
373
"1.36.1" "1.36.0" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0" "1.34"
374
"1.33.1" "1.33.0" "1.33" )
376
find_package(Boost COMPONENTS filesystem program_options regex signals)
378
# -------------------------------- XercesC --------------------------------
380
find_package(XercesC REQUIRED)
382
# -------------------------------- ZLIB --------------------------------
384
find_package(ZLIB REQUIRED)
386
# -------------------------------- OpenCasCade --------------------------------
388
find_package(OpenCasCade)
391
MESSAGE("OpenCasCade was not found, build no CAD modules!")
394
# -------------------------------- OpenCV --------------------------------
396
find_package(OpenCV REQUIRED)
403
# ================================================================================
404
# == Macros, mostly for special targets ==========================================
407
macro(copy_to_local_output_paths SOURCE_PATHS)
408
if(CMAKE_CFG_INTDIR STREQUAL .)
409
# No Debug/Release output paths
410
set(DEBUG_LOCAL_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
411
set(RELEASE_LOCAL_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
412
else(CMAKE_CFG_INTDIR STREQUAL .)
413
set(DEBUG_LOCAL_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/Debug)
414
set(RELEASE_LOCAL_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/Release)
415
endif(CMAKE_CFG_INTDIR STREQUAL .)
416
file(TO_NATIVE_PATH ${SOURCE_PATHS} NATIVE_SOURCE)
417
file(TO_NATIVE_PATH ${DEBUG_LOCAL_OUTPUT_PATH}/ NATIVE_DEBUG_DESTINATION)
418
file(TO_NATIVE_PATH ${RELEASE_LOCAL_OUTPUT_PATH}/ NATIVE_RELESE_DESTINATION)
419
message(STATUS "${PLATFORM_CP} ${NATIVE_SOURCE} ${NATIVE_DEBUG_DESTINATION}")
421
COMMAND ${PLATFORM_CP} ${NATIVE_SOURCE} ${NATIVE_DEBUG_DESTINATION}
422
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
423
if(NOT ${DEBUG_LOCAL_OUTPUT_PATH} STREQUAL ${RELEASE_LOCAL_OUTPUT_PATH})
424
message(STATUS "${PLATFORM_CP} ${NATIVE_SOURCE} ${NATIVE_RELESE_DESTINATION}")
426
COMMAND ${PLATFORM_CP} ${NATIVE_SOURCE} ${NATIVE_RELESE_DESTINATION}
427
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
428
endif(NOT ${DEBUG_LOCAL_OUTPUT_PATH} STREQUAL ${RELEASE_LOCAL_OUTPUT_PATH})
429
endmacro(copy_to_local_output_paths)
431
macro(copy_to_main_output_paths SOURCE_PATHS)
432
file(TO_NATIVE_PATH ${SOURCE_PATHS} NATIVE_SOURCE)
433
file(TO_NATIVE_PATH ${DEBUG_MAIN_OUTPUT_PATH}/ NATIVE_DEBUG_DESTINATION)
434
file(TO_NATIVE_PATH ${RELEASE_MAIN_OUTPUT_PATH}/ NATIVE_RELESE_DESTINATION)
435
message(STATUS "${PLATFORM_CP} ${NATIVE_SOURCE} ${NATIVE_DEBUG_DESTINATION}")
437
COMMAND ${PLATFORM_CP} ${NATIVE_SOURCE} ${NATIVE_DEBUG_DESTINATION}
438
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
439
if(NOT ${DEBUG_MAIN_OUTPUT_PATH} STREQUAL ${RELEASE_MAIN_OUTPUT_PATH})
440
message(STATUS "${PLATFORM_CP} ${NATIVE_SOURCE} ${NATIVE_RELESE_DESTINATION}")
442
COMMAND ${PLATFORM_CP} ${NATIVE_SOURCE} ${NATIVE_RELESE_DESTINATION}
443
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
444
endif(NOT ${DEBUG_MAIN_OUTPUT_PATH} STREQUAL ${RELEASE_MAIN_OUTPUT_PATH})
445
endmacro(copy_to_main_output_paths)
447
# It would be a bit cleaner to generate these files in ${CMAKE_CURRENT_BINARY_DIR}
449
macro(generate_from_xml BASE_NAME)
450
file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR}/src/Tools/generate.py TOOL_PATH)
451
file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/${BASE_NAME}.xml SOURCE_PATH)
453
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${BASE_NAME}.h" "${CMAKE_CURRENT_SOURCE_DIR}/${BASE_NAME}.cpp"
454
COMMAND "${PYTHON_EXECUTABLE}" "${TOOL_PATH}" "${SOURCE_PATH}"
455
MAIN_DEPENDENCY "${BASE_NAME}.xml"
456
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
457
COMMENT Building ${BASE_NAME}.h/.cpp out of ${BASE_NAME}.xml)
458
endmacro(generate_from_xml)
460
macro(generate_from_py BASE_NAME OUTPUT_FILE)
461
file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR}/src/Tools/PythonToCPP.py TOOL_PATH)
462
file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/${BASE_NAME}.py SOURCE_PATH)
464
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE}
465
COMMAND ${PYTHON_EXECUTABLE} ${TOOL_PATH} ${SOURCE_PATH} ${OUTPUT_FILE}
466
MAIN_DEPENDENCY ${BASE_NAME}.py
467
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
468
COMMENT Building files out of ${BASE_NAME}.py)
469
endmacro(generate_from_py)
472
# generates the ui -> cpp h files
473
#macro(qt4_wrap_ui infiles )
475
#endmacro(qt4_wrap_ui)
478
# This is a special version of the built in macro qt4_add_resources that generates .cpp files
480
#macro(fc_add_resources outfiles )
481
# #QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN})
483
# foreach (it ${rcc_files})
484
# get_filename_component(outfilename ${it} NAME_WE)
485
# get_filename_component(infile ${it} ABSOLUTE)
486
# get_filename_component(rc_path ${infile} PATH)
487
# set(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cpp)
488
# # parse file for dependencies
489
# # all files are absolute paths or relative to the location of the qrc file
490
# file(READ "${infile}" _RC_FILE_CONTENTS)
491
# string(REGEX MATCHALL "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}")
493
# foreach(_RC_FILE ${_RC_FILES})
494
# string(REGEX REPLACE "^<file[^>]*>" "" _RC_FILE "${_RC_FILE}")
495
# string(REGEX MATCH "^/|([A-Za-z]:/)" _ABS_PATH_INDICATOR "${_RC_FILE}")
496
# if(NOT _ABS_PATH_INDICATOR)
497
# set(_RC_FILE "${rc_path}/${_RC_FILE}")
498
# endif(NOT _ABS_PATH_INDICATOR)
499
# set(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}")
500
# endforeach(_RC_FILE)
501
# add_custom_command(OUTPUT ${outfile}
502
# COMMAND ${QT_RCC_EXECUTABLE}
503
# ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}
504
# MAIN_DEPENDENCY ${infile}
505
# DEPENDS ${_RC_DEPENDS})
506
# set(${outfiles} ${${outfiles}} ${outfile})
508
#endmacro(fc_add_resources)
510
MACRO (fc_add_resources outfiles )
511
QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN})
513
FOREACH (it ${rcc_files})
514
GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE)
515
GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
516
GET_FILENAME_COMPONENT(rc_path ${infile} PATH)
517
SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cpp)
518
# parse file for dependencies
519
# all files are absolute paths or relative to the location of the qrc file
520
FILE(READ "${infile}" _RC_FILE_CONTENTS)
521
STRING(REGEX MATCHALL "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}")
523
FOREACH(_RC_FILE ${_RC_FILES})
524
STRING(REGEX REPLACE "^<file[^>]*>" "" _RC_FILE "${_RC_FILE}")
525
STRING(REGEX MATCH "^/|([A-Za-z]:/)" _ABS_PATH_INDICATOR "${_RC_FILE}")
526
IF(NOT _ABS_PATH_INDICATOR)
527
SET(_RC_FILE "${rc_path}/${_RC_FILE}")
528
ENDIF(NOT _ABS_PATH_INDICATOR)
529
SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}")
531
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
532
COMMAND ${QT_RCC_EXECUTABLE}
533
ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}
534
MAIN_DEPENDENCY ${infile}
535
DEPENDS ${_RC_DEPENDS})
536
SET(${outfiles} ${${outfiles}} ${outfile})
539
ENDMACRO (fc_add_resources)
541
# ================================================================================
542
# == Global Compiler and Linker Settings =========================================
544
# check for 64-bit platform
545
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
546
MESSAGE(STATUS "Platform is 64-bit, set -D_OCC64")
547
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_OCC64")
548
ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8)
549
MESSAGE(STATUS "Platform is 32-bit")
550
ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8)
554
# set default compiler settings
555
#SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GF /GY")
557
SET (CMAKE_C_STANDARD_LIBRARIES "kernel32.lib user32.lib gdi32.lib winspool.lib SHFolder.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib ")
558
set (CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES}")
559
# set linker flag /nodefaultlib
560
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB")
561
SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB")
563
# Mark 32 bit executables large address aware so they can use > 2GB address space
564
# NOTE: This setting only has an effect on machines with at least 3GB of RAM, although it sets the linker option it doesn't set the the linker switch 'Enable Large Addresses'
565
IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
566
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LARGEADDRESSAWARE")
567
SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
568
ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 4)
571
add_subdirectory(src)