[pacman-dev] [PATCH] makepkg: Add a --noarchive option to inhibit archive creation
1. Packagers who want to test the package() function, i.e. to check the content of the pkg/ folder. 2. Developers who want to check how the packaged version of a program looks, in other words how the pkg/ folder looks. 3. For users of systems with no port tree, makepkg can ease package creation. However the resulting archive of the whole makepkg process is often useless. For all situations, makepkg will usually be called several times. But no archive (the final package) is needed in any cases. The archive creation ends up being a waste of time and resource, especially for big applications and slow machines. Signed-off-by: Pierre Neidhardt <ambrevar@gmail.com> --- doc/makepkg.8.txt | 7 ++++++- scripts/makepkg.sh.in | 14 ++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt index 29f4a03..7b29023 100644 --- a/doc/makepkg.8.txt +++ b/doc/makepkg.8.txt @@ -102,7 +102,7 @@ Options *-i, \--install*:: Install or upgrade the package after a successful build using - linkman:pacman[8]. + linkman:pacman[8]. This option and '\--noarchive' are mutually exclusive. *-L, \--log*:: Enable makepkg build logging. This will use the *tee* program to send @@ -165,6 +165,11 @@ Options Run the check() function in the PKGBUILD, overriding the setting in linkman:makepkg.conf[5]. +*\--noarchive*:: + Do not create the archive at the end of the build process. This can be + useful to test the package() function or if your target distribution does + not use pacman. This option and '\--install' are mutually exclusive. + *\--nocheck*:: Do not run the check() function in the PKGBUILD or handle the checkdepends. diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index b69c071..0689807 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -74,6 +74,7 @@ INFAKEROOT=0 INSTALL=0 LOGGING=0 NEEDED=0 +NOARCHIVE=0 NOBUILD=0 NODEPS=0 NOEXTRACT=0 @@ -1844,6 +1845,8 @@ write_pkginfo() { } create_package() { + (( NOARCHIVE )) && return + if [[ ! -d $pkgdir ]]; then error "$(gettext "Missing %s directory.")" "\$pkgdir/" plain "$(gettext "Aborting...")" @@ -2513,6 +2516,7 @@ usage() { printf -- "$(gettext " --config <file> Use an alternate config file (instead of '%s')")\n" "$confdir/makepkg.conf" printf -- "$(gettext " --holdver Do not update VCS sources")\n" printf -- "$(gettext " --key <key> Specify a key to use for %s signing instead of the default")\n" "gpg" + printf -- "$(gettext " --noarchive Skip package archive creation and installation")\n" printf -- "$(gettext " --nocheck Do not run the %s function in the %s")\n" "check()" "$BUILDSCRIPT" printf -- "$(gettext " --noprepare Do not run the %s function in the %s")\n" "prepare()" "$BUILDSCRIPT" printf -- "$(gettext " --nosign Do not create a signature for the package")\n" @@ -2558,10 +2562,11 @@ ARGLIST=("$@") # Parse Command Line Options. OPT_SHORT="AcCdefFghiLmop:rRsSV" + OPT_LONG=('allsource' 'asroot' 'check' 'clean' 'cleanbuild' 'config:' 'force' 'geninteg' - 'help' 'holdver' 'ignorearch' 'install' 'key:' 'log' 'nobuild' 'nocolor' - 'nocheck' 'nodeps' 'noextract' 'noprepare' 'nosign' 'pkg:' 'repackage' 'rmdeps' - 'sign' 'skipchecksums' 'skipinteg' 'skippgpcheck' 'source' 'syncdeps' + 'help' 'holdver' 'ignorearch' 'install' 'key:' 'log' 'noarchive' 'nobuild' + 'nocolor' 'nocheck' 'nodeps' 'noextract' 'noprepare' 'nosign' 'pkg:' 'repackage' + 'rmdeps' 'sign' 'skipchecksums' 'skipinteg' 'skippgpcheck' 'source' 'syncdeps' 'verifysource' 'version') # Pacman Options @@ -2584,6 +2589,7 @@ while true; do # Makepkg Options --allsource) SOURCEONLY=2 ;; --asroot) ASROOT=1 ;; + --noarchive) NOARCHIVE=1; INSTALL=0 ;; -A|--ignorearch) IGNOREARCH=1 ;; -c|--clean) CLEANUP=1 ;; -C|--cleanbuild) CLEANBUILD=1 ;; @@ -2595,7 +2601,7 @@ while true; do -F) INFAKEROOT=1 ;; -g|--geninteg) GENINTEG=1 ;; --holdver) HOLDVER=1 ;; - -i|--install) INSTALL=1 ;; + -i|--install) INSTALL=1; NOARCHIVE=0 ;; --key) shift; GPGKEY=$1 ;; -L|--log) LOGGING=1 ;; -m|--nocolor) USE_COLOR='n' ;; -- 1.9.0
Sorry, forgot to add a "v2" in the subject. -- Pierre Neidhardt Murphy's Law is recursive. Washing your car to make it rain doesn't work.
On 02/03/14 05:46, Pierre Neidhardt wrote:
1. Packagers who want to test the package() function, i.e. to check the content of the pkg/ folder.
2. Developers who want to check how the packaged version of a program looks, in other words how the pkg/ folder looks.
3. For users of systems with no port tree, makepkg can ease package creation. However the resulting archive of the whole makepkg process is often useless.
For all situations, makepkg will usually be called several times. But no archive (the final package) is needed in any cases. The archive creation ends up being a waste of time and resource, especially for big applications and slow machines.
Signed-off-by: Pierre Neidhardt <ambrevar@gmail.com> --- doc/makepkg.8.txt | 7 ++++++- scripts/makepkg.sh.in | 14 ++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt index 29f4a03..7b29023 100644 --- a/doc/makepkg.8.txt +++ b/doc/makepkg.8.txt @@ -102,7 +102,7 @@ Options
*-i, \--install*:: Install or upgrade the package after a successful build using - linkman:pacman[8]. + linkman:pacman[8]. This option and '\--noarchive' are mutually exclusive.
*-L, \--log*:: Enable makepkg build logging. This will use the *tee* program to send @@ -165,6 +165,11 @@ Options Run the check() function in the PKGBUILD, overriding the setting in linkman:makepkg.conf[5].
+*\--noarchive*:: + Do not create the archive at the end of the build process. This can be + useful to test the package() function or if your target distribution does + not use pacman. This option and '\--install' are mutually exclusive. + *\--nocheck*:: Do not run the check() function in the PKGBUILD or handle the checkdepends.
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index b69c071..0689807 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -74,6 +74,7 @@ INFAKEROOT=0 INSTALL=0 LOGGING=0 NEEDED=0 +NOARCHIVE=0 NOBUILD=0 NODEPS=0 NOEXTRACT=0 @@ -1844,6 +1845,8 @@ write_pkginfo() { }
create_package() { + (( NOARCHIVE )) && return + if [[ ! -d $pkgdir ]]; then error "$(gettext "Missing %s directory.")" "\$pkgdir/" plain "$(gettext "Aborting...")" @@ -2513,6 +2516,7 @@ usage() { printf -- "$(gettext " --config <file> Use an alternate config file (instead of '%s')")\n" "$confdir/makepkg.conf" printf -- "$(gettext " --holdver Do not update VCS sources")\n" printf -- "$(gettext " --key <key> Specify a key to use for %s signing instead of the default")\n" "gpg" + printf -- "$(gettext " --noarchive Skip package archive creation and installation")\n"
Just "Do not create package archive" - do not mention installation.
printf -- "$(gettext " --nocheck Do not run the %s function in the %s")\n" "check()" "$BUILDSCRIPT" printf -- "$(gettext " --noprepare Do not run the %s function in the %s")\n" "prepare()" "$BUILDSCRIPT" printf -- "$(gettext " --nosign Do not create a signature for the package")\n" @@ -2558,10 +2562,11 @@ ARGLIST=("$@")
# Parse Command Line Options. OPT_SHORT="AcCdefFghiLmop:rRsSV" + OPT_LONG=('allsource' 'asroot' 'check' 'clean' 'cleanbuild' 'config:' 'force' 'geninteg' - 'help' 'holdver' 'ignorearch' 'install' 'key:' 'log' 'nobuild' 'nocolor' - 'nocheck' 'nodeps' 'noextract' 'noprepare' 'nosign' 'pkg:' 'repackage' 'rmdeps' - 'sign' 'skipchecksums' 'skipinteg' 'skippgpcheck' 'source' 'syncdeps' + 'help' 'holdver' 'ignorearch' 'install' 'key:' 'log' 'noarchive' 'nobuild' + 'nocolor' 'nocheck' 'nodeps' 'noextract' 'noprepare' 'nosign' 'pkg:' 'repackage' + 'rmdeps' 'sign' 'skipchecksums' 'skipinteg' 'skippgpcheck' 'source' 'syncdeps' 'verifysource' 'version')
# Pacman Options @@ -2584,6 +2589,7 @@ while true; do # Makepkg Options --allsource) SOURCEONLY=2 ;; --asroot) ASROOT=1 ;; + --noarchive) NOARCHIVE=1; INSTALL=0 ;;
Needs moved down - alphabetical. Also, do only NOARCHIVE=1 here. See below.
-A|--ignorearch) IGNOREARCH=1 ;; -c|--clean) CLEANUP=1 ;; -C|--cleanbuild) CLEANBUILD=1 ;; @@ -2595,7 +2601,7 @@ while true; do -F) INFAKEROOT=1 ;; -g|--geninteg) GENINTEG=1 ;; --holdver) HOLDVER=1 ;; - -i|--install) INSTALL=1 ;; + -i|--install) INSTALL=1; NOARCHIVE=0 ;;
I do not like this. It means that if I specify both --install and --noarchive it does something, but that something depends on what order I specify them in. Just do INSTALL=1; That the end of this case statement, do a check if (( INSTALL && NOARCHIVE )) and do an error.
--key) shift; GPGKEY=$1 ;; -L|--log) LOGGING=1 ;; -m|--nocolor) USE_COLOR='n' ;;
On 14-03-02 18:20:34, Allan McRae wrote:
- -i|--install) INSTALL=1 ;; + -i|--install) INSTALL=1; NOARCHIVE=0 ;;
I do not like this. It means that if I specify both --install and --noarchive it does something, but that something depends on what order I specify them in. Just do INSTALL=1; That the end of this case statement, do a check if (( INSTALL && NOARCHIVE )) and do an error.
--key) shift; GPGKEY=$1 ;; -L|--log) LOGGING=1 ;; -m|--nocolor) USE_COLOR='n' ;;
'install' and 'noarchive' are mutually exclusive. One customary solution to handle this is to let the last argument take precedence (a lot of coreutils do that by the way). Which is not that weird in my opinion. I agree it might be confusing in some cases. Anyway, if you do not like it, I'll remove it. -- Pierre Neidhardt History teaches us that men and nations behave wisely once they have exhausted all other alternatives. -- Abba Eban
On 14-03-02 18:20:34, Allan McRae wrote:
-A|--ignorearch) IGNOREARCH=1 ;; -c|--clean) CLEANUP=1 ;; -C|--cleanbuild) CLEANBUILD=1 ;; @@ -2595,7 +2601,7 @@ while true; do -F) INFAKEROOT=1 ;; -g|--geninteg) GENINTEG=1 ;; --holdver) HOLDVER=1 ;; - -i|--install) INSTALL=1 ;; + -i|--install) INSTALL=1; NOARCHIVE=0 ;;
I do not like this. It means that if I specify both --install and --noarchive it does something, but that something depends on what order I specify them in. Just do INSTALL=1; That the end of this case statement, do a check if (( INSTALL && NOARCHIVE )) and do an error.
--key) shift; GPGKEY=$1 ;; -L|--log) LOGGING=1 ;; -m|--nocolor) USE_COLOR='n' ;;
After a quick overview of how the other options handle this, the check at the end of the case statement does not seem very consistent with the rest. I suggest we proceed as for NOBUILD: check the option before all install_package calls. -- Pierre Neidhardt Many hands make light work. -- John Heywood
participants (2)
-
Allan McRae
-
Pierre Neidhardt