diff --git a/scripts/gtk-bundle-from-msys2.sh b/scripts/gtk-bundle-from-msys2.sh index b6a586e0..1b99258a 100644 --- a/scripts/gtk-bundle-from-msys2.sh +++ b/scripts/gtk-bundle-from-msys2.sh @@ -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" +UNX_UTILS_URL="http://unxutils.sourceforge.net/UnxUpdates.zip" +GREP_URL="https://download.geany.org/contrib/grep-2.23.tar.xz" + +package_urls="" +gtk2_dependency_pkgs="" +gtk3_dependency_pkgs=" +libepoxy +hicolor-icon-theme +adwaita-icon-theme +" + +packages=" +gcc-libs +pcre +zlib +expat +libffi +libiconv +bzip2 +libffi +libpng +gettext +glib2 +libwinpthread-git +harfbuzz +fontconfig +freetype +atk +pango +cairo +pixman +gdk-pixbuf2 +" + +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 +} + +initialize() { + if [ -z "$cachedir" ]; then + cachedir="/var/cache/pacman/pkg" + fi + + if [ "$use_cache" = "yes" ] && ! [ -d "$cachedir" ]; then + echo "Cache dir \"$cachedir\" not a directory" exit 1 - ;; - *) - cachedir="$opt" - ;; - esac -done + fi -if [ -z "$cachedir" ]; then - cachedir="/var/cache/pacman/pkg" -fi + gtk="gtk$gtkv" + eval "gtk_dependency_pkgs=\${${gtk}_dependency_pkgs}" -if [ "$use_cache" = "yes" ] && ! [ -d "$cachedir" ]; then - echo "Cache dir \"$cachedir\" not a directory" - exit 1 -fi + pkgs=" +${packages} +${gtk_dependency_pkgs} +${gtk} +" +} -gtk="gtk$gtkv" - -getpkg() { +_getpkg() { if [ "$use_cache" = "yes" ]; then - ls $cachedir/mingw-w64-$ABI-$1-* | sort -V | tail -n 1 + 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 - pacman -Sp mingw-w64-$ABI-$1 + pacman -Sp mingw-w64-${ABI}-${1} fi } -GLIB=$(getpkg glib2) -ATK=$(getpkg atk) -PANGO=$(getpkg pango) -CAIRO=$(getpkg cairo) -ADW=$(getpkg adwaita-icon-theme) -GTK=$(getpkg $gtk) - -cat < ${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