From 0e8b87bf514b6090d32e6a0ecc26036f0fbe2567 Mon Sep 17 00:00:00 2001 From: Bernd Waibel Date: Mon, 4 Apr 2022 19:03:30 +0200 Subject: [PATCH] Add option to build and install the designer plugin The patch adds a cmake option BUILD_DESIGNER_PLUGIN, targeted mainly at package maintainers to allow an easy build and installation of the FreeCAD designer plugin. It has been discussed in https://forum.freecadweb.org/viewtopic.php?f=10&t=67706 Signed-off-by: Bernd Waibel --- CMakeLists.txt | 2 ++ .../BuildAndInstallDesignerPlugin.cmake | 9 +++++++++ .../InitializeFreeCADBuildOptions.cmake | 2 ++ cMake/FreeCAD_Helpers/PrintFinalReport.cmake | 5 +++++ cMake/FreeCAD_Helpers/SetupQt.cmake | 3 +++ src/Tools/plugins/widget/CMakeLists.txt | 17 ++++++++--------- 6 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 cMake/FreeCAD_Helpers/BuildAndInstallDesignerPlugin.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 31478ef3b7..f2bd8fbb1c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,6 +87,8 @@ SetGlobalCompilerAndLinkerSettings() add_subdirectory(src) add_subdirectory(data) +BuildAndInstallDesignerPlugin() + CreatePackagingTargets() PrintFinalReport() diff --git a/cMake/FreeCAD_Helpers/BuildAndInstallDesignerPlugin.cmake b/cMake/FreeCAD_Helpers/BuildAndInstallDesignerPlugin.cmake new file mode 100644 index 0000000000..ca116d58d0 --- /dev/null +++ b/cMake/FreeCAD_Helpers/BuildAndInstallDesignerPlugin.cmake @@ -0,0 +1,9 @@ +macro(BuildAndInstallDesignerPlugin) + # ================================================================= + # ============= Build and install the designer plugin ============= + # ================================================================= + + if(BUILD_DESIGNER_PLUGIN) + add_subdirectory(src/Tools/plugins/widget) + endif(BUILD_DESIGNER_PLUGIN) +endmacro(BuildAndInstallDesignerPlugin) diff --git a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake index b7745942cb..972214c0d3 100644 --- a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake +++ b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake @@ -80,6 +80,8 @@ macro(InitializeFreeCADBuildOptions) endif() configure_file(${CMAKE_SOURCE_DIR}/src/QtOpenGL.h.cmake ${CMAKE_BINARY_DIR}/src/QtOpenGL.h) + option(BUILD_DESIGNER_PLUGIN "Build and install the designer plugin" OFF) + if(APPLE) option(FREECAD_CREATE_MAC_APP "Create app bundle on install" OFF) diff --git a/cMake/FreeCAD_Helpers/PrintFinalReport.cmake b/cMake/FreeCAD_Helpers/PrintFinalReport.cmake index a8faa70159..90552d837b 100644 --- a/cMake/FreeCAD_Helpers/PrintFinalReport.cmake +++ b/cMake/FreeCAD_Helpers/PrintFinalReport.cmake @@ -92,6 +92,11 @@ macro(PrintFinalReport) message(STATUS "Qt5WebKitWidgets: not needed (BUILD_WEB)") message(STATUS "Qt5WebEngineWidgets: not needed (BUILD_WEB)") endif(BUILD_WEB) + if(BUILD_DESIGNER_PLUGIN) + message(STATUS "Designer plugin: ${DESIGNER_PLUGIN_LOCATION}/libFreeCAD_widgets.so") + else(BUILD_DESIGNER_PLUGIN) + message(STATUS "Designer plugin: not built per user request (BUILD_DESIGNER_PLUGIN)") + endif(BUILD_DESIGNER_PLUGIN) if(${Qt5WinExtras_FOUND}) message(STATUS "Qt5WinExtras: ${Qt5WinExtras_VERSION}") endif() diff --git a/cMake/FreeCAD_Helpers/SetupQt.cmake b/cMake/FreeCAD_Helpers/SetupQt.cmake index 8a1d76c253..f7509f5ac6 100644 --- a/cMake/FreeCAD_Helpers/SetupQt.cmake +++ b/cMake/FreeCAD_Helpers/SetupQt.cmake @@ -29,6 +29,9 @@ if(BUILD_GUI) endif() endif() endif() + if(BUILD_DESIGNER_PLUGIN) + find_package(Qt5Designer REQUIRED) + endif() if(MSVC) find_package(Qt5WinExtras QUIET) endif() diff --git a/src/Tools/plugins/widget/CMakeLists.txt b/src/Tools/plugins/widget/CMakeLists.txt index 2cbe14523b..da86773c85 100644 --- a/src/Tools/plugins/widget/CMakeLists.txt +++ b/src/Tools/plugins/widget/CMakeLists.txt @@ -1,11 +1,11 @@ project(FreeCAD_widgets) cmake_minimum_required(VERSION 3.2.0) -set(CMAKE_INCLUDE_CURRENT_DIR ON) -set(CMAKE_AUTOMOC ON) +#set(CMAKE_INCLUDE_CURRENT_DIR ON) +#set(CMAKE_AUTOMOC ON) -find_package(Qt5Widgets REQUIRED) -find_package(Qt5Designer REQUIRED) +#find_package(Qt5Widgets REQUIRED) +#find_package(Qt5Designer REQUIRED) include_directories( ${Qt5Core_INCLUDE_DIRS} @@ -27,13 +27,12 @@ target_compile_options(FreeCAD_widgets PRIVATE ${COMPILE_OPTIONS}) # Get the install location of a plugin to determine the path to designer plguins get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION) exec_program(${QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_PLUGINS" RETURN_VALUE return_code OUTPUT_VARIABLE DEFAULT_QT_PLUGINS_DIR ) -set(DESIGNER_PLUGIN_LOCATION ${DEFAULT_QT_PLUGINS_DIR}/designer) -message(STATUS "Plugin will installed to: ${DESIGNER_PLUGIN_LOCATION}") - +set(DESIGNER_PLUGIN_LOCATION ${DEFAULT_QT_PLUGINS_DIR}/designer CACHE FILEPATH "Path where the plugin will be installed to") +#message(STATUS "Plugin will be installed to: ${DESIGNER_PLUGIN_LOCATION}") # Override the CMake variable -set(CMAKE_INSTALL_PREFIX ${DESIGNER_PLUGIN_LOCATION} CACHE PATH "Install path to Qt Designer plugins" FORCE) +#set(CMAKE_INSTALL_PREFIX ${DESIGNER_PLUGIN_LOCATION} CACHE PATH "Install path to Qt Designer plugins" FORCE) INSTALL(TARGETS FreeCAD_widgets - LIBRARY DESTINATION ${DESIGNER_PLUGIN_LOCATION} + LIBRARY DESTINATION "$ENV{DESTDIR}${DESIGNER_PLUGIN_LOCATION}" )