diff --git a/Makefile b/Makefile index 913c14b..abcfb00 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,6 @@ prefix ?= /usr bindir ?= $(prefix)/bin sysconfdir ?= /etc datadir ?= $(prefix)/share/$(PACKAGE) -abuildrepo ?= ~/.cache/abuild SCRIPTS := abuild abuild-keygen abuild-sign newapkbuild \ abump apkgrel buildlab apkbuild-cpan checkapk \ @@ -35,7 +34,6 @@ SED_REPLACE := -e 's:@VERSION@:$(FULL_VERSION):g' \ -e 's:@prefix@:$(prefix):g' \ -e 's:@sysconfdir@:$(sysconfdir):g' \ -e 's:@datadir@:$(datadir):g' \ - -e 's:@abuildrepo@:$(abuildrepo):g' SSL_CFLAGS ?= $(shell pkg-config --cflags openssl) SSL_LDFLAGS ?= $(shell pkg-config --cflags openssl) diff --git a/abuild.in b/abuild.in index 6fcdb4c..34f1c64 100644 --- a/abuild.in +++ b/abuild.in @@ -2,13 +2,13 @@ # abuild - build apk packages (light version of makepkg) # Copyright (c) 2008-2015 Natanael Copa +# Copyright (c) 2016 Timo Teräs # # Distributed under GPL-2 # program_version=@VERSION@ sysconfdir=@sysconfdir@ -abuildrepo_base=@abuildrepo@ datadir=@datadir@ abuild_path=$(readlink -f $0) @@ -472,8 +472,8 @@ cleanpkg() { msg "Cleaning built packages..." for i in $(listpkgnames); do local p="${i%%:*}-$pkgver-r$pkgrel" - rm -f "$PKGDEST/$p.apk" "$PKGDEST/$p.src.tar.gz" \ - "$abuildrepo"/$p.apk "$abuildrepo"/*/$p.apk + rm -f "$REPODEST/$repo/$CARCH/$p.apk" \ + "$REPODEST/$repo/src/$p.src.tar.gz" done # remove given packages from index update_abuildrepo_index @@ -486,10 +486,10 @@ cleanoldpkg() { msg "Cleaning all packages except $pkgver-r$pkgrel..." for i in $(listpkgnames); do local pn=${i%%:*} - for j in "$PKGDEST"/$pn-[0-9]*.apk ; do - [ "$j" = "$PKGDEST/$pn-$pkgver-r$pkgrel.apk" ] \ + for j in "$REPODEST"/$repo/*/$pn-[0-9]*.apk ; do + [ "${j##*/}" = "$pn-$pkgver-r$pkgrel.apk" ] \ && continue - rm -f "$j" "$abuildrepo"/*/${j##*/} + rm -f "$j" done done update_abuildrepo_index @@ -586,8 +586,8 @@ build() { # generate a simple tar.gz package of pkgdir targz() { cd "$pkgdir" || return 1 - mkdir -p "$PKGDEST" - tar -czf "$PKGDEST"/$pkgname-$pkgver-r$pkgrel.tar.gz * + mkdir -p "$REPODEST"/src + tar -czf "$REPODEST"/src/$pkgname-$pkgver-r$pkgrel.tar.gz * } postcheck() { @@ -1297,7 +1297,6 @@ human_size() { create_apks() { local file= dir= name= ver= apk= datadir= size= getpkgver || return 1 - mkdir -p "$PKGDEST" if ! options_has "!tracedeps"; then for file in "$pkgbasedir"/.control.*/.PKGINFO; do dir="${file%/.PKGINFO}" @@ -1313,13 +1312,13 @@ create_apks() { fi for file in "$pkgbasedir"/.control.*/.PKGINFO; do - dir="${file%/.PKGINFO}" - name=$(pkginfo_val pkgname $file) - ver=$(pkginfo_val pkgver $file) - size=$(pkginfo_val size $file | human_size) - apk=$name-$ver.apk - datadir="$pkgbasedir"/$name - subpkgname=$name + local dir="${file%/.PKGINFO}" + local name=$(pkginfo_val pkgname $file) + local ver=$(pkginfo_val pkgver $file) + local size=$(pkginfo_val size $file | human_size) + local apk=$name-$ver.apk + local datadir="$pkgbasedir"/$name + local subpkgname=$name trace_apk_deps "$name" "$dir" || return 1 msg "Package size: ${size}" @@ -1347,39 +1346,10 @@ create_apks() { msg "Create $apk" # create the final apk - cat control.tar.gz data.tar.gz > "$PKGDEST"/$apk + mkdir -p "$REPODEST"/$repo/$CARCH + cat control.tar.gz data.tar.gz > "$REPODEST"/$repo/$CARCH/$apk ) done - subpkgname= -} - -clean_abuildrepo() { - local apk - cd "$abuildrepo" || return 1 - - # remove compat symlink - for d in "$abuildrepo/$CARCH"; do - [ -L "$d" ] && rm "$d" - done - - # remove broken links from abuildrepo - for apk in *.apk */*.apk; do - if [ -L "$apk" ] && [ ! -f "$apk" ]; then - rm -f "$apk" - fi - done -} - -mklinks_abuildrepo() { - [ -n "$REPODEST" ] && return 0 - local apk - mkdir -p "$abuildrepo"/$CARCH - cd "$abuildrepo" || return 1 - # create links for this package - for apk in $(listpkg); do - [ -f "$PKGDEST"/$apk ] || continue - ln -sf "$PKGDEST"/$apk "$abuildrepo"/$CARCH/$apk - done } build_abuildrepo() { @@ -1391,7 +1361,7 @@ build_abuildrepo() { if ! apk_up2date || [ -n "$force" ]; then # check early if we have abuild key abuild-sign --installed || return 1 - logcmd "building ${abuildrepo##*/}/$pkgname-$pkgver-r$pkgrel" + logcmd "building $repo/$pkgname-$pkgver-r$pkgrel" sanitycheck && builddeps && clean && fetch && unpack \ && prepare && mkusers && $_build && rootpkg \ && cleanup $CLEANUP \ @@ -1401,10 +1371,7 @@ build_abuildrepo() { } update_abuildrepo_index() { - clean_abuildrepo - mklinks_abuildrepo - - cd "$abuildrepo" + cd "$REPODEST/$repo" local index=$CARCH/APKINDEX.tar.gz msg "Updating the cached abuild repository index..." @@ -1620,9 +1587,9 @@ srcpkg() { files="$files $prefix/$f" done - mkdir -p "$PKGDEST" + mkdir -p "$REPODEST/src" msg "Creating source package $p.src.tar.gz..." - (cd .. && tar -zcf "$PKGDEST/$p.src.tar.gz" $files) + (cd .. && tar -zcf "$REPODEST/src/$p.src.tar.gz" $files) } # return true if arch is supported or noarch @@ -1647,11 +1614,11 @@ check_libc() { # check if package is up to date apk_up2date() { getpkgver || return 1 - local pkg="$PKGDEST/$pkgname-$pkgver-r$pkgrel.apk" + local pkg="$REPODEST/$repo/$CARCH/$pkgname-$pkgver-r$pkgrel.apk" local i s cd "$startdir" for i in $pkgname $subpackages; do - [ -f "$PKGDEST/${i%%:*}-$pkgver-r$pkgrel.apk" ] || return 1 + [ -f "$REPODEST/$repo/$CARCH/${i%:*}-$pkgver-r$pkgrel.apk" ] || return 1 done [ -n "$keep" ] && return 0 @@ -1672,7 +1639,7 @@ apk_up2date() { abuildindex_up2date() { local i getpkgver || return 1 - local dir="$abuildrepo"/$CARCH + local dir="$REPODEST"/$repo/$CARCH local apk="${pkgname%%:*}-$pkgver-r$pkgrel.apk" local idx="$dir"/APKINDEX.tar.gz local file="$dir"/$apk @@ -1837,14 +1804,14 @@ builddeps() { if [ -n "$install_deps" ] && [ -z "$recursive" ]; then # make a --simulate run first to detect missing deps # apk-tools --virtual is no goot at reporting those. - $SUDO_APK add --repository "$abuildrepo" $apk_opt_wait \ + $SUDO_APK add --repository "$REPODEST/$repo" $apk_opt_wait \ --simulate --quiet $builddeps || return 1 - $SUDO_APK add --repository "$abuildrepo" $apk_opt_wait \ + $SUDO_APK add --repository "$REPODEST/$repo" $apk_opt_wait \ --virtual .makedepends-$pkgname $builddeps || return 1 if cross_compiling; then - $SUDO_APK add --root "$CBUILDROOT" --repository "$abuildrepo" $apk_opt_wait \ + $SUDO_APK add --root "$CBUILDROOT" --repository "$REPODEST/$repo" $apk_opt_wait \ --simulate --quiet $hostdeps || return 1 - $SUDO_APK add --root "$CBUILDROOT" --repository "$abuildrepo" $apk_opt_wait \ + $SUDO_APK add --root "$CBUILDROOT" --repository "$REPODEST/$repo" $apk_opt_wait \ --no-scripts --virtual .makedepends-$pkgname $hostdeps || return 1 fi return 0 @@ -1858,7 +1825,7 @@ builddeps() { # find dependencies that are installed but missing in repo. for i in $builddeps; do - local m=$($APK search --repository "$abuildrepo" ${i%%[<>=]*}) + local m=$($APK search --repository "$REPODEST/$repo" ${i%%[<>=]*}) if [ -z "$m" ]; then missing="$missing $i" fi @@ -1886,7 +1853,7 @@ builddeps() { cd "$dir" && $0 $forceroot $keep $quiet $install_deps \ $recursive $upgrade $color_opt abuildindex || return 1 done - $SUDO_APK add --upgrade --repository "$abuildrepo" \ + $SUDO_APK add --upgrade --repository "$REPODEST/$repo" \ $apk_opt_wait \ --virtual .makedepends-$pkgname $builddeps } @@ -2024,32 +1991,13 @@ install_has() { list_has "$1" $install } -# install package after build -post_add() { - getpkgver || return 1 - local pkgf="$PKGDEST/$1-$pkgver-r$pkgrel.apk" - local deps i - if ! subpackages_has $1 && [ "$1" != "$pkgname" ]; then - die "$1 is not built by this APKBUILD" - fi - # recursively install dependencies that are provided by this APKBUILD - deps=$($APK index "$pkgf" 2>/dev/null | awk -F: '$1=="D" { print $2 }') - for i in $deps; do - if subpackages_has $i || [ "$i" = "$pkgname" ]; then - post_add $i || return 1 - fi - done - $SUDO_APK add $apk_opt_wait --upgrade "$pkgf" \ - || die "Failed to install $1" -} - deps() { local builddeps= i for i in $depends $makedepends; do [ "$pkgname" = "${i%%[<>=]*}" ] && continue subpackages_has ${i%%[<>=]*} || builddeps="$builddeps $i" done - $SUDO_APK add $apk_opt_wait --repository "$abuildrepo" \ + $SUDO_APK add $apk_opt_wait --repository "$REPODEST/$repo" \ --virtual .makedepends-$pkgname \ $builddeps } @@ -2143,8 +2091,7 @@ snapshot() { usage() { echo "$program $program_version" cat << EOF -usage: $program [options] [-i PKG] [-P REPODEST] [-p PKGDEST] - [-s SRCDEST] [cmd] ... +usage: $program [options] [-P REPODEST] [-s SRCDEST] [cmd] ... $program [-c] -n PKGNAME[-PKGVER] Options: -A Print CARCH and exit @@ -2157,8 +2104,7 @@ Options: -k Keep built packages, even if APKBUILD or sources are newer -K Keep buildtime temp dirs and files (srcdir/pkgdir/deps) -m Disable colors (monochrome) - -p Set package destination directory - -P Set PKGDEST to REPODEST//\$CARCH, where repo is the parents dir name + -P Set REPODEST as the repository location for created packages -q Quiet -r Install missing dependencies from system repository (using sudo) -R Recursively build and install missing dependencies (using sudo) @@ -2174,9 +2120,9 @@ Commands: cleanpkg Remove already built binary and source package deps Install packages listed in makedepends and depends fetch Fetch sources to \$SRCDEST and verify checksums - index Regenerate the APKINDEX for abuildrepo + index Regenerate indexes in \$REPODEST listpkg List target packages - package Create package in \$PKGDEST + package Create package in \$REPODEST prepare Apply patches rootpkg Run 'package', the split functions and create apks as fakeroot sanitycheck Basic sanity check of APKBUILD @@ -2199,7 +2145,7 @@ EOF APKBUILD="${APKBUILD:-./APKBUILD}" unset force unset recursive -while getopts "AcdfFhi:kKimnp:P:qrRs:u" opt; do +while getopts "AcdfFhkKimnp:P:qrRs:u" opt; do case $opt in 'A') echo "$CARCH"; exit 0;; 'c') enable_colors @@ -2208,13 +2154,11 @@ while getopts "AcdfFhi:kKimnp:P:qrRs:u" opt; do 'f') force="-f";; 'F') forceroot="-F";; 'h') usage;; - 'i') install_after="$install_after $OPTARG";; 'k') keep="-k";; 'K') CLEANUP="" ERROR_CLEANUP="" ;; 'm') disable_colors color_opt="-m";; 'n') die "Use newapkbuild to create new aports";; - 'p') PKGDEST=$OPTARG;; 'P') REPODEST=$OPTARG;; 'q') quiet="-q";; 'r') install_deps="-r";; @@ -2244,7 +2188,6 @@ repo=${startdir%/*} repo=${repo##*/} SRCDEST=${SRCDEST:-$startdir} -PKGDEST=${PKGDEST:-$startdir} # set a default CC : ${CC:=gcc} @@ -2254,15 +2197,15 @@ cd "$startdir" || die . "$APKBUILD" # If REPODEST is set then it will override the PKGDEST -if [ -n "$REPODEST" ]; then - PKGDEST="$REPODEST/$repo/$CARCH" - # for recursive action - export REPODEST - abuildrepo="$REPODEST"/$repo -else - abuildrepo="$abuildrepo_base"/$repo +if [ -z "$REPODEST" ]; then + warning "REPODEST is not set and is now required. Defaulting to ~/packages" + [ -n "$PKGDEST" ] && die "PKGDEST is no longer supported." + REPODEST="~/packages" fi +# for recursive action +export REPODEST + # if we want build debug package if [ -n "$DEBUG" ] || subpackage_types_has "dbg"; then CFLAGS="$CFLAGS -g" @@ -2295,8 +2238,4 @@ while [ $# -gt 0 ]; do shift done -for i in $install_after; do - post_add $i -done - cleanup