~ubuntu-branches/ubuntu/maverick/freecad/maverick

« back to all changes in this revision

Viewing changes to CMakeLists.txt

  • Committer: Bazaar Package Importer
  • Author(s): Teemu Ikonen
  • Date: 2009-07-16 18:37:41 UTC
  • Revision ID: james.westby@ubuntu.com-20090716183741-oww9kcxqrk991i1n
Tags: upstream-0.8.2237
ImportĀ upstreamĀ versionĀ 0.8.2237

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
project(FreeCAD_trunk)
 
2
set(FREECAD_VERSION "0.7")
 
3
 
 
4
cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
 
5
 
 
6
# include local  modules
 
7
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
 
8
 
 
9
if(COMMAND cmake_policy)
 
10
                 cmake_policy(SET CMP0003 NEW)
 
11
endif(COMMAND cmake_policy)
 
12
 
 
13
set(COMPILE_DEFINITIONS_DEBUG "-DFC_DEBUG=1")
 
14
 
 
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 .)
 
23
 
 
24
if(WIN32)
 
25
                 set(PLATFORM_CP xcopy /Y /S)
 
26
else(WIN32)
 
27
                 set(PLATFORM_CP cp)
 
28
endif(WIN32)
 
29
 
 
30
 
 
31
# ================================================================================
 
32
 
 
33
 
 
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)
 
42
 
 
43
 
 
44
# ================================================================================
 
45
 
 
46
 
 
47
if(WIN32)
 
48
                 SET(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR})
 
49
else(WIN32)
 
50
                 SET(CMAKE_INSTALL_PREFIX "/usr/lib/freecad")
 
51
endif(WIN32)
 
52
 
 
53
 
 
54
# ================================================================================
 
55
# == Win32 is default behaviour use the LibPack copied in Source tree ============
 
56
if(WIN32)
 
57
 
 
58
# --------------------------------------------------------------------------------
 
59
# General includes 
 
60
 
 
61
        link_directories(${CMAKE_SOURCE_DIR}/lib)
 
62
        include_directories(${CMAKE_SOURCE_DIR}/include)
 
63
 
 
64
# OpenGL
 
65
        find_package(OpenGL)
 
66
 
 
67
# Python
 
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) 
 
73
        
 
74
# XercesC
 
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) 
 
79
        
 
80
# Boost
 
81
        set(Boost_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/boost)
 
82
        set(Boost_LIBRARIES 
 
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
 
88
        )
 
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
 
95
        )
 
96
        set(Boost_FOUND TRUE) 
 
97
 
 
98
# Zlib
 
99
        set(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/zlib)
 
100
        set(ZLIB_LIBRARIES  zlib1.lib)
 
101
        set(ZLIB_FOUND TRUE) 
 
102
        
 
103
# Coin3D
 
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) 
 
108
 
 
109
 
 
110
# QT
 
111
        set(QT_INCLUDE_DIR 
 
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
 
124
                )
 
125
                
 
126
        set(QT_LIBRARIES 
 
127
            optimized QtCore4.lib
 
128
            optimized QtGui4.lib
 
129
            optimized QtDesigner4.lib
 
130
            optimized QtSvg4.lib
 
131
            optimized QtNetwork4.lib
 
132
            optimized QtSql4.lib
 
133
            optimized QtTest4.lib
 
134
            optimized QtXml4.lib
 
135
            optimized QtOpenGl4.lib
 
136
        )
 
137
        set(QT_DEBUG_LIBRARIES 
 
138
            debug QtCored4.lib
 
139
            debug QtGuid4.lib
 
140
            debug QtDesignerd4.lib
 
141
            debug QtSvgd4.lib
 
142
            debug QtNetworkd4.lib
 
143
            debug QtSqld4.lib
 
144
            debug QtTestd4.lib
 
145
            debug QtXmld4.lib
 
146
            debug QtOpenGld4.lib
 
147
        )
 
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)
 
151
        
 
152
        
 
153
        
 
154
        MACRO (QT4_EXTRACT_OPTIONS _qt4_files _qt4_options)
 
155
                SET(${_qt4_files})
 
156
                SET(${_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)
 
170
 
 
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 )
 
193
 
 
194
        MACRO (QT4_WRAP_CPP outfiles )
 
195
                QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN})
 
196
                SET(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}
 
204
                        )
 
205
                        SET(${outfiles} ${${outfiles}} ${outfile})
 
206
                endforeach(it)
 
207
        ENDMACRO (QT4_WRAP_CPP)
 
208
        
 
209
        
 
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
 
215
 
 
216
        include(AddFileDependencies)
 
217
 
 
218
        macro(fc_wrap_cpp outfiles )
 
219
                QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN})
 
220
                SET(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}
 
228
                        )
 
229
                        SET(${outfiles} ${${outfiles}} ${outfile})
 
230
                        add_file_dependencies(${it} ${outfile})
 
231
                endforeach(it)
 
232
        endmacro(fc_wrap_cpp)
 
233
        
 
234
        
 
235
        MACRO (QT4_ADD_RESOURCES outfiles )
 
236
                QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN})
 
237
                SET(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}")
 
247
                  SET(_RC_DEPENDS)
 
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}")
 
255
                  ENDFOREACH(_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})
 
262
                ENDFOREACH (it)
 
263
        ENDMACRO (QT4_ADD_RESOURCES)
 
264
 
 
265
        MACRO (QT4_WRAP_UI outfiles  )
 
266
    QT4_EXTRACT_OPTIONS(ui_files ui_options ${ARGN})
 
267
 
 
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})
 
277
                ENDFOREACH (it)
 
278
        ENDMACRO (QT4_WRAP_UI)
 
279
 
 
280
 
 
281
        set(QT4_FOUND TRUE) 
 
282
 
 
283
# SoQt
 
284
        set(SOQT_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/soqt)
 
285
        set(SOQT_LIBRARY_RELEASE  soqt1.lib)
 
286
        set(SOQT_LIBRARY_DEBUG  soqt1d.lib)
 
287
        set(SOQT_FOUND TRUE) 
 
288
 
 
289
# OpenCV
 
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) 
 
293
 
 
294
# OCC
 
295
        set(OCC_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include/OpenCascade)
 
296
        #set(OCC_LIBRARIES  cv.lib cvaux.lib cxcore.lib cxts.lib highgui.lib)
 
297
        set(OCC_FOUND TRUE) 
 
298
        
 
299
        
 
300
else(WIN32)
 
301
 
 
302
# ================================================================================
 
303
# == for other OSes search the packages ==========================================
 
304
 
 
305
 
 
306
# -------------------------------- OpenGL --------------------------------
 
307
 
 
308
        find_package(OpenGL)
 
309
 
 
310
# -------------------------------- Python --------------------------------
 
311
 
 
312
 
 
313
        find_package(PythonLibs REQUIRED)
 
314
        find_package(PythonInterp REQUIRED)
 
315
 
 
316
        IF(NOT PYTHONLIBS_FOUND)
 
317
                MESSAGE("Python not found, install python!")
 
318
        ENDIF(NOT PYTHONLIBS_FOUND)
 
319
 
 
320
 
 
321
# -------------------------------- Qt --------------------------------
 
322
 
 
323
# sets ${QT_LIBRARIES}
 
324
 
 
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)
 
332
        find_package(Qt4)
 
333
 
 
334
        include(${QT_USE_FILE})
 
335
 
 
336
        IF(NOT QT4_FOUND)
 
337
                MESSAGE("Library qt-4.3 or above is not available, install QT or FreeCAD Gui version will not be built")
 
338
        ENDIF(NOT QT4_FOUND)
 
339
 
 
340
        IF(NOT QT_QTWEBKIT_FOUND)
 
341
                MESSAGE("QT Webkit not found, will not build browser integration!")
 
342
        ENDIF(NOT QT_QTWEBKIT_FOUND)
 
343
 
 
344
 
 
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 )
 
352
                         # get include dirs
 
353
                         QT4_GET_MOC_FLAGS(moc_includes)
 
354
                         QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN})
 
355
 
 
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})
 
362
                         endforeach(it)
 
363
        endmacro(fc_wrap_cpp)
 
364
 
 
365
# -------------------------------- Coin3D --------------------------------
 
366
 
 
367
        find_package(Coin3D REQUIRED)
 
368
        find_package(SoQt REQUIRED)
 
369
 
 
370
# -------------------------------- Boost --------------------------------
 
371
 
 
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" )
 
375
 
 
376
        find_package(Boost COMPONENTS filesystem program_options regex signals)
 
377
 
 
378
# -------------------------------- XercesC --------------------------------
 
379
 
 
380
        find_package(XercesC REQUIRED)
 
381
 
 
382
# -------------------------------- ZLIB --------------------------------
 
383
 
 
384
        find_package(ZLIB REQUIRED)
 
385
 
 
386
# -------------------------------- OpenCasCade --------------------------------
 
387
 
 
388
        find_package(OpenCasCade)
 
389
 
 
390
        IF(NOT OCC_FOUND)
 
391
                MESSAGE("OpenCasCade was not found, build no CAD modules!")
 
392
        ENDIF(NOT OCC_FOUND)
 
393
 
 
394
# -------------------------------- OpenCV --------------------------------
 
395
 
 
396
        find_package(OpenCV REQUIRED)
 
397
 
 
398
 
 
399
endif(WIN32)
 
400
 
 
401
 
 
402
 
 
403
# ================================================================================
 
404
# == Macros, mostly for special targets ==========================================
 
405
 
 
406
 
 
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}")
 
420
                 execute_process(
 
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}")
 
425
                                 execute_process(
 
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)
 
430
 
 
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}")
 
436
                 execute_process(
 
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}")
 
441
                                 execute_process(
 
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)
 
446
 
 
447
# It would be a bit cleaner to generate these files in ${CMAKE_CURRENT_BINARY_DIR}
 
448
 
 
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)
 
452
                 add_custom_command(
 
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)
 
459
 
 
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)
 
463
                 add_custom_command(
 
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)
 
470
 
 
471
 
 
472
# generates the ui -> cpp h files
 
473
#macro(qt4_wrap_ui infiles )
 
474
#
 
475
#endmacro(qt4_wrap_ui)
 
476
 
 
477
 
 
478
# This is a special version of the built in macro qt4_add_resources that generates .cpp files
 
479
#
 
480
#macro(fc_add_resources outfiles )
 
481
#    #QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN})
 
482
#       set(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}")
 
492
#      set(_RC_DEPENDS)
 
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})
 
507
#    endforeach (it)
 
508
#endmacro(fc_add_resources)
 
509
 
 
510
  MACRO (fc_add_resources outfiles )
 
511
    QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN})
 
512
 
 
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}")
 
522
      SET(_RC_DEPENDS)
 
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}")
 
530
      ENDFOREACH(_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})
 
537
    ENDFOREACH (it)
 
538
 
 
539
  ENDMACRO (fc_add_resources)
 
540
 
 
541
# ================================================================================
 
542
# == Global Compiler and Linker Settings =========================================
 
543
 
 
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)
 
551
 
 
552
 
 
553
IF(MSVC)
 
554
        # set default compiler settings
 
555
        #SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GF /GY")
 
556
        # set default libs
 
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")
 
562
 
 
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)
 
569
ENDIF(MSVC)
 
570
 
 
571
add_subdirectory(src)
 
572