diff --git a/.github/workflows/winpkg.yml b/.github/workflows/winpkg.yml index 2a9101c..3cc5ee3 100644 --- a/.github/workflows/winpkg.yml +++ b/.github/workflows/winpkg.yml @@ -67,9 +67,9 @@ jobs: latest: true fileName: mingw-w64-x86_64-pw3270-plugin-ipc-5.5-0-x86_64.pkg.tar.zst - name: Make bundle - run: /bin/bash ./win/bundle + run: ./win/bundle.msys - name: Make Package - run: tar -C ./.build -Jcf mingw-w64-x86_64-pw3270-bundle-x86_64.tar.xz . + run: tar -C ./.bin/bundle -Jcf mingw-w64-x86_64-pw3270-bundle-x86_64.tar.xz . - uses: ncipollo/release-action@v1 with: tag: ${{ steps.gettag.outputs.tag }} diff --git a/.gitignore b/.gitignore index d489511..f2c4078 100644 --- a/.gitignore +++ b/.gitignore @@ -73,8 +73,4 @@ m4 po app-manifest.xml libtool -<<<<<<< HEAD -======= - - ->>>>>>> develop +*.pkg.tar.zst diff --git a/win/bundle b/win/bundle deleted file mode 100755 index c43fec3..0000000 --- a/win/bundle +++ /dev/null @@ -1,326 +0,0 @@ -#!/bin/bash -# -# SPDX-License-Identifier: LGPL-3.0-or-later -# -# Copyright (C) 2021 Perry Werneck -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . -# - -# -# Referencias: -# -# https://www.gtk.org/docs/installations/windows/ -# http://drup.org/gtk-warning-error-loading-icon-couldnt-recognize-image-file-format -# - -# Setup default paths -srcdir="$(dirname $(dirname $(readlink -f "${0}")))" - -if [ -z ${MINGW_PREFIX} ]; then - if [ -d "/usr/x86_64-w64-mingw32/sys-root/mingw" ]; then - MINGW_PREFIX="/usr/x86_64-w64-mingw32/sys-root/mingw" - PKG_CONFIG="/usr/bin/x86_64-w64-mingw32-pkg-config" - else - echo "Cant determine mingw prefix" - exit -1 - fi -else - PKG_CONFIG=${MINGW_PREFX}/bin/pkg-config -fi - -GTK_PREFIX=$(${PKG_CONFIG} --variable=prefix gtk+-3.0) -GTK_BINARY_VERSION=$(${PKG_CONFIG} --variable=gtk_binary_version gtk+-3.0) -GTK_LIBDIR=$(echo $(${PKG_CONFIG} --variable=libdir gtk+-3.0) | sed "s@^C:/@/c/@g") -GDK_LOADERS=$(echo $(${PKG_CONFIG} --variable=gdk_pixbuf_binarydir gdk-pixbuf-2.0) | sed -e "s@${GTK_PREFIX}@@g") - -buildroot=.build -bindir="${buildroot}${MINGW_PREFIX}/bin" - -if [ -z "${WIN_ROOT}" ]; then - WIN_ROOT="/c/Windows" -fi - -export LANG=C - -install_bin() { - - mkdir -p "${bindir}" - - AGAIN=1 - until [ $AGAIN = 0 ]; do - - SOURCES=$(mktemp) - REQUIRES=$(mktemp) - - find "${buildroot}" -iname "*.dll" > ${SOURCES} - find "${buildroot}" -iname "*.exe" >> ${SOURCES} - - while read FILENAME - do - objdump -p ${FILENAME} | grep "DLL Name:" | cut -d: -f2 | tr "[:upper:]" "[:lower:]" >> ${REQUIRES} - done < ${SOURCES} - - libs_to_exclude=" - advapi32 - cfgmgr32 - comctl32 - comdlg32 - crypt32 - d3d8 - d3d9 - ddraw - dnsapi - dsound - dwmapi - gdi32 - gdiplus - glu32 - glut32 - imm32 - iphlpapi - kernel32 - ksuser - mpr - mscms - mscoree - msimg32 - msvcr71 - msvcr80 - msvcr90 - msvcrt - mswsock - netapi32 - odbc32 - ole32 - oleacc - oleaut32 - opengl32 - psapi - rpcrt4 - secur32 - setupapi - shell32 - shlwapi - user32 - usp10 - version - wininet - winmm - wldap32 - ws2_32 - wsock32 - winspool.drv - ntdll - winhttp - hid - " - - # Remove system DLLs from list - for i in $libs_to_exclude; do - sed -i -e "/${i}/d" ${REQUIRES} - done - - AGAIN=0 - while read FILENAME - do - - if [ ! -e "${bindir}/${FILENAME}" ]; then - - if [ -e ${MINGW_PREFIX}/bin/${FILENAME} ]; then - - AGAIN=1 - cp -v "${MINGW_PREFIX}/bin/${FILENAME}" "${bindir}/${FILENAME}" - if [ "$?" != "0" ]; then - exit -1 - fi - - elif [ -e ${MINGW_PREFIX}/lib/${FILENAME} ]; then - - AGAIN=1 - cp -v "${MINGW_PREFIX}/lib/${FILENAME}" "${bindir}/${FILENAME}" - if [ "$?" != "0" ]; then - exit -1 - fi - - elif [ -e "${WIN_ROOT}/System32/${FILENAME}" ]; then - - echo "Ignoring ${WIN_ROOT}/System32/${FILENAME}" - - else - - echo "Can't find ${MINGW_PREFIX}/bin/${FILENAME} or ${WIN_ROOT}/System32/${FILENAME}" - find "${MINGW_PREFIX}" -iname "${FILENAME}" - exit -1 - - fi - - fi - - done < ${REQUIRES} - - rm -f ${SOURCES} - rm -f ${REQUIRES} - - done - -} - -install_locale() { - - mkdir -p ${buildroot}${MINGW_PREFIX}/share/locale/pt_BR/LC_MESSAGES - - locales=" - gettext-runtime.mo - gettext-tools.mo - glib20.mo - gtk30.mo - gtk30-properties.mo - " - - FILENAMES=$(mktemp) - for i in ${locales} - do - find "${MINGW_PREFIX}/share/locale" -name ${i} >> ${FILENAMES} - done - - while read FILENAME - do - mkdir -p $(dirname "${buildroot}${FILENAME}") - cp -v "${FILENAME}" "${buildroot}${FILENAME}" - if [ "$?" != "0" ]; then - exit -1 - fi - done < ${FILENAMES} - rm -f ${FILENAMES} -} - -install_schemas() { - - mkdir -p ${buildroot}${MINGW_PREFIX}/share/glib-2.0/schemas - - schemas=" - org.gtk.Settings.FileChooser.gschema.xml - gschema.dtd - " - - for schema in ${schemas} - do - cp -v "${MINGW_PREFIX}/share/glib-2.0/schemas/${schema}" "${buildroot}${MINGW_PREFIX}/share/glib-2.0/schemas" - if [ "$?" != "0" ]; then - exit -1 - fi - done - - glib-compile-schemas \ - --targetdir="${buildroot}${MINGW_PREFIX}/share/glib-2.0/schemas" \ - "${buildroot}${MINGW_PREFIX}/share/glib-2.0/schemas" - - if [ "$?" != "0" ]; then - exit -1 - fi -} - -install_theme() { - - mkdir -p "${buildroot}${MINGW_PREFIX}/etc" - cp -rv "${MINGW_PREFIX}/etc/gtk-3.0" "${buildroot}${MINGW_PREFIX}/etc" - if [ "$?" != "0" ]; then - exit -1 - fi - - # https://stackoverflow.com/questions/37035936/how-to-get-native-windows-decorations-on-gtk3-on-windows-7-and-msys2 - mkdir -p ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0 - rm -f ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0/settings.ini - rm -f ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0/gtkrc - - echo "[Settings]" > ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0/settings.ini - echo "gtk-theme-name=${1}" >> ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0/settings.ini - - if [ -e "${srcdir}/win/gtk.css" ]; then - mkdir -p "${buildroot}${MINGW_PREFIX}/share/themes/Default/gtk-3.0" - cp "${srcdir}/win/gtk.css" "${buildroot}${MINGW_PREFIX}/share/themes/Default/gtk-3.0/gtk.css" - fi - -} - -install_icons() { - - mkdir -p "${buildroot}${MINGW_PREFIX}/share/icons" - - if [ -d "${MINGW_PREFIX}/share/icons/${1}" ]; then - - cp -rv "${MINGW_PREFIX}/share/icons/${1}" "${buildroot}${MINGW_PREFIX}/share/icons" - if [ "$?" != 0 ]; then - echo "Can´t copy ${1} icons" - exit -1 - fi - - elif [ -d "/usr/share/icons/${1}" ]; then - - cp -rv "/usr/share/icons/${1}" "${buildroot}${MINGW_PREFIX}/share/icons" - if [ "$?" != 0 ]; then - echo "Can´t copy ${1} icons" - exit -1 - fi - - else - - echo "Can´t find ${1} icons" - exit -1 - - fi - -} - -install_loaders() { - - if [ -d "${MINGW_PREFIX}${GDK_LOADERS}" ]; then - mkdir -p "${buildroot}/${MINGW_PREFIX}${GDK_LOADERS}" - cp -rv ${MINGW_PREFIX}${GDK_LOADERS}/* "${buildroot}/${MINGW_PREFIX}${GDK_LOADERS}" - if [ "$?" != "0" ]; then - exit -1 - fi - - find ${buildroot}/${MINGW_PREFIX}${GDK_LOADERS} -iname "*.a" -exec rm -f {} \; - - fi - -} - -unpack() { - - for package in ${srcdir}/*.pkg.tar.zst - do - echo ${package} - tar -C ${buildroot} --zstd -xf ${package} - if [ "$?" != "0" ]; then - echo "Error unpacking ${package}" - exit -1 - fi - done - -} - -mkdir -p ${buildroot} -unpack - -install_loaders -install_bin -install_locale -install_schemas -install_theme "Adwaita" -install_icons "Adwaita" - - diff --git a/win/bundle.common b/win/bundle.common new file mode 100644 index 0000000..e116be2 --- /dev/null +++ b/win/bundle.common @@ -0,0 +1,306 @@ +#!/bin/bash +# +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# Copyright (C) 2021 Perry Werneck +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# + +# +# References: +# +# https://www.gtk.org/docs/installations/windows/ +# http://drup.org/gtk-warning-error-loading-icon-couldnt-recognize-image-file-format +# + +# Setup default paths +srcdir="$(dirname $(dirname $(readlink -f "${0}")))" + +if [ -z ${MINGW_PREFIX} ]; then + if [ -d "/usr/x86_64-w64-mingw32/sys-root/mingw" ]; then + MINGW_PREFIX="/usr/x86_64-w64-mingw32/sys-root/mingw" + PKG_CONFIG="/usr/bin/x86_64-w64-mingw32-pkg-config" + else + echo "Cant determine mingw prefix" + exit -1 + fi +else + PKG_CONFIG=${MINGW_PREFX}/bin/pkg-config +fi + +GTK_PREFIX=$(${PKG_CONFIG} --variable=prefix gtk+-3.0) +GTK_BINARY_VERSION=$(${PKG_CONFIG} --variable=gtk_binary_version gtk+-3.0) +GTK_LIBDIR=$(echo $(${PKG_CONFIG} --variable=libdir gtk+-3.0) | sed "s@^C:/@/c/@g") +GDK_LOADERS=$(echo $(${PKG_CONFIG} --variable=gdk_pixbuf_binarydir gdk-pixbuf-2.0) | sed -e "s@${GTK_PREFIX}@@g") + +buildroot=.bin/bundle +bindir="${buildroot}${MINGW_PREFIX}/bin" + +if [ -z "${WIN_ROOT}" ]; then + WIN_ROOT="/c/Windows" +fi + +export LANG=C + +prepare() { + rm -fr "${buildroot}" + mkdir -p "${buildroot}" +} + +install_bin() { + + mkdir -p "${bindir}" + + AGAIN=1 + until [ $AGAIN = 0 ]; do + + SOURCES=$(mktemp) + REQUIRES=$(mktemp) + + find "${buildroot}" -iname "*.dll" > ${SOURCES} + find "${buildroot}" -iname "*.exe" >> ${SOURCES} + + while read FILENAME + do + objdump -p ${FILENAME} | grep "DLL Name:" | cut -d: -f2 | tr "[:upper:]" "[:lower:]" >> ${REQUIRES} + done < ${SOURCES} + + libs_to_exclude=" + advapi32 + cfgmgr32 + comctl32 + comdlg32 + crypt32 + d3d8 + d3d9 + ddraw + dnsapi + dsound + dwmapi + gdi32 + gdiplus + glu32 + glut32 + imm32 + iphlpapi + kernel32 + ksuser + mpr + mscms + mscoree + msimg32 + msvcr71 + msvcr80 + msvcr90 + msvcrt + mswsock + netapi32 + odbc32 + ole32 + oleacc + oleaut32 + opengl32 + psapi + rpcrt4 + secur32 + setupapi + shell32 + shlwapi + user32 + usp10 + version + wininet + winmm + wldap32 + ws2_32 + wsock32 + winspool.drv + ntdll + winhttp + hid + " + + # Remove system DLLs from list + for i in $libs_to_exclude; do + sed -i -e "/${i}/d" ${REQUIRES} + done + + AGAIN=0 + while read FILENAME + do + + if [ ! -e "${bindir}/${FILENAME}" ]; then + + if [ -e ${MINGW_PREFIX}/bin/${FILENAME} ]; then + + AGAIN=1 + cp -v "${MINGW_PREFIX}/bin/${FILENAME}" "${bindir}/${FILENAME}" + if [ "$?" != "0" ]; then + exit -1 + fi + + elif [ -e ${MINGW_PREFIX}/lib/${FILENAME} ]; then + + AGAIN=1 + cp -v "${MINGW_PREFIX}/lib/${FILENAME}" "${bindir}/${FILENAME}" + if [ "$?" != "0" ]; then + exit -1 + fi + + elif [ -e "${WIN_ROOT}/System32/${FILENAME}" ]; then + + echo "Ignoring ${WIN_ROOT}/System32/${FILENAME}" + + else + + echo "Can't find ${MINGW_PREFIX}/bin/${FILENAME} or ${WIN_ROOT}/System32/${FILENAME}" + find "${MINGW_PREFIX}" -iname "${FILENAME}" + exit -1 + + fi + + fi + + done < ${REQUIRES} + + rm -f ${SOURCES} + rm -f ${REQUIRES} + + done + +} + +install_locale() { + + mkdir -p ${buildroot}${MINGW_PREFIX}/share/locale/pt_BR/LC_MESSAGES + + locales=" + gettext-runtime.mo + gettext-tools.mo + glib20.mo + gtk30.mo + gtk30-properties.mo + " + + FILENAMES=$(mktemp) + for i in ${locales} + do + find "${MINGW_PREFIX}/share/locale" -name ${i} >> ${FILENAMES} + done + + while read FILENAME + do + mkdir -p $(dirname "${buildroot}${FILENAME}") + cp -v "${FILENAME}" "${buildroot}${FILENAME}" + if [ "$?" != "0" ]; then + exit -1 + fi + done < ${FILENAMES} + rm -f ${FILENAMES} +} + +install_schemas() { + + mkdir -p ${buildroot}${MINGW_PREFIX}/share/glib-2.0/schemas + + schemas=" + org.gtk.Settings.FileChooser.gschema.xml + gschema.dtd + " + + for schema in ${schemas} + do + cp -v "${MINGW_PREFIX}/share/glib-2.0/schemas/${schema}" "${buildroot}${MINGW_PREFIX}/share/glib-2.0/schemas" + if [ "$?" != "0" ]; then + exit -1 + fi + done + + glib-compile-schemas \ + --targetdir="${buildroot}${MINGW_PREFIX}/share/glib-2.0/schemas" \ + "${buildroot}${MINGW_PREFIX}/share/glib-2.0/schemas" + + if [ "$?" != "0" ]; then + exit -1 + fi +} + +install_theme() { + + mkdir -p "${buildroot}${MINGW_PREFIX}/etc" + cp -rv "${MINGW_PREFIX}/etc/gtk-3.0" "${buildroot}${MINGW_PREFIX}/etc" + if [ "$?" != "0" ]; then + exit -1 + fi + + # https://stackoverflow.com/questions/37035936/how-to-get-native-windows-decorations-on-gtk3-on-windows-7-and-msys2 + mkdir -p ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0 + rm -f ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0/settings.ini + rm -f ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0/gtkrc + + echo "[Settings]" > ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0/settings.ini + echo "gtk-theme-name=${1}" >> ${buildroot}${MINGW_PREFIX}/etc/gtk-3.0/settings.ini + + if [ -e "${srcdir}/win/gtk.css" ]; then + mkdir -p "${buildroot}${MINGW_PREFIX}/share/themes/Default/gtk-3.0" + cp "${srcdir}/win/gtk.css" "${buildroot}${MINGW_PREFIX}/share/themes/Default/gtk-3.0/gtk.css" + fi + +} + +install_icons() { + + mkdir -p "${buildroot}${MINGW_PREFIX}/share/icons" + + if [ -d "${MINGW_PREFIX}/share/icons/${1}" ]; then + + cp -rv "${MINGW_PREFIX}/share/icons/${1}" "${buildroot}${MINGW_PREFIX}/share/icons" + if [ "$?" != 0 ]; then + echo "Can´t copy ${1} icons" + exit -1 + fi + + elif [ -d "/usr/share/icons/${1}" ]; then + + cp -rv "/usr/share/icons/${1}" "${buildroot}${MINGW_PREFIX}/share/icons" + if [ "$?" != 0 ]; then + echo "Can´t copy ${1} icons" + exit -1 + fi + + else + + echo "Can´t find ${1} icons" + exit -1 + + fi + +} + +install_loaders() { + + if [ -d "${MINGW_PREFIX}${GDK_LOADERS}" ]; then + mkdir -p "${buildroot}/${MINGW_PREFIX}${GDK_LOADERS}" + cp -rv ${MINGW_PREFIX}${GDK_LOADERS}/* "${buildroot}/${MINGW_PREFIX}${GDK_LOADERS}" + if [ "$?" != "0" ]; then + exit -1 + fi + + find ${buildroot}/${MINGW_PREFIX}${GDK_LOADERS} -iname "*.a" -exec rm -f {} \; + + fi + +} + diff --git a/win/bundle.msys b/win/bundle.msys new file mode 100755 index 0000000..c492ae1 --- /dev/null +++ b/win/bundle.msys @@ -0,0 +1,50 @@ +#!/bin/bash +# +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# Copyright (C) 2021 Perry Werneck +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# + +# +# References: +# +# https://www.gtk.org/docs/installations/windows/ +# http://drup.org/gtk-warning-error-loading-icon-couldnt-recognize-image-file-format +# + +# Load bundle functions +. "$(dirname $(readlink -f "${0}"))/bundle.common" + +prepare + +for package in ${srcdir}/*.pkg.tar.zst +do + echo ${package} + tar -C ${buildroot} --zstd -xf ${package} + if [ "$?" != "0" ]; then + echo "Error unpacking ${package}" + exit -1 + fi +done + +install_loaders +install_bin +install_locale +install_schemas +install_theme "Adwaita" +install_icons "Adwaita" + + -- libgit2 0.21.2