summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Horowitz <stonecrest@gmail.com>2007-10-26 20:32:09 -0600
committerDan McGee <dan@archlinux.org>2007-10-26 22:35:23 -0500
commit8a9c83dd4bffff575a21207248e7acaae5a0d6f9 (patch)
treee3dc66a2f45b43bb0027f9eab1490ba43edec4e6
parent3e1b72f4f2b3f8766f9ad3493ad736d81263c9c1 (diff)
downloadpacman-8a9c83dd4bffff575a21207248e7acaae5a0d6f9.tar.xz
Integrate versionpkg into makepkg
If PKGBUILDs use the correct svn/cvs/etc variables, determine the latest revision number and force this as the pkgver for building. Signed-off-by: Scott Horowitz <stonecrest@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--scripts/makepkg.sh.in90
1 files changed, 86 insertions, 4 deletions
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 8f5ff38d..ed511755 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -60,6 +60,10 @@ LOGGING=0
SOURCEONLY=0
IGNOREARCH=0
+# Forces the pkgver of the current PKGBUILD. Used by the fakeroot call
+# when dealing with svn/cvs/etc PKGBUILDs.
+FORCE_VER=""
+
PACMAN_OPTS=
### SUBROUTINES ###
@@ -976,6 +980,74 @@ install_package() {
fi
}
+devel_check() {
+ newpkgver=""
+ if [ "$FORCE_VER" = "" ]; then
+ # Check if this is a svn/cvs/etc PKGBUILD; set $newpkgver if so.
+ # This will only be used on the first call to makepkg; subsequent
+ # calls to makepkg via fakeroot will explicitly pass the version
+ # number to avoid having to determine the version number twice.
+ oldpkgver=$pkgver
+ if [ ! -z ${_darcstrunk} ] && [ ! -z ${_darcsmod} ] ; then
+ msg "$(gettext "Determining latest darcs revision...")"
+ newpkgver=$(date +%Y%m%d)
+ elif [ ! -z ${_cvsroot} ] && [ ! -z ${_cvsmod} ] ; then
+ msg "$(gettext "Determining latest cvs revision...")"
+ newpkgver=$(date +%Y%m%d)
+ elif [ ! -z ${_gitroot} ] && [ ! -z ${_gitname} ] ; then
+ msg "$(gettext "Determining latest git revision...")"
+ newpkgver=$(date +%Y%m%d)
+ elif [ ! -z ${_svntrunk} ] && [ ! -z ${_svnmod} ] ; then
+ msg "$(gettext "Determining latest svn revision...")"
+ newpkgver=$(svn log $_svntrunk --limit 1 | sed -n 's/^r\([^ ]*\) .*$/\1/p')
+ elif [ ! -z ${_bzrtrunk} ] && [ ! -z ${_bzrmod} ] ; then
+ msg "$(gettext "Determining latest bzr revision...")"
+ newpkgver=$(bzr revno ${_bzrtrunk})
+ elif [ ! -z ${_hgroot} ] && [ ! -z ${_hgrepo} ] ; then
+ msg "$(gettext "Determining latest hg revision...")"
+ if [ -d ./src/$_hgrepo ] ; then
+ cd ./src/$_hgrepo
+ make clean
+ hg pull
+ hg update
+ else
+ [[ ! -d ./src/$_hgrepo ]] && mkdir -p ./src/$_hgrepo
+ hg clone $_hgroot/$_hgrepo ./src/$_hgrepo
+ cd ./src/$_hgrepo
+ fi
+ newpkgver=$(hg tip | sed -n '1s/[^0-9]*\([^:]*\):.*$/\1/p')
+ cd ../../
+ fi
+
+ if [ "$newpkgver" != "" ]; then
+ msg2 "$(gettext "Version found: %s")" "$newpkgver"
+ pkgver=$newpkgver
+ fi
+
+ else
+ # Version number retrieved from fakeroot->makepkg argument
+ newpkgver=$FORCE_VER
+ fi
+}
+
+devel_update() {
+ # This is lame, but if we're wanting to use an updated pkgver for
+ # retrieving svn/cvs/etc sources, we'll update the PKGBUILD with
+ # the new pkgver and then re-source it. This is the most robust
+ # method for dealing with PKGBUILDs that use, e.g.:
+ #
+ # pkgver=23
+ # ...
+ # _foo=pkgver
+ #
+ if [ "$newpkgver" != "" ]; then
+ if [ "newpkgver" != "$pkgver" ]; then
+ sed -i "s/^pkgver=[^ ]*/pkgver=$newpkgver/" ./$BUILDSCRIPT
+ source $BUILDSCRIPT
+ fi
+ fi
+}
+
usage() {
printf "makepkg (pacman) %s\n" "$myver"
echo
@@ -1060,7 +1132,7 @@ fi
# Parse Command Line Options.
OPT_SHORT="AbcCdefFghiLmop:rRsSV"
OPT_LONG="ignorearch,asroot,builddeps,clean,cleancache,nodeps,noextract,force,geninteg,help,install,log"
-OPT_LONG="$OPT_LONG,nocolor,nobuild,rmdeps,repackage,source,syncdeps,usesudo,version"
+OPT_LONG="$OPT_LONG,nocolor,nobuild,rmdeps,repackage,source,syncdeps,usesudo,version,forcever:"
# Pacman Options
OPT_LONG="$OPT_LONG,noconfirm,noprogressbar"
OPT_TEMP="$(getopt -o "$OPT_SHORT" -l "$OPT_LONG" -n "$(basename "$0")" -- "$@" || echo 'GETOPT GO BANG!')"
@@ -1098,6 +1170,9 @@ while true; do
--source) SOURCEONLY=1 ;;
-s|--syncdeps) DEP_BIN=1 ;;
+ # Hidden option used by fakeroot call for svn/cvs/etc PKGBUILDs to set the pkgver
+ --forcever) shift; FORCE_VER=$1;;
+
# BEGIN DEPRECATED
-S|--usesudo)
warning "$(gettext "Sudo is used by default now. The --usesudo option is deprecated!")" ;;
@@ -1112,7 +1187,6 @@ while true; do
shift
done
-
if [ "$CLEANCACHE" = "1" ]; then
#fix flyspray feature request #5223
if [ -n "$SRCDEST" -a "$SRCDEST" != "$startdir" ]; then
@@ -1256,12 +1330,15 @@ if [ -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" \
fi
fi
-# Run the bear minimum in fakeroot
+devel_check
+
+# Run the bare minimum in fakeroot
# fix flyspray bug 6208 -- using makepkg with fakeroot gives an error
if [ "$INFAKEROOT" = "1" ]; then
if [ "$REPKG" = "1" ]; then
warning "$(gettext "Skipping build.")"
else
+ devel_update
run_build
tidy_install
fi
@@ -1360,6 +1437,7 @@ else
if [ "$REPKG" = "1" ]; then
warning "$(gettext "Skipping build.")"
else
+ devel_update
run_build
tidy_install
fi
@@ -1369,7 +1447,11 @@ else
msg "$(gettext "Entering fakeroot environment...")"
cd "$startdir"
- fakeroot -- $0 -F $ARGLIST || exit $?
+ if [ "$newpkgver" != "" ]; then
+ fakeroot -- $0 --forcever $newpkgver -F $ARGLIST || exit $?
+ else
+ fakeroot -- $0 -F $ARGLIST || exit $?
+ fi
fi
create_xdelta "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"