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}