After https://github.com/termux/termux-packages/commit/e34ae5da030d,
llvm-config was created before termux_step_get_dependencies, meaning
that it gets overwritten if libllvm is installed.
Fix this by creating llvm-config in a new function
termux_step_override_config_scripts, that is run right after
termux_step_get_dependencies.
All packages that have conffiles, and a gz compressed control.tar.gz,
currently fails to install on arm if the deb is built locally or
downloaded and then installed with `apt install
./foo_1.0_arm.deb`. The error looks like:
$ apt install ./tmp/foo.deb
Reading package lists... Error!
E: Tar checksum failed, archive corrupted
E: Could not read meta data from
/data/data/com.termux/files/home/tmp/foo.deb
E: The package lists or status file could not be parsed or opened.
If the package does not have conffiles, or if xz compression is used,
everything works. Let's change back to xz compression for all new and
updated packages for now to workaround this issue.
Even if `apt install ./foo.deb` fails the deb can still be installed
with `dpkg -i ./foo.deb` (seems dpkg does not do the same checksum
check?).
Currently there is a problem building packages that use *-config
scripts (for example gnupg), we are creating a
/bin/sh->/data/data/com.termux/files/usr/bin/sh symlink so that the
shebang for the scripts can be interpreted, but after
ecd214881a ("build-package: add new arg -c for "continue build"") the
symlink was deleted in termux_step_get_dependencies.
Name a patch *.patch.ondevice for it to only be applied when building
on device.
This can be useful if for example a tool for building documentation is
missing on device, or if a tool needed during build (but not runtime)
uses something that triggers selinux, fdsan or some other android
security thing.
When adding this, we go from compiling with
/home/builder/.termux-build/_cache/android-r21d-api-24-v4/bin/clang++ [...] -mrelocation-model pic -pic-level 2 -pic-is-pie [...]
to
/home/builder/.termux-build/_cache/android-r21d-api-24-v5/bin/clang++ [...] -mrelocation-model pic -pic-level 2 [...]
Before, we got a warning when compiling libandroid-spawn:
/home/builder/.termux-build/_cache/android-r21d-api-24-v4/bin/../lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin/ld: warning: shared library text segment is not shareable
and trying to use a program linked against libandroid-spawn gave an
error, see
https://github.com/termux/termux-packages/issues/7215#issuecomment-906154438
the Without this, libraries might end up with text relocations. For
some reason it does not seem to be an issue on the other arches.
%ci:no-build
This has already been done in termux_step_setup_build_folders. Doing
it here causes problems, after
ecd214881a
as BUILDDIR now might be SRCDIR, which should
not be created as it breaks zip extraction.
As replacement for TERMUX_PKG_QUICK_REBUILD. Running
./build-package.sh -c <package> starts a build for <package>, but does
not extract and patch the source from scratch. Instead it sets up the
build variables and starts from termux_step_make.
When working on a big package that can take hours to build it is
convenient to be able to build until there is an error, then apply
some new patch (manually) to the source, and then continue from where
the build failed.
All, or at least most, of our debs contain "./" as a folder. This
causes problems when extracting on some systems, as ./ then is the
system root directory /, and tar cannot change the permissions of this
folder. Trying to build on arch for example gives:
tar: .: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors
The issue appeared on arch somewhat recently, maybe with tar 1.33. To
avoid having to rebuild all packages we now handle both data.tar.xz
types, with prefixed ./, and without.
Also remove some indentation levels while we are at it.
This avoids "./" being part of the tar. "./" translates to the
systemroot / when we extract, and this is problematic since tar cannot
change permissions and ownerships of this folder. tar 1.34 gives an
error:
tar: .: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors
when we try to extract the data.tar.xz.
Do not fail immediately if signature is bad. This often happens when metadata
has been downloaded during repository update. Usually signature becomes fixed
in a few seconds, so we can rather wait than abort build immediately.
Cirrus CI has huge startup delays when using high CPU configuration, which
happen due to limited availability of the community cluster resources.
Unfortunately we can't use lower CPU configuration for termux-packages
because llvm/rust/swift may hit timeout.
Probably we will have more benefits with using Github Actions even without
-I option supplied to build-package.sh
By moving the checks we can make the function more general, and
thereby re-use it for creating subpackages and potentially hostbuild
tools packages.
tests: building libandroid-support and build-essential.
Aptly mixes the all debs into the folders for the other arches, unless
the all arch is explicitly added. This workaround tries to find the
package in the aarch64 Packages file if the all Packages file is not
found.
Most packages have subpackages that are the same arch or
arch-independent compared to the parent package. Emscripten and its
subpackages emscripten-{binaryen,llvm} are an exception, the main
package are arch independent while the subpackages are not. To handle
this correctly we need to modify termux_extract_dep_info as done here.
Use non-IPFS repositories for fetching dependencies when building packages.
This is required at least for CI as gateways seem to block requests due to
either rate limit or restriction for usage by cloud platforms.
Some packages installs binaries to sbin folder. Since termux doesn't use sbin, just map it to bin folder. This eliminates the need of using this flag with TERMUX_PKG_EXTRA_CONFIGURE_ARGS in the build.sh script.
In issue https://github.com/termux/termux-packages/issues/6160 I have found
that community repo "its-pointless.github.io" specifies us as maintainer
for its packages. This is NOT TRUE and potentially misleads people using
these packages.
Now TERMUX_PKG_MAINTAINER will contain a default value which is neutral
and not specify maintainer. So all packages now have to override it to
the correct value.
[skip ci]
%ci:no-build
First step of making possibility to have offline snapshots of
'termux-packages' repo. Useful for making full repo snapshots.
That will allow to preinstall tools like Cmake, Go, Meson to
directory stored within packages tree and will not be wiped when
using ./clean.sh.
Next steps will also implement offlining of the package sources
and NDK standalone toolchain.
Release or Release.gpg files may be absent if a new .deb file was uploaded
to apt repository recently. We may need to do a multiple attempts in a loop
to retry downloading of these files.
Needed after 99e9ab67b634a89d0be9eca12c4f1cdc091ee6e8, where I have disabled
looping in termux_download but curl doesn't do retries on 404 error. We
want immediate failure only for 404's on source and build tool URLs.
As termux_download.sh retries only on transient errors now, we need a
loop when downloading Release{,.gpg} as they may be temporarily unavailable
when metadata is being rebuilt in repository.
For for example libandroid-support we now have
TERMUX_PKG_SRCDIR/License.txt
and
TERMUX_PKG_SRCDIR/wcwidth-$version/License.txt.
Previously the latter would have overwritten the first one in the
install step as the file names are the same.
When no source URL defined, the following error occurs:
/home/builder/termux-packages/scripts/build/get_source/termux_step_get_source.sh: line 2: TERMUX_PKG_SRCURL: unbound variable
Calls termux_git_clone_src if TERMUX_PKG_SRCURL ends with .git, and
termux_download_src_archive and termux_extract_src_archive otherwise.
termux_step_extract_package has been split up into the latter two
functions.
termux_step_post_extract_package has been renamed to
termux_step_post_get_source to reflect these changes.
* termux-licenses: remove licenses that contain copyright information
These licenses cannot be taken from the common termux-licenses package as the copyright information needs to be distributed with the package as well.
271 packages in the main repository needs to be rebuilt after this change.
* termux_step_install_license: remove duplicated comment
* Bump packages that has a license with copyright information
We need to include this copyright information in the package so need
to rebuild them now that termux_step_install_license has been
modified.
The affected licenses are: MIT, ISC, PythonPL, Openfont-1.1, ZLIB,
Libpng, BSD, BSD 2-Clause, BSD 3-Clause.
* zlib: extract license file from zlib.h
* xorgproto: include all individual license files in package
* libgcrypt: include LICENSE file in package
It contains some copyright information so needs to be included in package
* libcrypt: add a dummy BSD 2-Clause license
According to homepage it is suppose to be BSD 2-Clause, but original
project did not include a license file
* libandroid-spawn: add LICENSE file to package
* libandroid-glob: add license file to package
* licenses: allow for comma separated TERMUX_PKG_LICENSE_FILE
%ci:no-build
* libicu: fix so that termux_step_install_license finds license file
%ci:no-build
* termux_step_install_license: check for license file as "License"
%ci:no-build
* libtiff: specify TERMUX_PKG_LICENSE_FILE
%ci:no-build
* asciidoctor: install license to standard location
* krb5: specify license file
* libdb: specify path to license file
%ci:no-build
* libprotobuf: specify path to license file
* darkhttpd: extract license file from darkhttpd.c
* w3m: ensure host libraries are not picked up
* w3m: extract LICENSE file from dock/README
* liblua{,52}: extract license files from doc/readme.html
* termux_step_install_license: look for License.txt as well
* dart: specify path to LICENSE file
* nim: specify license file
* runit: specify license file
* termux_step_install_license: look for LICENSE.TXT as well
* ossp-uuid: extract LICENSE from README
* pigz: extract LICENSE from pigz.c
* ttyrec: extract LICENSE from ttyrec.c
%ci:no-build
* bmon: specify license files
Most of the source files are licensed under MIT, it is not clear (to me) which
parts that are licensed under BSD 2-Clause.
%ci:no-build
* wordgrinder: specify license files
* fdupes: add LICENSE
* autossh: add LICENSE patch
* cmake: specify LICENSE file
* dos2unix: specify LICENSE file
* gnuplot: specify LICENSE file
* termux_step_install_license: look for variants of "copyright" also
* picolisp: specify LICENSE file
* lua-lpeg: extract license file
* tidy: specify license file
* gflags: specify LICENSE file
* timewarrior: fix src url
It seems to have been changed.
* postgresql: specify license file
* ttyrec: fix license patch header
* fossil: specify license file
* fmt: specify license file
* i2pd: specify license file
* leptonica: specify license file
* imgflo: add license file patch
* ired: add license file from ired github repo
* libzen: specify license file
* libmediainfo: specify license file
* mediainfo: specify license file
* tty-clock: add license patch
* samefile: add license patch
* quickjs: add license patch
* docbook-xml: add LICENSE patch
* docbook-xsl: specify LICENSE files
* gnuplot: configure with --without-latex
* timewarrior: add libshared to SRCURL as well
The non-release archives does not contain gitsubmodules so we need to
download it manually.
* restic: switch back to using 0.9.6 archive
* dart: revert revision bump
dart's SDK does not fully support python3 yet, and trying to solve
that is not entirely trivial. We save the dart bump (and upgrade to
2.8.4) for another day.
%ci:no-build
Specifying Termux org members is more correct as we don't have repo-specific
maintainers for termux-packages.
DEB control field specification doesn't allow to specify multiple people as
package maintainers. Value "Termux members @termux" will be used as default
for that field which can be overridden on per-package basis if needed.
%ci:no-build