...
 
Commits (4)
include (ACGCommon)
include_directories (
..
${OPENMESH_INCLUDE_DIRS}
${ACG_INCLUDE_DIR}
${CMAKE_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${OPENGL_INCLUDE_DIR}
${GLEW_INCLUDE_DIR}
${GLUT_INCLUDE_DIR}
)
# Linking for apple is special here as the linker pulls in the dependencies, we have to set them like in PluginLib!
if( APPLE )
# search all ObjectTypes in the ObjectType directory for additional build information
file (
GLOB _plugin_buildinfos
RELATIVE "${CMAKE_SOURCE_DIR}"
"${CMAKE_SOURCE_DIR}/ObjectTypes/*/CMakeLists.txt"
"${CMAKE_SOURCE_DIR}/Package*/ObjectTypes/*/CMakeLists.txt"
)
# include all cmake files fouund for objecttypes here
foreach ( _buildInfo ${_plugin_buildinfos})
include ("${CMAKE_SOURCE_DIR}/${_buildInfo}")
endforeach ()
link_directories (
${GLEW_LIBRARY_DIR}
${ADDITIONAL_PLUGINLIB_LINK_DIRS}
)
else (APPLE)
link_directories (
${GLEW_LIBRARY_DIR}
)
endif(APPLE)
if (WIN32)
SET(WIN_EXTRA_DIRS "../StackWalker" )
else(WIN32)
SET(WIN_EXTRA_DIRS "")
endif(WIN32)
# source code directories
set (directories
..
../Core
../Logging
../Scripting
../Scripting/scriptPrototypes
../Scripting/scriptWrappers
../widgets/aboutWidget
../widgets/addEmptyWidget
../widgets/loggerWidget
../widgets/coreWidget
../widgets/helpWidget
../widgets/processManagerWidget
../widgets/loadWidget
../widgets/optionsWidget
../widgets/PluginDialog
../widgets/viewModeWidget
../widgets/videoCaptureDialog
../widgets/snapshotDialog
../widgets/stereoSettingsWidget
../widgets/postProcessorWidget
../widgets/rendererWidget
${WIN_EXTRA_DIRS}
)
# collect all header,source and ui files
acg_append_files (headers "*.hh" ${directories})
acg_append_files (sources "*.cc" ${directories})
acg_append_files (ui "*.ui" ${directories})
# remove template cc files from source file list
acg_drop_templates (sources)
# genereate uic and moc targets
if (QT5_FOUND)
acg_qt5_autouic (uic_targets ${ui})
acg_qt5_automoc (moc_targets ${headers})
else ()
acg_qt4_autouic (uic_targets ${ui})
acg_qt4_automoc (moc_targets ${headers})
endif()
set(RC_SRC "")
if ( EXISTS ${BRANDING_DIRECTORY}/branding.qrc )
if ( QT5_FOUND )
QT5_ADD_RESOURCES(BRANDING_RC_SRC "${BRANDING_DIRECTORY}/branding.qrc")
list(APPEND RC_SRC ${BRANDING_RC_SRC})
endif()
endif()
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "#include <QtPlugin>\n\n")
foreach (plugin ${OPENFLIPPER_STATIC_PLUGIN_NAMES})
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "Q_IMPORT_PLUGIN(${plugin});\n")
endforeach()
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "\nnamespace cmake {\n")
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "\nconst char *static_plugins = \"\"\n")
foreach (plugin ${OPENFLIPPER_STATIC_PLUGIN_FILES})
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "\"${plugin}\\n\"\n")
endforeach()
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" ";\n} /* namespace cmake */\n")
list(APPEND RC_SRC "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc")
RECURSE_GROUPS( ${CMAKE_CURRENT_SOURCE_DIR}/../../ )
if (WIN32)
# add app icon rc file to windows build
acg_add_executable (${OPENFLIPPER_PRODUCT_STRING} WIN32 ${CMAKE_CURRENT_SOURCE_DIR}/CoreApp.rc ${uic_targets} ${sources} ${headers} ${moc_targets} ${RC_SRC})
# link to qtmain library to get WinMain function for a non terminal app
target_link_libraries (${OPENFLIPPER_PRODUCT_STRING} ${QT_QTMAIN_LIBRARY})
elseif (APPLE)
# generate bundle on mac
acg_add_executable (${OPENFLIPPER_PRODUCT_STRING} MACOSX_BUNDLE ${uic_targets} ${sources} ${headers} ${moc_targets} ${RC_SRC})
else ()
acg_add_executable (${OPENFLIPPER_PRODUCT_STRING} ${uic_targets} ${sources} ${headers} ${moc_targets} ${RC_SRC})
endif ()
# Mark this build part as building OpenFlippers Core
add_definitions(-DOPENFLIPPERCORE )
# Build app store compliant
if ( OPENFLIPPER_BUILD_APP_STORE_COMPLIANT )
add_definitions( -DOPENFLIPPER_BUILD_APP_STORE_COMPLIANT )
endif()
if (WIN32)
add_definitions( -DACGDLL
-DUSEACG
-DPLUGINLIBDLL
-DUSEPLUGINLIBDLL
)
endif ()
set ( CATCH_SIGSEGV True CACHE BOOL "Whether SIGSEGV should be catched. Set this to false in order to get a core dump with usable call stack. Set to true in order to get a stack trace at the time of crash." )
if (NOT CATCH_SIGSEGV)
add_definitions( -DNO_CATCH_SIGSEGV )
endif()
# ====================================================================================
# Get list of ll plugin dependencies and handle special ones
# where we need to link the library directly into the core to prevent
# linker problems
# ====================================================================================
# Get the property containing the list of all dependencies of the plugins
# List is created when the plugins are added
get_property( global_dependency_list GLOBAL PROPERTY GLOBAL_PLUGIN_DEPENDENCIES_LIST)
set(COREAPP_ADDITIONAL_LINK_LIBRARIES "")
# Get additional libraries from plugins that should be linked into the core
get_property( global_core_app_libraries GLOBAL PROPERTY GLOBAL_CORE_APP_LIBRARIES)
foreach (_val ${global_core_app_libraries})
list(APPEND COREAPP_ADDITIONAL_LINK_LIBRARIES ${_val})
endforeach ()
# Special Handling for mpi
list( FIND global_dependency_list "MPI" found)
if ( NOT found EQUAL -1 )
find_package(MPI)
if ( MPI_FOUND )
list(APPEND COREAPP_ADDITIONAL_LINK_LIBRARIES ${MPI_LIBRARIES})
endif()
endif()
# Special Handling for openni
list( FIND global_dependency_list "OPENNI" found)
if ( NOT found EQUAL -1 )
find_package(OPENNI)
if ( OPENNI_FOUND )
list(APPEND COREAPP_ADDITIONAL_LINK_LIBRARIES ${OPENNI_LIBRARY})
endif()
endif()
# use Qwt6 for QT5
if (QT5_FOUND)
find_package(Qwt6)
if (QWT6_FOUND)
add_definitions(-DWITH_QWT)
set(INCLUDE_DIRS ${INCLUDE_DIRS} ${QWT6_INCLUDE_DIRS} )
set(COREAPP_ADDITIONAL_LINK_LIBRARIES ${COREAPP_ADDITIONAL_LINK_LIBRARIES} ${QWT6_LIBRARIES})
endif()
endif()
# ====================================================================================
# Linker Dependencies for Core app
# ====================================================================================
target_link_libraries (${OPENFLIPPER_PRODUCT_STRING}
ACG
OpenFlipperPluginLib
${QT_LIBRARIES}
${OPENGL_LIBRARIES}
${GLEW_LIBRARY}
${GLUT_LIBRARIES}
${COREAPP_ADDITIONAL_LINK_LIBRARIES}
${OPENFLIPPER_STATIC_PLUGINS}
)
if (APPLE)
if ( EXISTS ${BRANDING_DIRECTORY} )
# Take bundle icon from branding dir
IF ( NOT APPLE_BUNDLE_ICON )
# option to set the used Icon for OpenFlipper
set ( APPLE_BUNDLE_ICON "${BRANDING_DIRECTORY}\\mac\\OpenFlipper_Icon.icns" CACHE FILEPATH "Path to the Bundle Icon" )
ENDIF(NOT APPLE_BUNDLE_ICON )
# Take plist from branding
IF ( NOT APPLE_INFO_PLIST )
if ( EXISTS ${BRANDING_DIRECTORY}/mac/Info.plist )
# option to configure the custom Info.plist
set ( APPLE_INFO_PLIST "${BRANDING_DIRECTORY}\\mac\\Info.plist" CACHE FILEPATH "Path to the Info.plist file for Bundle" )
else ( EXISTS ${BRANDING_DIRECTORY}/mac/Info.plist )
# option to configure a custum Info.plist but configure with default one
set ( APPLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/../installer/mac/Info.plist" CACHE FILEPATH "Path to the Info.plist file for Bundle" )
endif( EXISTS ${BRANDING_DIRECTORY}/mac/Info.plist )
ENDIF(NOT APPLE_INFO_PLIST )
else()
IF ( NOT APPLE_BUNDLE_ICON )
# option to set the used Icon for OpenFlipper
if ( EXISTS ${BRANDING_DIRECTORY}/Icons/OpenFlipper_Icon.icns )
set ( APPLE_BUNDLE_ICON " ${BRANDING_DIRECTORY}/Icons/OpenFlipper_Icon.icns" CACHE FILEPATH "Path to the Bundle Icon" )
else()
set ( APPLE_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/../Icons/OpenFlipper_Icon.icns" CACHE FILEPATH "Path to the Bundle Icon" )
endif()
ENDIF(NOT APPLE_BUNDLE_ICON )
IF ( NOT APPLE_INFO_PLIST )
# option to configure a custum Info.plist but configure with default one
set ( APPLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/../installer/mac/Info.plist" CACHE FILEPATH "Path to the Info.plist file for Bundle" )
ENDIF(NOT APPLE_INFO_PLIST )
endif()
add_custom_command(TARGET ${OPENFLIPPER_PRODUCT_STRING} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${APPLE_BUNDLE_ICON}" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/OpenFlipper.icns"
)
# create bundle in "Build" directory and set icon
# no install needed here, because the whole bundle will be installed in the
# toplevel CMakeLists.txt
set_target_properties (
${OPENFLIPPER_PRODUCT_STRING} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Build/"
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Build/"
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Build/"
MACOSX_BUNDLE_INFO_STRING "ACG OpenFlipper"
MACOSX_BUNDLE_ICON_FILE "OpenFlipper.icns"
MACOSX_BUNDLE_INFO_PLIST ${APPLE_INFO_PLIST}
)
endif ()
# Translations
set (trans_files ${sources})
list (APPEND trans_files ${ui})
list (APPEND trans_files ${headers})
acg_add_translations (${OPENFLIPPER_PRODUCT_STRING} "de_DE" "${trans_files}")
# copy all needed files to "Build" directory to allow a direct execution from it
# the copy_after_build macro (common.cmake) copies the whole directory without svn files
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Shaders" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Shaders")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Textures" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Textures")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Scripts" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Scripts")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Licenses" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Licenses")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Fonts" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Fonts")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Documentation/QtHelpResources" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Help")
if ( EXISTS ${BRANDING_DIRECTORY} )
if ( WIN32 )
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${BRANDING_DIRECTORY}/win/Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
elseif( APPLE )
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${BRANDING_DIRECTORY}/mac/Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
elseif()
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${BRANDING_DIRECTORY}/linux/Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
endif()
endif()
if ( APPLE )
# we need qt_menu.nib in our resources dir so try to get it
if ( EXISTS /opt/local/lib/Resources/qt_menu.nib )
acg_copy_after_build( ${OPENFLIPPER_PRODUCT_STRING} "/opt/local/lib/Resources/qt_menu.nib" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/qt_menu.nib")
elseif ( EXISTS /usr/bin/qt_menu.nib )
acg_copy_after_build( ${OPENFLIPPER_PRODUCT_STRING} "/usr/bin/qt_menu.nib" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/qt_menu.nib")
elseif ( EXISTS "/opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/Resources/qt_menu.nib" )
acg_copy_after_build( ${OPENFLIPPER_PRODUCT_STRING} "/opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/Resources/qt_menu.nib" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/qt_menu.nib")
endif ()
# Copy qt plugins into bundle but omit debug libraries when in release mode and vice versa
acg_unset (_files)
acg_get_files_in_dir (_files ${QT_PLUGINS_DIR})
foreach (_file ${_files})
if ( CMAKE_BUILD_TYPE MATCHES "Release" )
# In release mode, we don't want debug binaries in the bundle as it could cause crashes due to wrong linking or mixing of debug and release
if ( NOT _file MATCHES ".*debug.*" )
add_custom_command(TARGET ${OPENFLIPPER_PRODUCT_STRING} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QT_PLUGINS_DIR}/${_file}" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/QtPlugins/${_file}"
)
endif()
else ()
# In debug mode, we don't want release binaries in the bundle as it could cause crashes due to wrong linking or mixing of debug and release
if ( _file MATCHES ".*debug.*" )
add_custom_command(TARGET ${OPENFLIPPER_PRODUCT_STRING} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QT_PLUGINS_DIR}/${_file}" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/QtPlugins/${_file}"
)
endif()
endif()
endforeach ()
elseif(WIN32)
#copy qt plugins to Build directory and configure qt.conf file
file (GLOB qtplugin_dirs RELATIVE "${QT_PLUGINS_DIR}" "${QT_PLUGINS_DIR}/*" )
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/Build/QtPlugins" )
foreach (qtplugin ${qtplugin_dirs})
file(COPY "${QT_PLUGINS_DIR}/${qtplugin}" DESTINATION "${CMAKE_BINARY_DIR}/Build/QtPlugins/")
endforeach ()
endif( APPLE )
if (NOT APPLE)
# install all needed files
# the install_dir macro (common.cmake) installs the whole directory without svn files
# no install for mac needed here, because the whole bundle will be installed in the
# toplevel CMakeLists.txt
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Shaders" "${ACG_PROJECT_DATADIR}/Shaders")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Textures" "${ACG_PROJECT_DATADIR}/Textures")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Scripts" "${ACG_PROJECT_DATADIR}/Scripts")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Icons" "${ACG_PROJECT_DATADIR}/Icons")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Licenses" "${ACG_PROJECT_DATADIR}/Licenses")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Fonts" "${ACG_PROJECT_DATADIR}/Fonts")
#acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Doc" "${ACG_PROJECT_DATADIR}/Doc") Disabled as we don't want html docs inside of the binaries
if ( WIN32 )
# create qt config file and install it
file(WRITE "${CMAKE_BINARY_DIR}/Build/qt.conf" "[Paths]\nPlugins = QtPlugins")
install( FILES "${CMAKE_BINARY_DIR}/Build/qt.conf" DESTINATION "${ACG_PROJECT_DATADIR}/" )
acg_install_dir ("${CMAKE_BINARY_DIR}/Build/QtPlugins/" "${ACG_PROJECT_DATADIR}/QtPlugins")
endif(WIN32)
if ( EXISTS ${BRANDING_DIRECTORY}/win )
if ( WIN32 )
acg_install_dir ( "${BRANDING_DIRECTORY}/win" "${ACG_PROJECT_DATADIR}/Icons")
endif()
endif()
endif ()
if ( EXISTS ${BRANDING_DIRECTORY}/Icons )
# Overwrite generic Icons with branded ones.
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${BRANDING_DIRECTORY}/Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
acg_install_dir ("${BRANDING_DIRECTORY}/Icons" "${ACG_PROJECT_DATADIR}/Icons")
endif()
include (ACGCommon)
include_directories (
..
${OPENMESH_INCLUDE_DIRS}
${ACG_INCLUDE_DIR}
${CMAKE_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${OPENGL_INCLUDE_DIR}
${GLEW_INCLUDE_DIR}
${GLUT_INCLUDE_DIR}
)
# Linking for apple is special here as the linker pulls in the dependencies, we have to set them like in PluginLib!
if( APPLE )
# search all ObjectTypes in the ObjectType directory for additional build information
file (
GLOB _plugin_buildinfos
RELATIVE "${CMAKE_SOURCE_DIR}"
"${CMAKE_SOURCE_DIR}/ObjectTypes/*/CMakeLists.txt"
"${CMAKE_SOURCE_DIR}/Package*/ObjectTypes/*/CMakeLists.txt"
)
# include all cmake files fouund for objecttypes here
foreach ( _buildInfo ${_plugin_buildinfos})
include ("${CMAKE_SOURCE_DIR}/${_buildInfo}")
endforeach ()
link_directories (
${GLEW_LIBRARY_DIR}
${ADDITIONAL_PLUGINLIB_LINK_DIRS}
)
else (APPLE)
link_directories (
${GLEW_LIBRARY_DIR}
)
endif(APPLE)
if (WIN32)
SET(WIN_EXTRA_DIRS "../StackWalker" )
else(WIN32)
SET(WIN_EXTRA_DIRS "")
endif(WIN32)
# source code directories
set (directories
..
../Core
../Logging
../Scripting
../Scripting/scriptPrototypes
../Scripting/scriptWrappers
../widgets/aboutWidget
../widgets/addEmptyWidget
../widgets/loggerWidget
../widgets/coreWidget
../widgets/helpWidget
../widgets/processManagerWidget
../widgets/loadWidget
../widgets/optionsWidget
../widgets/PluginDialog
../widgets/viewModeWidget
../widgets/videoCaptureDialog
../widgets/snapshotDialog
../widgets/stereoSettingsWidget
../widgets/postProcessorWidget
../widgets/rendererWidget
${WIN_EXTRA_DIRS}
)
# collect all header,source and ui files
acg_append_files (headers "*.hh" ${directories})
acg_append_files (sources "*.cc" ${directories})
acg_append_files (ui "*.ui" ${directories})
# remove template cc files from source file list
acg_drop_templates (sources)
# genereate uic and moc targets
if (QT5_FOUND)
acg_qt5_autouic (uic_targets ${ui})
acg_qt5_automoc (moc_targets ${headers})
else ()
acg_qt4_autouic (uic_targets ${ui})
acg_qt4_automoc (moc_targets ${headers})
endif()
set(RC_SRC "")
if ( EXISTS ${BRANDING_DIRECTORY}/branding.qrc )
if ( QT5_FOUND )
QT5_ADD_RESOURCES(BRANDING_RC_SRC "${BRANDING_DIRECTORY}/branding.qrc")
list(APPEND RC_SRC ${BRANDING_RC_SRC})
endif()
endif()
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "#include <QtPlugin>\n\n")
foreach (plugin ${OPENFLIPPER_STATIC_PLUGIN_NAMES})
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "Q_IMPORT_PLUGIN(${plugin});\n")
endforeach()
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "\nnamespace cmake {\n")
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "\nconst char *static_plugins = \"\"\n")
foreach (plugin ${OPENFLIPPER_STATIC_PLUGIN_FILES})
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" "\"${plugin}\\n\"\n")
endforeach()
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc" ";\n} /* namespace cmake */\n")
list(APPEND RC_SRC "${CMAKE_CURRENT_BINARY_DIR}/static_plugins.cc")
RECURSE_GROUPS( ${CMAKE_CURRENT_SOURCE_DIR}/../../ )
if (WIN32)
# add app icon rc file to windows build
acg_add_executable (${OPENFLIPPER_PRODUCT_STRING} WIN32 ${CMAKE_CURRENT_SOURCE_DIR}/CoreApp.rc ${uic_targets} ${sources} ${headers} ${moc_targets} ${RC_SRC})
# link to qtmain library to get WinMain function for a non terminal app
target_link_libraries (${OPENFLIPPER_PRODUCT_STRING} ${QT_QTMAIN_LIBRARY})
elseif (APPLE)
# generate bundle on mac
acg_add_executable (${OPENFLIPPER_PRODUCT_STRING} MACOSX_BUNDLE ${uic_targets} ${sources} ${headers} ${moc_targets} ${RC_SRC})
else ()
acg_add_executable (${OPENFLIPPER_PRODUCT_STRING} ${uic_targets} ${sources} ${headers} ${moc_targets} ${RC_SRC})
endif ()
# Mark this build part as building OpenFlippers Core
add_definitions(-DOPENFLIPPERCORE )
# Build app store compliant
if ( OPENFLIPPER_BUILD_APP_STORE_COMPLIANT )
add_definitions( -DOPENFLIPPER_BUILD_APP_STORE_COMPLIANT )
endif()
if (WIN32)
add_definitions( -DACGDLL
-DUSEACG
-DPLUGINLIBDLL
-DUSEPLUGINLIBDLL
)
endif ()
set ( CATCH_SIGSEGV True CACHE BOOL "Whether SIGSEGV should be catched. Set this to false in order to get a core dump with usable call stack. Set to true in order to get a stack trace at the time of crash." )
if (NOT CATCH_SIGSEGV)
add_definitions( -DNO_CATCH_SIGSEGV )
endif()
# ====================================================================================
# Get list of ll plugin dependencies and handle special ones
# where we need to link the library directly into the core to prevent
# linker problems
# ====================================================================================
# Get the property containing the list of all dependencies of the plugins
# List is created when the plugins are added
get_property( global_dependency_list GLOBAL PROPERTY GLOBAL_PLUGIN_DEPENDENCIES_LIST)
set(COREAPP_ADDITIONAL_LINK_LIBRARIES "")
# Get additional libraries from plugins that should be linked into the core
get_property( global_core_app_libraries GLOBAL PROPERTY GLOBAL_CORE_APP_LIBRARIES)
foreach (_val ${global_core_app_libraries})
list(APPEND COREAPP_ADDITIONAL_LINK_LIBRARIES ${_val})
endforeach ()
# Special Handling for mpi
list( FIND global_dependency_list "MPI" found)
if ( NOT found EQUAL -1 )
find_package(MPI)
if ( MPI_FOUND )
list(APPEND COREAPP_ADDITIONAL_LINK_LIBRARIES ${MPI_LIBRARIES})
endif()
endif()
# Special Handling for openni
list( FIND global_dependency_list "OPENNI" found)
if ( NOT found EQUAL -1 )
find_package(OPENNI)
if ( OPENNI_FOUND )
list(APPEND COREAPP_ADDITIONAL_LINK_LIBRARIES ${OPENNI_LIBRARY})
endif()
endif()
# use Qwt6 for QT5
if (QT5_FOUND)
find_package(Qwt6)
if (QWT6_FOUND)
add_definitions(-DWITH_QWT)
set(INCLUDE_DIRS ${INCLUDE_DIRS} ${QWT6_INCLUDE_DIRS} )
set(COREAPP_ADDITIONAL_LINK_LIBRARIES ${COREAPP_ADDITIONAL_LINK_LIBRARIES} ${QWT6_LIBRARIES})
endif()
endif()
# ====================================================================================
# Linker Dependencies for Core app
# ====================================================================================
target_link_libraries (${OPENFLIPPER_PRODUCT_STRING}
ACG
OpenFlipperPluginLib
${QT_LIBRARIES}
${OPENGL_LIBRARIES}
${GLEW_LIBRARY}
${GLUT_LIBRARIES}
${COREAPP_ADDITIONAL_LINK_LIBRARIES}
${OPENFLIPPER_STATIC_PLUGINS}
)
if (APPLE)
if ( EXISTS ${BRANDING_DIRECTORY} )
# Take bundle icon from branding dir
IF ( NOT APPLE_BUNDLE_ICON )
# Check if the branding directory contains an Icon
if ( EXISTS ${BRANDING_DIRECTORY}/mac/OpenFlipper_Icon.icns )
# Use branding Icon
set ( APPLE_BUNDLE_ICON ${BRANDING_DIRECTORY}/mac/OpenFlipper_Icon.icns CACHE FILEPATH "Path to the Bundle Icon" )
else()
# Use default icon
set ( APPLE_BUNDLE_ICON ${BRANDING_DIRECTORY}/../Icons/OpenFlipper_Icon.icns CACHE FILEPATH "Path to the Bundle Icon" )
message (WARNING "Branding directory found but no branding icon called OpenFlipper_Icon.icns. Using default icon! You can set your icon via APPLE_BUNDLE_ICON")
endif()
ENDIF(NOT APPLE_BUNDLE_ICON )
# Take plist from branding
IF ( NOT APPLE_INFO_PLIST )
if ( EXISTS ${BRANDING_DIRECTORY}/mac/Info.plist )
# Take custom plist from branding directory
set ( APPLE_INFO_PLIST ${BRANDING_DIRECTORY}/mac/Info.plist CACHE FILEPATH "Path to the Info.plist file for Bundle" )
else ( EXISTS ${BRANDING_DIRECTORY}/mac/Info.plist )
# Take default plist from OpenFlipper
set ( APPLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/../installer/mac/Info.plist CACHE FILEPATH "Path to the Info.plist file for Bundle" )
message (WARNING "Branding directory found but no branding plist file found. Using default. You can set your own plist via APPLE_INFO_PLIST")
endif( EXISTS ${BRANDING_DIRECTORY}/mac/Info.plist )
ENDIF(NOT APPLE_INFO_PLIST )
else()
IF ( NOT APPLE_BUNDLE_ICON )
# option to set the used Icon for OpenFlipper
if ( EXISTS ${BRANDING_DIRECTORY}/Icons/OpenFlipper_Icon.icns )
set ( APPLE_BUNDLE_ICON " ${BRANDING_DIRECTORY}/Icons/OpenFlipper_Icon.icns" CACHE FILEPATH "Path to the Bundle Icon" )
else()
set ( APPLE_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/../Icons/OpenFlipper_Icon.icns" CACHE FILEPATH "Path to the Bundle Icon" )
endif()
ENDIF(NOT APPLE_BUNDLE_ICON )
IF ( NOT APPLE_INFO_PLIST )
# option to configure a custum Info.plist but configure with default one
set ( APPLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/../installer/mac/Info.plist" CACHE FILEPATH "Path to the Info.plist file for Bundle" )
ENDIF(NOT APPLE_INFO_PLIST )
endif()
add_custom_command(TARGET ${OPENFLIPPER_PRODUCT_STRING} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${APPLE_BUNDLE_ICON}" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/OpenFlipper.icns"
)
# create bundle in "Build" directory and set icon
# no install needed here, because the whole bundle will be installed in the
# toplevel CMakeLists.txt
set_target_properties (
${OPENFLIPPER_PRODUCT_STRING} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Build/"
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Build/"
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Build/"
MACOSX_BUNDLE_INFO_STRING "ACG OpenFlipper"
MACOSX_BUNDLE_ICON_FILE "OpenFlipper.icns"
MACOSX_BUNDLE_INFO_PLIST ${APPLE_INFO_PLIST}
)
endif ()
# Translations
set (trans_files ${sources})
list (APPEND trans_files ${ui})
list (APPEND trans_files ${headers})
acg_add_translations (${OPENFLIPPER_PRODUCT_STRING} "de_DE" "${trans_files}")
# copy all needed files to "Build" directory to allow a direct execution from it
# the copy_after_build macro (common.cmake) copies the whole directory without svn files
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Shaders" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Shaders")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Textures" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Textures")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Scripts" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Scripts")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Licenses" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Licenses")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Fonts" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Fonts")
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${CMAKE_CURRENT_SOURCE_DIR}/../Documentation/QtHelpResources" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Help")
if ( EXISTS ${BRANDING_DIRECTORY} )
if ( WIN32 )
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${BRANDING_DIRECTORY}/win/Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
elseif( APPLE )
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${BRANDING_DIRECTORY}/mac/Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
elseif()
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${BRANDING_DIRECTORY}/linux/Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
endif()
endif()
if ( APPLE )
# we need qt_menu.nib in our resources dir so try to get it
if ( EXISTS /opt/local/lib/Resources/qt_menu.nib )
acg_copy_after_build( ${OPENFLIPPER_PRODUCT_STRING} "/opt/local/lib/Resources/qt_menu.nib" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/qt_menu.nib")
elseif ( EXISTS /usr/bin/qt_menu.nib )
acg_copy_after_build( ${OPENFLIPPER_PRODUCT_STRING} "/usr/bin/qt_menu.nib" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/qt_menu.nib")
elseif ( EXISTS "/opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/Resources/qt_menu.nib" )
acg_copy_after_build( ${OPENFLIPPER_PRODUCT_STRING} "/opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/Resources/qt_menu.nib" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/qt_menu.nib")
endif ()
# Copy qt plugins into bundle but omit debug libraries when in release mode and vice versa
acg_unset (_files)
acg_get_files_in_dir (_files ${QT_PLUGINS_DIR})
foreach (_file ${_files})
if ( CMAKE_BUILD_TYPE MATCHES "Release" )
# In release mode, we don't want debug binaries in the bundle as it could cause crashes due to wrong linking or mixing of debug and release
if ( NOT _file MATCHES ".*debug.*" )
add_custom_command(TARGET ${OPENFLIPPER_PRODUCT_STRING} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QT_PLUGINS_DIR}/${_file}" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/QtPlugins/${_file}"
)
endif()
else ()
# In debug mode, we don't want release binaries in the bundle as it could cause crashes due to wrong linking or mixing of debug and release
if ( _file MATCHES ".*debug.*" )
add_custom_command(TARGET ${OPENFLIPPER_PRODUCT_STRING} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QT_PLUGINS_DIR}/${_file}" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/QtPlugins/${_file}"
)
endif()
endif()
endforeach ()
elseif(WIN32)
#copy qt plugins to Build directory and configure qt.conf file
file (GLOB qtplugin_dirs RELATIVE "${QT_PLUGINS_DIR}" "${QT_PLUGINS_DIR}/*" )
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/Build/QtPlugins" )
foreach (qtplugin ${qtplugin_dirs})
file(COPY "${QT_PLUGINS_DIR}/${qtplugin}" DESTINATION "${CMAKE_BINARY_DIR}/Build/QtPlugins/")
endforeach ()
endif( APPLE )
if (NOT APPLE)
# install all needed files
# the install_dir macro (common.cmake) installs the whole directory without svn files
# no install for mac needed here, because the whole bundle will be installed in the
# toplevel CMakeLists.txt
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Shaders" "${ACG_PROJECT_DATADIR}/Shaders")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Textures" "${ACG_PROJECT_DATADIR}/Textures")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Scripts" "${ACG_PROJECT_DATADIR}/Scripts")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Icons" "${ACG_PROJECT_DATADIR}/Icons")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Licenses" "${ACG_PROJECT_DATADIR}/Licenses")
acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Fonts" "${ACG_PROJECT_DATADIR}/Fonts")
#acg_install_dir ("${CMAKE_CURRENT_SOURCE_DIR}/../Doc" "${ACG_PROJECT_DATADIR}/Doc") Disabled as we don't want html docs inside of the binaries
if ( WIN32 )
# create qt config file and install it
file(WRITE "${CMAKE_BINARY_DIR}/Build/qt.conf" "[Paths]\nPlugins = QtPlugins")
install( FILES "${CMAKE_BINARY_DIR}/Build/qt.conf" DESTINATION "${ACG_PROJECT_DATADIR}/" )
acg_install_dir ("${CMAKE_BINARY_DIR}/Build/QtPlugins/" "${ACG_PROJECT_DATADIR}/QtPlugins")
endif(WIN32)
if ( EXISTS ${BRANDING_DIRECTORY}/win )
if ( WIN32 )
acg_install_dir ( "${BRANDING_DIRECTORY}/win" "${ACG_PROJECT_DATADIR}/Icons")
endif()
endif()
endif ()
if ( EXISTS ${BRANDING_DIRECTORY}/Icons )
# Overwrite generic Icons with branded ones.
acg_copy_after_build (${OPENFLIPPER_PRODUCT_STRING} "${BRANDING_DIRECTORY}/Icons" "${CMAKE_BINARY_DIR}/Build/${ACG_PROJECT_DATADIR}/Icons")
acg_install_dir ("${BRANDING_DIRECTORY}/Icons" "${ACG_PROJECT_DATADIR}/Icons")
endif()
......@@ -79,6 +79,17 @@ if (NOT QT5_FOUND)
message(FATAL_ERROR "Could not found any QT Version. Please specify QT5_INSTALL_PATH (path to bin and include dir) to build with QT5")
endif()
if ( WIN32 )
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" )
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()
set (OF_MAX_QT_VERSION "5.9.0")
if (${Qt5Core_VERSION_STRING} STRGREATER ${OF_MAX_QT_VERSION})
......