aboutsummaryrefslogtreecommitdiff
path: root/cmake/Win32Cleanup.cmake
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 /cmake/Win32Cleanup.cmake
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.
Diffstat (limited to 'cmake/Win32Cleanup.cmake')
-rw-r--r--cmake/Win32Cleanup.cmake37
1 files changed, 37 insertions, 0 deletions
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})