From 36babc4c9318f10424d45f712e7ecf24a1b9392d Mon Sep 17 00:00:00 2001 From: Norbert Nemec Date: Wed, 15 May 2019 23:18:32 +0200 Subject: [glibmm] fix upstream bugs in MSVC-specific glibmmconfig.h --- ports/glibmm/fix-define-glibmmconfig.patch | 43 ++++++++++++++++++++++++++++++ ports/glibmm/portfile.cmake | 4 ++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 ports/glibmm/fix-define-glibmmconfig.patch diff --git a/ports/glibmm/fix-define-glibmmconfig.patch b/ports/glibmm/fix-define-glibmmconfig.patch new file mode 100644 index 000000000..90b97d907 --- /dev/null +++ b/ports/glibmm/fix-define-glibmmconfig.patch @@ -0,0 +1,43 @@ +diff --git a/MSVC_Net2013/glibmm/glibmmconfig.h b/MSVC_Net2013/glibmm/glibmmconfig.h +index 61bb83e..7dbe809 100644 +--- a/MSVC_Net2013/glibmm/glibmmconfig.h ++++ b/MSVC_Net2013/glibmm/glibmmconfig.h +@@ -7,12 +7,17 @@ + # if defined(_MSC_VER) + # define GLIBMM_MSC 1 + # define GLIBMM_WIN32 1 +-# define GLIBMM_DLL 1 ++# if !defined(GLIBMM_STATIC_LIB) ++# define GLIBMM_DLL 1 ++# endif + # elif defined(__CYGWIN__) + # define GLIBMM_CONFIGURE 1 + # elif defined(__MINGW32__) + # define GLIBMM_WIN32 1 + # define GLIBMM_CONFIGURE 1 ++# if !defined(GLIBMM_STATIC_LIB) ++# define GLIBMM_DLL 1 ++# endif + # else + /* AIX clR compiler complains about this even though it doesn't get this far */ + # error "Unknown architecture (send me gcc --dumpspecs or equiv)" +@@ -108,6 +113,7 @@ + # define GLIBMM_HAVE_WIDE_STREAM 1 + # define GLIBMM_HAVE_DISAMBIGUOUS_CONST_TEMPLATE_SPECIALIZATIONS 1 + # define GLIBMM_HAVE_C_STD_TIME_T_IS_NOT_INT32 1 ++# define GLIBMM_HAVE_ALLOWS_STATIC_INLINE_NPOS 1 + # define GLIBMM_CAN_USE_DYNAMIC_CAST_IN_UNUSED_TEMPLATE_WITHOUT_DEFINITION 1 + # define GLIBMM_CAN_ASSIGN_NON_EXTERN_C_FUNCTIONS_TO_EXTERN_C_CALLBACKS 1 + # define GLIBMM_CAN_USE_NAMESPACES_INSIDE_EXTERNC 1 +@@ -140,11 +146,6 @@ + * it to be defined. Remove after grace period. */ + #define GLIBMM_USING_STD(Symbol) + +-/* Enable DLL-specific stuff only when not building a static library */ +-#if !defined(__CYGWIN__) && defined(__MINGW32__) && !defined(GLIBMM_STATIC_LIB) +-# define GLIBMM_DLL 1 +-#endif +- + #ifdef GLIBMM_DLL + # if defined(GLIBMM_BUILD) && defined(_WINDLL) + /* Do not dllexport as it is handled by gendef on MSVC */ diff --git a/ports/glibmm/portfile.cmake b/ports/glibmm/portfile.cmake index 40eee279c..58378907f 100644 --- a/ports/glibmm/portfile.cmake +++ b/ports/glibmm/portfile.cmake @@ -17,7 +17,9 @@ vcpkg_extract_source_archive(${ARCHIVE}) vcpkg_apply_patches( SOURCE_PATH ${SOURCE_PATH} - PATCHES ${CMAKE_CURRENT_LIST_DIR}/glibmm-api-variant.patch + PATCHES + ${CMAKE_CURRENT_LIST_DIR}/glibmm-api-variant.patch + ${CMAKE_CURRENT_LIST_DIR}/fix-define-glibmmconfig.patch ) file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH}) -- cgit v1.2.3 From aaae648571dac364d407929a2df6746118081ecb Mon Sep 17 00:00:00 2001 From: Norbert Nemec Date: Thu, 16 May 2019 21:56:34 +0200 Subject: [glibmm] Reintroduce CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS (#6550) (partially reverts change discussed in #5937) --- ports/glibmm/CMakeLists.txt | 5 +++++ ports/glibmm/CONTROL | 8 ++++---- ports/glibmm/portfile.cmake | 5 ++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ports/glibmm/CMakeLists.txt b/ports/glibmm/CMakeLists.txt index 8e7f8f0fe..389ae8dfb 100644 --- a/ports/glibmm/CMakeLists.txt +++ b/ports/glibmm/CMakeLists.txt @@ -40,6 +40,11 @@ if(APPLE) link_libraries(${COREFOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY} ${FOUNDATION_LIBRARY}) endif() +# A hacky solution for building Windows DLLs from sources ported from Linux. +# The cleaner approach would be to manually add __declspec(dllexport) to all public symbols in the header files or +# construct a .def file. +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + if(BUILD_SHARED_LIBS) add_definitions(-DGLIBMM_DLL -DGIOMM_DLL) else() diff --git a/ports/glibmm/CONTROL b/ports/glibmm/CONTROL index efef52d3f..ead483418 100644 --- a/ports/glibmm/CONTROL +++ b/ports/glibmm/CONTROL @@ -1,4 +1,4 @@ -Source: glibmm -Version: 2.52.1-8 -Description: This is glibmm, a C++ API for parts of glib that are useful for C++. See http://www.gtkmm.org. -Build-Depends: zlib, pcre, libffi, gettext, libiconv, glib, libsigcpp +Source: glibmm +Version: 2.52.1-9 +Description: This is glibmm, a C++ API for parts of glib that are useful for C++. See http://www.gtkmm.org. +Build-Depends: zlib, pcre, libffi, gettext, libiconv, glib, libsigcpp diff --git a/ports/glibmm/portfile.cmake b/ports/glibmm/portfile.cmake index 58378907f..ac5be799f 100644 --- a/ports/glibmm/portfile.cmake +++ b/ports/glibmm/portfile.cmake @@ -5,7 +5,10 @@ if (VCPKG_CMAKE_SYSTEM_NAME STREQUAL WindowsStore) message(FATAL_ERROR "Error: UWP builds are currently not supported.") endif() -vcpkg_check_linkage(ONLY_STATIC_LIBRARY) +# This library itself would would as static library, but it is used by gtkmm, atkmm & pangomm which are all set to ONLY_DYNAMIC LIBRARY +# Having multiple dynamic libaries linking the same static library causes multiple copies of its static data to be present in the executable +# leading to confusing and hard-to-debug runtime effects. +vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/glibmm-2.52.1) vcpkg_download_distfile(ARCHIVE -- cgit v1.2.3 From 66169e3f0d5f69a853c5f5c9d9c78af04d47ddfd Mon Sep 17 00:00:00 2001 From: Norbert Nemec Date: Mon, 3 Jun 2019 15:02:21 +0200 Subject: [glibmm] Rephrase comment --- ports/glibmm/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ports/glibmm/CMakeLists.txt b/ports/glibmm/CMakeLists.txt index 389ae8dfb..d48d9261b 100644 --- a/ports/glibmm/CMakeLists.txt +++ b/ports/glibmm/CMakeLists.txt @@ -40,9 +40,9 @@ if(APPLE) link_libraries(${COREFOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY} ${FOUNDATION_LIBRARY}) endif() -# A hacky solution for building Windows DLLs from sources ported from Linux. -# The cleaner approach would be to manually add __declspec(dllexport) to all public symbols in the header files or -# construct a .def file. +# Activate workaround for exporting all symbols from Windows DLLs to mimic the +# behavior on Linux, where dynamic libraries always export all symbols. +# The same approach was already used by the upstream MSVC build (see MSVC_NMake/gendef/gendef.cc) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) if(BUILD_SHARED_LIBS) -- cgit v1.2.3 From daa13e58ae615daebdc19e747fd04b3b00f23925 Mon Sep 17 00:00:00 2001 From: grdowns Date: Tue, 4 Jun 2019 18:39:08 -0700 Subject: Only set CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS to true on win32 --- ports/glibmm/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ports/glibmm/CMakeLists.txt b/ports/glibmm/CMakeLists.txt index d48d9261b..c6fa7027a 100644 --- a/ports/glibmm/CMakeLists.txt +++ b/ports/glibmm/CMakeLists.txt @@ -43,7 +43,9 @@ endif() # Activate workaround for exporting all symbols from Windows DLLs to mimic the # behavior on Linux, where dynamic libraries always export all symbols. # The same approach was already used by the upstream MSVC build (see MSVC_NMake/gendef/gendef.cc) -set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +if (WIN32) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +endif() if(BUILD_SHARED_LIBS) add_definitions(-DGLIBMM_DLL -DGIOMM_DLL) -- cgit v1.2.3 From d46b696071d13c2d43784243aad83edeea177176 Mon Sep 17 00:00:00 2001 From: grdowns Date: Tue, 4 Jun 2019 19:03:08 -0700 Subject: Move comment to correct line --- ports/glibmm/portfile.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/glibmm/portfile.cmake b/ports/glibmm/portfile.cmake index ac5be799f..693a77278 100644 --- a/ports/glibmm/portfile.cmake +++ b/ports/glibmm/portfile.cmake @@ -1,6 +1,6 @@ -# Glib uses winapi functions not available in WindowsStore, so glibmm also include(vcpkg_common_functions) +# Glib uses winapi functions not available in WindowsStore if (VCPKG_CMAKE_SYSTEM_NAME STREQUAL WindowsStore) message(FATAL_ERROR "Error: UWP builds are currently not supported.") endif() -- cgit v1.2.3 From dc008d14a902bd5ae1d2b51d10d16020e461b7f7 Mon Sep 17 00:00:00 2001 From: grdowns Date: Wed, 5 Jun 2019 18:24:16 -0700 Subject: Remove unneeded symbol export; Fix Linux build --- ports/glibmm/CMakeLists.txt | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/ports/glibmm/CMakeLists.txt b/ports/glibmm/CMakeLists.txt index c6fa7027a..942776c6d 100644 --- a/ports/glibmm/CMakeLists.txt +++ b/ports/glibmm/CMakeLists.txt @@ -40,16 +40,7 @@ if(APPLE) link_libraries(${COREFOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY} ${FOUNDATION_LIBRARY}) endif() -# Activate workaround for exporting all symbols from Windows DLLs to mimic the -# behavior on Linux, where dynamic libraries always export all symbols. -# The same approach was already used by the upstream MSVC build (see MSVC_NMake/gendef/gendef.cc) -if (WIN32) - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) -endif() - -if(BUILD_SHARED_LIBS) - add_definitions(-DGLIBMM_DLL -DGIOMM_DLL) -else() +if(NOT BUILD_SHARED_LIBS) add_definitions(-DGLIBMM_STATIC_LIB -DGIOMM_STATIC_LIB) endif() -- cgit v1.2.3 From 4fab470553366c5f4282f9d948625f85980ca0c6 Mon Sep 17 00:00:00 2001 From: grdowns Date: Wed, 5 Jun 2019 18:24:39 -0700 Subject: Stop forcing static linkage --- ports/glibmm/portfile.cmake | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ports/glibmm/portfile.cmake b/ports/glibmm/portfile.cmake index 693a77278..460e32cac 100644 --- a/ports/glibmm/portfile.cmake +++ b/ports/glibmm/portfile.cmake @@ -5,11 +5,6 @@ if (VCPKG_CMAKE_SYSTEM_NAME STREQUAL WindowsStore) message(FATAL_ERROR "Error: UWP builds are currently not supported.") endif() -# This library itself would would as static library, but it is used by gtkmm, atkmm & pangomm which are all set to ONLY_DYNAMIC LIBRARY -# Having multiple dynamic libaries linking the same static library causes multiple copies of its static data to be present in the executable -# leading to confusing and hard-to-debug runtime effects. -vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) - set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/glibmm-2.52.1) vcpkg_download_distfile(ARCHIVE URLS "http://ftp.gnome.org/pub/GNOME/sources/glibmm/2.52/glibmm-2.52.1.tar.xz" -- cgit v1.2.3 From 25a04acf11335b314a38f33764341e096adb6d22 Mon Sep 17 00:00:00 2001 From: Griffin Downs Date: Thu, 6 Jun 2019 13:13:15 -0700 Subject: Reapply introduction of CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS --- ports/glibmm/CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ports/glibmm/CMakeLists.txt b/ports/glibmm/CMakeLists.txt index 942776c6d..f1ff5ea9a 100644 --- a/ports/glibmm/CMakeLists.txt +++ b/ports/glibmm/CMakeLists.txt @@ -40,7 +40,14 @@ if(APPLE) link_libraries(${COREFOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY} ${FOUNDATION_LIBRARY}) endif() -if(NOT BUILD_SHARED_LIBS) +# Activate workaround for exporting all symbols from Windows DLLs to mimic the +# behavior on Linux, where dynamic libraries always export all symbols. +# The same approach was already used by the upstream MSVC build (see MSVC_NMake/gendef/gendef.cc) +if (WIN32) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +endif() + +if(BUILD_SHARED_LIBS) add_definitions(-DGLIBMM_STATIC_LIB -DGIOMM_STATIC_LIB) endif() -- cgit v1.2.3 From 16840aa123d4d9daf9eaaef8c5c659a16263145d Mon Sep 17 00:00:00 2001 From: Griffin Downs Date: Thu, 6 Jun 2019 15:51:46 -0700 Subject: Negate BUILD_SHARED_LIBS --- ports/glibmm/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/glibmm/CMakeLists.txt b/ports/glibmm/CMakeLists.txt index f1ff5ea9a..10839260a 100644 --- a/ports/glibmm/CMakeLists.txt +++ b/ports/glibmm/CMakeLists.txt @@ -47,7 +47,7 @@ if (WIN32) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) endif() -if(BUILD_SHARED_LIBS) +if(NOT BUILD_SHARED_LIBS) add_definitions(-DGLIBMM_STATIC_LIB -DGIOMM_STATIC_LIB) endif() -- cgit v1.2.3