UNIXworkcode

1 #!/bin/sh 2 3 4 # some utility functions 5 isplatform() 6 { 7 for p in $PLATFORM 8 do 9 if [ "$p" = "$1" ]; then 10 return 0 11 fi 12 done 13 return 1 14 } 15 notisplatform() 16 { 17 for p in $PLATFORM 18 do 19 if [ "$p" = "$1" ]; then 20 return 1 21 fi 22 done 23 return 0 24 } 25 istoolchain() 26 { 27 for t in $TOOLCHAIN 28 do 29 if [ "$t" = "$1" ]; then 30 return 0 31 fi 32 done 33 return 1 34 } 35 notistoolchain() 36 { 37 for t in $TOOLCHAIN 38 do 39 if [ "$t" = "$1" ]; then 40 return 1 41 fi 42 done 43 return 0 44 } 45 46 # clean abort 47 abort_configure() 48 { 49 rm -Rf "$TEMP_DIR" 50 exit 1 51 } 52 53 # Test for availability of pkg-config 54 PKG_CONFIG=`command -v pkg-config` 55 : ${PKG_CONFIG:="false"} 56 57 # Simple uname based platform detection 58 # $PLATFORM is used for platform dependent dependency selection 59 OS=`uname -s` 60 OS_VERSION=`uname -r` 61 ARCH=`uname -m` 62 printf "detect platform... " 63 if [ "$OS" = "SunOS" ]; then 64 PLATFORM="solaris sunos unix svr4" 65 elif [ "$OS" = "Linux" ]; then 66 PLATFORM="linux unix" 67 elif [ "$OS" = "FreeBSD" ]; then 68 PLATFORM="freebsd bsd unix" 69 elif [ "$OS" = "OpenBSD" ]; then 70 PLATFORM="openbsd bsd unix" 71 elif [ "$OS" = "NetBSD" ]; then 72 PLATFORM="netbsd bsd unix" 73 elif [ "$OS" = "Darwin" ]; then 74 PLATFORM="macos osx bsd unix" 75 elif echo "$OS" | grep -i "MINGW" > /dev/null; then 76 PLATFORM="windows mingw" 77 fi 78 : ${PLATFORM:="unix"} 79 80 PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -` 81 echo "$PLATFORM_NAME" 82 83 84 # help text 85 printhelp() 86 { 87 echo "Usage: $0 [OPTIONS]..." 88 echo 'Configuration:' 89 if true \ 90 ; then 91 : 92 if test -z "$prefix__described__"; then 93 prefix__described__=1 94 cat << '__EOF__' 95 --prefix path prefix for architecture-independent files [/usr] 96 __EOF__ 97 fi 98 if test -z "$exec_prefix__described__"; then 99 exec_prefix__described__=1 100 cat << '__EOF__' 101 --exec-prefix path prefix for architecture-dependent files [PREFIX] 102 __EOF__ 103 fi 104 if test -z "$libdir__described__"; then 105 libdir__described__=1 106 cat << '__EOF__' 107 --libdir object code libraries [EPREFIX/lib] 108 __EOF__ 109 fi 110 if test -z "$includedir__described__"; then 111 includedir__described__=1 112 cat << '__EOF__' 113 --includedir C header files [PREFIX/include] 114 __EOF__ 115 fi 116 fi 117 if true \ 118 && isplatform "freebsd" \ 119 ; then 120 : 121 if test -z "$pkgconfigdir__described__"; then 122 pkgconfigdir__described__=1 123 cat << '__EOF__' 124 --pkgconfigdir location of the *.pc files 125 __EOF__ 126 fi 127 fi 128 if true \ 129 && notisplatform "freebsd" \ 130 ; then 131 : 132 if test -z "$pkgconfigdir__described__"; then 133 pkgconfigdir__described__=1 134 cat << '__EOF__' 135 --pkgconfigdir location of the *.pc files 136 __EOF__ 137 fi 138 fi 139 if true \ 140 ; then 141 : 142 if test -z "$DOXYGEN__described__"; then 143 DOXYGEN__described__=1 144 cat << '__EOF__' 145 --doxygen path of the Doxygen executable 146 __EOF__ 147 fi 148 fi 149 cat << '__EOF__' 150 151 Build Types: 152 --debug add extra compile flags for debug builds 153 --release add extra compile flags for release builds 154 155 Optional Features: 156 --enable-api-docs run Doxygen during build 157 --enable-coverage test coverage with gcov 158 --enable-asan address sanitizer 159 --enable-ubsan undefined behavior sanitizer 160 --disable-cxx-tests the check-cxx makefile target 161 --disable-szmul-builtin use custom implementation, instead 162 --disable-memrchr 163 --disable-mkstemp 164 --disable-qsort_r 165 166 __EOF__ 167 abort_configure 168 } 169 170 # create temporary directory 171 TEMP_DIR=".tmp-`uname -n`" 172 rm -Rf "$TEMP_DIR" 173 if mkdir -p "$TEMP_DIR"; then 174 : 175 else 176 echo "Cannot create tmp dir $TEMP_DIR" 177 echo "Abort" 178 exit 1 179 fi 180 touch "$TEMP_DIR/options" 181 touch "$TEMP_DIR/features" 182 183 # config variables 184 if true \ 185 ; then 186 : 187 if test -z "$prefix__initialized__"; then 188 prefix__initialized__=1 189 prefix='/usr' 190 fi 191 if test -z "$exec_prefix__initialized__"; then 192 exec_prefix__initialized__=1 193 exec_prefix='' 194 fi 195 if test -z "$libdir__initialized__"; then 196 libdir__initialized__=1 197 libdir='' 198 fi 199 if test -z "$includedir__initialized__"; then 200 includedir__initialized__=1 201 includedir='' 202 fi 203 if test -z "$VERSION__initialized__"; then 204 VERSION__initialized__=1 205 VERSION='4.0.0' 206 fi 207 if test -z "$LIBVERSION__initialized__"; then 208 LIBVERSION__initialized__=1 209 LIBVERSION='7.0.0' 210 fi 211 if test -z "$LIBVERSION_MAJOR__initialized__"; then 212 LIBVERSION_MAJOR__initialized__=1 213 LIBVERSION_MAJOR='7' 214 fi 215 if test -z "$root_dir__initialized__"; then 216 root_dir__initialized__=1 217 root_dir=`pwd` 218 fi 219 if test -z "$build_dir__initialized__"; then 220 build_dir__initialized__=1 221 build_dir='${root_dir}/build' 222 fi 223 if test -z "$docs_dir__initialized__"; then 224 docs_dir__initialized__=1 225 docs_dir='${root_dir}/build/docs' 226 fi 227 if test -z "$dist_dir__initialized__"; then 228 dist_dir__initialized__=1 229 dist_dir='${root_dir}/dist' 230 fi 231 if test -z "$MKDIR__initialized__"; then 232 MKDIR__initialized__=1 233 MKDIR='/bin/mkdir -p' 234 fi 235 if test -z "$RMFILE__initialized__"; then 236 RMFILE__initialized__=1 237 RMFILE='/bin/rm -f' 238 fi 239 if test -z "$RMDIR__initialized__"; then 240 RMDIR__initialized__=1 241 RMDIR='/bin/rm -f -R' 242 fi 243 if test -z "$COPYFILE__initialized__"; then 244 COPYFILE__initialized__=1 245 COPYFILE='/bin/cp -f' 246 fi 247 if test -z "$COPYALL__initialized__"; then 248 COPYALL__initialized__=1 249 COPYALL='/bin/cp -f -R' 250 fi 251 if test -z "$SYMLINK__initialized__"; then 252 SYMLINK__initialized__=1 253 SYMLINK='/bin/ln -s' 254 fi 255 fi 256 if true \ 257 && isplatform "freebsd" \ 258 ; then 259 : 260 if test -z "$pkgconfigdir__initialized__"; then 261 pkgconfigdir__initialized__=1 262 pkgconfigdir='${exec_prefix}/libdata/pkgconfig' 263 fi 264 fi 265 if true \ 266 && notisplatform "freebsd" \ 267 ; then 268 : 269 if test -z "$pkgconfigdir__initialized__"; then 270 pkgconfigdir__initialized__=1 271 pkgconfigdir='${libdir}/pkgconfig' 272 fi 273 fi 274 if true \ 275 ; then 276 : 277 if test -z "$DOXYGEN__initialized__"; then 278 DOXYGEN__initialized__=1 279 DOXYGEN=`command -v doxygen || echo '/bin/false'` 280 fi 281 fi 282 283 # features 284 FEATURE_CXX_TESTS=auto 285 FEATURE_SZMUL_BUILTIN=auto 286 FEATURE_MEMRCHR=auto 287 FEATURE_MKSTEMP=auto 288 FEATURE_QSORT_R=auto 289 290 # 291 # parse arguments 292 # 293 BUILD_TYPE="default" 294 for ARG in "$@" 295 do 296 case "$ARG" in 297 "--prefix="*) prefix=${ARG#--prefix=} ;; 298 "--exec-prefix="*) exec_prefix=${ARG#--exec-prefix=} ;; 299 "--libdir="*) libdir=${ARG#--libdir=} ;; 300 "--includedir="*) includedir=${ARG#--includedir=} ;; 301 "--pkgconfigdir="*) pkgconfigdir=${ARG#--pkgconfigdir=} ;; 302 "--doxygen="*) DOXYGEN=${ARG#--doxygen=} ;; 303 "--help"*) printhelp ;; 304 "--debug") BUILD_TYPE="debug" ;; 305 "--release") BUILD_TYPE="release" ;; 306 "--enable-api-docs") FEATURE_API_DOCS=on ;; 307 "--disable-api-docs") unset FEATURE_API_DOCS ;; 308 "--enable-coverage") FEATURE_COVERAGE=on ;; 309 "--disable-coverage") unset FEATURE_COVERAGE ;; 310 "--enable-asan") FEATURE_ASAN=on ;; 311 "--disable-asan") unset FEATURE_ASAN ;; 312 "--enable-ubsan") FEATURE_UBSAN=on ;; 313 "--disable-ubsan") unset FEATURE_UBSAN ;; 314 "--enable-cxx-tests") FEATURE_CXX_TESTS=on ;; 315 "--disable-cxx-tests") unset FEATURE_CXX_TESTS ;; 316 "--enable-szmul-builtin") FEATURE_SZMUL_BUILTIN=on ;; 317 "--disable-szmul-builtin") unset FEATURE_SZMUL_BUILTIN ;; 318 "--enable-memrchr") FEATURE_MEMRCHR=on ;; 319 "--disable-memrchr") unset FEATURE_MEMRCHR ;; 320 "--enable-mkstemp") FEATURE_MKSTEMP=on ;; 321 "--disable-mkstemp") unset FEATURE_MKSTEMP ;; 322 "--enable-qsort_r") FEATURE_QSORT_R=on ;; 323 "--disable-qsort_r") unset FEATURE_QSORT_R ;; 324 "-"*) echo "unknown option: $ARG"; abort_configure ;; 325 esac 326 done 327 328 # toolchain detection utilities 329 . make/toolchain.sh 330 331 # check languages 332 lang_c= 333 lang_cpp= 334 if detect_cpp_compiler ; then 335 lang_cpp=1 336 fi 337 if detect_c_compiler ; then 338 lang_c=1 339 fi 340 341 342 343 # set defaults for dir variables 344 : ${exec_prefix:="$prefix"} 345 : ${bindir:='${exec_prefix}/bin'} 346 : ${sbindir:='${exec_prefix}/sbin'} 347 : ${libdir:='${exec_prefix}/lib'} 348 : ${libexecdir:='${exec_prefix}/libexec'} 349 : ${datarootdir:='${prefix}/share'} 350 : ${datadir:='${datarootdir}'} 351 : ${sharedstatedir:='${prefix}/com'} 352 if [ -z "$sysconfdir" ]; then 353 if [ "$prefix" = '/usr' ]; then 354 sysconfdir='/etc' 355 else 356 sysconfdir='${prefix}/etc' 357 fi 358 fi 359 if [ -z "$localstatedir" ]; then 360 if [ "$prefix" = '/usr' ]; then 361 localstatedir='/var' 362 else 363 localstatedir='${prefix}/var' 364 fi 365 fi 366 if [ -z "$runstatedir" ]; then 367 if [ "$prefix" = '/usr' ]; then 368 runstatedir='/var/run' 369 else 370 runstatedir='${prefix}/var' 371 fi 372 fi 373 : ${includedir:='${prefix}/include'} 374 : ${infodir:='${datarootdir}/info'} 375 : ${mandir:='${datarootdir}/man'} 376 : ${localedir:='${datarootdir}/locale'} 377 378 379 # check if a config.site exists and load it 380 CONFIG_SITE_OK=0 381 if [ -n "$CONFIG_SITE" ]; then 382 # CONFIG_SITE may contain space separated file names 383 for cs in $CONFIG_SITE; do 384 printf "loading defaults from $cs... " 385 if [ -f "$cs" ]; then 386 . "$cs" 387 echo ok 388 CONFIG_SITE_OK=1 389 break 390 else 391 echo "not found" 392 fi 393 done 394 elif [ -f "$prefix/share/config.site" ]; then 395 printf "loading site defaults... " 396 . "$prefix/share/config.site" 397 echo ok 398 CONFIG_SITE_OK=1 399 elif [ -f "$prefix/etc/config.site" ]; then 400 printf "loading site defaults... " 401 . "$prefix/etc/config.site" 402 echo ok 403 CONFIG_SITE_OK=1 404 fi 405 406 if [ $CONFIG_SITE_OK -eq 0 ]; then 407 # try to detect the correct libdir on our own, except it was changed by the user 408 if [ "$libdir" = '${exec_prefix}/lib' ] ; then 409 if [ "$TOOLCHAIN_WSIZE" = "64" ] ; then 410 if [ "$OS" = "SunOS" ]; then 411 [ -d "${exec_prefix}/lib/64" ] && libdir='${exec_prefix}/lib/64' 412 else 413 [ -d "${exec_prefix}/lib64" ] && libdir='${exec_prefix}/lib64' 414 fi 415 elif [ "$TOOLCHAIN_WSIZE" = "32" ] ; then 416 if [ "$OS" = "SunOS" ]; then 417 [ -d "${exec_prefix}/lib/32" ] && libdir='${exec_prefix}/lib/32' 418 else 419 [ -d "${exec_prefix}/lib32" ] && libdir='${exec_prefix}/lib32' 420 fi 421 fi 422 fi 423 fi 424 425 426 # generate vars.mk 427 cat > "$TEMP_DIR/vars.mk" << __EOF__ 428 prefix=$prefix 429 exec_prefix=$exec_prefix 430 libdir=$libdir 431 includedir=$includedir 432 VERSION=$VERSION 433 LIBVERSION=$LIBVERSION 434 LIBVERSION_MAJOR=$LIBVERSION_MAJOR 435 root_dir=$root_dir 436 build_dir=$build_dir 437 docs_dir=$docs_dir 438 dist_dir=$dist_dir 439 MKDIR=$MKDIR 440 RMFILE=$RMFILE 441 RMDIR=$RMDIR 442 COPYFILE=$COPYFILE 443 COPYALL=$COPYALL 444 SYMLINK=$SYMLINK 445 pkgconfigdir=$pkgconfigdir 446 DOXYGEN=$DOXYGEN 447 __EOF__ 448 449 450 # 451 # DEPENDENCIES 452 # 453 454 455 456 # create buffer for make variables required by dependencies 457 echo > "$TEMP_DIR/make.mk" 458 459 test_pkg_config() 460 { 461 if "$PKG_CONFIG" --exists "$1" ; then : 462 else return 1 ; fi 463 if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then : 464 else return 1 ; fi 465 if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then : 466 else return 1 ; fi 467 if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then : 468 else return 1 ; fi 469 return 0 470 } 471 472 print_check_msg() 473 { 474 if [ -z "$1" ]; then 475 shift 476 printf "$@" 477 fi 478 } 479 480 dependency_error_coverage() 481 { 482 print_check_msg "$dep_checked_coverage" "checking for coverage... " 483 # dependency coverage toolchain="gcc" 484 while true 485 do 486 if notistoolchain "gcc"; then 487 break 488 fi 489 if command -v gcovr > /dev/null 2>&1 ; then 490 : 491 else 492 break 493 fi 494 TEMP_CFLAGS="$TEMP_CFLAGS \${COVERAGE_CFLAGS}" 495 TEMP_LDFLAGS="$TEMP_LDFLAGS \${COVERAGE_LDFLAGS}" 496 print_check_msg "$dep_checked_coverage" "yes\n" 497 dep_checked_coverage=1 498 return 1 499 done 500 501 print_check_msg "$dep_checked_coverage" "no\n" 502 dep_checked_coverage=1 503 return 0 504 } 505 dependency_error_mkstemp() 506 { 507 print_check_msg "$dep_checked_mkstemp" "checking for mkstemp... " 508 # dependency mkstemp 509 while true 510 do 511 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_mkstemp.c > /dev/null 2>&1 ; then 512 : 513 else 514 break 515 fi 516 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_MKSTEMP" 517 print_check_msg "$dep_checked_mkstemp" "yes\n" 518 dep_checked_mkstemp=1 519 return 1 520 done 521 522 print_check_msg "$dep_checked_mkstemp" "no\n" 523 dep_checked_mkstemp=1 524 return 0 525 } 526 dependency_error_asan() 527 { 528 print_check_msg "$dep_checked_asan" "checking for asan... " 529 # dependency asan toolchain="gnuc" 530 while true 531 do 532 if notistoolchain "gnuc"; then 533 break 534 fi 535 TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=address" 536 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=address" 537 print_check_msg "$dep_checked_asan" "yes\n" 538 dep_checked_asan=1 539 return 1 540 done 541 542 print_check_msg "$dep_checked_asan" "no\n" 543 dep_checked_asan=1 544 return 0 545 } 546 dependency_error_cxx() 547 { 548 print_check_msg "$dep_checked_cxx" "checking for cxx... " 549 # dependency cxx 550 while true 551 do 552 if [ -z "$lang_cpp" ] ; then 553 break 554 fi 555 print_check_msg "$dep_checked_cxx" "yes\n" 556 dep_checked_cxx=1 557 return 1 558 done 559 560 print_check_msg "$dep_checked_cxx" "no\n" 561 dep_checked_cxx=1 562 return 0 563 } 564 dependency_error_memrchr() 565 { 566 print_check_msg "$dep_checked_memrchr" "checking for memrchr... " 567 # dependency memrchr 568 while true 569 do 570 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_memrchr.c > /dev/null 2>&1 ; then 571 : 572 else 573 break 574 fi 575 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_MEMRCHR" 576 print_check_msg "$dep_checked_memrchr" "yes\n" 577 dep_checked_memrchr=1 578 return 1 579 done 580 581 print_check_msg "$dep_checked_memrchr" "no\n" 582 dep_checked_memrchr=1 583 return 0 584 } 585 dependency_error_doxygen() 586 { 587 print_check_msg "$dep_checked_doxygen" "checking for doxygen... " 588 # dependency doxygen 589 while true 590 do 591 if test -n "$DOXYGEN" > /dev/null 2>&1 ; then 592 : 593 else 594 break 595 fi 596 print_check_msg "$dep_checked_doxygen" "yes\n" 597 dep_checked_doxygen=1 598 return 1 599 done 600 601 print_check_msg "$dep_checked_doxygen" "no\n" 602 dep_checked_doxygen=1 603 return 0 604 } 605 dependency_error_no_coverage() 606 { 607 print_check_msg "$dep_checked_no_coverage" "checking for no_coverage... " 608 # dependency no_coverage 609 while true 610 do 611 if test -z "$FEATURE_COVERAGE" > /dev/null 2>&1 ; then 612 : 613 else 614 break 615 fi 616 print_check_msg "$dep_checked_no_coverage" "yes\n" 617 dep_checked_no_coverage=1 618 return 1 619 done 620 621 print_check_msg "$dep_checked_no_coverage" "no\n" 622 dep_checked_no_coverage=1 623 return 0 624 } 625 dependency_error_ubsan() 626 { 627 print_check_msg "$dep_checked_ubsan" "checking for ubsan... " 628 # dependency ubsan toolchain="gnuc" 629 while true 630 do 631 if notistoolchain "gnuc"; then 632 break 633 fi 634 TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=undefined" 635 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=undefined" 636 print_check_msg "$dep_checked_ubsan" "yes\n" 637 dep_checked_ubsan=1 638 return 1 639 done 640 641 print_check_msg "$dep_checked_ubsan" "no\n" 642 dep_checked_ubsan=1 643 return 0 644 } 645 dependency_error_qsort_r() 646 { 647 print_check_msg "$dep_checked_qsort_r" "checking for qsort_r... " 648 # dependency qsort_r 649 while true 650 do 651 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_qsort_r.c > /dev/null 2>&1 ; then 652 : 653 else 654 break 655 fi 656 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_QSORT_R" 657 print_check_msg "$dep_checked_qsort_r" "yes\n" 658 dep_checked_qsort_r=1 659 return 1 660 done 661 662 print_check_msg "$dep_checked_qsort_r" "no\n" 663 dep_checked_qsort_r=1 664 return 0 665 } 666 667 # start collecting dependency information 668 echo > "$TEMP_DIR/flags.mk" 669 670 DEPENDENCIES_FAILED= 671 ERROR=0 672 # unnamed dependencies 673 TEMP_CFLAGS="$CFLAGS" 674 TEMP_CXXFLAGS="$CXXFLAGS" 675 TEMP_LDFLAGS="$LDFLAGS" 676 while true 677 do 678 if notisplatform "macos"; then 679 break 680 fi 681 while true 682 do 683 if [ -z "$lang_c" ] ; then 684 ERROR=1 685 break 686 fi 687 688 cat >> "$TEMP_DIR/make.mk" << __EOF__ 689 AR=ar 690 ARFLAGS=r 691 STLIB_EXT=.a 692 SHLIB_EXT=.dylib 693 694 SHLIB_LDFLAGS=-dynamiclib -current_version \$(LIBVERSION) -compatibility_version \$(LIBVERSION) 695 INSTALL_LIB=\$(root_dir)/make/install-lib-macos.sh 696 __EOF__ 697 break 698 done 699 break 700 done 701 while true 702 do 703 if notisplatform "unix"; then 704 break 705 fi 706 if isplatform "macos" || istoolchain "macos"; then 707 break 708 fi 709 while true 710 do 711 if [ -z "$lang_c" ] ; then 712 ERROR=1 713 break 714 fi 715 716 cat >> "$TEMP_DIR/make.mk" << __EOF__ 717 AR=ar 718 ARFLAGS=cr 719 STLIB_EXT=.a 720 SHLIB_EXT=.so 721 INSTALL_LIB=\$(root_dir)/make/install-lib.sh 722 __EOF__ 723 break 724 done 725 break 726 done 727 while true 728 do 729 if notistoolchain "gnuc"; then 730 break 731 fi 732 if isplatform "macos" || istoolchain "macos"; then 733 break 734 fi 735 while true 736 do 737 738 cat >> "$TEMP_DIR/make.mk" << __EOF__ 739 SHLIB_LDFLAGS += -Wl,-soname,libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR) 740 __EOF__ 741 break 742 done 743 break 744 done 745 while true 746 do 747 if notistoolchain "suncc"; then 748 break 749 fi 750 while true 751 do 752 753 cat >> "$TEMP_DIR/make.mk" << __EOF__ 754 SHLIB_LDFLAGS += -h libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR) 755 __EOF__ 756 break 757 done 758 break 759 done 760 while true 761 do 762 if notisplatform "solaris"; then 763 break 764 fi 765 while true 766 do 767 768 TEMP_LDFLAGS="$TEMP_LDFLAGS -lm" 769 break 770 done 771 break 772 done 773 774 # build type 775 if [ "$BUILD_TYPE" = "debug" ]; then 776 TEMP_CFLAGS="\${DEBUG_CFLAGS} $TEMP_CFLAGS" 777 TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS} $TEMP_CXXFLAGS" 778 fi 779 if [ "$BUILD_TYPE" = "release" ]; then 780 TEMP_CFLAGS="\${RELEASE_CFLAGS} $TEMP_CFLAGS" 781 TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS} $TEMP_CXXFLAGS" 782 fi 783 784 # add general dependency flags to flags.mk 785 echo "# general flags" >> "$TEMP_DIR/flags.mk" 786 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then 787 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 788 fi 789 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then 790 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" 791 fi 792 if [ -n "${TEMP_LDFLAGS}" ]; then 793 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" 794 fi 795 796 # 797 # OPTION VALUES 798 # 799 800 # 801 # TARGETS 802 # 803 804 echo >> "$TEMP_DIR/flags.mk" 805 echo "configuring global target" 806 echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk" 807 TEMP_CFLAGS= 808 TEMP_CXXFLAGS= 809 TEMP_LDFLAGS= 810 811 812 # Features 813 if [ -n "$FEATURE_API_DOCS" ]; then 814 # check dependency 815 if dependency_error_doxygen ; then 816 # "auto" features can fail and are just disabled in this case 817 if [ "$FEATURE_API_DOCS" = "auto" ]; then 818 DISABLE_FEATURE_API_DOCS=1 819 else 820 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED doxygen " 821 ERROR=1 822 fi 823 fi 824 if [ -n "$DISABLE_FEATURE_API_DOCS" ]; then 825 unset FEATURE_API_DOCS 826 fi 827 fi 828 if [ -n "$FEATURE_API_DOCS" ]; then 829 : 830 cat >> "$TEMP_DIR/make.mk" << __EOF__ 831 # Documentation 832 WITH_API_DOCS=yes 833 __EOF__ 834 else 835 : 836 fi 837 if [ -n "$FEATURE_COVERAGE" ]; then 838 # check dependency 839 if dependency_error_coverage ; then 840 # "auto" features can fail and are just disabled in this case 841 if [ "$FEATURE_COVERAGE" = "auto" ]; then 842 DISABLE_FEATURE_COVERAGE=1 843 else 844 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED coverage " 845 ERROR=1 846 fi 847 fi 848 if [ -n "$DISABLE_FEATURE_COVERAGE" ]; then 849 unset FEATURE_COVERAGE 850 fi 851 fi 852 if [ -n "$FEATURE_COVERAGE" ]; then 853 : 854 else 855 : 856 fi 857 if [ -n "$FEATURE_ASAN" ]; then 858 # check dependency 859 if dependency_error_asan ; then 860 # "auto" features can fail and are just disabled in this case 861 if [ "$FEATURE_ASAN" = "auto" ]; then 862 DISABLE_FEATURE_ASAN=1 863 else 864 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED asan " 865 ERROR=1 866 fi 867 fi 868 if [ -n "$DISABLE_FEATURE_ASAN" ]; then 869 unset FEATURE_ASAN 870 fi 871 fi 872 if [ -n "$FEATURE_ASAN" ]; then 873 : 874 else 875 : 876 fi 877 if [ -n "$FEATURE_UBSAN" ]; then 878 # check dependency 879 if dependency_error_ubsan ; then 880 # "auto" features can fail and are just disabled in this case 881 if [ "$FEATURE_UBSAN" = "auto" ]; then 882 DISABLE_FEATURE_UBSAN=1 883 else 884 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ubsan " 885 ERROR=1 886 fi 887 fi 888 if [ -n "$DISABLE_FEATURE_UBSAN" ]; then 889 unset FEATURE_UBSAN 890 fi 891 fi 892 if [ -n "$FEATURE_UBSAN" ]; then 893 : 894 else 895 : 896 fi 897 if [ -n "$FEATURE_CXX_TESTS" ]; then 898 # check dependency 899 if dependency_error_cxx ; then 900 # "auto" features can fail and are just disabled in this case 901 if [ "$FEATURE_CXX_TESTS" = "auto" ]; then 902 DISABLE_FEATURE_CXX_TESTS=1 903 else 904 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED cxx " 905 ERROR=1 906 fi 907 fi 908 if [ -n "$DISABLE_FEATURE_CXX_TESTS" ]; then 909 unset FEATURE_CXX_TESTS 910 fi 911 fi 912 if [ -n "$FEATURE_CXX_TESTS" ]; then 913 : 914 cat >> "$TEMP_DIR/make.mk" << __EOF__ 915 # Enable the check-cxx target 916 WITH_CXX_TEST=yes 917 __EOF__ 918 else 919 : 920 fi 921 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then 922 # check dependency 923 if dependency_error_no_coverage ; then 924 # "auto" features can fail and are just disabled in this case 925 if [ "$FEATURE_SZMUL_BUILTIN" = "auto" ]; then 926 DISABLE_FEATURE_SZMUL_BUILTIN=1 927 else 928 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED no_coverage " 929 ERROR=1 930 fi 931 fi 932 if [ -n "$DISABLE_FEATURE_SZMUL_BUILTIN" ]; then 933 unset FEATURE_SZMUL_BUILTIN 934 fi 935 fi 936 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then 937 : 938 else 939 : 940 TEMP_CFLAGS="$TEMP_CFLAGS -DCX_NO_SZMUL_BUILTIN" 941 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DCX_NO_SZMUL_BUILTIN" 942 fi 943 if [ -n "$FEATURE_MEMRCHR" ]; then 944 # check dependency 945 if dependency_error_memrchr ; then 946 # "auto" features can fail and are just disabled in this case 947 if [ "$FEATURE_MEMRCHR" = "auto" ]; then 948 DISABLE_FEATURE_MEMRCHR=1 949 else 950 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED memrchr " 951 ERROR=1 952 fi 953 fi 954 if [ -n "$DISABLE_FEATURE_MEMRCHR" ]; then 955 unset FEATURE_MEMRCHR 956 fi 957 fi 958 if [ -n "$FEATURE_MEMRCHR" ]; then 959 : 960 else 961 : 962 fi 963 if [ -n "$FEATURE_MKSTEMP" ]; then 964 # check dependency 965 if dependency_error_mkstemp ; then 966 # "auto" features can fail and are just disabled in this case 967 if [ "$FEATURE_MKSTEMP" = "auto" ]; then 968 DISABLE_FEATURE_MKSTEMP=1 969 else 970 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED mkstemp " 971 ERROR=1 972 fi 973 fi 974 if [ -n "$DISABLE_FEATURE_MKSTEMP" ]; then 975 unset FEATURE_MKSTEMP 976 fi 977 fi 978 if [ -n "$FEATURE_MKSTEMP" ]; then 979 : 980 else 981 : 982 fi 983 if [ -n "$FEATURE_QSORT_R" ]; then 984 # check dependency 985 if dependency_error_qsort_r ; then 986 # "auto" features can fail and are just disabled in this case 987 if [ "$FEATURE_QSORT_R" = "auto" ]; then 988 DISABLE_FEATURE_QSORT_R=1 989 else 990 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED qsort_r " 991 ERROR=1 992 fi 993 fi 994 if [ -n "$DISABLE_FEATURE_QSORT_R" ]; then 995 unset FEATURE_QSORT_R 996 fi 997 fi 998 if [ -n "$FEATURE_QSORT_R" ]; then 999 : 1000 else 1001 : 1002 fi 1003 1004 1005 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then 1006 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 1007 fi 1008 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then 1009 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" 1010 fi 1011 if [ -n "${TEMP_LDFLAGS}" ]; then 1012 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" 1013 fi 1014 1015 1016 # final result 1017 if [ $ERROR -ne 0 ]; then 1018 echo 1019 echo "Error: Unresolved dependencies" 1020 echo "$DEPENDENCIES_FAILED" 1021 abort_configure 1022 fi 1023 1024 echo "configure finished" 1025 echo 1026 echo "Toolchain:" 1027 echo " name: $TOOLCHAIN_NAME" 1028 if [ -n "$TOOLCHAIN_CC" ]; then 1029 echo " cc: $TOOLCHAIN_CC" 1030 fi 1031 if [ -n "$TOOLCHAIN_CXX" ]; then 1032 echo " cxx: $TOOLCHAIN_CXX" 1033 fi 1034 if [ -n "$TOOLCHAIN_WSIZE" ]; then 1035 echo " word size: $TOOLCHAIN_WSIZE bit" 1036 fi 1037 if [ -n "$TOOLCHAIN_CSTD" ]; then 1038 echo " default C std: $TOOLCHAIN_CSTD" 1039 fi 1040 echo 1041 echo "Config:" 1042 printf ' %-16s' 'prefix:' 1043 echo "$prefix" 1044 printf ' %-16s' 'exec-prefix:' 1045 echo "$exec_prefix" 1046 printf ' %-16s' 'libdir:' 1047 echo "$libdir" 1048 printf ' %-16s' 'includedir:' 1049 echo "$includedir" 1050 printf ' %-16s' 'pkgconfigdir:' 1051 echo "$pkgconfigdir" 1052 printf ' %-16s' 'doxygen:' 1053 echo "$DOXYGEN" 1054 echo 1055 echo "Features:" 1056 printf ' %-16s' 'api-docs:' 1057 if [ -n "$FEATURE_API_DOCS" ]; then 1058 echo 'on' 1059 else 1060 echo 'off' 1061 fi 1062 printf ' %-16s' 'coverage:' 1063 if [ -n "$FEATURE_COVERAGE" ]; then 1064 echo 'on' 1065 else 1066 echo 'off' 1067 fi 1068 printf ' %-16s' 'asan:' 1069 if [ -n "$FEATURE_ASAN" ]; then 1070 echo 'on' 1071 else 1072 echo 'off' 1073 fi 1074 printf ' %-16s' 'ubsan:' 1075 if [ -n "$FEATURE_UBSAN" ]; then 1076 echo 'on' 1077 else 1078 echo 'off' 1079 fi 1080 printf ' %-16s' 'cxx-tests:' 1081 if [ -n "$FEATURE_CXX_TESTS" ]; then 1082 echo 'on' 1083 else 1084 echo 'off' 1085 fi 1086 printf ' %-16s' 'szmul-builtin:' 1087 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then 1088 echo 'on' 1089 else 1090 echo 'off' 1091 fi 1092 printf ' %-16s' 'memrchr:' 1093 if [ -n "$FEATURE_MEMRCHR" ]; then 1094 echo 'on' 1095 else 1096 echo 'off' 1097 fi 1098 printf ' %-16s' 'mkstemp:' 1099 if [ -n "$FEATURE_MKSTEMP" ]; then 1100 echo 'on' 1101 else 1102 echo 'off' 1103 fi 1104 printf ' %-16s' 'qsort_r:' 1105 if [ -n "$FEATURE_QSORT_R" ]; then 1106 echo 'on' 1107 else 1108 echo 'off' 1109 fi 1110 echo 1111 1112 # generate the config.mk file 1113 pwd=`pwd` 1114 cat > "$TEMP_DIR/config.mk" << __EOF__ 1115 # 1116 # config.mk generated by: 1117 # pwd: $pwd 1118 # $0 $@ 1119 # 1120 1121 __EOF__ 1122 write_toolchain_defaults "$TEMP_DIR/toolchain.mk" 1123 cat "$TEMP_DIR/config.mk" "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk 1124 rm -Rf "$TEMP_DIR" 1125