From fb544875b93bffebe96c6f720000003234cfba08 Mon Sep 17 00:00:00 2001 From: Lily Wang <94091114+LilyWangLL@users.noreply.github.com> Date: Thu, 22 Aug 2024 02:57:15 -0700 Subject: [PATCH] [fltk] Fix fluid are added twice when CMAKE_CROSSCOMPILING is true (#36442) Co-authored-by: Lily Wang --- ports/fltk/fix-build-executable.patch | 115 ++++++++++++++++++++++++++ ports/fltk/portfile.cmake | 1 + ports/fltk/vcpkg.json | 1 + versions/baseline.json | 2 +- versions/f-/fltk.json | 5 ++ 5 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 ports/fltk/fix-build-executable.patch diff --git a/ports/fltk/fix-build-executable.patch b/ports/fltk/fix-build-executable.patch new file mode 100644 index 0000000000..42c399adbe --- /dev/null +++ b/ports/fltk/fix-build-executable.patch @@ -0,0 +1,115 @@ +diff --git a/CMake/FLTKConfig.cmake.in b/CMake/FLTKConfig.cmake.in +index e2de914..c0bee05 100644 +--- a/CMake/FLTKConfig.cmake.in ++++ b/CMake/FLTKConfig.cmake.in +@@ -37,17 +37,100 @@ set (FLTK_USE_FILE ${CMAKE_CURRENT_LIST_DIR}/UseFLTK.cmake) + + set (FLTK_INCLUDE_DIR "${FLTK_INCLUDE_DIRS}") + +-if (CMAKE_CROSSCOMPILING) +- find_file(FLUID_PATH ++if(CMAKE_CROSSCOMPILING) ++ ++ # Find a fluid executable on the build host to be able to build fluid programs ++ ++ find_program(FLTK_FLUID_HOST + NAMES fluid fluid.exe + PATHS ENV PATH ++ NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) +- add_executable(fluid IMPORTED) +- set_target_properties(fluid +- PROPERTIES IMPORTED_LOCATION ${FLUID_PATH} +- ) +- set (FLTK_FLUID_EXECUTABLE ${FLUID_PATH}) +-else () +- set (FLTK_FLUID_EXECUTABLE fluid) +-endif (CMAKE_CROSSCOMPILING) ++ ++ if(FLTK_FLUID_HOST) ++ ++ if(0) # Experimental: currently not used ++ # Import a special 'fluid' target called 'fluid-host' (fltk::fluid-host) ++ # Note: this is "the same as" the CMake variable FLTK_FLUID_EXECUTABLE ++ add_executable(fluid-host IMPORTED) ++ set_target_properties(fluid-host ++ PROPERTIES IMPORTED_LOCATION ${FLTK_FLUID_HOST} ++ ) ++ add_executable(fltk::fluid-host ALIAS fluid-host) ++ set(FLTK_FLUID_EXECUTABLE fltk::fluid-host) ++ ++ else() ++ ++ set(FLTK_FLUID_EXECUTABLE "${FLTK_FLUID_HOST}") ++ ++ endif() ++ ++ else() # fluid not found on build host ++ ++ message(STATUS "FLTKConfig.cmake (cross-compiling): fluid not found on the build host") ++ # note: this assigns "FLTK_FLUID_HOST-NOTFOUND" and running fluid will fail ++ set(FLTK_FLUID_EXECUTABLE "${FLTK_FLUID_HOST}") ++ ++ endif() ++ ++else(CMAKE_CROSSCOMPILING) ++ ++ if(FLTK_CREATE_COMPATIBILITY_ALIASES) ++ ++ function(_fltk_make_alias target from) ++ if(TARGET ${from} AND NOT TARGET ${target}) ++ # message(STATUS "FLTKConfig.cmake - create alias: ${target} from ${from}") ++ ++ # promote imported target to global visibility (CMake < 3.18 only) ++ if(CMAKE_VERSION VERSION_LESS "3.18") ++ set_target_properties(${from} PROPERTIES IMPORTED_GLOBAL TRUE) ++ endif() ++ ++ get_target_property(ttype ${from} TYPE) ++ if(ttype STREQUAL "EXECUTABLE") ++ add_executable(${target} ALIAS ${from}) ++ else() ++ add_library(${target} ALIAS ${from}) ++ endif() ++ endif() ++ endfunction(_fltk_make_alias target) ++ ++ if(NOT TARGET fltk::fltk) ++ message(FATAL "FLTKConfig.cmake: target fltk::fltk does not exist!") ++ endif() ++ ++ _fltk_make_alias(fltk fltk::fltk) ++ _fltk_make_alias(fltk-shared fltk::fltk-shared) ++ ++ _fltk_make_alias(fluid fltk::fluid) ++ _fltk_make_alias(fluid-cmd fltk::fluid-cmd) ++ ++ _fltk_make_alias(fltk-options fltk::options) ++ _fltk_make_alias(fltk-options-cmd fltk::options-cmd) ++ ++ foreach(target cairo forms gl images jpeg png z) ++ _fltk_make_alias(fltk_${target} fltk::${target}) ++ _fltk_make_alias(fltk_${target}-shared fltk::${target}-shared) ++ endforeach() ++ ++ endif() # Create aliases ... ++ ++ # set FLTK_FLUID_EXECUTABLE: try to use the fltk::target name if it ++ # exists and fall back to 'fluid-cmd' or 'fluid' if not. This will ++ # eventually call the build host's fluid if found in the users's PATH ++ ++ if(TARGET fltk::fluid-cmd) # Windows only ++ set(FLTK_FLUID_EXECUTABLE fltk::fluid-cmd) ++ elseif(TARGET fltk::fluid) ++ set(FLTK_FLUID_EXECUTABLE fltk::fluid) ++ elseif(WIN32) ++ set(FLTK_FLUID_EXECUTABLE fluid-cmd) ++ else() ++ set(FLTK_FLUID_EXECUTABLE fluid) ++ endif() ++ ++endif(CMAKE_CROSSCOMPILING) ++ ++# Debug: should be commented out ++# message(STATUS "FLTKConfig.cmake: FLTK_FLUID_EXECUTABLE = '${FLTK_FLUID_EXECUTABLE}'") diff --git a/ports/fltk/portfile.cmake b/ports/fltk/portfile.cmake index 036d3abc20..415c481580 100644 --- a/ports/fltk/portfile.cmake +++ b/ports/fltk/portfile.cmake @@ -12,6 +12,7 @@ vcpkg_from_github( include.patch fix-system-link.patch math-h-polyfill.patch + fix-build-executable.patch #https://github.com/fltk/fltk/commit/63d7c71e1a926f487f22aa26042a2582624b3b17 ) file(REMOVE_RECURSE "${SOURCE_PATH}/jpeg" diff --git a/ports/fltk/vcpkg.json b/ports/fltk/vcpkg.json index 8d5443bef2..b1b9b58b39 100644 --- a/ports/fltk/vcpkg.json +++ b/ports/fltk/vcpkg.json @@ -1,6 +1,7 @@ { "name": "fltk", "version": "1.3.9", + "port-version": 1, "description": "FLTK (pronounced fulltick) is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, and MacOS X. FLTK provides modern GUI functionality without the bloat and supports 3D graphics via OpenGL and its built-in GLUT emulation.", "homepage": "https://www.fltk.org/", "license": null, diff --git a/versions/baseline.json b/versions/baseline.json index 0ca4ed4c9f..dcfe5b80c7 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -2786,7 +2786,7 @@ }, "fltk": { "baseline": "1.3.9", - "port-version": 0 + "port-version": 1 }, "fluidlite": { "baseline": "2023-04-18", diff --git a/versions/f-/fltk.json b/versions/f-/fltk.json index f5286b4360..d5af27e0ce 100644 --- a/versions/f-/fltk.json +++ b/versions/f-/fltk.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "804b0353b1336322af99c478f62a824a0cabd456", + "version": "1.3.9", + "port-version": 1 + }, { "git-tree": "171647047716e78f2a85309b6d3b8cb7ca1309c9", "version": "1.3.9",