ACGCommon.cmake 32.5 KB
Newer Older
Jan Möbius's avatar
   
Jan Möbius committed
1
2
3
4
5
if (EXISTS ${CMAKE_SOURCE_DIR}/${CMAKE_PROJECT_NAME}.cmake)
  include (${CMAKE_SOURCE_DIR}/${CMAKE_PROJECT_NAME}.cmake)
endif ()

# prevent build in source directory
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# add option to disable plugin build
option (
  BLOCK_IN_SOURCE_BUILD
  "Disable building inside the source tree"
  ON
)

if ( BLOCK_IN_SOURCE_BUILD )
  if ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
      message (SEND_ERROR "Building in the source directory is not supported.")
      message (FATAL_ERROR "Please remove the created \"CMakeCache.txt\" file, the \"CMakeFiles\" directory and create a build directory and call \"${CMAKE_COMMAND} <path to the sources>\".")
  endif ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
endif()
Jan Möbius's avatar
   
Jan Möbius committed
20
21

# allow only Debug and Release builds
Matthias Möller's avatar
Matthias Möller committed
22
set (CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo" CACHE STRING "" FORCE)
Jan Möbius's avatar
   
Jan Möbius committed
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mark_as_advanced (CMAKE_CONFIGURATION_TYPES)

# set Debus as default build target
if (NOT CMAKE_BUILD_TYPE)
  set (CMAKE_BUILD_TYPE Debug CACHE STRING
      "Choose the type of build, options are: Debug, Release."
      FORCE)
endif ()

# create our output directroy
if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build)
  file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build)
endif ()

37
38
39
40
41
42
43
#generate the global doc target (but only once!)
GET_TARGET_PROPERTY(target_location doc EchoString)
if ( NOT target_location STREQUAL "Building Documentation" )
  ADD_CUSTOM_TARGET( doc )
  SET_TARGET_PROPERTIES( doc PROPERTIES EchoString "Building Documentation"  )
endif()

Jan Möbius's avatar
   
Jan Möbius committed
44
45
# read version from file
macro (acg_get_version)
46
47
48
    if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/branding/VERSION")
      file (READ "${CMAKE_CURRENT_SOURCE_DIR}/branding/VERSION" _file)
    elseif (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${ARGN}/VERSION")
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
49
50
51
52
53
54
55
56
57
58
      file (READ "${CMAKE_CURRENT_SOURCE_DIR}/${ARGN}/VERSION" _file)
    else ()
      file (READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" _file)
    endif ()

    string (
        REGEX REPLACE
        "^.*ID=([^\n]*).*$" "\\1"
        _id ${_file}
    )
Jan Möbius's avatar
   
Jan Möbius committed
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
    string (
        REGEX REPLACE
        "^.*VERSION=([^\n]*).*$" "\\1"
        _version ${_file}
    )
    string (
        REGEX REPLACE
        "^.*MAJOR=([^\n]*).*$" "\\1"
        _major ${_file}
    )
    string (
        REGEX REPLACE
        "^.*MINOR=([^\n]*).*$" "\\1"
        _minor ${_file}
    )
    string (
        REGEX REPLACE
        "^.*PATCH=([^\n]*).*$" "\\1"
        _patch ${_file}
    )
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
79
80
81
82
83

    set (${_id}_VERSION ${_version})
    set (${_id}_VERSION_MAJOR ${_major})
    set (${_id}_VERSION_MINOR ${_minor})
    set (${_id}_VERSION_PATCH ${_patch})
Jan Möbius's avatar
   
Jan Möbius committed
84
85
86
87
88
89
endmacro ()


# set directory structures for the different platforms
if (WIN32)
  set (ACG_PROJECT_DATADIR ".")
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
90
91
  set (ACG_PROJECT_LIBDIR "lib")
  set (ACG_PROJECT_BINDIR ".")
Jan Möbius's avatar
   
Jan Möbius committed
92
  set (ACG_PROJECT_PLUGINDIR "Plugins")
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
93
94
  if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR})
    file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR})
Jan Möbius's avatar
   
Jan Möbius committed
95
96
97
98
99
100
101
102
  endif ()
else ()
  set (ACG_PROJECT_DATADIR "share/${CMAKE_PROJECT_NAME}")
  set (ACG_PROJECT_LIBDIR "lib/${CMAKE_PROJECT_NAME}")
  set (ACG_PROJECT_PLUGINDIR "lib/${CMAKE_PROJECT_NAME}/plugins")
  set (ACG_PROJECT_BINDIR "bin")
endif ()

Jan Möbius's avatar
Jan Möbius committed
103
104
105
106
107
108
109
110
111
if( NOT APPLE )
  # check 64 bit
  if( CMAKE_SIZEOF_VOID_P MATCHES 4 )
    set( HAVE_64_BIT 0 )
  else( CMAKE_SIZEOF_VOID_P MATCHES 4 )
    set( HAVE_64_BIT 1 )
  endif( CMAKE_SIZEOF_VOID_P MATCHES 4 )
endif (  NOT APPLE )

Jan Möbius's avatar
   
Jan Möbius committed
112
113
114
115
116
# allow a project to modify the directories
if (COMMAND acg_modify_project_dirs)
  acg_modify_project_dirs ()
endif ()

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
117
118
119
120
121
if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR})
 file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR})
endif ()


Jan Möbius's avatar
   
Jan Möbius committed
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# sets default build properties
macro (acg_set_target_props target)
  if (WIN32)
    set_target_properties (
      ${target} PROPERTIES
      BUILD_WITH_INSTALL_RPATH 1
      SKIP_BUILD_RPATH 0
    )
  elseif (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE)
    set_target_properties (
      ${target} PROPERTIES
      INSTALL_NAME_DIR "@executable_path/../lib/${CMAKE_PROJECT_NAME}"
      BUILD_WITH_INSTALL_RPATH 1
      SKIP_BUILD_RPATH 0
    )
  elseif (NOT APPLE)
Jan Möbius's avatar
Jan Möbius committed
138

Jan Möbius's avatar
   
Jan Möbius committed
139
140
141
142
143
144
145
146
    set_target_properties (
      ${target} PROPERTIES
      INSTALL_RPATH "$ORIGIN/../lib/${CMAKE_PROJECT_NAME}"
      BUILD_WITH_INSTALL_RPATH 1
      SKIP_BUILD_RPATH 0
      RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_BINDIR}"
      LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}"
    )
Jan Möbius's avatar
Jan Möbius committed
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

    # prepare for cross compiling
    if ( HAVE_64_BIT )
      if ( NOT CROSS_COMPILE_32)
        # Already in cache, be silent
        set( CROSS_COMPILE_32 false CACHE BOOL "Compile for 32-bit architecture")
      endif( NOT  CROSS_COMPILE_32 )

      if ( CROSS_COMPILE_32 )
        add_definitions( -m32 )
        set_target_properties( ${target} PROPERTIES LINK_FLAGS -m32  )
      endif ( CROSS_COMPILE_32 )

    else ( HAVE_64_BIT )

      if ( NOT CROSS_COMPILE_64)
        # Already in cache, be silent
        set( CROSS_COMPILE_64 false CACHE BOOL "Compile for 64-bit architecture")
      endif( NOT  CROSS_COMPILE_64 )

      if ( CROSS_COMPILE_64 )
        add_definitions( -m64 )
        set_target_properties( ${target} PROPERTIES LINK_FLAGS -m64  )
      endif ( CROSS_COMPILE_64 )

    endif( HAVE_64_BIT )

Jan Möbius's avatar
   
Jan Möbius committed
174
175
176
177
178
179
180
181
182
  endif ()
endmacro ()

include (AddFileDependencies)
include (ACGCompiler)

# define INCLUDE_TEMPLATES for everything we build
add_definitions (-DINCLUDE_TEMPLATES)

Matthias Möller's avatar
Matthias Möller committed
183
184
185
186
187
188
189
190
191
192
193
194
#unset cached qt variables which are set by all qt versions. version is the major number of the qt version (e.g. 4 or 5, not 4.8)
macro (acg_unset_qt_shared_variables version)
  if (ACG_INTERNAL_QT_LAST_VERSION)
    if (NOT ${ACG_INTERNAL_QT_LAST_VERSION} EQUAL ${version})
      unset(QT_BINARY_DIR)
      unset(QT_PLUGINS_DIR)
      unset(ACG_INTERNAL_QT_LAST_VERSION)
    endif()
  endif()
  set (ACG_INTERNAL_QT_LAST_VERSION "${version}" CACHE INTERNAL "Qt Version, which was used on the last time")
endmacro()

Jan Möbius's avatar
   
Jan Möbius committed
195
196
197
# look for selected qt dependencies
macro (acg_qt4)
  if (NOT QT4_FOUND)
Matthias Möller's avatar
Matthias Möller committed
198
    acg_unset_qt_shared_variables(4)
199
    set (QT_MIN_VERSION ${ARGN}) 
Jan Möbius's avatar
Jan Möbius committed
200

201
202
203
204
205
    if(POLICY CMP0020)
      # Automatically link Qt executables to qtmain target on Windows
      cmake_policy(SET CMP0020 NEW)
    endif(POLICY CMP0020)

Jan Möbius's avatar
Jan Möbius committed
206
    find_package (Qt4 COMPONENTS QtCore QtGui )
Jan Möbius's avatar
   
Jan Möbius committed
207
208
209
210
211

    set (QT_USE_QTOPENGL 1)
    set (QT_USE_QTNETWORK 1)
    set (QT_USE_QTSCRIPT 1)
    set (QT_USE_QTSQL 1)
Jan Möbius's avatar
Jan Möbius committed
212
    set (QT_USE_QTXML 1)
Jan Möbius's avatar
Jan Möbius committed
213
    set (QT_USE_QTXMLPATTERNS 1)
Jan Möbius's avatar
   
Jan Möbius committed
214
215
216
217
    set (QT_USE_QTHELP 1)
    set (QT_USE_QTWEBKIT 1)
    set (QT_USE_QTUITOOLS 1)

218
219
220
221
    if (QT_QTSCRIPTTOOLS_FOUND)
      set (QT_USE_QTSCRIPTTOOLS 1)
    endif()

Jan Möbius's avatar
   
Jan Möbius committed
222
223
224
225
    include (${QT_USE_FILE})
  endif ()
endmacro ()

Matthias Möller's avatar
Matthias Möller committed
226
macro (acg_qt5)
227
228
229
230
231

   if(POLICY CMP0020)
     # Automatically link Qt executables to qtmain target on Windows
     cmake_policy(SET CMP0020 NEW)
   endif(POLICY CMP0020)
Matthias Möller's avatar
Matthias Möller committed
232
233
234
235
  #if (NOT QT5_FOUND)

    #set (QT_MIN_VERSION ${ARGN})

Matthias Möller's avatar
Matthias Möller committed
236
237
238
239
240
241
242
243
  #try to find qt5 automatically
  #for custom installation of qt5, dont use any of these variables
  set (QT5_INSTALL_PATH "" CACHE PATH "Path to Qt5 directory which contains lib and include folder")
  if (EXISTS "${QT5_INSTALL_PATH}")
    set (CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${QT5_INSTALL_PATH}")
    set (QT5_INSTALL_PATH_EXISTS TRUE)
  endif()
  
244
  
Jan Möbius's avatar
Jan Möbius committed
245
    
Matthias Möller's avatar
Matthias Möller committed
246
    find_package (Qt5Core QUIET)
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
     
    #find WINDOWS_SDK to avoid qt error. This must be done BEFORE Qt5Widgets is searched
    if (Qt5Core_FOUND AND WIN32)    
      string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" QT_VERSION_MAJOR "${Qt5Core_VERSION_STRING}")
      string(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+.*" "\\1" QT_VERSION_MINOR "${Qt5Core_VERSION_STRING}")
      string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" QT_VERSION_PATCH "${Qt5Core_VERSION_STRING}")
    
      if ( (QT_VERSION_MAJOR EQUAL 5) AND (QT_VERSION_MINOR LESS 3 OR ( QT_VERSION_MINOR EQUAL 3 AND QT_VERSION_PATCH EQUAL 0 )) ) # for all Qt version > 5.0.0 and < 5.3.1
        #glu32.lib is needed by qt5 opengl version. it cannot find it by itself so we help qt
        #this block has to be executed, before Qt5Gui is searched, otherwise we will end up with the (not so useful) QT5 error message 
        set(WINDOWS_SDK_LIBS "COULD_NOT_FOUND" CACHE PATH "Path to the latest windows sdk libs which includes glu32.lib. Used by Qt5.")
        if (EXISTS "${WINDOWS_SDK_LIBS}\\glu32.lib")
          set (CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${WINDOWS_SDK_LIBS}")
        elseif(QT5_INSTALL_PATH_EXISTS) #trying to install qt5. notify about missing sdk before the qt message comes
          message(FATAL_ERROR "Could not find glu32.lib. This is necessary for QT5 OpenGL version for windows, spleace specify glu32.lib in WINDOWS_SDK_LIB or install Qt version >= 5.3.1")
        endif()
      endif()    
    endif(Qt5Core_FOUND AND WIN32)
    
Matthias Möller's avatar
Matthias Möller committed
266
    find_package (Qt5Declarative QUIET)
267
    find_package (Qt5Widgets QUIET)    
Matthias Möller's avatar
Matthias Möller committed
268
269
270
271
272
273
274
275
276
277
278
279
280
281
    find_package (Qt5Gui QUIET)
    find_package (Qt5OpenGL QUIET)
    find_package (Qt5Network QUIET)
    find_package (Qt5Script QUIET)
    find_package (Qt5ScriptTools QUIET)
    find_package (Qt5Sql QUIET)
    find_package (Qt5Xml QUIET)
    find_package (Qt5XmlPatterns QUIET)
    find_package (Qt5Help QUIET)
    find_package (Qt5WebKit QUIET)
    find_package (Qt5UiTools QUIET)
    find_package (Qt5Concurrent QUIET)
    find_package (Qt5PrintSupport QUIET)
    find_package (Qt5Svg QUIET)
Jan Möbius's avatar
Jan Möbius committed
282
283
    
    if (NOT WIN32 AND NOT APPLE)
Matthias Möller's avatar
Matthias Möller committed
284
    	find_package (Qt5X11Extras QUIET)
Jan Möbius's avatar
Jan Möbius committed
285
286
287
    endif ()
    

Matthias Möller's avatar
Matthias Möller committed
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
    if (Qt5Core_FOUND AND Qt5Declarative_FOUND AND Qt5Widgets_FOUND
      AND Qt5Gui_FOUND AND Qt5OpenGL_FOUND AND Qt5Network_FOUND
      AND Qt5Script_FOUND AND Qt5ScriptTools_FOUND AND Qt5Sql_FOUND
      AND Qt5Xml_FOUND AND Qt5XmlPatterns_FOUND AND Qt5Help_FOUND
      AND Qt5WebKit_FOUND AND Qt5UiTools_FOUND AND Qt5Concurrent_FOUND
      AND Qt5PrintSupport_FOUND)
      set (QT5_FOUND TRUE)
    endif()
    
    if (QT5_FOUND)   
      acg_unset_qt_shared_variables(5)
    
      #set plugin dir
      list(GET Qt5Gui_PLUGINS 0 _plugin)
      if (_plugin)
        get_target_property(_plugin_full ${_plugin} LOCATION)
        get_filename_component(_plugin_dir ${_plugin_full} PATH)
      set (QT_PLUGINS_DIR "${_plugin_dir}/../" CACHE PATH "Path to the qt plugin directory")
      elseif(QT5_INSTALL_PATH_EXISTS)
        set (QT_PLUGINS_DIR "${QT5_INSTALL_PATH}/plugins/" CACHE PATH "Path to the qt plugin directory")
      elseif()
        set (QT_PLUGINS_DIR "QT_PLUGIN_DIR_NOT_FOUND" CACHE PATH "Path to the qt plugin directory")
      endif(_plugin)
      
      #set binary dir for fixupbundle
      if(QT5_INSTALL_PATH_EXISTS)
        set(_QT_BINARY_DIR "${QT5_INSTALL_PATH}/bin")
      else()
        get_target_property(_QT_BINARY_DIR ${Qt5Widgets_UIC_EXECUTABLE} LOCATION)
        get_filename_component(_QT_BINARY_DIR ${_QT_BINARY_DIR} PATH)
      endif(QT5_INSTALL_PATH_EXISTS)
      
      set (QT_BINARY_DIR "${_QT_BINARY_DIR}" CACHE PATH "Qt5 binary Directory")
      mark_as_advanced(QT_BINARY_DIR)
      
      set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
  
Matthias Möller's avatar
Matthias Möller committed
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
      include_directories(${Qt5Core_INCLUDE_DIRS})
      include_directories(${Qt5Declarative_INCLUDE_DIRS})
      include_directories(${Qt5Widgets_INCLUDE_DIRS})
      include_directories(${Qt5Gui_INCLUDE_DIRS})
      include_directories(${Qt5OpenGL_INCLUDE_DIRS})
      include_directories(${Qt5Network_INCLUDE_DIRS})
      include_directories(${Qt5Script_INCLUDE_DIRS})
      include_directories(${Qt5ScriptTools_INCLUDE_DIRS})
      include_directories(${Qt5Sql_INCLUDE_DIRS})
      include_directories(${Qt5Xml_INCLUDE_DIRS})
      include_directories(${Qt5XmlPatterns_INCLUDE_DIRS})
      include_directories(${Qt5Help_INCLUDE_DIRS})
      include_directories(${Qt5WebKit_INCLUDE_DIRS})
      include_directories(${Qt5UiTools_INCLUDE_DIRS})
      include_directories(${Qt5Concurrent_INCLUDE_DIRS})
      include_directories(${Qt5PrintSupport_INCLUDE_DIRS})
      add_definitions(${Qt5Core_DEFINITIONS})
      add_definitions(${Qt5Widgets_DEFINITIONS})
      add_definitions(${Qt5Gui_DEFINITIONS})
      add_definitions(${Qt5OpenGL_DEFINITIONS})
      add_definitions(${Qt5Network_DEFINITIONS})
      add_definitions(${Qt5Script_DEFINITIONS})
      add_definitions(${Qt5ScriptTools_DEFINITIONS})
      add_definitions(${Qt5Sql_DEFINITIONS})
      add_definitions(${Qt5Xml_DEFINITIONS})
      add_definitions(${Qt5XmlPatterns_DEFINITIONS})
      add_definitions(${Qt5Help_DEFINITIONS})
      add_definitions(${Qt5WebKit_DEFINITIONS})
      add_definitions(${Qt5UiTools_DEFINITIONS})
      add_definitions(${Qt5Concurrent_DEFINITIONS})
      add_definitions(${Qt5PrintSupport_DEFINITIONS})
356
      
357
358
359
360
361
      if (Qt5X11Extras_FOUND)
	      include_directories(${Qt5X11Extras_INCLUDE_DIRS})
	      add_definitions(${Qt5X11Extras_DEFINITIONS})
      endif ()
      
362
363
364
      if ( NOT MSVC )
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
      endif()
Jan Möbius's avatar
Jan Möbius committed
365

Matthias Möller's avatar
Matthias Möller committed
366
      set (QT_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5Declarative_LIBRARIES} ${Qt5Widgets_LIBRARIES}
Matthias Möller's avatar
Matthias Möller committed
367
368
369
        ${Qt5Gui_LIBRARIES} ${Qt5OpenGL_LIBRARIES} ${Qt5Network_LIBRARIES}
        ${Qt5Script_LIBRARIES} ${Qt5ScriptTools_LIBRARIES} ${Qt5Sql_LIBRARIES}
        ${Qt5Xml_LIBRARIES} ${Qt5XmlPatterns_LIBRARIES} ${Qt5Help_LIBRARIES}
Matthias Möller's avatar
Matthias Möller committed
370
371
        ${Qt5WebKit_LIBRARIES} ${Qt5UiTools_LIBRARIES} ${Qt5Concurrent_LIBARIES} 
        ${Qt5PrintSupport_LIBRARIES})
372
373
374
375
        
      if (Qt5X11Extras_FOUND)
	      list (APPEND QT_LIBRARIES ${Qt5X11Extras_LIBRARIES})
	  endif ()
Matthias Möller's avatar
Matthias Möller committed
376
       
377
378
379
      if (MSVC)
        set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5Core_QTMAIN_LIBRARIES})
      endif()
Jan Möbius's avatar
Jan Möbius committed
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401

	  #add_definitions(-DQT_NO_OPENGL)

	  #adding QT_NO_DEBUG to all release modes. 
	  #  Note: for multi generators like msvc you cannot set this definition depending of
	  #  the current build type, because it may change in the future inside the ide and not via cmake
	  if (MSVC_IDE)
	    set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG")
	    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG")
		
		set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG")
	    set(CMAKE_CXX_FLAGS_MINSITEREL "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG")
		
		set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG")
	    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /DQT_NO_DEBUG")
	  else(MSVC_IDE)
	    if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
	      add_definitions(-DQT_NO_DEBUG)
	    endif()
      endif(MSVC_IDE)

    endif ()
Matthias Möller's avatar
Matthias Möller committed
402
403
endmacro ()

Jan Möbius's avatar
   
Jan Möbius committed
404
405
406
407
408
409
410
411
412
413
414
415
416
# unsets the given variable
macro (acg_unset var)
    set (${var} "" CACHE INTERNAL "")
endmacro ()

# sets the given variable
macro (acg_set var value)
    set (${var} ${value} CACHE INTERNAL "")
endmacro ()

# test for OpenMP
macro (acg_openmp)
  if (NOT OPENMP_NOTFOUND)
417
418
    # Set off OpenMP on Darwin architectures
    # since it causes crashes sometimes
419
#    if(NOT APPLE)    
420
421
422
423
424
        find_package(OpenMP)
      if (OPENMP_FOUND)
        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
        set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
        add_definitions(-DUSE_OPENMP)
David Bommes's avatar
David Bommes committed
425
426
427
#      else ()
#        set (OPENMP_NOTFOUND 1)
#      endif ()
428
    endif()
Jan Möbius's avatar
   
Jan Möbius committed
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
  endif ()
endmacro ()

# test for FTGL
macro (acg_ftgl)
  find_package (Freetype)

  if (FREETYPE_FOUND)
    find_package (FTGL)

    if (FTGL_FOUND)
      add_definitions (-DUSE_FTGL)
      include_directories (${FTGL_INCLUDE_DIR} ${FREETYPE_INCLUDE_DIR_freetype2})
      set (FTGL_LIBS ${FREETYPE_LIBRARIES} ${FTGL_LIBRARIES})
    endif ()
  endif ()
endmacro ()

# append all files with extension "ext" in the "dirs" directories to "ret"
448
# excludes all files starting with a '.' (dot)
Jan Möbius's avatar
   
Jan Möbius committed
449
450
451
macro (acg_append_files ret ext)
  foreach (_dir ${ARGN})
    file (GLOB _files "${_dir}/${ext}")
452
453
454
    foreach (_file ${_files})
      get_filename_component (_filename ${_file} NAME)
      if (_filename MATCHES "^[.]")
Jan Möbius's avatar
Jan Möbius committed
455
	list (REMOVE_ITEM _files ${_file})
456
457
      endif ()
    endforeach ()
Jan Möbius's avatar
   
Jan Möbius committed
458
459
460
461
462
    list (APPEND ${ret} ${_files})
  endforeach ()
endmacro ()

# append all files with extension "ext" in the "dirs" directories and its subdirectories to "ret"
463
# excludes all files starting with a '.' (dot)
Jan Möbius's avatar
   
Jan Möbius committed
464
465
macro (acg_append_files_recursive ret ext)
  foreach (_dir ${ARGN})
466
    file (GLOB_RECURSE _files "${_dir}/${ext}")
467
468
469
    foreach (_file ${_files})
      get_filename_component (_filename ${_file} NAME)
      if (_filename MATCHES "^[.]")
Jan Möbius's avatar
Jan Möbius committed
470
	list (REMOVE_ITEM _files ${_file})
471
472
      endif ()
    endforeach ()
Jan Möbius's avatar
   
Jan Möbius committed
473
474
475
476
    list (APPEND ${ret} ${_files})
  endforeach ()
endmacro ()

477

Jan Möbius's avatar
   
Jan Möbius committed
478
479
480
481
482
483
484
485
486
487
488
489
# drop all "*T.cc" files from list
macro (acg_drop_templates list)
  foreach (_file ${${list}})
    if (_file MATCHES "T.cc$")
      list (REMOVE_ITEM ${list} ${_file})
    endif ()
  endforeach ()
endmacro ()

# generate moc targets for sources in list
macro (acg_qt4_automoc moc_SRCS)
  qt4_get_moc_flags (_moc_INCS)
490
491
  
  list(REMOVE_DUPLICATES _moc_INCS)
Jan Möbius's avatar
   
Jan Möbius committed
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525

  set (_matching_FILES )
  foreach (_current_FILE ${ARGN})

     get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE)
     # if "SKIP_AUTOMOC" is set to true, we will not handle this file here.
     # here. this is required to make bouic work correctly:
     # we need to add generated .cpp files to the sources (to compile them),
     # but we cannot let automoc handle them, as the .cpp files don't exist yet when
     # cmake is run for the very first time on them -> however the .cpp files might
     # exist at a later run. at that time we need to skip them, so that we don't add two
     # different rules for the same moc file
     get_source_file_property (_skip ${_abs_FILE} SKIP_AUTOMOC)

     if ( NOT _skip AND EXISTS ${_abs_FILE} )

        file (READ ${_abs_FILE} _contents)

        get_filename_component (_abs_PATH ${_abs_FILE} PATH)

        string (REGEX MATCHALL "Q_OBJECT" _match "${_contents}")
        if (_match)
            get_filename_component (_basename ${_current_FILE} NAME_WE)
            set (_header ${_abs_FILE})
            set (_moc    ${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp)

            add_custom_command (OUTPUT ${_moc}
                COMMAND ${QT_MOC_EXECUTABLE}
                ARGS ${_moc_INCS} ${_header} -o ${_moc}
                DEPENDS ${_header}
            )

            add_file_dependencies (${_abs_FILE} ${_moc})
            set (${moc_SRCS} ${${moc_SRCS}} ${_moc})
526
            
Matthias Möller's avatar
Matthias Möller committed
527
528
529
530
531
532
533
534
        endif ()
     endif ()
  endforeach ()
endmacro ()

# generate moc targets for sources in list
macro (acg_qt5_automoc moc_SRCS)
  qt5_get_moc_flags (_moc_INCS)
535
536
  
  list(REMOVE_DUPLICATES _moc_INCS)
Matthias Möller's avatar
Matthias Möller committed
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562

  set (_matching_FILES )
  foreach (_current_FILE ${ARGN})

     get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE)
     # if "SKIP_AUTOMOC" is set to true, we will not handle this file here.
     # here. this is required to make bouic work correctly:
     # we need to add generated .cpp files to the sources (to compile them),
     # but we cannot let automoc handle them, as the .cpp files don't exist yet when
     # cmake is run for the very first time on them -> however the .cpp files might
     # exist at a later run. at that time we need to skip them, so that we don't add two
     # different rules for the same moc file
     get_source_file_property (_skip ${_abs_FILE} SKIP_AUTOMOC)

     if ( NOT _skip AND EXISTS ${_abs_FILE} )

        file (READ ${_abs_FILE} _contents)

        get_filename_component (_abs_PATH ${_abs_FILE} PATH)

        string (REGEX MATCHALL "Q_OBJECT" _match "${_contents}")
        if (_match)
            get_filename_component (_basename ${_current_FILE} NAME_WE)
            set (_header ${_abs_FILE})
            set (_moc    ${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp)

Jan Möbius's avatar
Jan Möbius committed
563
564
565
566
567
            add_custom_command (OUTPUT ${_moc}
                COMMAND ${QT_MOC_EXECUTABLE}
                ARGS ${_moc_INCS} ${_header} -o ${_moc}
                DEPENDS ${_header}
            )
Matthias Möller's avatar
Matthias Möller committed
568
569
570
571

            add_file_dependencies (${_abs_FILE} ${_moc})
            set (${moc_SRCS} ${${moc_SRCS}} ${_moc})

Jan Möbius's avatar
   
Jan Möbius committed
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
        endif ()
     endif ()
  endforeach ()
endmacro ()

# generate uic targets for sources in list
macro (acg_qt4_autouic uic_SRCS)

  set (_matching_FILES )
  foreach (_current_FILE ${ARGN})

     get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE)

     if ( EXISTS ${_abs_FILE} )

        file (READ ${_abs_FILE} _contents)

        get_filename_component (_abs_PATH ${_abs_FILE} PATH)

        get_filename_component (_basename ${_current_FILE} NAME_WE)
        string (REGEX REPLACE "Ui$" "" _cbasename ${_basename})
        set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.hh)
        set (_header ${_basename}.hh)
        set (_source ${_abs_PATH}/${_cbasename}.cc)
596
        
Jan Möbius's avatar
   
Jan Möbius committed
597
598
599
        add_custom_command (OUTPUT ${_outfile}
            COMMAND ${QT_UIC_EXECUTABLE}
            ARGS -o ${_outfile} ${_abs_FILE}
Matthias Möller's avatar
Matthias Möller committed
600
            MAIN_DEPENDENCY ${_abs_FILE} VERBATIM)
Jan Möbius's avatar
   
Jan Möbius committed
601
602
603

        add_file_dependencies (${_source} ${_outfile})
        set (${uic_SRCS} ${${uic_SRCS}} ${_outfile})
604
            
Jan Möbius's avatar
   
Jan Möbius committed
605
606
607
608
     endif ()
  endforeach ()
endmacro ()

Matthias Möller's avatar
Matthias Möller committed
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
# generate uic targets for sources in list
macro (acg_qt5_autouic uic_SRCS)

  set (_matching_FILES )
  foreach (_current_FILE ${ARGN})

     get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE)

     if ( EXISTS ${_abs_FILE} )

        file (READ ${_abs_FILE} _contents)

        get_filename_component (_abs_PATH ${_abs_FILE} PATH)

        get_filename_component (_basename ${_current_FILE} NAME_WE)
        string (REGEX REPLACE "Ui$" "" _cbasename ${_basename})
        set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${_basename}.hh)
        set (_header ${_basename}.hh)
        set (_source ${_abs_PATH}/${_cbasename}.cc)

        add_custom_command (OUTPUT ${_outfile}
            COMMAND ${Qt5Widgets_UIC_EXECUTABLE}
            ARGS -o ${_outfile} ${_abs_FILE}
Matthias Möller's avatar
Matthias Möller committed
632
            MAIN_DEPENDENCY ${_abs_FILE} VERBATIM)
Matthias Möller's avatar
Matthias Möller committed
633
634
635
636
637
638
639

        add_file_dependencies (${_source} ${_outfile})
        set (${uic_SRCS} ${${uic_SRCS}} ${_outfile})

     endif ()
  endforeach ()
endmacro ()
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656

# generate qrc targets for sources in list
macro (acg_qt4_autoqrc qrc_SRCS)

  set (_matching_FILES )
  foreach (_current_FILE ${ARGN})

     get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE)

     if ( EXISTS ${_abs_FILE} )

        file (READ ${_abs_FILE} _contents)

        get_filename_component (_abs_PATH ${_abs_FILE} PATH)

        get_filename_component (_basename ${_current_FILE} NAME_WE)
        set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${_basename}.cpp)
657
        
Matthias Möller's avatar
Matthias Möller committed
658
659
660
        add_custom_command (OUTPUT ${_outfile}
            COMMAND ${QT_RCC_EXECUTABLE}
            ARGS -o ${_outfile}  ${_abs_FILE}
661
            DEPENDS ${_abs_FILE}) 
Matthias Möller's avatar
Matthias Möller committed
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686

        add_file_dependencies (${_source} ${_outfile})
        set (${qrc_SRCS} ${${qrc_SRCS}} ${_outfile})

     endif ()
  endforeach ()
endmacro ()

# generate qrc targets for sources in list
macro (acg_qt5_autoqrc qrc_SRCS)

  set (_matching_FILES )
  foreach (_current_FILE ${ARGN})

     get_filename_component (_abs_FILE ${_current_FILE} ABSOLUTE)

     if ( EXISTS ${_abs_FILE} )

        file (READ ${_abs_FILE} _contents)

        get_filename_component (_abs_PATH ${_abs_FILE} PATH)

        get_filename_component (_basename ${_current_FILE} NAME_WE)
        set (_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${_basename}.cpp)

687
        qt5_add_resources( ${_outfile}  ${_abs_FILE}  )
688
689
690
691
692
693
694
695

        add_file_dependencies (${_source} ${_outfile})
        set (${qrc_SRCS} ${${qrc_SRCS}} ${_outfile})

     endif ()
  endforeach ()
endmacro ()

Jan Möbius's avatar
   
Jan Möbius committed
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
# get all files in directory, but ignore svn
macro (acg_get_files_in_dir ret dir)
  file (GLOB_RECURSE __files RELATIVE "${dir}" "${dir}/*")
  foreach (_file ${__files})
    if (NOT _file MATCHES ".*svn.*")
      list (APPEND ${ret} "${_file}")
    endif ()
  endforeach ()
endmacro ()

# copy the whole directory without svn files
function (acg_copy_after_build target src dst)
  acg_unset (_files)
  acg_get_files_in_dir (_files ${src})
  foreach (_file ${_files})
    add_custom_command(TARGET ${target} POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E copy_if_different "${src}/${_file}" "${dst}/${_file}"
    )
  endforeach ()
endfunction ()

# install the whole directory without svn files
function (acg_install_dir src dst)
  acg_unset (_files)
  acg_get_files_in_dir (_files ${src})
  foreach (_file ${_files})
    get_filename_component (_file_PATH ${_file} PATH)
    install(FILES "${src}/${_file}"
      DESTINATION "${dst}/${_file_PATH}"
    )
  endforeach ()
endfunction ()

# extended version of add_executable that also copies output to out Build directory
function (acg_add_executable _target)
  add_executable (${_target} ${ARGN})

  # set common target properties defined in common.cmake
  acg_set_target_props (${_target})

736
  if (WIN32 OR (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE))
Jan Möbius's avatar
   
Jan Möbius committed
737
738
739
    add_custom_command (TARGET ${_target} POST_BUILD
                        COMMAND ${CMAKE_COMMAND} -E
                        copy_if_different
740
741
742
743
                          $<TARGET_FILE:${_target}>
                          ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_BINDIR}/$<TARGET_FILE_NAME:${_target}>)
  endif (WIN32 OR (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE))
  
744
  if (NOT ACG_PROJECT_MACOS_BUNDLE OR NOT APPLE)
Jan Möbius's avatar
   
Jan Möbius committed
745
746
747
748
749
    install (TARGETS ${_target} DESTINATION ${ACG_PROJECT_BINDIR})
  endif ()
endfunction ()

# extended version of add_library that also copies output to out Build directory
750
751
752
753
754
755
756
757
function (acg_add_library _target _libtype)

  if (${_libtype} STREQUAL SHAREDANDSTATIC)
    set (_type SHARED)
    if (NOT WIN32)
      set (_and_static 1)
    else ()
      set (_and_static 0)
758
    endif ()    
759
760
761
762
763
  else ()
    set (_type ${_libtype})
    set (_and_static 0)
  endif ()

764
765
  add_library (${_target} ${_type} ${ARGN} )

Jan Möbius's avatar
   
Jan Möbius committed
766
767
768
  # set common target properties defined in common.cmake
  acg_set_target_props (${_target})

769
770
771
772
773
  if (_and_static)
    add_library (${_target}Static STATIC ${ARGN})

    # set common target properties defined in common.cmake
    acg_set_target_props (${_target}Static)
774
    
775
    if (NOT APPLE)
776
      set_target_properties (${_target}Static PROPERTIES 
777
778
                             LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
                            )
779
780
781
    endif ()
  endif ()

782
  if (WIN32 OR (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE))
Jan Möbius's avatar
   
Jan Möbius committed
783
784
785
786
    if (${_type} STREQUAL SHARED)
      add_custom_command (TARGET ${_target} POST_BUILD
                          COMMAND ${CMAKE_COMMAND} -E
                          copy_if_different
787
788
789
                            $<TARGET_FILE:${_target}>
                            ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}/$<TARGET_FILE_NAME:${_target}>)
    add_custom_command (TARGET ${_target} POST_BUILD
Jan Möbius's avatar
   
Jan Möbius committed
790
791
                          COMMAND ${CMAKE_COMMAND} -E
                          copy_if_different
792
793
                            $<TARGET_LINKER_FILE:${_target}>
                            ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}/$<TARGET_LINKER_FILE_NAME:${_target}>)
Jan Möbius's avatar
   
Jan Möbius committed
794
795
796
797
    elseif (${_type} STREQUAL MODULE)
      if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR})
        file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR})
      endif ()
Jan Möbius's avatar
Dennis:    
Jan Möbius committed
798
      add_custom_command (TARGET ${_target} POST_BUILD
Jan Möbius's avatar
   
Jan Möbius committed
799
800
                          COMMAND ${CMAKE_COMMAND} -E
                          copy_if_different
801
802
                            $<TARGET_FILE:${_target}>
                            ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_PLUGINDIR}/$<TARGET_FILE_NAME:${_target}>)
803
    elseif (${_type} STREQUAL STATIC)
804
    add_custom_command (TARGET ${_target} POST_BUILD
805
806
                          COMMAND ${CMAKE_COMMAND} -E
                          copy_if_different
807
808
809
810
811
812
813
814
                            $<TARGET_FILE:${_target}>
                            ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}/$<TARGET_FILE_NAME:${_target}>)
  endif()
  
   
  # make an extra copy for windows into the binary directory
    if (${_type} STREQUAL SHARED AND WIN32)
      add_custom_command (TARGET ${_target} POST_BUILD
815
                          COMMAND ${CMAKE_COMMAND} -E
816
817
818
819
820
821
822
823
824
825
826
827
                          copy_if_different 
                            $<TARGET_FILE:${_target}>
                            ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_BINDIR}/$<TARGET_FILE_NAME:${_target}>)
  endif () 
    
  endif(WIN32 OR (APPLE AND NOT ACG_PROJECT_MACOS_BUNDLE))
  
  if (_and_static)
    if( ${CMAKE_BUILD_TYPE} STREQUAL Debug )
      set ( postfix ${CMAKE_DEBUG_POSTFIX} )
    else ()
      set ( postfix "" )
Jan Möbius's avatar
   
Jan Möbius committed
828
    endif ()
829

830
831
832
833
834
835
    set( fullname ${_target}${postfix} )
    add_custom_command (TARGET ${_target}Static POST_BUILD
                        COMMAND ${CMAKE_COMMAND} -E
                        copy_if_different
                          $<TARGET_FILE:${_target}Static>
                          ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_LIBDIR}/lib${fullname}.a)
836

Jan Möbius's avatar
   
Jan Möbius committed
837
  endif ()
838
 
839
840

  # Block installation of libraries by setting ACG_NO_LIBRARY_INSTALL
841
  if ( NOT ACG_NO_LIBRARY_INSTALL ) 
842
843
844
845
846
847
848
    if (NOT ACG_PROJECT_MACOS_BUNDLE OR NOT APPLE)
      if (${_type} STREQUAL SHARED OR ${_type} STREQUAL STATIC )
        install (TARGETS ${_target}
                 RUNTIME DESTINATION ${ACG_PROJECT_BINDIR}
                 LIBRARY DESTINATION ${ACG_PROJECT_LIBDIR}
                 ARCHIVE DESTINATION ${ACG_PROJECT_LIBDIR})
        if (_and_static)
849
          install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${_target}Static${postfix}.a
850
                   DESTINATION ${ACG_PROJECT_LIBDIR}
851
                   RENAME lib${fullname}.a
852
853
854
855
                   PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
        endif ()
      elseif (${_type} STREQUAL MODULE)
        install (TARGETS ${_target} DESTINATION ${ACG_PROJECT_PLUGINDIR})
856
      endif ()
Jan Möbius's avatar
   
Jan Möbius committed
857
    endif ()
858
  endif()
Jan Möbius's avatar
Jan Möbius committed
859

Jan Möbius's avatar
   
Jan Möbius committed
860
endfunction ()
Jan Möbius's avatar
Jan Möbius committed
861
862
863
864
865
866
867
868
869
870
871
872
873

#generates qt translations
function (acg_add_translations _target _languages _sources)

  string (TOUPPER ${_target} _TARGET)
  # generate/use translation files
  # run with UPDATE_TRANSLATIONS set to on to build qm files
  option (UPDATE_TRANSLATIONS_${_TARGET} "Update source translation *.ts files (WARNING: make clean will delete the source .ts files! Danger!)")

  set (_new_ts_files)
  set (_ts_files)

  foreach (lang ${_languages})
Jan Möbius's avatar
Jan Möbius committed
874
875
    if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/translations/${_target}_${lang}.ts" OR UPDATE_TRANSLATIONS_${_TARGET})
      list (APPEND _new_ts_files "translations/${_target}_${lang}.ts")
Jan Möbius's avatar
Jan Möbius committed
876
    else ()
Jan Möbius's avatar
Jan Möbius committed
877
      list (APPEND _ts_files "translations/${_target}_${lang}.ts")
Jan Möbius's avatar
Jan Möbius committed
878
879
880
    endif ()
  endforeach ()

Jan Möbius's avatar
Jan Möbius committed
881

Jan Möbius's avatar
Jan Möbius committed
882
  set (_qm_files)
Jan Möbius's avatar
Jan Möbius committed
883
  if ( _new_ts_files )
Matthias Möller's avatar
Matthias Möller committed
884
885
886
    if (QT5_FOUND)
      #qt5_create_translation(_qm_files ${_sources} ${_new_ts_files})
    elseif (QT4_FOUND)
887
888
    qt4_create_translation(_qm_files ${_sources} ${_new_ts_files})
  endif ()
Jan Möbius's avatar
Jan Möbius committed
889
890
  endif ()

Jan Möbius's avatar
Jan Möbius committed
891
  if ( _ts_files )
Matthias Möller's avatar
Matthias Möller committed
892
893
894
    if (QT5_FOUND)
      #qt5_add_translation(_qm_files2 ${_ts_files})
    elseif (QT4_FOUND)
895
    qt4_add_translation(_qm_files2 ${_ts_files})
Matthias Möller's avatar
Matthias Möller committed
896
    endif()
Jan Möbius's avatar
Jan Möbius committed
897
898
899
900
901
902
903
904
905
906
907
908
909
910
    list (APPEND _qm_files ${_qm_files2})
  endif ()

  # create a target for the translation files ( and object files )
  # Use this target, to update only the translations
  add_custom_target (translations_target_${_target} DEPENDS ${_qm_files})

  # Build translations with the application
  add_dependencies(${_target} translations_target_${_target} )

  if (NOT EXISTS ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Translations)
    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Translations )
  endif ()

Jan Möbius's avatar
Dennis:    
Jan Möbius committed
911
912
913
914
915
916
917
918
  foreach (_qm ${_qm_files})
    get_filename_component (_qm_name "${_qm}" NAME)
    add_custom_command (TARGET translations_target_${_target} POST_BUILD
                        COMMAND ${CMAKE_COMMAND} -E
                        copy_if_different
                          ${_qm}
                          ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Translations/${_qm_name})
  endforeach ()
Jan Möbius's avatar
Jan Möbius committed
919
920

  if (NOT ACG_PROJECT_MACOS_BUNDLE OR NOT APPLE)
921
    install (FILES ${_qm_files} DESTINATION "${ACG_PROJECT_DATADIR}/Translations")
Jan Möbius's avatar
Jan Möbius committed
922
923
  endif ()
endfunction ()
924
925
926
927
928
929
930

# Function that writes all generated qch files into one Help.qhcp project file
function (generate_qhp_file files_loc plugin_name)

    set(qhp_file "${files_loc}/${plugin_name}.qhp")
    # Read in template file
    file(STRINGS "${CMAKE_SOURCE_DIR}/OpenFlipper/Documentation/QtHelpResources/QtHelpProject.qhp" qhp_template)
931
    
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
    # Initialize new project file
    file(WRITE ${qhp_file} "")
    foreach (_line ${qhp_template})
        string(STRIP ${_line} stripped)
        if("${stripped}" STREQUAL "files")
            acg_get_files_in_dir (_files ${files_loc})
            foreach (_file ${_files})
                string(REGEX MATCH ".+[.]+((html)|(htm)|(xml))$" fileresult ${_file})
                string(LENGTH "${fileresult}" len)
                if(${len} GREATER 0)
                    file(APPEND ${qhp_file} "<file>${_file}</file>\n")
                endif()
            endforeach()
        else()
            string(REGEX REPLACE "plugin" ${plugin} newline ${_line})
            file(APPEND ${qhp_file} "${newline}\n")
        endif()
    endforeach()
endfunction()