[geany/geany] c344ba: Merge pull request #959 from eht16/gtk_bundle_script
Enrico Tröger
git-noreply at xxxxx
Sun Mar 13 11:47:53 UTC 2016
Branch: refs/heads/master
Author: Enrico Tröger <enrico.troeger at uvena.de>
Committer: Enrico Tröger <enrico.troeger at uvena.de>
Date: Sun, 13 Mar 2016 11:47:53 UTC
Commit: c344baca07474e6ee413446c335f62112ffc76b6
https://github.com/geany/geany/commit/c344baca07474e6ee413446c335f62112ffc76b6
Log Message:
-----------
Merge pull request #959 from eht16/gtk_bundle_script
Improve Windows GTK runtime bundle creation script
Modified Paths:
--------------
scripts/gtk-bundle-from-msys2.sh
Modified: scripts/gtk-bundle-from-msys2.sh
338 lines changed, 251 insertions(+), 87 deletions(-)
===================================================================
@@ -1,109 +1,273 @@
#!/bin/sh
+#
+# Fetch and extract Geany dependencies for Windows/MSYS2
+# This script will download (or use Pacman's cache) to extract
+# dependencies as defined below needed to run Geany.
+# To be run within a MSYS2 shell. The extracted files will be
+# placed into the current directory.
ABI=i686
-
-GLIB=
-ADW=
-GTK=
-
use_cache="no"
make_zip="no"
gtkv="3"
+run_pi="y"
-for opt in "$@"; do
- case "$opt" in
- "-c"|"--cache")
- use_cache="yes"
- ;;
- "-z"|"--zip")
- make_zip="yes"
- ;;
- "-2")
- gtkv="2"
- ;;
- "-3")
- gtkv="3"
- ;;
- "-h"|"--help")
- echo "gtk-bundle-from-msys2.sh [-c] [-z] [-2 | -3]"
- echo " -c Use pacman cache. Otherwise pacman will download"
- echo " archive files"
- echo " -z Create a zip afterwards"
- echo " -2 Prefer gtk2"
- echo " -3 Prefer gtk3"
- exit 1
- ;;
- *)
- cachedir="$opt"
- ;;
- esac
-done
+UNX_UTILS_URL="http://unxutils.sourceforge.net/UnxUpdates.zip"
+GREP_URL="https://download.geany.org/contrib/grep-2.23.tar.xz"
-if [ -z "$cachedir" ]; then
- cachedir="/var/cache/pacman/pkg"
-fi
+package_urls=""
+gtk2_dependency_pkgs=""
+gtk3_dependency_pkgs="
+libepoxy
+hicolor-icon-theme
+adwaita-icon-theme
+"
-if [ "$use_cache" = "yes" ] && ! [ -d "$cachedir" ]; then
- echo "Cache dir \"$cachedir\" not a directory"
- exit 1
-fi
+packages="
+gcc-libs
+pcre
+zlib
+expat
+libffi
+libiconv
+bzip2
+libffi
+libpng
+gettext
+glib2
+libwinpthread-git
+harfbuzz
+fontconfig
+freetype
+atk
+pango
+cairo
+pixman
+gdk-pixbuf2
+"
-gtk="gtk$gtkv"
+handle_command_line_options() {
+ for opt in "$@"; do
+ case "$opt" in
+ "-c"|"--cache")
+ use_cache="yes"
+ ;;
+ "-z"|"--zip")
+ make_zip="yes"
+ ;;
+ "-2")
+ gtkv="2"
+ ;;
+ "-3")
+ gtkv="3"
+ ;;
+ "-n")
+ run_pi=""
+ ;;
+ "-h"|"--help")
+ echo "gtk-bundle-from-msys2.sh [-c] [-h] [-n] [-z] [-2 | -3] [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 "CACHEDIR Directory where to look for cached packages (default: /var/cache/pacman/pkg)"
+ exit 1
+ ;;
+ *)
+ cachedir="$opt"
+ ;;
+ esac
+ done
+}
-getpkg() {
- if [ "$use_cache" = "yes" ]; then
- ls $cachedir/mingw-w64-$ABI-$1-* | sort -V | tail -n 1
- else
- pacman -Sp mingw-w64-$ABI-$1
+initialize() {
+ if [ -z "$cachedir" ]; then
+ cachedir="/var/cache/pacman/pkg"
fi
-}
-GLIB=$(getpkg glib2)
-ATK=$(getpkg atk)
-PANGO=$(getpkg pango)
-CAIRO=$(getpkg cairo)
-ADW=$(getpkg adwaita-icon-theme)
-GTK=$(getpkg $gtk)
-
-cat <<EOF
-Using:
-glib: $GLIB
-atk: $ATK
-pango: $PANGO
-cairo: $CAIRO
-adwaita $ADW
-$gtk: $GTK
-EOF
+ if [ "$use_cache" = "yes" ] && ! [ -d "$cachedir" ]; then
+ echo "Cache dir \"$cachedir\" not a directory"
+ exit 1
+ fi
+
+ gtk="gtk$gtkv"
+ eval "gtk_dependency_pkgs=\${${gtk}_dependency_pkgs}"
+ pkgs="
+${packages}
+${gtk_dependency_pkgs}
+${gtk}
+"
+}
-for i in $GLIB $ATK $PANGO $CAURIO $ADW $GTK; do
- if [ "$use_cache" = "yes" -a -e "$i" ]; then
- echo "Extracting $i from cache"
- tar xaf $i
+_getpkg() {
+ 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
else
- echo "Download $i using curl"
- curl -L "$i" | tar -x --xz
+ pacman -Sp mingw-w64-${ABI}-${1}
fi
- echo "Running post_install script"
- test -f .INSTALL && /bin/bash -c ". .INSTALL; post_install"
- if [ "$make_zip" = "yes" -a "$i" = "$GTK" ]; then
- VERSION=$(grep ^pkgver .PKGINFO | sed -e 's,^pkgver = ,,' -e 's,-.*$,,')
+}
+
+_remember_package_source() {
+ if [ "$use_cache" = "yes" ]; then
+ package_url=`pacman -Sp mingw-w64-${ABI}-${2}`
+ else
+ package_url="${1}"
fi
- rm -f .INSTALL .MTREE .PKGINFO
-done
+ package_urls="${package_urls}\n${package_url}"
+}
-if [ -d mingw32 ]; then
- for d in bin etc include lib locale share; do
- rm -rf $d
- mv mingw32/$d .
+extract_packages() {
+ for i in $pkgs; do
+ pkg=$(_getpkg $i)
+ _remember_package_source $pkg $i
+ if [ "$use_cache" = "yes" ]; then
+ if [ -e "$pkg" ]; then
+ echo "Extracting $pkg from cache"
+ tar xaf $pkg
+ else
+ echo "ERROR: File $pkg not found"
+ exit 1
+ fi
+ else
+ echo "Download $pkg using curl"
+ curl -L "$pkg" | tar -x --xz
+ fi
+ if [ -n "$run_pi" ] && [ -f .INSTALL ]; then
+ echo "Running post_install script for \"$i\""
+ /bin/bash -c ". .INSTALL; post_install"
+ fi
+ 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
- rmdir mingw32
-fi
+}
-if [ "$make_zip" = "yes" ]; then
- if [ -z "$VERSION" ]; then
- VERSION="unknown-version"
+move_extracted_files() {
+ echo "Move extracted data to destination directory"
+ if [ -d mingw32 ]; then
+ for d in bin etc home include lib locale share var; do
+ if [ -d "mingw32/$d" ]; then
+ rm -rf $d
+ # prevent sporadic 'permission denied' errors on my system, not sure why they happen
+ sleep 0.5
+ mv mingw32/$d .
+ fi
+ done
+ rmdir mingw32
fi
- echo "Packing the bundle"
- zip -r gtk-$VERSION.zip bin etc include lib locale share
-fi
+}
+
+cleanup_unnecessary_files() {
+ echo "Cleanup unnecessary files"
+ # cleanup temporary files
+ rm -rf var/cache/fontconfig
+ rmdir var/cache
+ rmdir var
+ # cleanup development and other unnecessary files
+ rm -rf include
+ rm -rf lib/gettext
+ rm -rf lib/libffi-*
+ rm -rf lib/pkgconfig
+ find lib -name '*.a' -delete
+ find lib -name '*.typelib' -delete
+ find lib -name '*.def' -delete
+ find lib -name '*.h' -delete
+ find lib -name '*.sh' -delete
+ # cleanup other unnecessary files
+ rm -rf share/aclocal
+ rm -rf share/applications
+ rm -rf share/bash-completion
+ rm -rf share/doc
+ rm -rf share/gdb
+ rm -rf share/gettext
+ rm -rf share/gir-1.0
+ rm -rf share/glib-2.0
+ rm -rf share/gtk-2.0
+ rm -rf share/gtk-3.0
+ rm -rf share/gtk-doc
+ rm -rf share/info
+ rm -rf share/man
+ rm -rf share/xml
+ # cleanup binaries and libs (delete anything except *.dll)
+ find bin ! -name '*.dll' -type f -delete
+ # cleanup empty directories
+ find . -type d -empty -delete
+}
+
+download_and_compile_grep() {
+ grep_archive="grep_source.tar.xz"
+ grep_build_dir="grep_build"
+ grep_build_log="grep_build.log"
+ echo "Download and compile 'grep' (see ${grep_build_dir}/${grep_build_log} for details)"
+ mkdir ${grep_build_dir}
+ cd ${grep_build_dir}
+ wget --no-verbose -O ${grep_archive} ${GREP_URL}
+ tar xf ${grep_archive}
+ grep-2*/configure > ${grep_build_log} 2>&1 || exit 1
+ make >> ${grep_build_log} 2>&1 || exit 1
+ strip src/grep.exe
+ cp src/grep.exe ../bin/
+ cd ..
+ rm -rf ${grep_build_dir}
+}
+
+download_and_extract_sort() {
+ echo "Download and unpack 'sort'"
+ # add sort to the bin directory
+ unxutils_archive="unxutilsupdates.zip"
+ wget --no-verbose -O ${unxutils_archive} ${UNX_UTILS_URL}
+ unzip ${unxutils_archive} sort.exe -d bin/
+ rm ${unxutils_archive}
+}
+
+create_bundle_dependency_info_file() {
+ filename="ReadMe.Dependencies.Geany.txt"
+ cat << EOF > "${filename}"
+This installation contains dependencies for Geany which are distributed
+as binaries (usually .dll files) as well as additional files
+necessary for these dependencies.
+Following is a list of all included binary packages with their
+full download URL as used to create this installation.
+
+sort.exe is extracted from the ZIP archive at
+${UNX_UTILS_URL}.
+
+grep.exe is self-compiled from the sources available at
+${GREP_URL}.
+Used command to compile: ./configure && make
+
+Other dependencies are provided by the MSYS2 project
+(https://msys2.github.io) and were downloaded from:
+EOF
+ echo -e "${package_urls}" >> "${filename}"
+ unix2dos "${filename}"
+}
+
+create_zip_archive() {
+ if [ "$make_zip" = "yes" ]; then
+ if [ -z "$VERSION" ]; then
+ VERSION="unknown-version"
+ fi
+ echo "Packing the bundle"
+ zip -r gtk-$VERSION.zip bin etc include lib locale share var
+ fi
+}
+
+
+# main()
+handle_command_line_options $@
+initialize
+extract_packages
+move_extracted_files
+cleanup_unnecessary_files
+download_and_compile_grep
+download_and_extract_sort
+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 Commits
mailing list