CMakeLists.txt 20.5 KB
Newer Older
1
# Force minimal cmake version
2
# Required 3.8 to use source_group TREE 
3 4
# Required 3.12 to use findPython3
cmake_minimum_required(VERSION 3.12.0 FATAL_ERROR)
5

Jan Möbius's avatar
Jan Möbius committed
6 7 8
file(SHA512 ${CMAKE_SOURCE_DIR}/CMakeLists.txt HASH_TOPLEVEL_CMAKEFILE)
file(SHA512 ${CMAKE_SOURCE_DIR}/OpenFlipper/cmake/CMakeLists.txt HASH_LATEST_CMAKEFILE)

9
if ( NOT ${HASH_TOPLEVEL_CMAKEFILE} STREQUAL ${HASH_LATEST_CMAKEFILE} )
Jan Möbius's avatar
Jan Möbius committed
10 11 12
  message(WARNING "WARNING! Possibly Outdated toplevel CMakeLists.txt. Please update the toplevel copy by the file OpenFlipper/cmake/CMakeLists.txt .")
endif()

13 14 15 16 17
# Convenience checks for problems
if(EXISTS ${CMAKE_SOURCE_DIR}/libs_required/OpenMesh)
  message(FATAL_ERROR "Directory libs_required/OpenMesh has been moved to OpenFlipper/libs_required/OpenMesh! Please remove the old directory if it's still there!")
endif()

18
# Set and enforce C++-11 flags
Jan Möbius's avatar
Jan Möbius committed
19
set( CMAKE_CXX_STANDARD_REQUIRED TRUE )
20
set( CMAKE_CXX_STANDARD 11 )
21

Jan Möbius's avatar
Jan Möbius committed
22 23
# ACG Environment default settings
# This is ugly but currently we need to work around the default installed 5.3 on debian
24
if ( EXISTS /ACG/acgdev/gcc-x86_64/qt-5.11.2/5.11.2/gcc_64 )
Jan Möbius's avatar
Jan Möbius committed
25
  # Default to this install path for QT%_INSTALL_DIR
26
  set (QT5_INSTALL_PATH /ACG/acgdev/gcc-x86_64/qt-5.11.2/5.11.2/gcc_64/ CACHE PATH "Qt5 install path set for ACG environment using QT 5.11.2" )
Jan Möbius's avatar
Jan Möbius committed
27 28
endif()

29 30 31
if ( WIN32 )
  # This is the base directory for windows library search used in the finders we shipp.
  set(CMAKE_WINDOWS_LIBS_DIR "c:/libs" CACHE STRING "Default Library search dir on windows." )
Jan Möbius's avatar
Jan Möbius committed
32
endif()
33

34 35
if (NOT CMAKE_BUILD_TYPE)
  message(STATUS "No build type selected, default to Release")
36
  set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
37 38
endif()

Jan Möbius's avatar
Jan Möbius committed
39 40

IF ( APPLE )
41 42 43 44 45
     set(CMAKE_MACOSX_RPATH 0)

     IF(CMAKE_BUILD_TYPE MATCHES Debug)
        message(WARNING "WARNING: Mac Debug mode might mix debug and release libraries (Webkit, ...), which causes strange errors. If you use ports to provide qt, you might want to disable Qt debug libraries to make sure only release qt libraries are linked to OpenFlippers debug build.")
     ENDIF(CMAKE_BUILD_TYPE MATCHES Debug)
Jan Möbius's avatar
Jan Möbius committed
46 47 48
endif()


49 50
project (OpenFlipper)

51 52 53 54 55 56 57 58
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
	if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.0" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.9" OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "4.9")
		message(WARNING "Your version of GCC contains an optimizer bug. Please verify that you do not use -O3!")
		string(REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE_NEW "${CMAKE_CXX_FLAGS_RELEASE}")
		set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE_NEW}" CACHE STRING "" FORCE)
	endif()
endif()

59
# add our macro directory to cmake search path
60 61
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/OpenFlipper/cmake)

Jan Möbius's avatar
Jan Möbius committed
62
# Enable automoc, autouic and auto rcc
Jan Möbius's avatar
Jan Möbius committed
63
set(CMAKE_AUTOMOC ON)
Jan Möbius's avatar
Jan Möbius committed
64
set(CMAKE_AUTOUIC ON)
Jan Möbius's avatar
Jan Möbius committed
65
set(CMAKE_AUTORCC ON)
Jan Möbius's avatar
Jan Möbius committed
66

67 68
#This finder takes very long, so call it once here to avoid calling it multiple times in the subprojects
FIND_PACKAGE(Doxygen)
Jan Möbius's avatar
Jan Möbius committed
69 70


71 72
# Include some of our OpenFlipper cmake macros
include(OpenFlipper_common)
73

74 75 76 77 78 79 80
# search for more macro directories in Package-* folders
file (
  GLOB _more_macro_directories
       "${CMAKE_SOURCE_DIR}/Package-*/cmake"
)
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${_more_macro_directories})

81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

# ========================================================================
# Python support
# ========================================================================

if (NOT DISABLE_OPENFLIPPER_PYTHON_SYSTEM)
  set(DISABLE_OPENFLIPPER_PYTHON_SYSTEM "FALSE" CACHE BOOL "Choose if OpenFlippers integrated Python system should be build" FORCE)
endif()

if (NOT DISABLE_OPENFLIPPER_PYTHON_SYSTEM)
  find_package(Python3 COMPONENTS Development)

  if (NOT TARGET pybind11::module OR NOT TARGET pybind11::embed)
      add_subdirectory(OpenFlipper/libs_required/pybind11)
  endif()
endif()


Jan Möbius's avatar
Jan Möbius committed
99 100 101 102 103 104 105 106 107 108
# ========================================================================
# QT Setup 
# ========================================================================

# Qt setup
include(ACGQt)

acg_qt5 ()

if (NOT QT5_FOUND)
Jan Möbius's avatar
Jan Möbius committed
109
  message(FATAL_ERROR "Could not find any QT Version. Please specify QT5_INSTALL_PATH (path to bin and include dir) to build with QT5. Note that this error is also shown if not all required qt modules were found, e.g. Qt5Script.")
Jan Möbius's avatar
Jan Möbius committed
110 111
endif()

112 113 114 115 116 117 118 119
# display warnings if a problematic qt version is used

if ( APPLE )
  if ( ${Qt5Core_VERSION_STRING} STREQUAL "5.8.0" OR ${Qt5Core_VERSION_STRING} STREQUAL "5.7.1" )
    message(WARNING "You are using a Qt Version that might cause problems on OSX regarding GLErrors. We recommend you to use another version. If you fix any GLErrors on these versions feel free to contribute to OpenFlipper.")
  endif()
endif()

120
if ( WIN32 )
121 122
  OPTION(USE_UNSUPPORTED_QT "Build OpenFlipper with an unsupported version of Qt e.g. if you fixed the moc issue on 5.8.0 yourself" OFF)
  if ( ${Qt5Core_VERSION_STRING} STREQUAL "5.8.0" )
123 124 125 126 127 128 129 130
    if(USE_UNSUPPORTED_QT)
      message(WARNING "You appear to be using Qt 5.8.0 on a Windows System.\n On Windows, this version of Qt causes a problem regarding moc generation.\n You are using this Qt Version on Windows at your own risk and without support." )
    else()
      message(FATAL_ERROR "You appear to be using Qt 5.8.0 on a Windows System.\n On Windows, this version of Qt causes a problem regarding moc generation.\n Please use another version of Qt, or set the USE_UNSUPPORTED_QT flag")
    endif()
  endif()
endif()

Jan Möbius's avatar
Jan Möbius committed
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
set (OF_MAX_QT_VERSION "5.9.0")

if (${Qt5Core_VERSION_STRING} STRGREATER ${OF_MAX_QT_VERSION})
  message(WARNING "Detected QT Version higher than ${OF_MAX_QT_VERSION}!\n" "OpenFlipper has not been tested with this QT Version.")
endif()

# ========================================================================
# ========================================================================

# include our cmake files
include (ACGCommon)
include (MSVCMacros)

acg_get_version (OpenFlipper)

146
# ========================================================================
147
# Branding 
148 149
# ========================================================================

150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
# search all branding dirs in the packages and in toplevel
file (
  GLOB _local_branding_in
  RELATIVE "${CMAKE_SOURCE_DIR}"
           "${CMAKE_SOURCE_DIR}/branding"
           "${CMAKE_SOURCE_DIR}/Package-*/branding"
)

# Get number of found branding dirs
list(LENGTH _local_branding_in branding_dir_count)

# Check if we found at least one branding directory
if (  ${branding_dir_count} GREATER 0 )

  list(GET _local_branding_in 0 BRANDING_DIRECTORY_TMP)
  set( BRANDING_DIRECTORY "${CMAKE_SOURCE_DIR}/${BRANDING_DIRECTORY_TMP}" CACHE PATH "Path to the branding files")

  if ( ${branding_dir_count} GREATER 1 )
    message(WARNING "Found multiple branding dirs in : ${_local_branding_in}")
    message(WARNING "Using only first branding directory: ${BRANDING_DIRECTORY}")    
  endif()
  
elseif()
  set( BRANDING_DIRECTORY "branding" CACHE PATH "Path to the branding files")

endif()

if ( EXISTS ${BRANDING_DIRECTORY}/branding.cmake )
	include(${BRANDING_DIRECTORY}/branding.cmake)
179 180
endif()

181 182 183 184 185 186
if ( EXISTS ${BRANDING_DIRECTORY}/branding.h )
  set( BRANDING_HEADER true CACHE String "Indicate there is a branding.h inside the branding folder that should be included.")
endif()


#Initialize with defaults, if not already set via branding cmake file
187
set( OPENFLIPPER_PRODUCT_STRING "OpenFlipper" CACHE String "Product string used e.g. to determine the config file path. Should only contain alphanumeric characters (no spaces)." )
188 189
set( OPENFLIPPER_PRODUCT_NAME "OpenFlipper" CACHE String "Product name used in all visible places (e.g. about box)." )

190 191 192 193
if (BRANDING_HEADER)
add_definitions(-DBRANDING_HEADER)
endif ()

194 195 196 197 198 199
add_definitions(-DPRODUCT_STRING=${OPENFLIPPER_PRODUCT_STRING})
add_definitions(-DPRODUCT_NAME=${OPENFLIPPER_PRODUCT_NAME})

# ========================================================================
# ========================================================================

200 201 202 203 204
include (package)
include (ACGOutput)

acg_openmp ()

Jan's avatar
Jan committed
205
# check for OpenGL, GLEW and GLUT as our required dependencies
206 207 208 209 210
find_package (OpenGL)
if (NOT OPENGL_FOUND)
  message (FATAL_ERROR "OpengGL not found!")
endif ()

Jan's avatar
Jan committed
211 212 213 214 215
find_package (GLEW)
if (NOT GLEW_FOUND)
  message (FATAL_ERROR "GLEW not found!")
endif ()

216 217 218 219
find_package (GLUT)
if (NOT GLUT_FOUND)
  message (FATAL_ERROR "GLUT not found!")
endif ()
220 221 222 223

# using the internal openmesh delivered by the svn repo (default) or use some external installation
set (USE_INTERNAL_OPENMESH ON CACHE BOOL "Use and build internal version of OpenMesh found in libs_required")

224 225 226 227 228 229
# enable/disable openmesh warnings
set(NO_DECREMENT_DEPRECATED_WARNINGS OFF CACHE BOOL "Disables all deprecated warnings warning about decrement operations on normal circulators.")
if(NO_DECREMENT_DEPRECATED_WARNINGS)
  add_definitions( -DNO_DECREMENT_DEPRECATED_WARNINGS )
endif()

Jan Möbius's avatar
Jan Möbius committed
230 231
find_package(ACG)

Jan Möbius's avatar
Jan Möbius committed
232
# OpenMesh is a dependent project (in libs_required) so no finder is needed.
233 234 235 236
if (NOT USE_INTERNAL_OPENMESH)
  find_package (OpenMesh REQUIRED)
endif()

237 238 239 240
# ========================================================================
# Configure the executables path for tests
# ========================================================================
if (APPLE)
241
  SET( OPENFLIPPER_EXECUTABLE "${CMAKE_BINARY_DIR}/Build/${OPENFLIPPER_PRODUCT_STRING}.app/Contents/MacOS/${OPENFLIPPER_PRODUCT_STRING}" )
242
elseif( WIN32 )
243
  SET( OPENFLIPPER_EXECUTABLE "${CMAKE_BINARY_DIR}/Build/${OPENFLIPPER_PRODUCT_STRING}.exe" )
244
else()
245
  SET( OPENFLIPPER_EXECUTABLE "${CMAKE_BINARY_DIR}/Build/bin/${OPENFLIPPER_PRODUCT_STRING}" )
246
endif()
247 248 249
SET(OPENFLIPPER_TEST_FILES    ${CMAKE_BINARY_DIR}/tests/globalTestFiles )
SET(OPENFLIPPER_TEST_RESULTS  ${CMAKE_BINARY_DIR}/tests/testResults )
SET(OPENFLIPPER_TEST_BINARIES ${CMAKE_BINARY_DIR}/tests/testBinaries )
250

251 252
enable_testing()

253
# ========================================================================
Matthias Möller's avatar
Matthias Möller committed
254
# Build all additional libraries
255 256
# ========================================================================

257 258 259
add_subdirectory (OpenFlipper/libs_required/OpenMesh)
add_subdirectory (OpenFlipper/libs_required/ACG)

Matthias Möller's avatar
Matthias Möller committed
260
# search all libs in the libs directory
Jan Möbius's avatar
Jan Möbius committed
261 262
# in Packages, types, ...
# (required and optional libraries )
263 264 265
file (
  GLOB _local_libs_in
  RELATIVE "${CMAKE_SOURCE_DIR}"
266
           "${CMAKE_SOURCE_DIR}/libs_required/*/CMakeLists.txt"
Jan Möbius's avatar
Jan Möbius committed
267
           "${CMAKE_SOURCE_DIR}/libs/*/CMakeLists.txt"
Jan Möbius's avatar
Jan Möbius committed
268
           "${CMAKE_SOURCE_DIR}/Type-*/libs/*/CMakeLists.txt"
269
           "${CMAKE_SOURCE_DIR}/Package-*/libs/*/CMakeLists.txt"
270 271
)

Jan Möbius's avatar
Jan Möbius committed
272 273 274 275
set( REMAINING_LOCAL_LIBS "" )

# Special Comiso case:
# The library has to be configured first
276
foreach (_localLib ${_local_libs_in})
Jan Möbius's avatar
Jan Möbius committed
277 278
  if ( "${_localLib}" MATCHES .*CoMISo.* )
    get_filename_component (_local_lib_dir ${_localLib} PATH)
279 280 281 282 283 284 285
    if ( NOT DEFINED LIB_COMISO_BUILD )
      set( LIB_COMISO_BUILD true CACHE BOOL "Enable or disable build of COMISO Library" )
    endif()

    if ( LIB_COMISO_BUILD )
      add_subdirectory (${CMAKE_SOURCE_DIR}/${_local_lib_dir})
    endif()
Jan Möbius's avatar
Jan Möbius committed
286
  else()
287 288 289
    if ( NOT "${_localLib}" MATCHES OpenMesh OR USE_INTERNAL_OPENMESH)
      LIST(APPEND REMAINING_LOCAL_LIBS ${_localLib})
    endif()
Jan Möbius's avatar
Jan Möbius committed
290 291 292 293 294 295
  endif()
endforeach ()


# add all found libs to the build
foreach (_localLib ${REMAINING_LOCAL_LIBS})
296

297
  get_filename_component (_local_lib_dir ${_localLib} PATH)
298 299 300

  # If the library is in the required folder, we have to build it anyway, so
  # detect it here
Matthias Möller's avatar
Matthias Möller committed
301
  SET(REQUIRED FALSE)
302 303 304 305 306 307 308
  if ( _localLib MATCHES ".*libs_required.*" )
    SET(REQUIRED TRUE )
  endif()

  # Extract upper case library dir name for the human readable entries in the cmake config
  string(TOUPPER ${_local_lib_dir} _local_lib_dir_upper)
  string(REGEX REPLACE "LIBS[/\\]" "" _local_lib_dir_upper ${_local_lib_dir_upper} )
Matthias Möller's avatar
Matthias Möller committed
309

310 311 312 313 314 315
  # Only generate setting if the lib is not required (otherwise, we will always build it)
  if ( NOT DEFINED LIB_${_local_lib_dir_upper}_BUILD AND NOT REQUIRED)
      set( LIB_${_local_lib_dir_upper}_BUILD true CACHE BOOL "Enable or disable build of ${_local_lib_dir_upper} Library" )
  endif()

  # Build if this library is required or if it is enabled
Jan Möbius's avatar
Jan Möbius committed
316
  if ( LIB_${_local_lib_dir_upper}_BUILD OR REQUIRED)
317 318
    add_subdirectory (${CMAKE_SOURCE_DIR}/${_local_lib_dir})
  endif()
319 320
endforeach ()

321 322 323
# Group the external libraries in a folder libs_required
GROUP_PROJECT(OpenMeshTools libs_required)
GROUP_PROJECT(OpenMeshCore libs_required)
324
GROUP_PROJECT(ACG libs_required)
Jan Möbius's avatar
Jan Möbius committed
325 326

if( DOXYGEN_FOUND )
327
GROUP_PROJECT(doc-install Documentation)
Jan Möbius's avatar
Jan Möbius committed
328
endif()
329

Jan Möbius's avatar
Jan Möbius committed
330 331 332 333 334
# ========================================================================
# Core Library Components (Except the Core application)
# ========================================================================
add_subdirectory (OpenFlipper/PluginLib)

Jan Möbius's avatar
Jan Möbius committed
335 336 337 338 339 340 341 342 343 344 345 346 347 348
# ========================================================================
# Build DataTypes
# ========================================================================

# Search for all available data types
file (
  GLOB _data_types
  RELATIVE "${CMAKE_SOURCE_DIR}"
           "${CMAKE_SOURCE_DIR}/Type-*/ObjectTypes/*"
           "${CMAKE_SOURCE_DIR}/Package-*/Type-*/ObjectTypes/*"
)

# add all found libs to the build
foreach (DATATYPE_DIR ${_data_types})
349 350
  if (EXISTS ${CMAKE_SOURCE_DIR}/${DATATYPE_DIR}/CMakeLists.txt)
    add_subdirectory(${DATATYPE_DIR})
Jan Möbius's avatar
Jan Möbius committed
351

352 353 354 355
    # Extract Name of type from directory
    string(REGEX MATCH "[^/\\]*$" TYPENAME ${DATATYPE_DIR})
    string(TOUPPER ${TYPENAME} TYPENAME )
    list(APPEND TYPE_LIST ${TYPENAME})
Jan Möbius's avatar
Jan Möbius committed
356

357 358
    # Binary is only for the ui files generated there. Maybe a better solution can be found!
    set(${TYPENAME}_INCLUDE ${CMAKE_SOURCE_DIR}/${DATATYPE_DIR}/../../ ${CMAKE_BINARY_DIR}/${DATATYPE_DIR}/ )
359
 endif()
Jan Möbius's avatar
Jan Möbius committed
360 361 362 363 364 365 366 367 368 369 370 371 372 373
endforeach()

# info header for Available data types
acg_color_message ("\n${_escape}[40;37m************************************************************${_escape}[0m")
acg_color_message ("${_escape}[40;37m* Available OpenFlipper Types:                             *${_escape}[0m")
acg_color_message ("${_escape}[40;37m************************************************************${_escape}[0m")
acg_color_message (" ")

foreach (DATATYPE ${TYPE_LIST})
  acg_color_message ("${DATATYPE}")
endforeach()

acg_color_message (" ")

Jan Möbius's avatar
Jan Möbius committed
374 375 376
# ========================================================================
# Tests
# ========================================================================
Jan Möbius's avatar
Jan Möbius committed
377
add_subdirectory (OpenFlipper/tests)
Jan Möbius's avatar
Jan Möbius committed
378 379 380 381 382 383 384 385 386

# ========================================================================
# Documentation generators
# ========================================================================

# Create dirs to make doxygen happy
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Doc )
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Help )

387
# Add the documentation targets
Jan Möbius's avatar
Jan Möbius committed
388 389 390 391 392
add_subdirectory (OpenFlipper/Documentation/DeveloperTarget)
add_subdirectory (OpenFlipper/Documentation/DeveloperQtHelpTarget)
add_subdirectory (OpenFlipper/Documentation/UserTarget)
add_subdirectory (OpenFlipper/Documentation/UserQtHelpTarget)

393 394 395 396
# ========================================================================
# PolyLine extension special case
# ========================================================================

Isaak Lim's avatar
Isaak Lim committed
397 398 399
find_package (MeshIntegration)

if (MESH_INTEGRATION_FOUND)
400 401 402
  add_definitions( -DEXTENDED_POLY_LINE )
endif()

403 404 405 406 407 408 409
# ========================================================================
# License Manager
# ========================================================================
if ( NOT DEFINED OPENFLIPPER_ENABLE_LICENSE_MANAGER )
  set( OPENFLIPPER_ENABLE_LICENSE_MANAGER true CACHE BOOL "Enable or disable license management in all plugins" )
endif()

410 411 412 413
if ( NOT DEFINED OPENFLIPPER_ENABLE_LICENSE_KEY_GENERATOR )
  set( OPENFLIPPER_ENABLE_LICENSE_KEY_GENERATOR true CACHE BOOL "Enable or disable building the license key generators in all plugins" )
endif()

414 415 416 417 418 419 420 421 422 423 424 425 426
# ========================================================================
# Apple Mac Store Flags
# ========================================================================
if ( APPLE AND NOT DEFINED OPENFLIPPER_BUILD_APP_STORE_COMPLIANT )
  set( OPENFLIPPER_BUILD_APP_STORE_COMPLIANT true CACHE BOOL "Enable app store compliant build (No internal update, different paths,...)" )
endif()

# ========================================================================
# Plugins
# ========================================================================

# start with an empty plugin list
acg_set (OPENFLIPPER_PLUGINS "")
427 428
acg_set (OPENFLIPPER_STATIC_PLUGINS "")
acg_set (OPENFLIPPER_STATIC_PLUGIN_FILES "")
429
acg_set (OPENFLIPPER_STATIC_PLUGIN_NAMES "")
430

431 432 433 434 435 436
foreach (package ${PREFOUND_PACKAGES})
find_package(${package})
endforeach ()

SET (LOADED_PACKAGES ${PREFOUND_PACKAGES})
LIST (APPEND LOADED_PACKAGES "Doxygen")
437 438
# add plugins
of_add_plugins ()
439 440
list (REMOVE_DUPLICATES LOADED_PACKAGES)
set (PREFOUND_PACKAGES "${LOADED_PACKAGES}" CACHE INTERNAL "List of packages that will get found at global scope so they don't get found over and over inside the individual packages.")
441

Jan Möbius's avatar
Jan Möbius committed
442 443 444
# ========================================================================
# Build core as we now know all dependencies
# ========================================================================
445

Jan Möbius's avatar
Jan Möbius committed
446
add_subdirectory (OpenFlipper/CoreApp)
447
GROUP_PROJECT(${OPENFLIPPER_PRODUCT_STRING} ${OPENFLIPPER_PRODUCT_STRING})
448

449 450 451 452 453 454 455

# ========================================================================
# Bundle generation
# ========================================================================

if (WIN32 )

Matthias Möller's avatar
Matthias Möller committed
456
  # Plugins collected a list of required libdirs for getting
457 458
  # their DLLS on windows:
  get_property( WINDOWS_COPY_LIBDIRS GLOBAL PROPERTY WINDOWS_LIBRARY_DIR_LIST )
Matthias Möller's avatar
Matthias Möller committed
459

460 461 462 463
  if ( WINDOWS_COPY_LIBDIRS )
    list(REMOVE_DUPLICATES WINDOWS_COPY_LIBDIRS)
  endif()

464 465 466 467
  
  # workaround for VS2018 where the OpenMP vcomp90.dll seems to be missing from the path
  if ( CMAKE_GENERATOR MATCHES "^Visual Studio 9.*" )
    INCLUDE(InstallRequiredSystemLibraries)
468
    set ( OMP_PATH "${MSVC90_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.OPENMP/;${MSVC90_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugOpenMP/" )
469 470
  endif()

471 472 473 474 475 476 477 478
  # prepare bundle generation cmake file and add a build target for it
  configure_file ("${CMAKE_SOURCE_DIR}/OpenFlipper/cmake/fixbundle.cmake.win.in"
     "${CMAKE_BINARY_DIR}/fixbundle.win.cmake" @ONLY IMMEDIATE)

  add_custom_target (fixbundle ALL
    COMMAND ${CMAKE_COMMAND} -P "${CMAKE_BINARY_DIR}/fixbundle.win.cmake" )

  # let bundle generation depend on all targets
479
  add_dependencies (fixbundle ${OPENFLIPPER_PRODUCT_STRING} OpenFlipperPluginLib ${OPENFLIPPER_PLUGINS})
Matthias Möller's avatar
Matthias Möller committed
480

481 482
endif(WIN32)

483
# ========================================================================
484
# Custom command to create a bundle and a package on mac
485
# ========================================================================
486

487 488 489 490 491 492 493
if ( APPLE )

   # Configuration option about fixbundle
   if ( APPLE AND NOT DEFINED OPENFLIPPER_CALL_FIX_BUNDLE )
     set( OPENFLIPPER_CALL_FIX_BUNDLE false CACHE BOOL "After building OpenFlipper, a bundle creation step is executed (which copies all dependencies into the bundle) to create a valid MacOs Bundle. This step is only necessary if creating a package." )
   endif()

494 495
  # prepare bundle generation cmake file and add a build target for it
  configure_file ("${CMAKE_SOURCE_DIR}/OpenFlipper/cmake/fixbundle.cmake.in"
Matthias Möller's avatar
Matthias Möller committed
496
     "${CMAKE_BINARY_DIR}/fixbundle.cmake" @ONLY IMMEDIATE)
497 498

  # Fixbundle is only necessary, when we wan't a shippable package.
Matthias Möller's avatar
Matthias Möller committed
499
  # Otherwise the original rpaths are used
500
  if ( OPENFLIPPER_CALL_FIX_BUNDLE )
Matthias Möller's avatar
Matthias Möller committed
501 502
    # Call fixbundle every time
    add_custom_target (fixbundle ALL
503 504 505 506
      COMMAND ${CMAKE_COMMAND} -P "${CMAKE_BINARY_DIR}/fixbundle.cmake"
    )
  else()
    # Call fixbundle only as a dependency
Matthias Möller's avatar
Matthias Möller committed
507
    add_custom_target (fixbundle
508 509 510 511
      COMMAND ${CMAKE_COMMAND} -P "${CMAKE_BINARY_DIR}/fixbundle.cmake"
    )
  endif()

512
  # let bundle generation depend on all targets
Jan Möbius's avatar
Jan Möbius committed
513
  add_dependencies (fixbundle ${OPENFLIPPER_PRODUCT_STRING} OpenFlipperPluginLib ${OPENFLIPPER_PLUGINS})
514 515

  # install bundle
516
  install (DIRECTORY ${CMAKE_BINARY_DIR}/Build/${OPENFLIPPER_PRODUCT_STRING}.app DESTINATION .
517
           USE_SOURCE_PERMISSIONS)
518

519
  # Extra target for building an OpenFlipper package on mac
520 521 522 523 524 525 526 527 528 529
  # Call fixbundle first
  # afterwards we call make package as an external command, as we can't
  # add a dependency on build in targets of cake
  add_custom_target (OpenFlipper_package
    DEPENDS fixbundle
    COMMAND make package
  )

endif()

530 531 532 533 534 535 536 537
# ========================================================================
# Output log information
# ========================================================================

# display results
acg_print_configure_header (OPENFLIPPER "OpenFlipper")
of_print_plugin_stats ()
acg_print_configure_footer ()