void-packages

Void Source Packages
git clone git://ezup.dev/void-packages.git
Log | Files | Refs | README | LICENSE

common.sh (21144B)


      1# vim: set ts=4 sw=4 et:
      2
      3run_func() {
      4    local func="$1" desc="$2" funcname="$3" restoretrap= logpipe= logfile= teepid=
      5
      6    : ${funcname:=$func}
      7
      8    logpipe=$(mktemp -u -p ${XBPS_STATEDIR} ${pkgname}_${XBPS_CROSS_BUILD}_XXXXXXXX.logpipe) || exit 1
      9    logfile=${XBPS_STATEDIR}/${pkgname}_${XBPS_CROSS_BUILD}_${funcname}.log
     10
     11    msg_normal "${pkgver:-xbps-src}: running ${desc:-${func}} ...\n"
     12
     13    set -E
     14    restoretrap=$(trap -p ERR)
     15    trap 'error_func $funcname $LINENO' ERR
     16
     17    mkfifo "$logpipe"
     18    tee "$logfile" < "$logpipe" &
     19    teepid=$!
     20
     21    $func &>"$logpipe"
     22
     23    wait $teepid
     24    rm "$logpipe"
     25
     26    eval "$restoretrap"
     27    set +E
     28}
     29
     30ch_wrksrc() {
     31    cd "$wrksrc" || msg_error "$pkgver: cannot access wrksrc directory [$wrksrc]\n"
     32    if [ -n "$build_wrksrc" ]; then
     33        cd "$build_wrksrc" || \
     34            msg_error "$pkgver: cannot access build_wrksrc directory [$build_wrksrc]\n"
     35    fi
     36}
     37
     38# runs {pre,do,post}_X tripplets
     39run_step() {
     40    local step_name="$1" optional_step="$2" skip_post_hook="$3"
     41
     42    ch_wrksrc
     43    run_pkg_hooks "pre-$step_name"
     44
     45  # Run pre_* Phase
     46  if declare -f "pre_$step_name" >/dev/null; then
     47      ch_wrksrc
     48      run_func "pre_$step_name"
     49  fi
     50
     51  ch_wrksrc
     52  # Run do_* Phase
     53  if declare -f "do_$step_name" >/dev/null; then
     54      run_func "do_$step_name"
     55  elif [ -n "$build_style" ]; then
     56      if [ -r $XBPS_BUILDSTYLEDIR/${build_style}.sh ]; then
     57          . $XBPS_BUILDSTYLEDIR/${build_style}.sh
     58          if declare -f "do_$step_name" >/dev/null; then
     59              run_func "do_$step_name"
     60          elif [ ! "$optional_step" ]; then
     61              msg_error "$pkgver: cannot find do_$step_name() in $XBPS_BUILDSTYLEDIR/${build_style}.sh!\n"
     62          fi
     63      else
     64          msg_error "$pkgver: cannot find build style $XBPS_BUILDSTYLEDIR/${build_style}.sh!\n"
     65      fi
     66  elif [ ! "$optional_step" ]; then
     67      msg_error "$pkgver: cannot find do_$step_name()!\n"
     68  fi
     69
     70  # Run do_ phase hooks
     71  run_pkg_hooks "do-$step_name"
     72
     73  # Run post_* Phase
     74  if declare -f "post_$step_name" >/dev/null; then
     75      ch_wrksrc
     76      run_func "post_$step_name"
     77  fi
     78
     79  if ! [ "$skip_post_hook" ]; then
     80      ch_wrksrc
     81      run_pkg_hooks "post-$step_name"
     82  fi
     83}
     84
     85error_func() {
     86    local err=$?
     87    local src=
     88    local i=
     89    [ -n "$1" -a -n "$2" ] || exit 1;
     90
     91    msg_red "$pkgver: $1: '${BASH_COMMAND}' exited with $err\n"
     92    for ((i=1;i<${#FUNCNAME[@]};i++)); do
     93        src=${BASH_SOURCE[$i]}
     94        src=${src#$XBPS_DISTDIR/}
     95        msg_red "  in ${FUNCNAME[$i]}() at $src:${BASH_LINENO[$i-1]}\n"
     96        [ "${FUNCNAME[$i]}" = "$1" ] && break;
     97    done
     98    exit 1
     99}
    100
    101exit_and_cleanup() {
    102    local rval=$1
    103
    104    if [ -n "$XBPS_TEMP_MASTERDIR" -a "$XBPS_TEMP_MASTERDIR" != "1" ]; then
    105        rm -rf "$XBPS_TEMP_MASTERDIR"
    106    fi
    107    exit ${rval:=0}
    108}
    109
    110msg_red() {
    111    # error messages in bold/red
    112    [ -n "$NOCOLORS" ] || printf >&2 "\033[1m\033[31m"
    113    printf >&2 "=> ERROR: $@"
    114    [ -n "$NOCOLORS" ] || printf >&2 "\033[m"
    115}
    116
    117msg_red_nochroot() {
    118    [ -n "$NOCOLORS" ] || printf >&2 "\033[1m\033[31m"
    119    printf >&2 "$@"
    120    [ -n "$NOCOLORS" ] || printf >&2 "\033[m"
    121}
    122
    123msg_error() {
    124    msg_red "$@"
    125    [ -n "$XBPS_INFORMATIVE_RUN" ] || exit 1
    126}
    127
    128msg_warn() {
    129    # warn messages in bold/yellow
    130    [ -n "$NOCOLORS" ] || printf >&2 "\033[1m\033[33m"
    131    printf >&2 "=> WARNING: $@"
    132    [ -n "$NOCOLORS" ] || printf >&2  "\033[m"
    133}
    134
    135msg_warn_nochroot() {
    136    [ -n "$NOCOLORS" ] || printf >&2 "\033[1m\033[33m"
    137    printf >&2 "=> WARNING: $@"
    138    [ -n "$NOCOLORS" ] || printf >&2 "\033[m"
    139}
    140
    141msg_normal() {
    142    if [ -z "$XBPS_QUIET" ]; then
    143        # normal messages in bold
    144        [ -n "$NOCOLORS" ] || printf "\033[1m"
    145        printf "=> $@"
    146        [ -n "$NOCOLORS" ] || printf "\033[m"
    147    fi
    148}
    149
    150msg_normal_append() {
    151    [ -n "$NOCOLORS" ] || printf "\033[1m"
    152    printf "$@"
    153    [ -n "$NOCOLORS" ] || printf "\033[m"
    154}
    155
    156set_build_options() {
    157    local f j pkgopts _pkgname
    158    local -A options
    159
    160    if [ -z "$build_options" ]; then
    161        return 0
    162    fi
    163
    164    for f in ${build_options}; do
    165        # Select build options from conf
    166        export XBPS_CURRENT_PKG=${pkgname}
    167        pkgopts="$(
    168            . $XBPS_CONFIG_FILE 2>/dev/null
    169            var="XBPS_PKG_OPTIONS_${XBPS_CURRENT_PKG//[^A-Za-z0-9_]/_}"
    170            echo ${!var:-${XBPS_PKG_OPTIONS}}
    171        )"
    172        unset XBPS_CURRENT_PKG
    173
    174        # If pkg options were set in config(s), merge them with command line
    175        if [ -n "$XBPS_ARG_PKG_OPTIONS" ]; then
    176            if [ -n "$pkgopts" ]; then
    177                pkgopts+=",$XBPS_ARG_PKG_OPTIONS"
    178            else
    179                pkgopts="$XBPS_ARG_PKG_OPTIONS"
    180            fi
    181        fi
    182
    183        OIFS="$IFS"; IFS=','
    184        for j in ${pkgopts}; do
    185            case "$j" in
    186                "$f") options[$j]=1 ;;
    187                "~$f") options[${j#\~}]=0 ;;
    188            esac
    189        done
    190        IFS="$OIFS"
    191    done
    192
    193    for f in ${build_options_default}; do
    194        [[ -z "${options[$f]}" ]] && options[$f]=1
    195    done
    196
    197    # Prepare final options.
    198    for f in ${build_options}; do
    199        if [[ ${options[$f]} -eq 1 ]]; then
    200            eval export build_option_${f}=1
    201        else
    202            eval unset build_option_${f}
    203        fi
    204    done
    205
    206    # Re-read pkg template to get conditional vars.
    207    if [ -z "$XBPS_BUILD_OPTIONS_PARSED" ]; then
    208        source_file $XBPS_SRCPKGDIR/$pkgname/template
    209        XBPS_BUILD_OPTIONS_PARSED=1
    210        unset PKG_BUILD_OPTIONS
    211        set_build_options
    212        unset XBPS_BUILD_OPTIONS_PARSED
    213        return 0
    214    fi
    215
    216    # Sort pkg build options alphabetically.
    217    export PKG_BUILD_OPTIONS=$(
    218        for f in ${build_options}; do
    219            [[ "${options[$f]}" -eq 1 ]] || printf '~'
    220            printf '%s\n' "$f"
    221        done | sort | tr -s '\n' ' '
    222    )
    223}
    224
    225source_file() {
    226    local f="$1"
    227
    228    if [ ! -f "$f" -o ! -r "$f" ]; then
    229        return 0
    230    fi
    231    if ! source "$f"; then
    232        msg_error "xbps-src: failed to read $f!\n"
    233    fi
    234}
    235
    236run_pkg_hooks() {
    237    local phase="$1" hookn f
    238
    239    eval unset -f hook
    240    for f in ${XBPS_COMMONDIR}/hooks/${phase}/*.sh; do
    241        [ ! -r $f ] && continue
    242        hookn=${f##*/}
    243        hookn=${hookn%.sh}
    244        . $f
    245        run_func hook "$phase hook: $hookn" ${phase}_${hookn}
    246    done
    247}
    248
    249unset_package_funcs() {
    250    local f
    251
    252    for f in $(typeset -F); do
    253        case "$f" in
    254            *_package)
    255                unset -f "$f"
    256                ;;
    257        esac
    258    done
    259}
    260
    261get_endian() {
    262    local arch="${1%-*}"
    263
    264    case "$arch" in
    265        aarch64)  echo "le";;
    266        armv5tel) echo "le";;
    267        armv6l)   echo "le";;
    268        armv7l)   echo "le";;
    269        i686)     echo "le";;
    270        mipsel*)  echo "le";;
    271        mips*)    echo "be";;
    272        ppc*le)   echo "le";;
    273        ppc*)     echo "be";;
    274        x86_64)   echo "le";;
    275    esac
    276}
    277
    278get_libc() {
    279    local arch="${1%-*}"
    280
    281    if [ "${arch}" = "$1" ]; then
    282        echo "glibc"
    283    else
    284        echo "${1#${arch}-}"
    285    fi
    286}
    287
    288get_wordsize() {
    289    local arch="${1%-*}"
    290
    291    case "$arch" in
    292        aarch64)  echo "64";;
    293        armv5tel) echo "32";;
    294        armv6l)   echo "32";;
    295        armv7l)   echo "32";;
    296        i686)     echo "32";;
    297        mipsel*)  echo "32";;
    298        mips*)    echo "32";;
    299        ppc64*)   echo "64";;
    300        ppc*)     echo "32";;
    301        x86_64)   echo "64";;
    302    esac
    303}
    304
    305get_no_atomic8() {
    306    local arch="${1%-*}"
    307
    308    case "$arch" in
    309        armv5tel) echo "yes";;
    310        armv6l)   echo "yes";;
    311        mips*)    echo "yes";;
    312        ppcle)    echo "yes";;
    313        ppc)      echo "yes";;
    314    esac
    315}
    316
    317get_subpkgs() {
    318    local f
    319
    320    for f in $(typeset -F); do
    321        case "$f" in
    322            *_package)
    323                echo "${f%_package}"
    324                ;;
    325        esac
    326    done
    327}
    328
    329setup_pkg() {
    330    local pkg="$1" cross="$2" show_problems="$3"
    331    local basepkg val _vars f dbgflags extrarepo
    332
    333    [ -z "$pkg" ] && return 1
    334    basepkg=${pkg%-32bit}
    335
    336    # Start with a sane environment
    337    unset -v PKG_BUILD_OPTIONS XBPS_CROSS_CFLAGS XBPS_CROSS_CXXFLAGS XBPS_CROSS_FFLAGS XBPS_CROSS_CPPFLAGS XBPS_CROSS_LDFLAGS XBPS_TARGET_QEMU_MACHINE
    338    unset -v subpackages run_depends build_depends host_build_depends
    339
    340    unset_package_funcs
    341
    342    if [ -n "$cross" ]; then
    343        source_file $XBPS_CROSSPFDIR/${cross}.sh
    344
    345        _vars="TARGET_MACHINE CROSS_TRIPLET CROSS_CFLAGS CROSS_CXXFLAGS CROSS_FFLAGS TARGET_QEMU_MACHINE"
    346        for f in ${_vars}; do
    347            eval val="\$XBPS_$f"
    348            if [ -z "$val" ]; then
    349                echo "ERROR: XBPS_$f is not defined!"
    350                exit 1
    351            fi
    352        done
    353
    354        export XBPS_CROSS_BASE=/usr/$XBPS_CROSS_TRIPLET
    355        export XBPS_TARGET_QEMU_MACHINE
    356
    357        XBPS_INSTALL_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE $XBPS_INSTALL_CMD -c /host/repocache-$XBPS_TARGET_MACHINE -r $XBPS_CROSS_BASE"
    358        XBPS_QUERY_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE $XBPS_QUERY_CMD -c /host/repocache-$XBPS_TARGET_MACHINE -r $XBPS_CROSS_BASE"
    359        XBPS_RECONFIGURE_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE $XBPS_RECONFIGURE_CMD -r $XBPS_CROSS_BASE"
    360        XBPS_REMOVE_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE $XBPS_REMOVE_CMD -r $XBPS_CROSS_BASE"
    361        XBPS_RINDEX_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE $XBPS_RINDEX_CMD"
    362        XBPS_UHELPER_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE xbps-uhelper -r $XBPS_CROSS_BASE"
    363        XBPS_CHECKVERS_XCMD="env XBPS_TARGET_ARCH=$XBPS_TARGET_MACHINE xbps-checkvers -r $XBPS_CROSS_BASE"
    364    else
    365        export XBPS_TARGET_MACHINE=${XBPS_ARCH:-$XBPS_MACHINE}
    366        unset XBPS_CROSS_BASE XBPS_CROSS_LDFLAGS XBPS_CROSS_FFLAGS
    367        unset XBPS_CROSS_CFLAGS XBPS_CROSS_CXXFLAGS XBPS_CROSS_CPPFLAGS
    368        unset XBPS_CROSS_RUSTFLAGS XBPS_CROSS_RUST_TARGET
    369
    370        XBPS_INSTALL_XCMD="$XBPS_INSTALL_CMD"
    371        XBPS_QUERY_XCMD="$XBPS_QUERY_CMD"
    372        XBPS_RECONFIGURE_XCMD="$XBPS_RECONFIGURE_CMD"
    373        XBPS_REMOVE_XCMD="$XBPS_REMOVE_CMD"
    374        XBPS_RINDEX_XCMD="$XBPS_RINDEX_CMD"
    375        XBPS_UHELPER_XCMD="$XBPS_UHELPER_CMD"
    376        XBPS_CHECKVERS_XCMD="$XBPS_CHECKVERS_CMD"
    377    fi
    378
    379    export XBPS_ENDIAN=$(get_endian ${XBPS_MACHINE})
    380    export XBPS_TARGET_ENDIAN=$(get_endian ${XBPS_TARGET_MACHINE})
    381    export XBPS_LIBC=$(get_libc ${XBPS_MACHINE})
    382    export XBPS_TARGET_LIBC=$(get_libc ${XBPS_TARGET_MACHINE})
    383    export XBPS_WORDSIZE=$(get_wordsize ${XBPS_MACHINE})
    384    export XBPS_TARGET_WORDSIZE=$(get_wordsize ${XBPS_TARGET_MACHINE})
    385    export XBPS_NO_ATOMIC8=$(get_no_atomic8 ${XBPS_MACHINE})
    386    export XBPS_TARGET_NO_ATOMIC8=$(get_no_atomic8 ${XBPS_TARGET_MACHINE})
    387
    388    export XBPS_INSTALL_XCMD XBPS_QUERY_XCMD XBPS_RECONFIGURE_XCMD \
    389        XBPS_REMOVE_XCMD XBPS_RINDEX_XCMD XBPS_UHELPER_XCMD
    390
    391    # Source all sourcepkg environment setup snippets.
    392    # Source all subpkg environment setup snippets.
    393    for f in ${XBPS_COMMONDIR}/environment/setup-subpkg/*.sh; do
    394        source_file "$f"
    395    done
    396    for f in ${XBPS_COMMONDIR}/environment/setup/*.sh; do
    397        source_file "$f"
    398    done
    399
    400    if [ ! -f ${XBPS_SRCPKGDIR}/${basepkg}/template ]; then
    401        msg_error "xbps-src: unexistent file: ${XBPS_SRCPKGDIR}/${basepkg}/template\n"
    402    fi
    403    if [ -n "$cross" ]; then
    404        export CROSS_BUILD="$cross"
    405        source_file ${XBPS_SRCPKGDIR}/${basepkg}/template
    406    else
    407        unset CROSS_BUILD
    408        source_file ${XBPS_SRCPKGDIR}/${basepkg}/template
    409    fi
    410
    411
    412    # Check if required vars weren't set.
    413    _vars="pkgname version short_desc revision homepage license"
    414    for f in ${_vars}; do
    415        eval val="\$$f"
    416        if [ -z "$val" -o -z "$f" ]; then
    417            msg_error "\"$f\" not set on $pkgname template.\n"
    418        fi
    419    done
    420
    421    # Check if version is valid.
    422    case "$version" in
    423        *-*) msg_error "version contains invalid character: -\n";;
    424        *_*) msg_error "version contains invalid character: _\n";;
    425    esac
    426    case "$version" in
    427        *[0-9]*) : good ;;
    428        *) msg_error "version must contain at least one digit.\n";;
    429    esac
    430
    431    # Check if base-chroot is already installed.
    432    if [ -z "$bootstrap" -a -z "$CHROOT_READY" -a "z$show_problems" != "zignore-problems" ]; then
    433        msg_red "${pkg} is not a bootstrap package and cannot be built without it.\n"
    434        msg_error "Please install bootstrap packages and try again.\n"
    435    fi
    436
    437    sourcepkg="${pkgname}"
    438    if [ -z "$subpackages" ]; then
    439        subpackages="$(get_subpkgs)"
    440    fi
    441
    442    if [ -h $XBPS_SRCPKGDIR/$basepkg ]; then
    443        # Source all subpkg environment setup snippets.
    444        for f in ${XBPS_COMMONDIR}/environment/setup-subpkg/*.sh; do
    445            source_file "$f"
    446        done
    447        pkgname=$pkg
    448        if ! declare -f ${basepkg}_package >/dev/null; then
    449            msg_error "$pkgname: missing ${basepkg}_package() function!\n"
    450        fi
    451    fi
    452
    453    pkgver="${pkg}-${version}_${revision}"
    454
    455    # If build_style() unset, a do_install() function must be defined.
    456    if [ -z "$build_style" ]; then
    457        # Check that at least do_install() is defined.
    458        if ! declare -f do_install >/dev/null; then
    459            msg_error "$pkgver: missing do_install() function!\n"
    460        fi
    461    fi
    462
    463    FILESDIR=$XBPS_SRCPKGDIR/$sourcepkg/files
    464    PATCHESDIR=$XBPS_SRCPKGDIR/$sourcepkg/patches
    465    DESTDIR=$XBPS_DESTDIR/$XBPS_CROSS_TRIPLET/${sourcepkg}-${version}
    466    PKGDESTDIR=$XBPS_DESTDIR/$XBPS_CROSS_TRIPLET/${pkg}-${version}
    467
    468    if [ -n "$disable_parallel_build" -o -z "$XBPS_MAKEJOBS" ]; then
    469        XBPS_MAKEJOBS=1
    470    fi
    471    makejobs="-j$XBPS_MAKEJOBS"
    472    if [ -n "$XBPS_BINPKG_EXISTS" ]; then
    473        local _binpkgver="$($XBPS_QUERY_XCMD -R -ppkgver $pkgver 2>/dev/null)"
    474        if [ "$_binpkgver" = "$pkgver" ]; then
    475            if [ -z "$XBPS_DEPENDENCY" ]; then
    476                local _repo="$($XBPS_QUERY_XCMD -R -prepository $pkgver 2>/dev/null)"
    477                msg_normal "xbps-src: $pkgver: found ($XBPS_TARGET_MACHINE) ($_repo)\n"
    478            fi
    479            exit_and_cleanup
    480        fi
    481    fi
    482
    483    if [ -z "$XBPS_DEBUG_PKGS" -o "$repository" = "nonfree" ]; then
    484        nodebug=yes
    485    fi
    486    # -g is required to build -dbg packages.
    487    if [ -z "$nodebug" ]; then
    488        dbgflags="-g"
    489    fi
    490
    491    # build profile is used always in order to expose the host triplet,
    492    # but the compiler flags from it are only used when not crossing
    493    if [ -z "$CHROOT_READY" ]; then
    494        source_file ${XBPS_COMMONDIR}/build-profiles/bootstrap.sh
    495    else
    496        source_file ${XBPS_COMMONDIR}/build-profiles/${XBPS_MACHINE}.sh
    497    fi
    498
    499    set_build_options
    500
    501    export CFLAGS="$XBPS_CFLAGS $XBPS_CROSS_CFLAGS $CFLAGS $dbgflags"
    502    export CXXFLAGS="$XBPS_CXXFLAGS $XBPS_CROSS_CXXFLAGS $CXXFLAGS $dbgflags"
    503    export FFLAGS="$XBPS_FFLAGS $XBPS_CROSS_FFLAGS $FFLAGS $dbgflags"
    504    export CPPFLAGS="$XBPS_CPPFLAGS $XBPS_CROSS_CPPFLAGS $CPPFLAGS"
    505    export LDFLAGS="$XBPS_LDFLAGS $XBPS_CROSS_LDFLAGS $LDFLAGS"
    506
    507    export BUILD_CC="cc"
    508    export BUILD_CXX="c++"
    509    export BUILD_CPP="cpp"
    510    export BUILD_FC="gfortran"
    511    export BUILD_LD="ld"
    512    export BUILD_CFLAGS="$XBPS_CFLAGS"
    513    export BUILD_CXXFLAGS="$XBPS_CXXFLAGS"
    514    export BUILD_CPPFLAGS="$XBPS_CPPFLAGS"
    515    export BUILD_LDFLAGS="$XBPS_LDFLAGS"
    516    export BUILD_FFLAGS="$XBPS_FFLAGS"
    517
    518    export CC_FOR_BUILD="cc"
    519    export CXX_FOR_BUILD="g++"
    520    export CPP_FOR_BUILD="cpp"
    521    export FC_FOR_BUILD="gfortran"
    522    export LD_FOR_BUILD="ld"
    523    export PKG_CONFIG_FOR_BUILD="/usr/bin/pkg-config"
    524    export CFLAGS_FOR_BUILD="$XBPS_CFLAGS"
    525    export CXXFLAGS_FOR_BUILD="$XBPS_CXXFLAGS"
    526    export CPPFLAGS_FOR_BUILD="$XBPS_CPPFLAGS"
    527    export LDFLAGS_FOR_BUILD="$XBPS_LDFLAGS"
    528    export FFLAGS_FOR_BUILD="$XBPS_FFLAGS"
    529
    530    if [ -n "$cross" ]; then
    531        # Regular tools names
    532        export CC="${XBPS_CROSS_TRIPLET}-gcc"
    533        export CXX="${XBPS_CROSS_TRIPLET}-c++"
    534        export CPP="${XBPS_CROSS_TRIPLET}-cpp"
    535        export FC="${XBPS_CROSS_TRIPLET}-gfortran"
    536        export GCC="$CC"
    537        export LD="${XBPS_CROSS_TRIPLET}-ld"
    538        export AR="${XBPS_CROSS_TRIPLET}-ar"
    539        export AS="${XBPS_CROSS_TRIPLET}-as"
    540        export RANLIB="${XBPS_CROSS_TRIPLET}-ranlib"
    541        export STRIP="${XBPS_CROSS_TRIPLET}-strip"
    542        export OBJDUMP="${XBPS_CROSS_TRIPLET}-objdump"
    543        export OBJCOPY="${XBPS_CROSS_TRIPLET}-objcopy"
    544        export NM="${XBPS_CROSS_TRIPLET}-nm"
    545        export READELF="${XBPS_CROSS_TRIPLET}-readelf"
    546        export PKG_CONFIG="${XBPS_CROSS_TRIPLET}-pkg-config"
    547        # Target tools
    548        export CC_target="$CC"
    549        export CXX_target="$CXX"
    550        export CPP_target="$CPP"
    551        export GCC_target="$GCC"
    552        export FC_target="$FC"
    553        export LD_target="$LD"
    554        export AR_target="$AR"
    555        export AS_target="$AS"
    556        export RANLIB_target="$RANLIB"
    557        export STRIP_target="$STRIP"
    558        export OBJDUMP_target="$OBJDUMP"
    559        export OBJCOPY_target="$OBJCOPY"
    560        export NM_target="$NM"
    561        export READELF_target="$READELF"
    562        # Target flags
    563        export CFLAGS_target="$CFLAGS"
    564        export CXXFLAGS_target="$CXXFLAGS"
    565        export CPPFLAGS_target="$CPPFLAGS"
    566        export LDFLAGS_target="$LDFLAGS"
    567	export FFLAGS_target="$FFLAGS"
    568        # Host tools
    569        export CC_host="cc"
    570        export CXX_host="g++"
    571        export CPP_host="cpp"
    572        export GCC_host="$CC_host"
    573        export FC_host="gfortran"
    574        export LD_host="ld"
    575        export AR_host="ar"
    576        export AS_host="as"
    577        export RANLIB_host="ranlib"
    578        export STRIP_host="strip"
    579        export OBJDUMP_host="objdump"
    580        export OBJCOPY_host="objcopy"
    581        export NM_host="nm"
    582        export READELF_host="readelf"
    583        # Host flags
    584        export CFLAGS_host="$XBPS_CFLAGS"
    585        export CXXFLAGS_host="$XBPS_CXXFLAGS"
    586        export CPPFLAGS_host="$XBPS_CPPFLAGS"
    587        export LDFLAGS_host="$XBPS_LDFLAGS"
    588	export FFLAGS_host="$XBPS_FFLAGS"
    589        # Rust flags which are passed to rustc
    590        export RUSTFLAGS="$XBPS_CROSS_RUSTFLAGS"
    591        # Rust target, which differs from our triplets
    592        export RUST_TARGET="$XBPS_CROSS_RUST_TARGET"
    593        # Rust build, which is the host system, may also differ
    594        export RUST_BUILD="$XBPS_RUST_TARGET"
    595    else
    596        # Target flags from build-profile
    597        export CFLAGS="$XBPS_TARGET_CFLAGS $CFLAGS"
    598        export CXXFLAGS="$XBPS_TARGET_CXXFLAGS $CXXFLAGS"
    599        export FFLAGS="$XBPS_TARGET_FFLAGS $FFLAGS"
    600        export CPPFLAGS="$XBPS_TARGET_CPPFLAGS $CPPFLAGS"
    601        export LDFLAGS="$XBPS_TARGET_LDFLAGS $LDFLAGS"
    602        # Tools
    603        export CC="cc"
    604        export CXX="g++"
    605        export CPP="cpp"
    606        export GCC="$CC"
    607        export FC="gfortran"
    608        export LD="ld"
    609        export AR="ar"
    610        export AS="as"
    611        export RANLIB="ranlib"
    612        export STRIP="strip"
    613        export OBJDUMP="objdump"
    614        export OBJCOPY="objcopy"
    615        export NM="nm"
    616        export READELF="readelf"
    617        export PKG_CONFIG="pkg-config"
    618        export RUST_TARGET="$XBPS_RUST_TARGET"
    619        export RUST_BUILD="$XBPS_RUST_TARGET"
    620        # Unset cross evironment variables
    621        unset CC_target CXX_target CPP_target GCC_target FC_target LD_target AR_target AS_target
    622        unset RANLIB_target STRIP_target OBJDUMP_target OBJCOPY_target NM_target READELF_target
    623        unset CFLAGS_target CXXFLAGS_target CPPFLAGS_target LDFLAGS_target FFLAGS_target
    624        unset CC_host CXX_host CPP_host GCC_host FC_host LD_host AR_host AS_host
    625        unset RANLIB_host STRIP_host OBJDUMP_host OBJCOPY_host NM_host READELF_host
    626        unset CFLAGS_host CXXFLAGS_host CPPFLAGS_host LDFLAGS_host FFLAGS_host
    627        unset RUSTFLAGS
    628    fi
    629
    630    # Setup some specific package vars.
    631    if [ -z "$wrksrc" ]; then
    632        wrksrc="$XBPS_BUILDDIR/${sourcepkg}-${version}"
    633    else
    634        wrksrc="$XBPS_BUILDDIR/$wrksrc"
    635    fi
    636
    637    if [ "$cross" -a "$nocross" -a "$show_problems" != "ignore-problems" ]; then
    638        msg_red "$pkgver: cannot be cross compiled, exiting...\n"
    639        msg_red "$pkgver: $nocross\n"
    640        exit 2
    641    elif [ "$broken" -a "$show_problems" != "ignore-problems" ]; then
    642        msg_red "$pkgver: cannot be built, it's currently broken; see the build log:\n"
    643        msg_red "$pkgver: $broken\n"
    644        exit 2
    645    fi
    646
    647    if [ -n "$restricted" -a -z "$XBPS_ALLOW_RESTRICTED" -a "$show_problems" != "ignore-problems" ]; then
    648        msg_red "$pkgver: does not allow redistribution of sources/binaries (restricted license).\n"
    649        msg_red "If you really need this software, run 'echo XBPS_ALLOW_RESTRICTED=yes >> etc/conf'\n"
    650        exit 2
    651    fi
    652
    653    export XBPS_STATEDIR="${XBPS_BUILDDIR}/.xbps-${sourcepkg}"
    654    export XBPS_WRAPPERDIR="${XBPS_STATEDIR}/wrappers"
    655
    656    mkdir -p $XBPS_STATEDIR $XBPS_WRAPPERDIR
    657
    658    source_file $XBPS_COMMONDIR/environment/build-style/${build_style}.sh
    659
    660    # Source all build-helper files that are defined
    661    for f in $build_helper; do
    662        if [ ! -r $XBPS_BUILDHELPERDIR/${f}.sh ];  then
    663            msg_error "$pkgver: cannot find build helper $XBPS_BUILDHELPERDIR/${f}.sh!\n"
    664        fi
    665        . $XBPS_BUILDHELPERDIR/${f}.sh
    666    done
    667}