build-packages.sh: introduce SOURCE_DATE_EPOCH (#19593)

- Allow SOURCE_DATE_EPOCH to be set externally
- Replace BUILD_DATE with SOURCE_DATE_EPOCH for same timestamp
- Set timestamp for all files in pacman package
This commit is contained in:
Biswapriyo Nath 2024-03-28 18:17:51 +05:30 committed by GitHub
parent 6306428c84
commit 09127c8970
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 13 additions and 12 deletions

View File

@ -30,8 +30,7 @@ source "$TERMUX_SCRIPTDIR/scripts/utils/docker/docker.sh"; docker__create_docker
# Functions for working with packages
source "$TERMUX_SCRIPTDIR/scripts/utils/package/package.sh"
SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct 2>/dev/null || date "+%s")
export SOURCE_DATE_EPOCH
export SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH:-$(git log -1 --pretty=%ct 2>/dev/null || date "+%s")}
if [ "$(uname -o)" = "Android" ] || [ -e "/system/bin/app_process" ]; then
if [ "$(id -u)" = "0" ]; then

View File

@ -82,9 +82,6 @@ termux_create_pacman_subpackages() {
local SUB_PKG_INSTALLSIZE
SUB_PKG_INSTALLSIZE=$(du -bs . | cut -f 1)
local BUILD_DATE
BUILD_DATE=$(date +%s)
local PKG_DEPS_SPC=" ${TERMUX_PKG_DEPENDS//,/} "
if [ -z "$TERMUX_SUBPKG_DEPEND_ON_PARENT" ] && [ "${PKG_DEPS_SPC/ $SUB_PKG_NAME /}" = "$PKG_DEPS_SPC" ]; then
# Does pacman supports versioned dependencies?
@ -113,7 +110,7 @@ termux_create_pacman_subpackages() {
echo "pkgver = $TERMUX_PKG_FULLVERSION_FOR_PACMAN"
echo "pkgdesc = $(echo "$TERMUX_SUBPKG_DESCRIPTION" | tr '\n' ' ')"
echo "url = $TERMUX_PKG_HOMEPAGE"
echo "builddate = $BUILD_DATE"
echo "builddate = $SOURCE_DATE_EPOCH"
echo "packager = $TERMUX_PKG_MAINTAINER"
echo "size = $SUB_PKG_INSTALLSIZE"
echo "arch = $SUB_PKG_ARCH"
@ -163,7 +160,7 @@ termux_create_pacman_subpackages() {
echo "pkgver = $TERMUX_PKG_FULLVERSION_FOR_PACMAN"
echo "pkgarch = $SUB_PKG_ARCH"
echo "packager = $TERMUX_PKG_MAINTAINER"
echo "builddate = $BUILD_DATE"
echo "builddate = $SOURCE_DATE_EPOCH"
} > .BUILDINFO
# Write package installation hooks.
@ -200,6 +197,9 @@ termux_create_pacman_subpackages() {
PKG_FORMAT="xz";;
esac
# ensure all elements of the package have the same mtime
find . -exec touch -h -d @$SOURCE_DATE_EPOCH {} +
# Create the actual .pkg file:
local TERMUX_SUBPKG_PACMAN_FILE=$TERMUX_OUTPUT_DIR/${SUB_PKG_NAME}${DEBUG}-${TERMUX_PKG_FULLVERSION_FOR_PACMAN}-${SUB_PKG_ARCH}.pkg.tar.${PKG_FORMAT}
shopt -s dotglob globstar
@ -207,6 +207,7 @@ termux_create_pacman_subpackages() {
--options='!all,use-set,type,uid,gid,mode,time,size,md5,sha256,link' \
--null --files-from - --exclude .MTREE | \
gzip -c -f -n > .MTREE
touch -d @$SOURCE_DATE_EPOCH .MTREE
printf '%s\0' **/* | bsdtar --no-fflags -cnf - --null --files-from - | \
$COMPRESS > "$TERMUX_SUBPKG_PACMAN_FILE"
shopt -u dotglob globstar

View File

@ -37,9 +37,6 @@ termux_step_create_pacman_package() {
local PACMAN_FILE=$TERMUX_OUTPUT_DIR/${TERMUX_PKG_NAME}${DEBUG}-${TERMUX_PKG_FULLVERSION_FOR_PACMAN}-${TERMUX_ARCH}.pkg.tar.${PKG_FORMAT}
local BUILD_DATE
BUILD_DATE=$(date +%s)
if [ "$TERMUX_GLOBAL_LIBRARY" = "true" ] && [ "$TERMUX_PACKAGE_LIBRARY" = "glibc" ]; then
test ! -z "$TERMUX_PKG_DEPENDS" && TERMUX_PKG_DEPENDS=$(package__add_prefix_glibc_to_package_list "$TERMUX_PKG_DEPENDS")
test ! -z "$TERMUX_PKG_BREAKS" && TERMUX_PKG_BREAKS=$(package__add_prefix_glibc_to_package_list "$TERMUX_PKG_BREAKS")
@ -57,7 +54,7 @@ termux_step_create_pacman_package() {
echo "pkgver = $TERMUX_PKG_FULLVERSION_FOR_PACMAN"
echo "pkgdesc = $(echo "$TERMUX_PKG_DESCRIPTION" | tr '\n' ' ')"
echo "url = $TERMUX_PKG_HOMEPAGE"
echo "builddate = $BUILD_DATE"
echo "builddate = $SOURCE_DATE_EPOCH"
echo "packager = $TERMUX_PKG_MAINTAINER"
echo "size = $TERMUX_PKG_INSTALLSIZE"
echo "arch = $TERMUX_ARCH"
@ -115,19 +112,23 @@ termux_step_create_pacman_package() {
echo "pkgver = $TERMUX_PKG_FULLVERSION_FOR_PACMAN"
echo "pkgarch = $TERMUX_ARCH"
echo "packager = $TERMUX_PKG_MAINTAINER"
echo "builddate = $BUILD_DATE"
echo "builddate = $SOURCE_DATE_EPOCH"
} > .BUILDINFO
# Write installation hooks.
termux_step_create_debscripts
termux_step_create_pacman_install_hook
# ensure all elements of the package have the same mtime
find . -exec touch -h -d @$SOURCE_DATE_EPOCH {} +
# Create package
shopt -s dotglob globstar
printf '%s\0' **/* | bsdtar -cnf - --format=mtree \
--options='!all,use-set,type,uid,gid,mode,time,size,md5,sha256,link' \
--null --files-from - --exclude .MTREE | \
gzip -c -f -n > .MTREE
touch -d @$SOURCE_DATE_EPOCH .MTREE
printf '%s\0' **/* | bsdtar --no-fflags -cnf - --null --files-from - | \
$COMPRESS > "$PACMAN_FILE"
shopt -u dotglob globstar