makerepropkg: use correct devtools makepkg.conf files from dist
Use the recorded buildtool in order to download the matching dist package and use the appropriate makepkg.conf for reproducing the package. This is required as the flags are not recorded in the BUILDINFO hence we need to provide the matching config that declared those flags.
This commit is contained in:
parent
1f1f6be889
commit
dacde204c9
3
Makefile
3
Makefile
|
@ -1,4 +1,5 @@
|
||||||
V=20210202
|
V=20210202
|
||||||
|
BUILDTOOLVER ?= $(V)-git
|
||||||
|
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
MANDIR = $(PREFIX)/share/man
|
MANDIR = $(PREFIX)/share/man
|
||||||
|
@ -92,7 +93,7 @@ edit = sed -e "s|@pkgdatadir[@]|$(PREFIX)/share/devtools|g"
|
||||||
%: %.in Makefile lib/common.sh
|
%: %.in Makefile lib/common.sh
|
||||||
@echo "GEN $@"
|
@echo "GEN $@"
|
||||||
@$(RM) "$@"
|
@$(RM) "$@"
|
||||||
@{ echo -n 'm4_changequote([[[,]]])'; cat $@.in; } | m4 -P --define=m4_devtools_version=$V | $(edit) >$@
|
@{ echo -n 'm4_changequote([[[,]]])'; cat $@.in; } | m4 -P --define=m4_devtools_version=$(BUILDTOOLVER) | $(edit) >$@
|
||||||
@chmod a-w "$@"
|
@chmod a-w "$@"
|
||||||
@chmod +x "$@"
|
@chmod +x "$@"
|
||||||
@bash -O extglob -n "$@"
|
@bash -O extglob -n "$@"
|
||||||
|
|
11
README.md
11
README.md
|
@ -14,6 +14,17 @@ as following.
|
||||||
git config format.subjectprefix 'devtools] [PATCH'
|
git config format.subjectprefix 'devtools] [PATCH'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
When building official distro packages the `BUILDTOOLVER` needs to be set to the
|
||||||
|
exact label of the release package in order to allow to detect the exactly used
|
||||||
|
devtools version. This is required for reproducible builds to fetch the according
|
||||||
|
files like `makepkg.conf`.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
BUILDTOOLVER="${pkgver}-${pkgrel}-${arch}" make all
|
||||||
|
```
|
||||||
|
|
||||||
## Releasing
|
## Releasing
|
||||||
|
|
||||||
1. bump the version in the Makefile
|
1. bump the version in the Makefile
|
||||||
|
|
|
@ -81,6 +81,18 @@ get_pkgfile() {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_makepkg_conf() {
|
||||||
|
local fname=${1}
|
||||||
|
local makepkg_conf="${2}"
|
||||||
|
if ! buildtool_file=$(get_pkgfile "${fname}"); then
|
||||||
|
error "failed to retrieve ${fname}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
msg2 "using makepkg.conf from ${fname}"
|
||||||
|
bsdtar xOqf "${buildtool_file/file:\/\//}" usr/share/devtools/makepkg-x86_64.conf > "${makepkg_conf}"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat << __EOF__
|
cat << __EOF__
|
||||||
usage: ${BASH_SOURCE[0]##*/} [options] <package_file>
|
usage: ${BASH_SOURCE[0]##*/} [options] <package_file>
|
||||||
|
@ -185,7 +197,26 @@ for fname in "${installed[@]}"; do
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
printf '%s\n' "${allpkgfiles[@]}" | mkarchroot -M @pkgdatadir@/makepkg-x86_64.conf -U "${archroot_args[@]}" "${buildroot}"/root - || exit 1
|
|
||||||
|
trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT
|
||||||
|
TEMPDIR=$(mktemp -d --tmpdir makerepropkg.XXXXXXXXXX)
|
||||||
|
|
||||||
|
makepkg_conf="${TEMPDIR}/makepkg.conf"
|
||||||
|
# anything before buildtool support is pinned to the last none buildtool aware release
|
||||||
|
if [[ -z "${BUILDTOOL}" ]]; then
|
||||||
|
get_makepkg_conf "devtools-20210202-3-any" "${makepkg_conf}" || exit 1
|
||||||
|
# prefere to assume devtools up until matching makepkg version so repository packages remain reproducible
|
||||||
|
elif [[ "${BUILDTOOL}" = makepkg ]] && (( $(vercmp "${BUILDTOOLVER}" 6.0.1) <= 0 )); then
|
||||||
|
get_makepkg_conf "devtools-20210202-3-any" "${makepkg_conf}" || exit 1
|
||||||
|
# all devtools builds
|
||||||
|
elif [[ "${BUILDTOOL}" = devtools ]] && get_makepkg_conf "${BUILDTOOL}-${BUILDTOOLVER}" "${makepkg_conf}"; then
|
||||||
|
true
|
||||||
|
# fallback to current makepkg.conf
|
||||||
|
else
|
||||||
|
warning "Unknown buildtool (${BUILDTOOL}-${BUILDTOOLVER}), using fallback"
|
||||||
|
makepkg_conf=@pkgdatadir@/makepkg-x86_64.conf
|
||||||
|
fi
|
||||||
|
printf '%s\n' "${allpkgfiles[@]}" | mkarchroot -M "${makepkg_conf}" -U "${archroot_args[@]}" "${buildroot}"/root - || exit 1
|
||||||
|
|
||||||
# use makechrootpkg to prep the build directory
|
# use makechrootpkg to prep the build directory
|
||||||
makechrootpkg -r "${buildroot}" -l "${chroot}" -- --packagelist || exit 1
|
makechrootpkg -r "${buildroot}" -l "${chroot}" -- --packagelist || exit 1
|
||||||
|
|
Loading…
Reference in New Issue