aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-10-23 18:09:18 +0200
committerPřemysl Eric Janouch <p@janouch.name>2021-10-23 18:27:43 +0200
commitcbdb1cfaa60a3ab1b3a94ad53aa2661df7e22701 (patch)
tree9583e25e411af0c7c9f67654ad4828032e8aeccc
parent03ebaddff5101449e020dac1301bf8c9df9446ea (diff)
downloadtdv-cbdb1cfaa60a3ab1b3a94ad53aa2661df7e22701.tar.gz
tdv-cbdb1cfaa60a3ab1b3a94ad53aa2661df7e22701.tar.xz
tdv-cbdb1cfaa60a3ab1b3a94ad53aa2661df7e22701.zip
Remove unnecessary DLLs from Windows builds
This saves 21 MiB of MSYS2 libraries, without any adverse effects. The MSYS2 build remains bloated, due to the Adwaita icon theme.
-rw-r--r--CMakeLists.txt5
-rw-r--r--cmake/Win32Cleanup.cmake37
2 files changed, 40 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 22c465c..cd1cbbb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -244,8 +244,7 @@ elseif (WITH_GUI)
install (DIRECTORY
${WIN32_DEPENDS_PATH}/bin/
DESTINATION .
- FILES_MATCHING PATTERN "*.dll"
- PATTERN "libgettext*" EXCLUDE)
+ FILES_MATCHING PATTERN "*.dll")
install (DIRECTORY
${WIN32_DEPENDS_PATH}/etc/
DESTINATION etc)
@@ -263,6 +262,8 @@ elseif (WITH_GUI)
install (FILES
${WIN32_DEPENDS_PATH}/share/icons/hicolor/index.theme
DESTINATION share/icons/hicolor)
+
+ install (SCRIPT cmake/Win32Cleanup.cmake)
endif ()
# Do some unit tests
diff --git a/cmake/Win32Cleanup.cmake b/cmake/Win32Cleanup.cmake
new file mode 100644
index 0000000..be53ef8
--- /dev/null
+++ b/cmake/Win32Cleanup.cmake
@@ -0,0 +1,37 @@
+# To be run from cmake_install.cmake, eradicates all unreferenced libraries.
+# CMake 3.9.6 has a parsing bug with ENCODING UTF-8.
+cmake_minimum_required (VERSION 3.10)
+
+# CPack runs this almost without any CMake variables at all
+# (cmStateSnapshot::SetDefaultDefinitions(), CMAKE_INSTALL_PREFIX, [DESTDIR])
+set (installdir "${CMAKE_INSTALL_PREFIX}")
+if (NOT installdir OR installdir MATCHES "^/usr(/|$)")
+ return ()
+endif ()
+
+# The function is recursive and CMake has tragic scoping behaviour;
+# environment variables are truly global there, in the absence of a cache
+unset (ENV{seen})
+function (expand path)
+ set (seen $ENV{seen})
+ if (path IN_LIST seen OR NOT EXISTS "${path}")
+ return ()
+ endif ()
+
+ set (ENV{seen} "$ENV{seen};${path}")
+ file (STRINGS "${path}" strings REGEX "[.][Dd][Ll][Ll]$" ENCODING UTF-8)
+ foreach (string ${strings})
+ string (REGEX MATCH "[-.+_a-zA-Z0-9]+$" word "${string}")
+ expand ("${installdir}/${word}")
+ endforeach ()
+endfunction ()
+
+file (GLOB roots LIST_DIRECTORIES false "${installdir}/*.[Ee][Xx][Ee]"
+ "${installdir}/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.[Dd][Ll][Ll]")
+foreach (binary ${roots})
+ expand ("${binary}")
+endforeach ()
+
+file (GLOB libraries LIST_DIRECTORIES false "${installdir}/*.[Dd][Ll][Ll]")
+list (REMOVE_ITEM libraries $ENV{seen})
+file (REMOVE ${libraries})