diff --git a/docker/appimage/Dockerfile b/docker/appimage/Dockerfile index 29a040f6..cec5f93a 100644 --- a/docker/appimage/Dockerfile +++ b/docker/appimage/Dockerfile @@ -1,105 +1,107 @@ # Dockerfile - docker/appimage # Copyright (C) 2021 g10 Code GmbH # # Software engineering by Ingo Klöcker # # This file is part of GnuPG. # # Gpg4win is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # Gpg4win 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 General Public License # along with this program; if not, see . # # SPDX-License-Identifier: GPL-2.0+ FROM centos:7 # Import the CentOS 7 package signing key after verifying its fingerprint. # Then add the software collections repository from the CentOS SCLo SIG and # import its package signing key after verifying the fingerprint. # Ditto for the EPEL 7 package signing key. RUN test $(gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 | grep ^pub: | wc -l) = 1 \ && gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 | grep -q ^fpr:::::::::6341AB2753D78A78A7C27BB124C6A8A7F4A80EB5 \ && rpmkeys --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 \ && yum -y update \ && yum -y install \ centos-release-scl \ && test $(gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo | grep ^pub: | wc -l) = 1 \ && gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo | grep -q ^fpr:::::::::C4DBD535B1FBBA14F8BA64A84EB84E71F2EE9D55 \ && rpmkeys --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo \ && yum -y update \ && yum -y install \ epel-release \ && test $(gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 | grep ^pub: | wc -l) = 1 \ && gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 | grep -q ^fpr:::::::::91E97D7C4A5E96F17F3E888F6A2FAEA2352C64E5 \ && rpmkeys --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 \ && yum -y update \ && rm -rf /root/.gnupg RUN yum -y install \ at-spi2-core-devel \ automake \ boost169-devel \ bzip2 \ bzip2-devel \ cmake3 \ dbus-devel \ devtoolset-7-binutils \ devtoolset-7-gcc \ devtoolset-7-gcc-c++ \ devtoolset-7-make \ egl-wayland-devel \ file \ fontconfig-devel \ freetype-devel \ gettext \ git \ gnutls-devel \ gperf \ + gtk-update-icon-cache \ libXrender-devel \ libicu-devel \ libjpeg-devel \ libpng-devel \ libxkbcommon-x11-devel \ mesa-libEGL-devel \ mesa-libGL-devel \ openldap-devel \ openssl11-devel \ patch \ pcre2-devel \ + python36-lxml \ readline-devel \ stow \ wayland-devel \ wget \ which \ xcb-util-image-devel \ xcb-util-keysyms-devel \ xcb-util-renderutil-devel \ xcb-util-wm-devel \ xz-devel \ zlib-devel # download the necessary linuxdeploy AppImages and extract them because we have no fuse in the container RUN mkdir -p /tmp/download \ && cd /tmp/download \ && wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage \ && wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage \ && chmod +x linuxdeploy-* \ && cd /tmp \ && download/linuxdeploy-plugin-qt-x86_64.AppImage --appimage-extract \ && download/linuxdeploy-x86_64.AppImage --appimage-extract \ && rm -rf /tmp/download \ && mkdir -p /opt \ && mv /tmp/squashfs-root /opt/linuxdeploy COPY build-appimage.sh / RUN chmod +x build-appimage.sh diff --git a/src/appimage/Makefile.am b/src/appimage/Makefile.am index 6fc21e04..e014b202 100644 --- a/src/appimage/Makefile.am +++ b/src/appimage/Makefile.am @@ -1,181 +1,184 @@ # Makefile.am - Makefile for building AppImage of Kleopatra # Copyright (C) 2005, 2006, 2007, 2008, 2009, 2021 g10 Code GmbH # # Software engineering by Ingo Klöcker # # This file is part of Gpg4win. # # Gpg4win is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # Gpg4win 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 General Public License # along with this program; if not, see . # # SPDX-License-Identifier: GPL-2.0+ EXTRA_DIST = AppRun root := /build stampdir := $(root)/stamps # Source packages for the AppImage appimage_spkgs = sqlite libgpg-error libassuan npth libgcrypt libksba gnupg \ pinentry gpgme paperkey # Qt packages for the AppImage appimage_qtpkgs = qtbase qttools qtx11extras qtwayland qtsvg qttranslations # KDE packages for the AppImage appimage_kdepkgs = kconfig kwidgetsaddons ki18n extra-cmake-modules \ kcompletion kwindowsystem kcoreaddons libkleo kcodecs \ kmime kconfigwidgets kxmlgui kguiaddons kitemviews \ kiconthemes kleopatra breeze-icons kitemmodels karchive \ kcrash kdbusaddons # Binary packages for the AppImage #appimage_bpkgs = kde-l10n appimage_pkg_gpgme_configure = --enable-languages=cpp,qt \ --disable-gpg-test \ --disable-gpgsm-test # TODO: Disable Qt Sql? # TODO: Disable Qt Testlib? appimage_pkg_qtbase_configure = ../$$$${pkg_version}/configure -opensource \ -confirm-license \ -platform linux-g++ \ -release \ -shared \ -prefix $$$${pkgidir} \ -I '$(idir)/include' \ -L '$(idir)/lib' \ -opengl desktop \ -no-glib \ -accessibility \ -nomake examples \ -nomake tests \ -no-sql-mysql \ -no-sql-sqlite \ -no-sql-odbc \ -no-sql-psql \ -no-sql-tds \ -v \ OPENSSL_INCDIR=/usr/include/openssl11 define appimage_pkg_qtbase_post_install (cd $$$${pkgbdir}; \ make install;) endef appimage_pkg_qttools_configure = \ "$(idir)/bin/qmake" ../$$$${pkg_version} define appimage_pkg_qttools_post_install (cd $$$${pkgbdir}; \ mkdir -p $$$${pkgidir}; \ cp -r bin lib include $$$${pkgidir}) endef appimage_pkg_qtx11extras_configure = \ "$(idir)/bin/qmake" ../$$$${pkg_version} define appimage_pkg_qtx11extras_post_install (cd $$$${pkgbdir}; \ mkdir -p $$$${pkginstallroot}; \ make install INSTALL_ROOT=$$$${pkginstallroot}; \ mkdir -p $$$${pkgidir}; \ mv $$$${pkgbladir}/* $$$${pkgidir}; \ rm -rf $$$${pkginstallroot};) endef appimage_pkg_qtwayland_configure = \ "$(idir)/bin/qmake" ../$$$${pkg_version} define appimage_pkg_qtwayland_post_install (cd $$$${pkgbdir}; \ mkdir -p $$$${pkginstallroot}; \ make install INSTALL_ROOT=$$$${pkginstallroot}; \ mkdir -p $$$${pkgidir}; \ mv $$$${pkgbladir}/* $$$${pkgidir}; \ rm -rf $$$${pkginstallroot};) endef appimage_pkg_qtsvg_configure = \ "$(idir)/bin/qmake" ../$$$${pkg_version} # XXX Adding the qtconf after qtsvg is a weird hack # because somhow (yay qmake) zlib is not linked if # the qt conf exists before that. The qt conf is # needed for qttranslations to find the correct path # of the translation tools. define appimage_pkg_qtsvg_post_install (cd $$$${pkgbdir}; \ mkdir -p $$$${pkgidir}; \ cp -r lib include plugins $$$${pkgidir}; \ mkdir -p $$$${pkgidir}/bin; \ echo "[Paths]" > $$$${pkgidir}/bin/qt.conf; \ echo "Prefix = .." >> $$$${pkgidir}/bin/qt.conf) endef appimage_pkg_qttranslations_configure = \ "$(idir)/bin/qmake" ../$$$${pkg_version} define appimage_pkg_qttranslations_post_install ( rm -rf $$$${pkgidir}/translations; \ mkdir -p $$$${pkgidir}; \ cp -r $$$${pkgbdir}/translations $$$${pkgidir}/translations;) endef +# do not create the huge icon resource files +appimage_pkg_breeze_icons_configure = -DBINARY_ICONS_RESOURCE=OFF + appimage_pkg_ki18n_configure = -DBUILD_WITH_QML=OFF appimage_pkg_libkleo_configure = \ -DBOOST_INCLUDEDIR=/usr/include/boost169 \ -DBOOST_LIBRARYDIR=/usr/lib64/boost169 gpg4win_pkg_kleopatra_configure = \ -DFORCE_DISABLE_KCMUTILS=ON \ -DDISABLE_KWATCHGNUPG=ON \ -DRELEASE_SERVICE_VERSION=Gpg4win-$(VERSION) appimage_pkg_kleopatra_configure = \ -DBOOST_INCLUDEDIR=/usr/include/boost169 \ -DBOOST_LIBRARYDIR=/usr/lib64/boost169 \ -DDISABLE_KWATCHGNUPG=ON \ -DRELEASE_SERVICE_VERSION=Gpg4win-$(VERSION) # FIXME: Uses spaces in distribution text appimage_pkg_kxmlgui_configure = \ -DFORCE_DISABLE_KGLOBALACCEL=ON \ -DXMLGUI_DISTRIBUTION_TEXT=g10_Code_GmbH_AppImage ######################################################################## # Now do the bunch of the work. This is a bunch of dirty magic to # integrate our special makefile into automake, while not actually # including it (make should include it). This is in turn necessary # because automake can't deal with the elegant magic in the actual # Makefile. define INCLUDE_BY_MAKE include $(1) endef $(eval $(call INCLUDE_BY_MAKE,appimage.mk)) clean-local: clean-appimage license.blurb: $(top_srcdir)/doc/license-page $(top_srcdir)/doc/GPLv3 cat $(top_srcdir)/doc/license-page $(top_srcdir)/doc/GPLv3 >$@ all-local: $(stampdir)/stamp-final @echo "###################################################" @echo " AppImage $(VERSION) successfully build!" @echo " The AppImage can be found under src/installers" @echo "###################################################"