diff options
| author | Přemysl Eric Janouch <p@janouch.name> | 2021-10-23 18:09:18 +0200 | 
|---|---|---|
| committer | Přemysl Eric Janouch <p@janouch.name> | 2021-10-23 18:27:43 +0200 | 
| commit | cbdb1cfaa60a3ab1b3a94ad53aa2661df7e22701 (patch) | |
| tree | 9583e25e411af0c7c9f67654ad4828032e8aeccc | |
| parent | 03ebaddff5101449e020dac1301bf8c9df9446ea (diff) | |
| download | tdv-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.txt | 5 | ||||
| -rw-r--r-- | cmake/Win32Cleanup.cmake | 37 | 
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}) | 
