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