[geany/geany-plugins] 51ee8d: Windows: Create GTK bundle for x86_64 and support non-native execution

Enrico Tröger git-noreply at xxxxx
Sun Sep 19 13:48:07 UTC 2021


Branch:      refs/heads/master
Author:      Enrico Tröger <enrico.troeger at uvena.de>
Committer:   Enrico Tröger <enrico.troeger at uvena.de>
Date:        Sat, 04 Sep 2021 11:30:46 UTC
Commit:      51ee8d14eba40dbf8f3d2359a9bad216aa5905f4
             https://github.com/geany/geany-plugins/commit/51ee8d14eba40dbf8f3d2359a9bad216aa5905f4

Log Message:
-----------
Windows: Create GTK bundle for x86_64 and support non-native execution

Changes in the bundle creation script:
- the GTK (and other dependencies) bundle is now created for the x86_64
platform
- the new parameter "-x" allows to run script on a Linux system using
Wine, therefore it is necessary to run the post-install scripts after
all packages have been extracted.
- use "-Sdd" for Pacman to ignore dependencies as we resolve them
manually
- do not use "tar -x --xz" as Pacman nowadays also downloads .zst
packages, instead just download the file and let tar choose the format
automatically based on the filename
- replace GTK2 by (upcoming) GTK4 in bundle script
- ignore package signatures on bundle creation
- ignore Pacman cache on bundle creation


Modified Paths:
--------------
    build/gtk-bundle-from-msys2.sh

Modified: build/gtk-bundle-from-msys2.sh
101 lines changed, 72 insertions(+), 29 deletions(-)
===================================================================
@@ -6,10 +6,15 @@
 # shell. The extracted files will be placed into the current
 # directory.
 
-ABI=i686
+ABI=x86_64  # do not change, i686 is not supported any longer
 use_cache="no"
 make_zip="no"
 gtkv="3"
+run_pi="y"
+cross="no"
+
+# Wine commands for 64bit binaries, used only when "-x" is set
+EXE_WRAPPER_64="mingw-w64-x86_64-wine"
 
 # ctags - binary for GeanyCTags plugin
 # ctpl-git - for GeanyGenDoc plugin
@@ -78,15 +83,10 @@ termcap
 xz
 "
 
-gtk2_dependency_pkgs="
-gtkspell
-webkitgtk2
-"
 gtk3_dependency_pkgs="
 gtkspell3
-webkitgtk3
 "
-
+gtk4_dependency_pkgs=""
 package_urls=""
 
 
@@ -99,20 +99,28 @@ handle_command_line_options() {
 		"-z"|"--zip")
 			make_zip="yes"
 			;;
-		"-2")
-			gtkv="2"
-			;;
 		"-3")
 			gtkv="3"
 			;;
+		"-4")
+			gtkv="4"
+			;;
+		"-n")
+			run_pi=""
+			;;
+		"-x")
+			cross="yes"
+			;;
 		"-h"|"--help")
-			echo "gtk-bundle-from-msys2.sh [-c] [-h] [-z] [-2 | -3] [CACHEDIR]"
+			echo "gtk-bundle-from-msys2.sh [-c] [-h] [-z] [-3 | -4] [-x] [CACHEDIR]"
 			echo "      -c Use pacman cache. Otherwise pacman will download"
 			echo "         archive files"
 			echo "      -h Show this help screen"
+			echo "      -n Do not run post install scripts of the packages"
 			echo "      -z Create a zip afterwards"
-			echo "      -2 Prefer gtk2"
 			echo "      -3 Prefer gtk3"
+			echo "      -4 Prefer gtk4"
+			echo "      -x Set when the script is executed in a cross-compilation context (e.g. to use wine)"
 			echo "CACHEDIR Directory where to look for cached packages (default: /var/cache/pacman/pkg)"
 			exit 1
 			;;
@@ -123,6 +131,10 @@ handle_command_line_options() {
 	done
 }
 
+set -e  # stop on errors
+# enable extended globbing as we need it in _getpkg
+shopt -s extglob
+
 initialize() {
 	if [ -z "$cachedir" ]; then
 		cachedir="/var/cache/pacman/pkg"
@@ -133,6 +145,11 @@ initialize() {
 		exit 1
 	fi
 
+	if [ "$cross" != "yes" ]; then
+		# if running natively, we do not need wine or any other wrappers
+		EXE_WRAPPER_64=""
+	fi
+
 	gtk="gtk$gtkv"
 	eval "gtk_dependency_pkgs=\${${gtk}_dependency_pkgs}"
 
@@ -142,23 +159,26 @@ ${gtk_dependency_pkgs}
 "
 }
 
-_remember_package_source() {
+_getpkg() {
 	if [ "$use_cache" = "yes" ]; then
-		package_url=`pacman -Sp mingw-w64-${ABI}-${2}`
+		package_info=$(pacman -Qi mingw-w64-$ABI-$1)
+		package_version=$(echo "$package_info" | grep "^Version " | cut -d':' -f 2 | tr -d '[[:space:]]')
+		# use @(gz|xz|zst) to filter out signature files (e.g. mingw-w64-x86_64-...-any.pkg.tar.zst.sig)
+		ls $cachedir/mingw-w64-${ABI}-${1}-${package_version}-*.tar.@(gz|xz|zst) | sort -V | tail -n 1
 	else
-		package_url="${1}"
+		# -dd to ignore dependencies as we listed them already above in $packages and
+		# make pacman ignore its possibly existing cache (otherwise we would get an URL to the cache)
+		pacman -Sddp --cachedir /nonexistent mingw-w64-${ABI}-${1}
 	fi
-	package_urls="${package_urls}\n${package_url}"
 }
 
-_getpkg() {
+_remember_package_source() {
 	if [ "$use_cache" = "yes" ]; then
-		package_info=`pacman -Qi mingw-w64-$ABI-$1`
-		package_version=`echo "$package_info" | grep "^Version " | cut -d':' -f 2 | tr -d '[[:space:]]'`
-		ls $cachedir/mingw-w64-${ABI}-${1}-${package_version}-* | sort -V | tail -n 1
+		package_url=$(pacman -Sddp mingw-w64-${ABI}-${2})
 	else
-		pacman -Sp mingw-w64-${ABI}-${1}
+		package_url="${1}"
 	fi
+	package_urls="${package_urls}\n${package_url}"
 }
 
 extract_packages() {
@@ -179,28 +199,50 @@ extract_packages() {
 			fi
 		else
 			echo "Download $pkg using curl"
-			curl -L "$pkg" | tar -x --xz
+			filename=$(basename "$pkg")
+			curl -s -o "$filename" -L "$pkg"
+			tar xf "$filename"
+			rm "$filename"
 		fi
-		if [ -f .INSTALL ]; then
-			echo "Running post_install script for \"$i\""
-			/bin/bash -c ". .INSTALL; post_install"
+		if [ "$make_zip" = "yes" -a "$i" = "$gtk" ]; then
+			VERSION=$(grep ^pkgver .PKGINFO | sed -e 's,^pkgver = ,,' -e 's,-.*$,,')
 		fi
 		rm -f .INSTALL .MTREE .PKGINFO .BUILDINFO
 	done
 }
 
 move_extracted_files() {
 	echo "Move extracted data to destination directory"
-	if [ -d mingw32 ]; then
+	if [ -d mingw64 ]; then
 		for d in bin etc home include lib libexec locale sbin share ssl var; do
-			if [ -d "mingw32/$d" ]; then
+			if [ -d "mingw64/$d" ]; then
 				rm -rf $d
 				# prevent sporadic 'permission denied' errors on my system, not sure why they happen
 				sleep 0.5
-				mv mingw32/$d .
+				mv mingw64/$d .
 			fi
 		done
-		rmdir mingw32
+		rmdir mingw64
+	fi
+}
+
+delayed_post_install() {
+	if [ "$run_pi" ]; then
+		echo "Execute delayed post install tasks"
+		# Commands have been collected manually from the various .INSTALL scripts
+
+		# ca-certificates
+		DEST=etc/pki/ca-trust/extracted
+		# OpenSSL PEM bundle that includes trust flags
+		${EXE_WRAPPER_64} bin/p11-kit extract --format=openssl-bundle --filter=certificates --overwrite $DEST/openssl/ca-bundle.trust.crt
+		${EXE_WRAPPER_64} bin/p11-kit extract --format=pem-bundle --filter=ca-anchors --overwrite --purpose server-auth $DEST/pem/tls-ca-bundle.pem
+		${EXE_WRAPPER_64} bin/p11-kit extract --format=pem-bundle --filter=ca-anchors --overwrite --purpose email $DEST/pem/email-ca-bundle.pem
+		${EXE_WRAPPER_64} bin/p11-kit extract --format=pem-bundle --filter=ca-anchors --overwrite --purpose code-signing $DEST/pem/objsign-ca-bundle.pem
+		${EXE_WRAPPER_64} bin/p11-kit extract --format=java-cacerts --filter=ca-anchors --overwrite --purpose server-auth $DEST/java/cacerts
+		mkdir -p ssl/certs
+		cp -f $DEST/pem/tls-ca-bundle.pem ssl/certs/ca-bundle.crt
+		cp -f $DEST/pem/tls-ca-bundle.pem ssl/cert.pem
+		cp -f $DEST/openssl/ca-bundle.trust.crt ssl/certs/ca-bundle.trust.crt
 	fi
 }
 
@@ -304,6 +346,7 @@ handle_command_line_options $@
 initialize
 extract_packages
 move_extracted_files
+delayed_post_install
 cleanup_unnecessary_files
 create_bundle_dependency_info_file
 create_zip_archive



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list