PKGBUILDs for creating various Arch Linux packages
Go to file
2022-06-22 22:58:36 +02:00
.github
android-ndk/default
angleproject/mingw-w64 [angleproject] Add google-cloud-sdk to makedepends 2019-04-23 21:47:43 +02:00
arch-repo-manager/git Rebuild packages against boost 1.79.0 2022-06-15 13:19:05 +02:00
assimp/mingw-w64
baikal/default
bashmarks/custom
bento4/default
binutils/mingw-w64-symlinks Update mingw-w64-binutils-symlinks to 2.32 2019-02-17 21:05:03 +01:00
blackwidowcontrol
bluetooth-raspberrypi
boost
brother-mfc-j4410dw/default Make brother-mfc-j4410dw depend on lib32-gcc-libs 2018-11-11 22:15:53 +01:00
brotli
bzip2/static-compat
c++utilities
ccache
cmake
cmake-format/default Update cmake-format to 0.6.13 2020-08-20 01:20:12 +02:00
configure
cppunit
dbus/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
dbus-soundrecorder/default
dcadec/mingw-w64 added mingw-w64-{dcadec,libsoxr,vid.stab,xvidcore} 2016-03-16 17:49:24 +01:00
devel Update Qt 6 packages to 6.3.1 2022-06-15 02:00:06 +02:00
devtools/custom
diriterator/default
double-conversion/static-compat
environment/static-compat
essentia/git
evince/mingw-w64
exorciser/default further adjustments for mingw-w64-qt5-* 2016-03-25 21:43:59 +01:00
expat/static-compat
extra-cmake-modules/mingw-w64
ffmpeg
filezilla Update mingw-w64-filezilla to 3.25.2 2017-05-23 23:49:48 +02:00
fontconfig/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
freetype2
freetype2-bootstrap
gcc/static-compat
gdk-pixbuf2/mingw-w64
geany/mingw-w64
genesis-starter/default
geocoordinatecalculator Use ninja instead of make for building own projects and rapidjson 2020-10-04 01:04:55 +02:00
gerbera/default
gettext/mingw-w64
git-codereview/default
gitea/default
github-release/gdm85-git
glib2
glibc/static-compat
gnome-breeze/git
gnutls/mingw-w64
gogs/default
graphite/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
gsm/mingw-w64
gtk3/mingw-w64 Update mingw-w64-gtk3 to 3.22.3 2016-11-23 20:12:45 +01:00
handbrake/libfdk_aac
harfbuzz
hopper/default
indicator-kdeconnect/git Import indicator-kdeconnect-git from AUR and fix vala dependency 2019-08-17 17:47:56 +02:00
isoviewer/default
jangouts/default
janus-gateway/default
jasper/mingw-w64
jflap/default further adjustments for mingw-w64-qt5-* 2016-03-25 21:43:59 +01:00
kdeconnect/git
kernel-backup-hooks/default
keyutils/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
kirigami2
libb2/static-compat
libcap/static-compat
libdvdread/default
libevdev/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
libffi/static-compat
libfilezilla
libgcrypt/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
libglvnd/static-compat
libgpg-error/static-compat
libgudev/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
libice/static-compat
libiconv
libinput
libjpeg-turbo/static-compat
libpng/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
libsm/static-compat
libsoxr/mingw-w64
libssh/mingw-w64 added pkgconfig fix (from AUR) 2016-01-04 20:59:07 +01:00
libwacom/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
libx11/static-compat Downgrade libx11 and add shared version 2022-04-29 18:28:31 +02:00
libxau/static-compat
libxcb/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
libxcomposite/static-compat
libxdamage/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
libxdmcp/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
libxext/static-compat
libxfixes/static-compat
libxkbcommon/static-compat
libxml2/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
libxmu/static-compat
libxt/static-compat
libxxf86vm/static-compat
linux-api-headers/static-compat
ltunify/default
lz4/static-compat
mariadb-connector-c/mingw-w64
md4c/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
mediaplayerctl/default Fix mediaplayerctl 2016-10-04 20:18:55 +02:00
mediawriter/default
meson
midifile/git
mkvtoolnix/git
mpv/mingw-w64
mtdev/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
mxedeployqt/git
ncurses/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
nettle/mingw-w64
networkmanager-sstp/default
nginx/custom
nginx-mod-accesskey/default Remove wrong dependency from NGINX modules 2022-06-14 10:19:23 +02:00
nginx-mod-cache-purge/default Remove wrong dependency from NGINX modules 2022-06-14 10:19:23 +02:00
nginx-mod-dav-ext/default
nginx-mod-fancyindex/default Remove wrong dependency from NGINX modules 2022-06-14 10:19:23 +02:00
nginx-mod-rtmp/default
nginx-mod-slowfs-cache/default
nginx-mod-substitutions-filter/default
nginx-mod-upload-progress/default Remove wrong dependency from NGINX modules 2022-06-14 10:19:23 +02:00
nginx-mod-upstream-fair/default
okular/git Add okular-git 2016-11-04 15:24:04 +01:00
openelec-dvb-firmware
openocd
openssl Update static-compat-openssl to 1.1.1p 2022-06-22 22:58:36 +02:00
openssl-1.0/mingw-w64 Update mingw-w64-openssl-1.0 to 1.0.2u 2020-01-30 13:51:42 +01:00
openssl-1.1/mingw-w64 Update mingw-w64-openssl-1.1 to 1.1.1.n 2022-03-16 21:28:53 +01:00
osxcross/apple-darwin
p11-kit/mingw-w64 Port mingw-w64-p11-kit to meson 2019-10-24 17:19:00 +02:00
passwordfile
passwordmanager
pcre/static-compat
pcre2
pdfmerge/default
php73/default
pi-fm-rds/git Change Git sources pointing to GitHub to git+https 2022-03-26 22:11:23 +01:00
pistache/git
plasma-sdk/default Replace plasma-sdk-debug with plasmoidviewer-debug 2018-07-08 20:57:12 +02:00
plasma-wayland-session-no-dbus/default
plasma5-applets-thermal-monitor/git Import plasma5-applets-thermal-monitor-git from AUR and add patch 2019-03-23 19:31:15 +01:00
plasmoidviewer-debug/default
pocketsphinx/default
poedit/default Patch poedit to fix crash when opening po file 2017-07-05 18:57:30 +02:00
postgresql/mingw-w64
proto-quic/mingw-w64-git
psi/git Import psi-git from AUR and fix dependencies 2018-01-10 13:48:13 +01:00
python-colorzero/git Change Git sources pointing to GitHub to git+https 2022-03-26 22:11:23 +01:00
python-gpiozero
python-pyusb/default
python-raspberry-gpio/default
python-rpi.gpio/default Import/add some Python libs for the Pi 2018-11-02 23:52:27 +00:00
python-spidev/default
qca-qt5/mingw-w64 Update mingw-w64-qcq to 2.3.4 2022-01-27 16:02:37 +01:00
qemu-binfmt-arm/default
qmplay2/default
qpaeq-menu-entry/default
qsyncthingtray/default
qt5
qt5-3d
qt5-activeqt/mingw-w64
qt5-base
qt5-canvas3d
qt5-charts
qt5-connectivity
qt5-datavis3d
qt5-declarative
qt5-gamepad
qt5-graphicaleffects
qt5-imageformats
qt5-location
qt5-multimedia
qt5-networkauth
qt5-quickcontrols
qt5-quickcontrols2
qt5-remoteobjects
qt5-script
qt5-scxml
qt5-sensors
qt5-serialport
qt5-speech
qt5-svg
qt5-tools
qt5-translations
qt5-virtualkeyboard
qt5-webchannel
qt5-webengine
qt5-webglplugin
qt5-websockets
qt5-winextras
qt5-xmlpatterns
qt6-3d
qt6-5compat
qt6-activeqt
qt6-base
qt6-charts Update Qt 6 packages to 6.3.1 2022-06-15 02:00:06 +02:00
qt6-connectivity
qt6-datavis3d
qt6-declarative
qt6-imageformats
qt6-lottie
qt6-multimedia
qt6-networkauth
qt6-quick3d
qt6-quicktimeline
qt6-scxml
qt6-sensors
qt6-serialbus
qt6-serialport
qt6-shadertools
qt6-svg Update Qt 6 packages to 6.3.1 2022-06-15 02:00:06 +02:00
qt6-tools
qt6-translations
qt6-virtualkeyboard
qt6-wayland
qt6-webchannel
qt6-websockets
qt6ct/default Update Qt 6 packages to 6.0.0 2020-12-09 13:03:48 +01:00
qtforkawesome
qtutilities
rapidjson
readline/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
reflective-rapidjson
repoindex Use ninja instead of make for building own projects and rapidjson 2020-10-04 01:04:55 +02:00
roccat-tools/default
rpi_ws281x/git
sphinxbase/default
sqlite
sqlpp11/default
sstp-client/default Clean makedepends of sstp-client 2016-06-06 21:50:19 +02:00
subtitlecomposer
syncthingtray
system-image/android-arm64-v8a Update Android packages 2018-11-26 20:50:49 +01:00
systemd/static-compat
systray-memory-display/git Change Git sources pointing to GitHub to git+https 2022-03-26 22:11:23 +01:00
tageditor
tagparser
tcl/static-compat
toggletouch/default
ttf-consolas/default
ttf-oxygen/default Import ttf-oxygen from the AUR and update source URL 2020-07-07 18:10:20 +02:00
ubuntu-latex-fonts/git Change Git sources pointing to GitHub to git+https 2022-03-26 22:11:23 +01:00
util-linux/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
vid.stab/mingw-w64 added mingw-w64-{dcadec,libsoxr,vid.stab,xvidcore} 2016-03-16 17:49:24 +01:00
videodownloader
vlc/nightly Update vlc-nightly 2019-05-28 12:46:38 +02:00
vulkan-headers/static-compat
warmux/default
wayland/static-compat
wxwidgets/mingw-w64 Sync mingw-w64-wxmsw with AUR 2016-08-31 23:14:17 +02:00
x264
x265/mingw-w64
xcb-proto/static-compat
xcb-util/static-compat
xcb-util-image/static-compat
xcb-util-keysyms/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
xcb-util-renderutil/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
xcb-util-wm/static-compat
xorgproto/static-compat
xtrans/static-compat
xvidcore/mingw-w64
xz/static-compat Update static libraries 2022-04-28 22:43:29 +02:00
zlib
zstd/static-compat
zuki-themes/git
.gitignore
.gitmodules
LICENSE
README.md Improve makecontainerpkg 2022-06-12 21:00:20 +02:00

PKGBUILDs

Contains PKGBUILD files for creating Arch Linux packages:

  • Packages for my own applications and libraries such as Syncthing Tray, Tag Editor, Password Manager, ...
  • Packages I maintain in the AUR:
    • misc packages, eg. Subtitle Composer, openelec-dvb-firmware, Jangouts
    • mingw-w64-* packages which allow to build for Windows under Arch Linux, eg. FreeType 2, Qt 5 and Qt 6
    • static-compat-* packages containing static libraries to build self-contained applications running on older GNU/Linux distributions under Arch Linux
    • android-* packages which allow to build for Android under Arch Linux, eg. iconv, Boost, OpenSSL, CppUnit, Qt 5 and Kirigami
    • apple-darwin-* packages which allow to build for MaxOS X under Arch Linux, eg. osxcross and Qt 5 (still experimental)
  • Other packages imported from the AUR to build with slight modifications

So if you like to improve one of my AUR packages, just create a PR here.

Binary repository

I also provide a binary repository containing the packages found in this repository and a lot of packages found in the AUR:

[ownstuff-testing]
SigLevel = Optional TrustAll
Server = https://martchus.no-ip.biz/repo/arch/$repo/os/$arch
Server = https://ftp.f3l.de/~martchus/$repo/os/$arch

[ownstuff]
SigLevel = Optional TrustAll
Server = https://martchus.no-ip.biz/repo/arch/$repo/os/$arch
Server = https://ftp.f3l.de/~martchus/$repo/os/$arch

The testing repository is required if you have the official testing repository enabled. (Packages contained by ownstuff-testing are linked against packages found in the official testing repository.)

The repository is focusing on x86_64 but some packages are also provided for i686 and aarch64.

Note that I can not assure that required rebuilds always happen fast enough (since the offical developers obviously don't wait for me before releasing their packages from staging).

Requests regarding binary packages can be tracked on the issue tracker of this GitHub project as well, e.g. within the general discussion issue.

Container image, building packages within a container

The directory devel/container contains a script to build a container image suitable to run Arch Linux's makepkg script so you can build from PKGBUILDs on any environment where Docker, Podman or any other suitable container runtime is available.

It also contains a script called makecontainerpkg which behaves like makechrootpkg from Arch Linux's devtools but uses the previously mentioned container image. Therefore it does not require devtools, a chroot setup and systemd-nsapwn. Instead, any container runtime should be sufficient (tested with Docker).

The usage of makecontainerpkg is very similar to makechrootpkg. Simply run the script in a directory containing a PKGBUILD file. If the directory contains a file called pacman.conf and/or makepkg.conf those files are configured to be used during the build. The call syntax is the following:

makecontainerpkg [cre args] --- [makepkg args]

Example where the host pacman cache and ccache directories are mounted into the container and a package rebuild is forced via makepkg's flag -f:

makecontainerpkg -v /var/cache/pacman/pkg/ -v /run/media/devel/ccache:/ccache -- -f CCACHE_DIR=/ccache

Set the environment variable CRE to the container runtime executable (by default docker) and set CRE_IMAGE to use a different container image.


There's also the 3rdparty repository docker-mingw-qt5 which contains an image with many mingw-w64 package pre-installed.

Structure

Each package is in its own subdirectoy:

default-pkg-name/variant

where default-pkg-name is the default package name (eg. qt5-base) and variant usually one of:

  • default: the regular package
  • git/svn/hg: the development version
  • mingw-w64: the Windows version (i686/dw2 and x86_64/SEH)
  • android-{aarch64,armv7a-eabi,x86-64,x86}: the Android version (currently only aarch64 actively maintained/tested)
  • apple-darwin: the MacOS X version (still experimental)

The repository does not contain .SRCINFO files.

Generated PKGBUILDs

To avoid repetition some PKGBUILDs are generated. These PKGBUILDs are determined by the presence of the file PKGBUILD.sh.ep besides the actual PKGBUILD file. The PKGBUILD file is only present for read-only purposes in this case - do not edit it manually. Instead, edit the PKGBUILD.sh.ep file and invoke devel/generator/generate.pl. This requires the perl-Mojolicious package to be installed. Set the environment variable LOG_LEVEL to adjust the log level (e.g. debug/info/warn/error). Template layouts/fragments are stored within generator/templates.

Documentation about the used templating system

Contributing to patches

Patches for most packages are managed in a fork of the project under my GitHub profile. For instance, patches for mingw-w64-qt5-base are managed at github.com/Martchus/qtbase.

I usually create a dedicated branch for each version, eg. 5.10.1-mingw-w64. It contains all the patches based on Qt 5.10.1. When doing fixes later on, I usually preserve the original patches and create a new branch, eg. 5.10.1-mingw-w64-fixes.

So in this case it would make sense to contribute directly there. To fix an existing patch, just create a fixup commit. This (unusual) fixup workflow aims to keep the number of additional changes as small as possbile.

To get the patches into the PKGBUILD files, the script devel/qt5/update-patches.sh is used.

Mass rebasing of Qt patches

This is always done by me. Please don't try to help here because it will only cause conflicts. However, the workflow is quite simple:

  1. Run devel/qt5/rebase-patches.sh on all Qt repository forks or just devel/qt5/rebase-all-patches.sh
    • eg. rebase-patches.sh 5.11.0 5.10.1 mingw-w64-fixes to create branch 5.11.0-mingw-w64 based on 5.10.1-mingw-w64-fixes
    • after fixing possible conflicts, run devel/qt5/continue-rebase-patches.sh
    • otherwise, that's it
    • all scripts need to run in the Git repository directory of the Qt module except rebase-all-patches.sh which needs the environment variable QT_GIT_REPOS_DIR to be set
  2. Run devel/qt5/update-patches.sh or devel/qt5/update-all-patches.sh to update PKGBUILDs
    • eg. devel/qt5/update-all-patches.sh "" mingw-w64 qt6 to consider all mingw-w64-qt6-* packages

Brief documentation about mingw-w64-qt packages

The Qt project does not support building Qt under GNU/Linux when targeting mingw-w64. With Qt 6 they also stopped 32-bit builds. They also don't provide static builds targeting mingw-w64. They are also relying a lot on their bundled libraries while my builds aim to build dependencies separately. So expect some rough edges when using my packaging.

Neverthless it make sense to follow the official documentation. For concrete examples how to use this packaging with CMake, just checkout the mingw-w64 variants of e.g. syncthingtray within this repository. The Arch Wiki also has a section about mingw-w64 packaging.

Note that the ANGLE and "dynamic" variants of Qt 5 packages do not work because they would require fxc.exe to build.

Tested build and deployment tools for mingw-w64-qt5 packages

Currently, I test with qmake and CMake. With both build systems it is possible to use either the shared or the static libraries. Please read the comments in the PKGBUILD file itself and the pinned comments in the AUR for futher information.

There are also pkg-config files, but those aren't really tested.

qbs and windeployqt currently don't work very well (see issues). Using the static libraries or mxedeployqt might be an alternative to windeployqt.

Tested build and deployment tools for mingw-w64-qt6 packages

In order to build a Qt-based project using mingw-w64-qt6 packages one also needs to install the regular qt6-base package for development tools such as moc. The packages qt6-tools, qt6-declarative and qt6-shadertools contain also native binaries which might be required by some projects. At this point the setup can break if the version of regular packages and the versions of the mingw-w64 packages differ. I cannot do anything about it except trying to upgrade the mingw-w64 packages as fast as possible. There's actually a lengthy discussion about this topi on the Qt development mailinglist so the situation might improve in the future. Note that as of qtbase commit 5ffc744b791a114a3180a425dd26e298f7399955 (requires Qt > 6.2.1) one can specify -DQT_NO_PACKAGE_VERSION_CHECK=TRUE to ignore the strict versioning check.

Currently, I test only CMake. It is possible to use either the shared or the static libraries. The static libraries are installed into a nested prefix (/usr/i686-w64-mingw32/static and /usr/x86_64-w64-mingw32/static) so this prefix needs to be prepended to CMAKE_FIND_ROOT_PATH for using the static libraries. To generally prefer static libraries one might use the helper scripts provided by the mingw-w64-cmake-static package.

The build systems qbs and qmake are not tested. It looks like Qt's build system does not install pkg-config files anymore and so far no effort has been taken to enable them.

Note that windeployqt needed to be enabled by the official/regular qt6-tools package but would likely not work very well anyways. Using the static libraries or mxdeployqt might be an alternative for windeployqt.

Static plugins and CMake

Qt 5 initially didn't support it so I added patches to make it work. After Qt 5 added support I still kept my own version because I didn't want to risk any regressions (which would be tedious to deal with). So the official documentation does not apply to my packages. One simply has to link against the targets of the wanted static plugins manually.

However, for Qt 6 I dropped my patches and the official documentation applies. I would still recommended to set the target property QT_DEFAULT_PLUGINS of relevant targets to 0 and link against wanted plugin targets manually. At least in my cases the list of plugins selected by default seemed needlessly long. I would also recommended to set the CMake variable QT_SKIP_AUTO_QML_PLUGIN_INCLUSION to a falsy value because this pulls in a lot of dependencies which are likely not needed.

Further documentation

The directory qt5-base/mingw-w64 contains also a README with more Qt 5 specific information.

Running Windows executables built using mingw-w64 packages with WINE

It is recommended to use the scripts x86_64-w64-mingw32-wine and i686-w64-mingw32-wine provided by the mingw-w64-wine package. These scripts are a wrapper around the regular wine binary ensuring all the DLLs provided by mingw-w64-*-packages of the relevant architecture can be located. It also uses a distinct wine prefix so your usual configuration (e.g. tailored to run certain games) does not go into the way and is also not messed with.

Here are neverthless some useful hints to run WINE manually:

  • Set the environment variable WINEPREFIX to use a distinct WINE-prefix if wanted.
  • Set WINEPATH for the search directories of needed DLLs, e.g. WINEPATH=$builds/libfoo;$builds/libbar;/usr/x86_64-w64-mingw32.
  • Set WINEARCH to win32 for a 32-bit environment (win64 is the default which will get you a 64-bit environment)
  • Set WINEDLLOVERRIDES to control loading DLLs, e.g. WINEDLLOVERRIDES=mscoree,mshtml= disables the annoying Gecko popup.
  • To set environment variables like PATH or QT_PLUGIN_PATH for the Windows program itself use the following approach:
    1. Open regedit
    2. Go to HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
    3. Add/modify the variable, e.g. set PATH=C:\windows\system32;C:\windows;Z:\usr\x86_64-w64-mingw32\bin and QT_PLUGIN_PATH=Z:/usr/x86_64-w64-mingw32/lib/qt6/plugins
  • It is possible to run apps in an headless environment but be aware that WINE is not designed for this. For instance, when an application crashes WINE still attempts to show the crash window and the application stays stuck in that state.
  • See https://wiki.winehq.org/Wine_User's_Guide for more information

Static GNU/Linux libraries

This repository contains several static-compat-* packages providing static libraries intended to distribute "self-contained" executables. These libraries are built against and older version of glibc to be able to run on older distributions without having to link against glibc statically. The resulting binaries should run on distributions with glibc 2.26 or newer (or Linux 4.4 or newer when linking against glibc statically), e.g. openSUSE Leap 15.0, Fedora 27, Debian 10 and Ubuntu 18.04. The packages might not be updated as regularily as their normal counterparts but the idea is to provide an environment with a recent version of GCC/libstdc++ and other libraries such as Qt and Boost but still be able to run the resulting executables on older distributions. Note that these packages are still experimental at this point.

To use the packages, simply invoke /usr/static-compat/bin/g++ instead of /usr/bin/g++. The package static-compat-environment provide a script to set a few environment variables to make this easier. There are also packages providing build system wrappers such as static-compat-cmake.

It would be conceivable to make fully statically linked executables. However, it would not be possible to support OpenGL because glvnd and vendor provided OpenGL libraries are always dynamic libraries. It makes also no sense to link against glibc (and possibly other core libraries) statically as they might use dlopen. Therefore this setup aims for a partially statically linked build instead, where stable core libraries like glibc/pthreads/OpenGL/… are assumed to be provided by the GNU/Linux system but other libraries like libstdc++, Boost and Qt are linked against statically. This is similar to AppImage where a lot of libraries are bundled but certain core libraries are expected to be provided by the system.

Note that I decided to let static libraries live within the subprefix /usr/static-compat (in contrast to -static packages found in the AUR). The main reason is that my packaging requires a custom glibc/GCC build for compatibility and I suppose that simply needs to live within its own prefix. Besides, the version might not be kept 100 % in sync with the shared counterpart. Hence it makes sense to make the static packages independent with their own headers and configuration files to avoid problems due to mismatching versions. Additionally, some projects (such as Qt) do not support installing shared and static libraries within the same prefix at the same time because the config files would clash.

Copyright © 2015-2022 Marius Kittler

All code is licensed under GPL-2-or-later.