Index: scripts/makepkg =================================================================== RCS file: /home/cvs-pacman/pacman-lib/scripts/makepkg,v retrieving revision 1.72 diff -u -p -r1.72 makepkg --- scripts/makepkg 28 Apr 2007 08:26:37 -0000 1.72 +++ scripts/makepkg 12 May 2007 07:44:20 -0000 @@ -182,7 +182,17 @@ checkdeps() { pmout=$(pacman $PACMAN_OPTS -T $*) ret=$? if [ $ret -eq 1 ]; then #unresolved deps - echo $pmout + local missingdeps=() + + for dep in $pmout; do + # dep is considered resolved if it is one of the packages + # that we are building + if ! in_array $dep ${pkgs[@]}; then + missingdeps=(${missingdeps[@]} ${dep}) + fi + done + + echo ${missingdeps[*]} elif [ $ret -ne 0 ]; then error "pacman returned a fatal error ($ret): $pmout" exit 1 @@ -348,13 +358,20 @@ removedeps() { } installpackage() { + local pkgfiles="" + + for pkg in "${pkgs[@]}" + do + pkgfiles="${pkgfiles} $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}.${PKGEXT}" + done + if [ "$INSTALL" = "1" -a "$SUDO" = "1" ]; then msg "Installing package with pacman -U..." if [ "$INFAKEROOT" = "1" ]; then FAKEROOTKEY2=$FAKEROOTKEY unset FAKEROOTKEY fi - sudo pacman $PACMAN_OPTS -U $PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.${PKGEXT} + sudo pacman $PACMAN_OPTS -U ${pkgfiles} local exitcode=$? if [ "$INFAKEROOT" = "1" ]; then export FAKEROOTKEY=$FAKEROOTKEY2 @@ -363,7 +380,7 @@ installpackage() { exit $exitcode elif [ "$INSTALL" = "1" -a "$EUID" = "0" -a "$INFAKEROOT" != "1" ]; then msg "Installing package with pacman -U..." - pacman $PACMAN_OPTS -U $PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.${PKGEXT} + pacman $PACMAN_OPTS -U ${pkgfiles} exit $? fi } @@ -580,15 +597,37 @@ if [ "$install" -a ! -f "$install" ]; th exit 1 fi -if [ -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}.${PKGEXT}" \ - -a "$FORCE" = "0" -a "$GENINTEG" = "0" ]; then - if [ "$INSTALL" = "1" ]; then - warning "a package has already been built, installing existing package." - installpackage - exit $? - else - error "a package has already been built. (use -f to overwrite)" - exit 1 +# cache all the pkgnames that will be built. it'll come handy later. +pkgs=(${pkgname}) + +if [ ! -z "$subpkgs" ]; then + for subpkg in "${subpkgs[@]}" + do + pkgs=(${pkgs[@]} $(eval "echo \$pkgname_$subpkg")) + done +fi + +# check if all packages have already been built +if [ "$FORCE" = "0" -a "$GENINTEG" = "0" ]; then + allpkgsbuilt=1 + + for pkg in "${pkgs[@]}" + do + if [ ! -f "$PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}.${PKGEXT}" ]; then + allpkgsbuilt=0 + break + fi + done + + if [ "$allpkgsbuilt" = "1" ]; then + if [ "$INSTALL" = "1" ]; then + warning "all packages have already been built, installing existing packagess." + installpackage + exit $? + else + error "all packages have already been built. (use -f to overwrite)" + exit 1 + fi fi fi @@ -859,6 +898,18 @@ else fi mkdir -p "$startdir/pkg" + # check for existing subpkg directories too + if [ ! -z "$subpkgs" ]; then + for subpkg in "${subpkgs[@]}" + do + if [ -d "$startdir/pkg_$subpkg" ]; then + msg "Removing existing pkg_$subpkg/ directory..." + rm -rf "$startdir/pkg_$subpkg" + fi + mkdir -p "$startdir/pkg_$subpkg" + done + fi + # use distcc if it is requested (check buildenv and PKGBUILD opts) if [ "$(check_buildenv distcc)" = "y" -a "$(check_option distcc)" != "n" ]; then [ -d /usr/lib/distcc/bin ] && export PATH=/usr/lib/distcc/bin:$PATH @@ -990,97 +1041,133 @@ if [ "$PACKAGER" != "" ]; then else packager="Arch Linux (http://www.archlinux.org)" fi -size=$(du -cb "$startdir/pkg" | tail -n 1 | awk '{print $1}') -# build a filelist - do this first to keep meta files out of the list -msg "Generating .FILELIST file..." -cd "$startdir/pkg" -tar cvf /dev/null * | sort >.FILELIST - -# write the .PKGINFO file -msg "Generating .PKGINFO file..." -cd "$startdir/pkg" -echo "# Generated by makepkg $myver" >.PKGINFO -echo -n "# " >>.PKGINFO -date >>.PKGINFO -echo "pkgname = $pkgname" >>.PKGINFO -echo "pkgver = $pkgver-$pkgrel" >>.PKGINFO -echo "pkgdesc = $pkgdesc" >>.PKGINFO -echo "url = $url" >>.PKGINFO -echo "builddate = $builddate" >>.PKGINFO -echo "packager = $packager" >>.PKGINFO -echo "size = $size" >>.PKGINFO -if [ "$CARCH" != "" ]; then - echo "arch = $CARCH" >>.PKGINFO -fi +# XXX this function should really be moved up to live with its friends +createpackage() +{ + local pkgdir=$1 + local size=$(du -cb "$pkgdir" | tail -n 1 | awk '{print $1}') + + msg "Making: $pkgname" + + # build a filelist - do this first to keep meta files out of the list + msg "Generating .FILELIST file..." + pushd "$pkgdir" >/dev/null + tar cvf /dev/null * | sort >.FILELIST + + # write the .PKGINFO file + msg "Generating .PKGINFO file..." + echo "# Generated by makepkg $myver" >.PKGINFO + echo -n "# " >>.PKGINFO + date >>.PKGINFO + echo "pkgname = $pkgname" >>.PKGINFO + echo "pkgver = $pkgver-$pkgrel" >>.PKGINFO + echo "pkgdesc = $pkgdesc" >>.PKGINFO + echo "url = $url" >>.PKGINFO + echo "builddate = $builddate" >>.PKGINFO + echo "packager = $packager" >>.PKGINFO + echo "size = $size" >>.PKGINFO + if [ "$CARCH" != "" ]; then + echo "arch = $CARCH" >>.PKGINFO + fi -for it in "${license[@]}"; do - echo "license = $it" >>.PKGINFO -done -for it in "${replaces[@]}"; do - echo "replaces = $it" >>.PKGINFO -done -for it in "${groups[@]}"; do - echo "group = $it" >>.PKGINFO -done -for it in "${depends[@]}"; do - echo "depend = $it" >>.PKGINFO -done -for it in "${conflicts[@]}"; do - echo "conflict = $it" >>.PKGINFO -done -for it in "${provides[@]}"; do - echo "provides = $it" >>.PKGINFO -done -for it in "${backup[@]}"; do - echo "backup = $it" >>.PKGINFO -done + for it in "${license[@]}"; do + echo "license = $it" >>.PKGINFO + done + for it in "${replaces[@]}"; do + echo "replaces = $it" >>.PKGINFO + done + for it in "${groups[@]}"; do + echo "group = $it" >>.PKGINFO + done + for it in "${depends[@]}"; do + echo "depend = $it" >>.PKGINFO + done + for it in "${conflicts[@]}"; do + echo "conflict = $it" >>.PKGINFO + done + for it in "${provides[@]}"; do + echo "provides = $it" >>.PKGINFO + done + for it in "${backup[@]}"; do + echo "backup = $it" >>.PKGINFO + done -# TODO maybe remove this at some point -# warn if license array is not present or empty -if [ "$license" = "" ]; then - warning "Please add a license line to your $BUILDSCRIPT!" - plain "example for GPL'ed software: license=('GPL')." -fi + # TODO maybe remove this at some point + # warn if license array is not present or empty + if [ "$license" = "" ]; then + warning "Please add a license line to your $BUILDSCRIPT!" + plain "example for GPL'ed software: license=('GPL')." + fi -# check for an install script -if [ "$install" != "" ]; then - msg "Copying install script..." - cp "$startdir/$install" "$startdir/pkg/.INSTALL" -fi + # check for an install script + if [ "$install" != "" ]; then + msg "Copying install script..." + cp "$startdir/$install" "$pkgdir/.INSTALL" + fi -# do we have a changelog? -have_changelog=0 -if [ -f "$startdir/ChangeLog" ]; then - msg "Copying package changelog" - cp "$startdir/ChangeLog" "$startdir/pkg/.CHANGELOG" - have_changelog=1 -fi + # do we have a changelog? + have_changelog=0 + if [ -f "$startdir/ChangeLog" ]; then + msg "Copying package changelog" + cp "$startdir/ChangeLog" "$pkgdir/.CHANGELOG" + have_changelog=1 + fi -# tar it up -msg "Compressing package..." -cd "$startdir/pkg" + # tar it up + msg "Compressing package..." -pkg_file="$PKGDEST/$pkgname-$pkgver-$pkgrel-${CARCH}.${PKGEXT}" -comp_files=".PKGINFO .FILELIST ${install:+.INSTALL}" -[ $have_changelog -eq 1 ] && comp_files=".CHANGELOG $comp_files" + pkg_file="$PKGDEST/$pkgname-$pkgver-$pkgrel-${CARCH}.${PKGEXT}" + comp_files=".PKGINFO .FILELIST ${install:+.INSTALL}" + [ $have_changelog -eq 1 ] && comp_files=".CHANGELOG $comp_files" -if ! tar czf $pkg_file $comp_files *; then - error "Failed to create package file." - exit 1 -fi + if ! tar czf $pkg_file $comp_files *; then + error "Failed to create package file." + exit 1 + fi + + popd >/dev/null + + msg "Finished making: $pkgname ($(date))" +} + +# bah! there are just too many parameters to pass to createpackage(). +# plus, we don't want to corrupt the global variables (pkgname,pkgdesc,etc). +# so, we make a function here and employ local variables. +createsubpackages() +{ + local pkgname pkgdesc replaces groups depends conflicts + local provides backup install + + if [ ! -z "$subpkgs" ]; then + for subpkg in "${subpkgs[@]}" + do + pkgname=$(eval "echo \${pkgname_$subpkg}") + pkgdesc=$(eval "echo \${pkgdesc_$subpkg}") + groups=($(eval "echo \${groups_$subpkg[@]}")) + depends=($(eval "echo \${depends_$subpkg[@]}")) + replaces=($(eval "echo \${replaces_$subpkg[@]}")) + conflicts=($(eval "echo \${conflicts_$subpkg[@]}")) + provides=($(eval "echo \${provides_$subpkg[@]}")) + backup=($(eval "echo \${backup_$subpkg[@]}")) + install=$(eval "echo \${install_$subpkg}") + + createpackage $startdir/pkg_$subpkg + done + fi +} + +createpackage $startdir/pkg +createsubpackages -cd "$startdir" if [ "$CLEANUP" = "1" ]; then msg "Cleaning up..." - rm -rf src pkg + rm -rf src pkg* rm -rf ${pkgname}-${pkgver}-${pkgrel}-${CARCH}.log* fi removedeps -msg "Finished making: $pkgname ($(date))" - installpackage exit 0