[cygport - the Cygwin packaging tool] branch master, updated. 0.36.8
Jon Turney
jturney@sourceware.org
Sun Feb 11 16:53:52 GMT 2024
https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=04ff26fa2bc3c5834c0d046723dc7cb0be096676
commit 04ff26fa2bc3c5834c0d046723dc7cb0be096676
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date: Sun Feb 11 16:46:00 2024 +0000
Bump version to 0.36.8
https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=7d6d4b2e6d5735d740df02d5ca36927fbb6e1726
commit 7d6d4b2e6d5735d740df02d5ca36927fbb6e1726
Author: Christian Franke <christian.franke@t-online.de>
Date: Mon Aug 28 16:24:36 2023 +0200
Add initial support for SOURCE_DATE_EPOCH
If specified, set the header timestamps of executables and
patch files to SOURCE_DATE_EPOCH.
Suppress the header timestamp of .gz files.
Instruct tar to avoid more recent modification times and
to sort all entries by name.
https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=9e82685e32f6717675e9f6bf55dd1336e3fc3831
commit 9e82685e32f6717675e9f6bf55dd1336e3fc3831
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date: Sun Feb 11 14:42:08 2024 +0000
Use file-prefix-map rather than debug-prefix-map
Use GCC's file-prefix-map option (available since gcc 8).
This improves build reproducibilty and avoids leaking unhelpful details
of the build environment through __FILE__ and similar macros.
https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/cygport.git;h=c60f801cb9238f43da2c81074ecc653ed5aa3a6a
commit c60f801cb9238f43da2c81074ecc653ed5aa3a6a
Author: Daisuke Fujimura <booleanlabel@gmail.com>
Date: Sun Dec 3 18:44:05 2023 +0000
git.cygclass: Retry without the depth option
Some git providers do not support smart transport, so specifying the
'depth' option will result in an error.
```
Cloning into 'xxxx'...
fatal: dumb http transport does not support shallow capabilities
```
Retry without it in those cases
Diff:
---
NEWS | 7 +++++++
bin/cygport.in | 23 ++++++++++++++++++-----
cygclass/git.cygclass | 24 +++++++++++++++++++++---
cygport.spec | 2 +-
data/sample.cygport | 2 +-
lib/pkg_pkg.cygpart | 20 ++++++++++++++++++--
lib/src_postinst.cygpart | 22 +++++++++++++++++++---
meson.build | 2 +-
8 files changed, 86 insertions(+), 16 deletions(-)
diff --git a/NEWS b/NEWS
index d30f8470..0a6a231d 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+0.36.8:
+ * Switch from gpg to gpg2 for checking and making signatures
+ * cmake: Add src_test definition
+ * Define _FORTIFY_SOURCE as 3
+ * git: Retry clone without '--depth' if it fails due to dumb transport
+ * Add initial support for SOURCE_DATE_EPOCH
+
0.36.7:
* Fix incorrect options passed to unzstd in unpack()
* Warn that DEPEND is deprecated
diff --git a/bin/cygport.in b/bin/cygport.in
index 3f89ac67..5fc89eaf 100755
--- a/bin/cygport.in
+++ b/bin/cygport.in
@@ -231,8 +231,9 @@ source ${_privlibdir}/check_funcs.cygpart
###
# check now for all mandatory programs
-for _myprog in bzip2 cat chmod cp diff diffstat dos2unix file find gawk grep gzip \
- install ln mkdir mv patch rm rsync sed sort tar xargs which xz
+for _myprog in bzip2 cat chmod cp date diff diffstat dos2unix file find gawk grep \
+ gzip install ln mkdir mv patch rm rsync sed sort tar touch which \
+ xargs xz
do
if ! check_prog ${_myprog}
then
@@ -490,6 +491,18 @@ do
done
unset restrict
+if [ "${SOURCE_DATE_EPOCH+y}" = "y" ]
+then
+ if [ -n "$(echo "${SOURCE_DATE_EPOCH}" | sed -e 's/^$/X/' -e 's/[0-9]//g')" ]
+ then
+ error "SOURCE_DATE_EPOCH must be an integer number (seconds since the unix epoch)"
+ fi
+ case $(peflags --version 2>/dev/null | sed -n '1s/^.* //p') in
+ 4.6.[6-9]|4.[7-9]*|[5-9]*) ;;
+ *) error "SOURCE_DATE_EPOCH requires peflags 4.6.6 or later"
+ esac
+fi
+
################################################################################
#
@@ -617,10 +630,10 @@ then
do
for map in ${DEBUG_PREFIX_MAPS[*]}
do
- declare ${flags}+=" -fdebug-prefix-map=${map}=/usr/src/debug/${PF}"
+ declare ${flags}+=" -ffile-prefix-map=${map}=/usr/src/debug/${PF}"
done
- declare ${flags}+=" -fdebug-prefix-map=${B}=/usr/src/debug/${PF}"
- declare ${flags}+=" -fdebug-prefix-map=${S}=/usr/src/debug/${PF}"
+ declare ${flags}+=" -ffile-prefix-map=${B}=/usr/src/debug/${PF}"
+ declare ${flags}+=" -ffile-prefix-map=${S}=/usr/src/debug/${PF}"
done
unset flags map
fi
diff --git a/cygclass/git.cygclass b/cygclass/git.cygclass
index e53a7985..3cb2c0d5 100644
--- a/cygclass/git.cygclass
+++ b/cygclass/git.cygclass
@@ -78,17 +78,35 @@ git_fetch() {
_depth="--depth 1"
if defined GIT_TAG
then
- _depth+=" --branch ${GIT_TAG}"
+ _branch="--branch ${GIT_TAG}"
elif defined GIT_BRANCH
then
- _depth+=" --branch ${GIT_BRANCH}"
+ _branch="--branch ${GIT_BRANCH}"
fi
fi
# T likely doesn't exist at this point, so create it first
mkdir -p ${T}
cd ${T}
- verbose git clone ${_depth} --no-checkout ${GIT_URI} ${GIT_MODULE} || error "git clone failed"
+
+ # Try to clone with the depth option (if appropriate), but retry if that
+ # fails due to lack of capabilities of the host of the specified
+ # GIT_URI.
+ _gitlog=${T}/git.$$.log
+ verbose git clone ${_depth} ${_branch} --no-checkout ${GIT_URI} ${GIT_MODULE} |& tee ${_gitlog}
+ if [ ${PIPESTATUS[0]} != 0 ]
+ then
+ grep -q "fatal: dumb http transport does not support shallow capabilities" ${_gitlog}
+ if [ $? = 0 ]
+ then
+ warning "git clone failed, retrying without --depth option"
+ verbose git clone ${_branch} --no-checkout ${GIT_URI} ${GIT_MODULE} || error "git clone failed"
+ else
+ cat ${_gitlog}
+ error "git clone failed"
+ fi
+ fi
+
cd ${T}/${GIT_MODULE}
#****v* git.cygclass/GIT_BRANCH
diff --git a/cygport.spec b/cygport.spec
index 8d5aa090..0a242241 100644
--- a/cygport.spec
+++ b/cygport.spec
@@ -1,7 +1,7 @@
%define debug_package %{nil}
Name: cygport
-Version: 0.36.7
+Version: 0.36.8
Release: 1%{?dist}
Summary: Cygwin package building tool
diff --git a/data/sample.cygport b/data/sample.cygport
index 3406eeb1..8d57ecf0 100644
--- a/data/sample.cygport
+++ b/data/sample.cygport
@@ -1,7 +1,7 @@
inherit meson
NAME="cygport"
-VERSION=0.36.7
+VERSION=0.36.8
RELEASE=1
CATEGORY="Devel"
SUMMARY="Cygwin source packaging tool"
diff --git a/lib/pkg_pkg.cygpart b/lib/pkg_pkg.cygpart
index 8f06a5f6..756a687c 100644
--- a/lib/pkg_pkg.cygpart
+++ b/lib/pkg_pkg.cygpart
@@ -42,7 +42,7 @@ TAR_COMPRESSION_EXT="${TAR_COMPRESSION_EXT:-xz}"
#****
__tar() {
- local TAR_COMPRESSION_OPT;
+ local TAR_COMPRESSION_OPT TAR_SOURCE_DATE_OPTS;
# We could use --auto-compress, but this also constrains the extension
# to the currently valid set. We could probe if tar supports the
@@ -65,7 +65,14 @@ __tar() {
error "tar option for TAR_COMPRESSION_EXT='${TAR_COMPRESSION_EXT}' unknown"
;;
esac
- tar ${TAR_COMPRESSION_OPT} --owner=Guest:501 --group=None:513 -cvf "$@"
+
+ if [ -n "${SOURCE_DATE_EPOCH}" ]
+ then
+ # Ensure reproducible sort order and last modification times <= SOURCE_DATE_EPOCH
+ TAR_SOURCE_DATE_OPTS="--sort=name --mtime=@${SOURCE_DATE_EPOCH} --clamp-mtime"
+ fi
+
+ tar ${TAR_COMPRESSION_OPT} ${TAR_SOURCE_DATE_OPTS} --owner=Guest:501 --group=None:513 -cvf "$@"
}
__pkg_binpkg() {
@@ -319,6 +326,7 @@ __pkg_diff() {
local difflevel;
local exclude;
local optional_patchfiles;
+ local source_date;
default_excludes="CYGWIN-PATCHES aclocal.m4~ aclocal.m4t autom4te.cache
config.cache config.guess config.log config.status config.sub
@@ -498,6 +506,14 @@ __pkg_diff() {
sed -b -e '/^diff -u/d' -i ${optional_patchfiles} ${patchdir}/${src_patchfile};
+ if [ -n "${SOURCE_DATE_EPOCH}" ]
+ then
+ # Ensure that the timestamp comment in the generated patch file is reproducible
+ source_date=$(date -d @"${SOURCE_DATE_EPOCH}" -u +'%Y-%m-%d %H:%M:%S.000000000 +0000')
+ sed -b -e "s|^\(+++ [^\t]*\t\).*\$|\1${source_date}|" \
+ -i ${optional_patchfiles} ${patchdir}/${src_patchfile}
+ fi
+
diffstat -p${difflevel} ${optional_patchfiles} ${patchdir}/${src_patchfile};
}
diff --git a/lib/src_postinst.cygpart b/lib/src_postinst.cygpart
index dd947311..f06004e4 100644
--- a/lib/src_postinst.cygpart
+++ b/lib/src_postinst.cygpart
@@ -41,7 +41,7 @@ __prep_fonts_dir() {
for catalogue in ${D}${cataloguedir}/*
do
fontdir=$(readlink -f ${catalogue})
- find ${D}${fontdir} -name '*.pcf' -exec gzip -q '{}' +
+ find ${D}${fontdir} -name '*.pcf' -exec gzip -q ${SOURCE_DATE_EPOCH:+-n} '{}' +
mkfontscale ${D}${fontdir}
mkfontdir ${D}${fontdir}
done
@@ -775,7 +775,7 @@ __prepman() {
while read -d $'\0' manpage
do
echo " ${manpage##*/}";
- gzip -q "${manpage}";
+ gzip -q ${SOURCE_DATE_EPOCH:+-n} "${manpage}";
done
fi
}
@@ -819,7 +819,7 @@ __prepinfo() {
while read -d $'\0' infopage
do
echo " ${infopage##*/}";
- gzip -q "${infopage}";
+ gzip -q ${SOURCE_DATE_EPOCH:+-n} "${infopage}";
done
fi
}
@@ -989,6 +989,12 @@ __prepstrip_one() {
objdump=${objcopy/copy/dump}
+ if [ -n "${SOURCE_DATE_EPOCH}" ]
+ then
+ # Do not embed timestamps for archive members; preserve PE header timestamps
+ objcopy+=" --enable-deterministic-archives --preserve-dates"
+ fi
+
# Static libraries should not be fully stripped, but we can
# still provide split debuginfo if desired
case "${exe}" in
@@ -1074,6 +1080,16 @@ __prepstrip_one() {
# keep sticky bit if present
chmod u+w,a+x "${exe}";
+ if [ -n "${SOURCE_DATE_EPOCH}" ]
+ then
+ case "${exe}" in
+ *.exe|*.dll|*.so|*.so.*|*.oct|*.mex|*.cmxs)
+ # Ensure PE header timestamp is reproducible and checksum is correct
+ # objcopy later inherits the timestamp to debug info and stripped file
+ peflags --checksum=1 --timestamp=${SOURCE_DATE_EPOCH} ${exe} >/dev/null ;;
+ esac
+ fi
+
if defined _CYGPORT_RESTRICT_debuginfo_
then
${objcopy} --strip-all "${exe}";
diff --git a/meson.build b/meson.build
index b648c3be..70e2f35b 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
project('cygport',
- version: '0.36.7')
+ version: '0.36.8')
bindir = join_paths(get_option('prefix'), get_option('bindir'))
datadir = join_paths(get_option('prefix'), get_option('datadir'))
More information about the Cygwin-apps-cvs
mailing list