build.sh (4461B)
1#!/bin/bash 2# 3# vim: set ts=4 sw=4 et: 4# 5# Passed arguments: 6# $1 - current pkgname to build [REQUIRED] 7# $2 - target pkgname (origin) to build [REQUIRED] 8# $3 - xbps target [REQUIRED] 9# $4 - cross target [OPTIONAL] 10# $5 - internal [OPTIONAL] 11 12if [ $# -lt 3 -o $# -gt 5 ]; then 13 echo "${0##*/}: invalid number of arguments: pkgname targetpkg target [cross-target]" 14 exit 1 15fi 16 17readonly PKGNAME="$1" 18readonly XBPS_TARGET_PKG="$2" 19readonly XBPS_TARGET="$3" 20readonly XBPS_CROSS_BUILD="$4" 21readonly XBPS_CROSS_PREPARE="$5" 22 23export XBPS_TARGET 24 25for f in $XBPS_SHUTILSDIR/*.sh; do 26 . $f 27done 28 29last="${XBPS_DEPENDS_CHAIN##*,}" 30case "$XBPS_DEPENDS_CHAIN" in 31 *,$last,*) 32 msg_error "Build-time cyclic dependency$last,${XBPS_DEPENDS_CHAIN##*,$last,} detected.\n" 33esac 34 35setup_pkg "$PKGNAME" $XBPS_CROSS_BUILD 36readonly SOURCEPKG="$sourcepkg" 37 38show_pkg_build_options 39check_pkg_arch $XBPS_CROSS_BUILD 40 41if [ -z "$XBPS_CROSS_PREPARE" ]; then 42 prepare_cross_sysroot $XBPS_CROSS_BUILD || exit $? 43fi 44# Install dependencies from binary packages 45if [ "$PKGNAME" != "$XBPS_TARGET_PKG" -o -z "$XBPS_SKIP_DEPS" ]; then 46 install_pkg_deps $PKGNAME $XBPS_TARGET_PKG pkg $XBPS_CROSS_BUILD $XBPS_CROSS_PREPARE || exit $? 47fi 48 49if [ "$XBPS_CROSS_BUILD" ]; then 50 install_cross_pkg $XBPS_CROSS_BUILD || exit $? 51fi 52 53# Fetch distfiles after installing required dependencies, 54# because some of them might be required for do_fetch(). 55$XBPS_LIBEXECDIR/xbps-src-dofetch.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1 56[ "$XBPS_TARGET" = "fetch" ] && exit 0 57 58# Fetch, extract, build and install into the destination directory. 59$XBPS_LIBEXECDIR/xbps-src-doextract.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1 60[ "$XBPS_TARGET" = "extract" ] && exit 0 61 62# Run patch phrase 63$XBPS_LIBEXECDIR/xbps-src-dopatch.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1 64[ "$XBPS_TARGET" = "patch" ] && exit 0 65 66# Run configure phase 67$XBPS_LIBEXECDIR/xbps-src-doconfigure.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1 68[ "$XBPS_TARGET" = "configure" ] && exit 0 69 70# Run build phase 71$XBPS_LIBEXECDIR/xbps-src-dobuild.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1 72[ "$XBPS_TARGET" = "build" ] && exit 0 73 74# Run check phase 75$XBPS_LIBEXECDIR/xbps-src-docheck.sh $SOURCEPKG $XBPS_CROSS_BUILD || exit 1 76[ "$XBPS_TARGET" = "check" ] && exit 0 77 78# Install pkgs into destdir. 79$XBPS_LIBEXECDIR/xbps-src-doinstall.sh $SOURCEPKG no $XBPS_CROSS_BUILD || exit 1 80 81for subpkg in ${subpackages} ${sourcepkg}; do 82 $XBPS_LIBEXECDIR/xbps-src-doinstall.sh $subpkg yes $XBPS_CROSS_BUILD || exit 1 83done 84for subpkg in ${subpackages} ${sourcepkg}; do 85 $XBPS_LIBEXECDIR/xbps-src-prepkg.sh $subpkg $XBPS_CROSS_BUILD || exit 1 86done 87 88for subpkg in ${subpackages} ${sourcepkg}; do 89 if [ "$PKGNAME" = "${subpkg}" -a "$XBPS_TARGET" = "install" ]; then 90 exit 0 91 fi 92done 93 94# Clean list of preregistered packages 95printf "" > ${XBPS_STATEDIR}/.${sourcepkg}_register_pkg 96# If install went ok generate the binpkgs. 97for subpkg in ${subpackages} ${sourcepkg}; do 98 $XBPS_LIBEXECDIR/xbps-src-dopkg.sh $subpkg "$XBPS_REPOSITORY" "$XBPS_CROSS_BUILD" || exit 1 99done 100 101# Registering packages at once per repository. This makes sure that staging is 102# triggered for all new packages if any of them introduces inconsistencies. 103cut -d: -f 1,2 ${XBPS_STATEDIR}/.${sourcepkg}_register_pkg | sort -u | \ 104 while IFS=: read -r arch repo; do 105 paths=$(grep "^$arch:$repo:" "${XBPS_STATEDIR}/.${sourcepkg}_register_pkg" | \ 106 cut -d : -f 2,3 | tr ':' '/') 107 if [ -n "${arch}" ]; then 108 msg_normal "Registering new packages to $repo ($arch)\n" 109 XBPS_TARGET_ARCH=${arch} $XBPS_RINDEX_CMD \ 110 ${XBPS_REPO_COMPTYPE:+--compression $XBPS_REPO_COMPTYPE} ${XBPS_BUILD_FORCEMODE:+-f} -a ${paths} 111 else 112 msg_normal "Registering new packages to $repo\n" 113 if [ -n "$XBPS_CROSS_BUILD" ]; then 114 $XBPS_RINDEX_XCMD ${XBPS_REPO_COMPTYPE:+--compression $XBPS_REPO_COMPTYPE} \ 115 ${XBPS_BUILD_FORCEMODE:+-f} -a ${paths} 116 else 117 $XBPS_RINDEX_CMD ${XBPS_REPO_COMPTYPE:+--compression $XBPS_REPO_COMPTYPE} \ 118 ${XBPS_BUILD_FORCEMODE:+-f} -a ${paths} 119 fi 120 fi 121 done 122 123# pkg cleanup 124if declare -f do_clean >/dev/null; then 125 run_func do_clean 126fi 127 128if [ -n "$XBPS_DEPENDENCY" -o -z "$XBPS_KEEP_ALL" ]; then 129 remove_pkg_autodeps 130 remove_pkg_wrksrc 131 remove_pkg $XBPS_CROSS_BUILD 132 remove_pkg_statedir 133fi 134 135exit 0