From 7938ab75c157f221bf1ee6b3df2ed1b27728744c Mon Sep 17 00:00:00 2001 From: ras0219 <533828+ras0219@users.noreply.github.com> Date: Thu, 30 Jul 2020 22:41:46 -0700 Subject: [PATCH] [fltk] Force static library due to global variables. Fix CMake Targets. (#12273) * [fltk] Force static library due to global variables. Fix CMake Targets. * [fltk] Add include directory to exported targets * [fltk] Update ports/fltk/CONTROL Co-authored-by: nicole mazzuca * Update ports/fltk/portfile.cmake Co-authored-by: Robert Schumacher Co-authored-by: nicole mazzuca Co-authored-by: Phoebe <20694052+PhoebeHui@users.noreply.github.com> --- ports/fltk/CONTROL | 3 +- ports/fltk/config-path.patch | 13 ++++++++ ports/fltk/include.patch | 13 ++++++++ ports/fltk/portfile.cmake | 60 ++++++++++++------------------------ 4 files changed, 48 insertions(+), 41 deletions(-) create mode 100644 ports/fltk/config-path.patch create mode 100644 ports/fltk/include.patch diff --git a/ports/fltk/CONTROL b/ports/fltk/CONTROL index c9d660cee9f..c6db1c1bbdc 100644 --- a/ports/fltk/CONTROL +++ b/ports/fltk/CONTROL @@ -1,5 +1,6 @@ Source: fltk -Version: 1.3.5-2 +Version: 1.3.5 +Port-Version: 3 Homepage: https://www.fltk.org/ 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. Build-Depends: zlib, libpng, libjpeg-turbo diff --git a/ports/fltk/config-path.patch b/ports/fltk/config-path.patch new file mode 100644 index 00000000000..b308f750f50 --- /dev/null +++ b/ports/fltk/config-path.patch @@ -0,0 +1,13 @@ +diff --git a/CMake/setup.cmake b/CMake/setup.cmake +index 4d960a5..194887d 100644 +--- a/CMake/setup.cmake ++++ b/CMake/setup.cmake +@@ -88,6 +88,8 @@ else() + set(FLTK_CONFIG_PATH ${FLTK_DATADIR}/fltk) + endif(WIN32 AND NOT CYGWIN) + ++set(FLTK_CONFIG_PATH share/fltk) ++ + include(TestBigEndian) + TEST_BIG_ENDIAN(WORDS_BIGENDIAN) + diff --git a/ports/fltk/include.patch b/ports/fltk/include.patch new file mode 100644 index 00000000000..27207fdbd7e --- /dev/null +++ b/ports/fltk/include.patch @@ -0,0 +1,13 @@ +diff --git a/CMake/macros.cmake b/CMake/macros.cmake +index ca03371..bde2c7e 100644 +--- a/CMake/macros.cmake ++++ b/CMake/macros.cmake +@@ -36,6 +36,8 @@ macro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES) + + add_library(${LIBRARY_NAME} ${LIBTYPE} ${LIBFILES}) + ++ target_include_directories(${LIBRARY_NAME} PUBLIC $) ++ + set_target_properties(${LIBRARY_NAME} + PROPERTIES + OUTPUT_NAME ${LIBRARY_NAME} diff --git a/ports/fltk/portfile.cmake b/ports/fltk/portfile.cmake index 905b140bbb1..1721c9072ba 100644 --- a/ports/fltk/portfile.cmake +++ b/ports/fltk/portfile.cmake @@ -4,20 +4,19 @@ vcpkg_download_distfile(ARCHIVE SHA512 db7ea7c5f3489195a48216037b9371a50f1119ae7692d66f71b6711e5ccf78814670581bae015e408dee15c4bba921728309372c1cffc90113cdc092e8540821 ) +# FLTK has many improperly shared global variables that get duplicated into every DLL +vcpkg_check_linkage(ONLY_STATIC_LIBRARY) + vcpkg_extract_source_archive_ex( OUT_SOURCE_PATH SOURCE_PATH ARCHIVE ${ARCHIVE} PATCHES findlibsfix.patch add-link-libraries.patch + config-path.patch + include.patch ) -if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) - set(BUILD_SHARED ON) -else() - set(BUILD_SHARED OFF) -endif() - if (VCPKG_TARGET_ARCHITECTURE MATCHES "arm" OR VCPKG_TARGET_ARCHITECTURE MATCHES "arm64") set(OPTION_USE_GL "-DOPTION_USE_GL=OFF") else() @@ -34,55 +33,36 @@ vcpkg_configure_cmake( -DOPTION_USE_SYSTEM_ZLIB=ON -DOPTION_USE_SYSTEM_LIBPNG=ON -DOPTION_USE_SYSTEM_LIBJPEG=ON - -DOPTION_BUILD_SHARED_LIBS=${BUILD_SHARED} + -DOPTION_BUILD_SHARED_LIBS=OFF + -DFLTK_CONFIG_PATH=share/fltk ${OPTION_USE_GL} ) vcpkg_install_cmake() -if (VCPKG_TARGET_IS_LINUX) - vcpkg_fixup_cmake_targets(CONFIG_PATH share/${PORT} TARGET_PATH share/${PORT}) - file(COPY ${CURRENT_PACKAGES_DIR}/bin/fluid DESTINATION ${CURRENT_PACKAGES_DIR}/tools/fltk) - file(REMOVE ${CURRENT_PACKAGES_DIR}/bin/fluid) - file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/bin/fluid) -elseif (VCPKG_TARGET_IS_OSX) - file(COPY ${CURRENT_PACKAGES_DIR}/bin/fluid.app DESTINATION ${CURRENT_PACKAGES_DIR}/tools/fltk) - file(REMOVE ${CURRENT_PACKAGES_DIR}/bin/fluid.app) - file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/bin/fluid.app) -else() - vcpkg_fixup_cmake_targets(CONFIG_PATH CMake) - file(COPY ${CURRENT_PACKAGES_DIR}/bin/fluid.exe DESTINATION ${CURRENT_PACKAGES_DIR}/tools/fltk) - file(REMOVE ${CURRENT_PACKAGES_DIR}/bin/fluid.exe) - file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/bin/fluid.exe) +vcpkg_fixup_cmake_targets(CONFIG_PATH share/fltk) + +if(VCPKG_TARGET_IS_OSX) + vcpkg_copy_tools(TOOL_NAMES fluid.app fltk-config AUTO_CLEAN) +elseif(VCPKG_TARGET_IS_WINDOWS) + file(REMOVE ${CURRENT_PACKAGES_DIR}/bin/fltk-config ${CURRENT_PACKAGES_DIR}/debug/bin/fltk-config) + vcpkg_copy_tools(TOOL_NAMES fluid AUTO_CLEAN) +else() + vcpkg_copy_tools(TOOL_NAMES fluid fltk-config AUTO_CLEAN) endif() -file(REMOVE_RECURSE - ${CURRENT_PACKAGES_DIR}/debug/include - ${CURRENT_PACKAGES_DIR}/debug/share -) - -file(REMOVE ${CURRENT_PACKAGES_DIR}/bin/fltk-config) -file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/bin/fltk-config) - vcpkg_copy_pdbs() -vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/fltk) - if(VCPKG_LIBRARY_LINKAGE STREQUAL static) file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/bin ${CURRENT_PACKAGES_DIR}/bin ) -else() - file(GLOB SHARED_LIBS "${CURRENT_PACKAGES_DIR}/lib/*_SHARED.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/*_SHAREDd.lib") - file(GLOB STATIC_LIBS "${CURRENT_PACKAGES_DIR}/lib/*.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/*.lib") - list(FILTER STATIC_LIBS EXCLUDE REGEX "_SHAREDd?\\.lib\$") - file(REMOVE ${STATIC_LIBS}) - foreach(SHARED_LIB ${SHARED_LIBS}) - string(REGEX REPLACE "_SHARED(d?)\\.lib\$" "\\1.lib" NEWNAME ${SHARED_LIB}) - file(RENAME ${SHARED_LIB} ${NEWNAME}) - endforeach() endif() +file(REMOVE_RECURSE + ${CURRENT_PACKAGES_DIR}/debug/include + ${CURRENT_PACKAGES_DIR}/debug/share +) foreach(FILE Fl_Export.H fl_utf8.h) file(READ ${CURRENT_PACKAGES_DIR}/include/FL/${FILE} FLTK_HEADER)