makepkg: allow the use of only a package() function

For some packages, generally the 'any' arch ones, a build step is not
required and therefore can be skipped. In these cases, a package()
function without a build() one is sufficient.

As a side effect, this commit makes meta packages without any function
at all in the PKGBUILD possible.

Fixes FS#15147.

Signed-off-by: Cedric Staniewski <cedric@gmx.ca>
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Cedric Staniewski 2009-10-27 12:56:13 +01:00 committed by Dan McGee
parent 564352c4a2
commit 4d2ec3751c
2 changed files with 19 additions and 10 deletions

View File

@ -233,10 +233,10 @@ name. The syntax is: `source=('filename::url')`.
build() Function
----------------
In addition to the above directives, the build() bash function comprises the
remainder of the PKGBUILD. This is directly sourced and executed by makepkg, so
anything that bash or the system has available is available for use here. Be
sure any exotic commands used are covered by `makedepends`.
In addition to the above directives, the optional build() bash function usually
comprises the remainder of the PKGBUILD. This is directly sourced and executed by
makepkg, so anything that bash or the system has available is available for use
here. Be sure any exotic commands used are covered by `makedepends`.
All of the above variables such as `pkgname` and `pkgver` are available for use
in the build function. In addition, makepkg defines three variables for your
@ -263,8 +263,8 @@ package() Function
An optional package() function can be specified in addition to the build() function.
This function is run immediately after the build() function. When specified in
combination with the fakeroot BUILDENV option in linkman:makepkg.conf[5], fakeroot
usage will be limited to running the packaging stage. The build() function will be
run as the user calling makepkg.
usage will be limited to running the packaging stage. An existing build() function
will be run as the user calling makepkg.
Package Splitting
-----------------

View File

@ -70,6 +70,7 @@ LOGGING=0
SOURCEONLY=0
IGNOREARCH=0
HOLDVER=0
BUILDFUNC=0
PKGFUNC=0
SPLITPKG=0
@ -137,7 +138,9 @@ clean_up() {
rm -rf "$pkgdir" "$srcdir"
if [[ -n $pkgbase ]]; then
# Can't do this unless the BUILDSCRIPT has been sourced.
rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-build.log"*
if (( BUILDFUNC )); then
rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-build.log"*
fi
if (( PKGFUNC )); then
rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-package.log"*
elif (( SPLITPKG )); then
@ -1709,6 +1712,12 @@ if (( ${#pkgname[@]} > 1 )); then
SPLITPKG=1
fi
# test for available PKGBUILD functions
# The exclamation mark is required here to avoid triggering the ERR trap when
# a tested function does not exist.
if [[ $(! type -t build) = "function" ]]; then
BUILDFUNC=1
fi
if [ "$(type -t package)" = "function" ]; then
PKGFUNC=1
elif [ $SPLITPKG -eq 0 -a "$(type -t package_${pkgname})" = "function" ]; then
@ -1764,7 +1773,7 @@ fi
if (( INFAKEROOT )); then
if (( ! SPLITPKG )); then
if (( ! PKGFUNC )); then
if (( ! REPKG )); then
if (( BUILDFUNC && ! REPKG )); then
run_build
tidy_install
fi
@ -1874,7 +1883,7 @@ else
if [[ $(check_buildenv fakeroot) != "y" ]] || (( EUID == 0 )); then
if (( ! REPKG )); then
devel_update
run_build
(( BUILDFUNC )) && run_build
fi
if (( ! SPLITPKG )); then
if (( PKGFUNC )); then
@ -1899,7 +1908,7 @@ else
else
if (( ! REPKG && ( PKGFUNC || SPLITPKG ) )); then
devel_update
run_build
(( BUILDFUNC )) && run_build
cd "$startdir"
fi