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 "Configure script for 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 else 78 PLATFORM="unix" 79 fi 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.2' 214 fi 215 if [ -z "$LIBVERSION__initialized__" ] ; then 216 LIBVERSION__initialized__=1 217 LIBVERSION='7.0.2' 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 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DWITH_MKSTEMP" 526 print_check_msg "$dep_checked_mkstemp" "yes\n" 527 dep_checked_mkstemp=1 528 return 1 529 done 530 531 print_check_msg "$dep_checked_mkstemp" "no\n" 532 dep_checked_mkstemp=1 533 return 0 534 } 535 dependency_error_asan() 536 { 537 print_check_msg "$dep_checked_asan" "checking for asan... " 538 # dependency asan toolchain="gnuc" 539 while true 540 do 541 if notistoolchain "gnuc"; then 542 break 543 fi 544 TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=address" 545 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=address" 546 print_check_msg "$dep_checked_asan" "yes\n" 547 dep_checked_asan=1 548 return 1 549 done 550 551 print_check_msg "$dep_checked_asan" "no\n" 552 dep_checked_asan=1 553 return 0 554 } 555 dependency_error_cxx() 556 { 557 print_check_msg "$dep_checked_cxx" "checking for cxx... " 558 # dependency cxx 559 while true 560 do 561 if [ -z "$lang_cpp" ] ; then 562 break 563 fi 564 print_check_msg "$dep_checked_cxx" "yes\n" 565 dep_checked_cxx=1 566 return 1 567 done 568 569 print_check_msg "$dep_checked_cxx" "no\n" 570 dep_checked_cxx=1 571 return 0 572 } 573 dependency_error_memrchr() 574 { 575 print_check_msg "$dep_checked_memrchr" "checking for memrchr... " 576 # dependency memrchr 577 while true 578 do 579 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_memrchr.c > /dev/null 2>&1 ; then 580 : 581 else 582 break 583 fi 584 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_MEMRCHR" 585 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DWITH_MEMRCHR" 586 print_check_msg "$dep_checked_memrchr" "yes\n" 587 dep_checked_memrchr=1 588 return 1 589 done 590 591 print_check_msg "$dep_checked_memrchr" "no\n" 592 dep_checked_memrchr=1 593 return 0 594 } 595 dependency_error_doxygen() 596 { 597 print_check_msg "$dep_checked_doxygen" "checking for doxygen... " 598 # dependency doxygen 599 while true 600 do 601 if test -n "$DOXYGEN" > /dev/null 2>&1 ; then 602 : 603 else 604 break 605 fi 606 print_check_msg "$dep_checked_doxygen" "yes\n" 607 dep_checked_doxygen=1 608 return 1 609 done 610 611 print_check_msg "$dep_checked_doxygen" "no\n" 612 dep_checked_doxygen=1 613 return 0 614 } 615 dependency_error_no_coverage() 616 { 617 print_check_msg "$dep_checked_no_coverage" "checking for no_coverage... " 618 # dependency no_coverage 619 while true 620 do 621 if test -z "$FEATURE_COVERAGE" > /dev/null 2>&1 ; then 622 : 623 else 624 break 625 fi 626 print_check_msg "$dep_checked_no_coverage" "yes\n" 627 dep_checked_no_coverage=1 628 return 1 629 done 630 631 print_check_msg "$dep_checked_no_coverage" "no\n" 632 dep_checked_no_coverage=1 633 return 0 634 } 635 dependency_error_ubsan() 636 { 637 print_check_msg "$dep_checked_ubsan" "checking for ubsan... " 638 # dependency ubsan toolchain="gnuc" 639 while true 640 do 641 if notistoolchain "gnuc"; then 642 break 643 fi 644 TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=undefined" 645 TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=undefined" 646 print_check_msg "$dep_checked_ubsan" "yes\n" 647 dep_checked_ubsan=1 648 return 1 649 done 650 651 print_check_msg "$dep_checked_ubsan" "no\n" 652 dep_checked_ubsan=1 653 return 0 654 } 655 dependency_error_qsort_r() 656 { 657 print_check_msg "$dep_checked_qsort_r" "checking for qsort_r... " 658 # dependency qsort_r 659 while true 660 do 661 if $TOOLCHAIN_CC $CFLAGS $LDFLAGS -o /dev/null make/test_qsort_r.c > /dev/null 2>&1 ; then 662 : 663 else 664 break 665 fi 666 TEMP_CFLAGS="$TEMP_CFLAGS -DWITH_QSORT_R" 667 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DWITH_QSORT_R" 668 print_check_msg "$dep_checked_qsort_r" "yes\n" 669 dep_checked_qsort_r=1 670 return 1 671 done 672 673 print_check_msg "$dep_checked_qsort_r" "no\n" 674 dep_checked_qsort_r=1 675 return 0 676 } 677 678 # start collecting dependency information 679 echo > "$TEMP_DIR/flags.mk" 680 681 DEPENDENCIES_FAILED= 682 ERROR=0 683 # unnamed dependencies 684 cat >> "$TEMP_DIR/make.mk" << __EOF__ 685 686 # definitions from unnamed dependencies 687 __EOF__ 688 TEMP_CFLAGS="$CFLAGS" 689 TEMP_CXXFLAGS="$CXXFLAGS" 690 TEMP_LDFLAGS="$LDFLAGS" 691 while true 692 do 693 if notisplatform "macos"; then 694 break 695 fi 696 while true 697 do 698 if [ -z "$lang_c" ] ; then 699 ERROR=1 700 break 701 fi 702 703 cat >> "$TEMP_DIR/make.mk" << __EOF__ 704 AR=ar 705 ARFLAGS=r 706 STLIB_EXT=.a 707 SHLIB_EXT=.dylib 708 709 SHLIB_LDFLAGS=-dynamiclib -current_version \$(LIBVERSION) -compatibility_version \$(LIBVERSION) 710 INSTALL_LIB=\$(root_dir)/make/install-lib-macos.sh 711 __EOF__ 712 break 713 done 714 break 715 done 716 while true 717 do 718 if notisplatform "unix"; then 719 break 720 fi 721 if isplatform "macos" || istoolchain "macos"; then 722 break 723 fi 724 while true 725 do 726 if [ -z "$lang_c" ] ; then 727 ERROR=1 728 break 729 fi 730 731 cat >> "$TEMP_DIR/make.mk" << __EOF__ 732 AR=ar 733 ARFLAGS=cr 734 STLIB_EXT=.a 735 SHLIB_EXT=.so 736 INSTALL_LIB=\$(root_dir)/make/install-lib.sh 737 __EOF__ 738 break 739 done 740 break 741 done 742 while true 743 do 744 if notistoolchain "gnuc"; then 745 break 746 fi 747 if isplatform "macos" || istoolchain "macos"; then 748 break 749 fi 750 while true 751 do 752 753 cat >> "$TEMP_DIR/make.mk" << __EOF__ 754 SHLIB_LDFLAGS += -Wl,-soname,libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR) 755 __EOF__ 756 break 757 done 758 break 759 done 760 while true 761 do 762 if notistoolchain "suncc"; then 763 break 764 fi 765 while true 766 do 767 768 cat >> "$TEMP_DIR/make.mk" << __EOF__ 769 SHLIB_LDFLAGS += -h libucx\$(SHLIB_EXT).\$(LIBVERSION_MAJOR) 770 __EOF__ 771 break 772 done 773 break 774 done 775 while true 776 do 777 if notisplatform "solaris"; then 778 break 779 fi 780 while true 781 do 782 783 TEMP_LDFLAGS="$TEMP_LDFLAGS -lm" 784 break 785 done 786 break 787 done 788 789 # build type 790 if [ "$BUILD_TYPE" = "debug" ]; then 791 TEMP_CFLAGS="\${DEBUG_CFLAGS} $TEMP_CFLAGS" 792 TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS} $TEMP_CXXFLAGS" 793 fi 794 if [ "$BUILD_TYPE" = "release" ]; then 795 TEMP_CFLAGS="\${RELEASE_CFLAGS} $TEMP_CFLAGS" 796 TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS} $TEMP_CXXFLAGS" 797 fi 798 799 # add general dependency flags to flags.mk 800 echo "# general flags" >> "$TEMP_DIR/flags.mk" 801 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then 802 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 803 fi 804 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then 805 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" 806 fi 807 if [ -n "${TEMP_LDFLAGS}" ]; then 808 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" 809 fi 810 811 # 812 # OPTION VALUES 813 # 814 815 # 816 # TARGETS 817 # 818 819 echo >> "$TEMP_DIR/flags.mk" 820 echo "configuring global target" 821 echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk" 822 TEMP_CFLAGS= 823 TEMP_CXXFLAGS= 824 TEMP_LDFLAGS= 825 826 827 # Features 828 if [ -n "$FEATURE_API_DOCS" ]; then 829 # check dependency 830 if dependency_error_doxygen ; then 831 # "auto" features can fail and are just disabled in this case 832 if [ "$FEATURE_API_DOCS" = "auto" ]; then 833 DISABLE_FEATURE_API_DOCS=1 834 else 835 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED doxygen " 836 ERROR=1 837 fi 838 fi 839 if [ -n "$DISABLE_FEATURE_API_DOCS" ]; then 840 unset FEATURE_API_DOCS 841 fi 842 fi 843 if [ -n "$FEATURE_API_DOCS" ]; then 844 : 845 cat >> "$TEMP_DIR/make.mk" << __EOF__ 846 847 # enabled feature: api-docs 848 WITH_API_DOCS=yes 849 __EOF__ 850 else 851 : 852 fi 853 if [ -n "$FEATURE_COVERAGE" ]; then 854 # check dependency 855 if dependency_error_coverage ; then 856 # "auto" features can fail and are just disabled in this case 857 if [ "$FEATURE_COVERAGE" = "auto" ]; then 858 DISABLE_FEATURE_COVERAGE=1 859 else 860 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED coverage " 861 ERROR=1 862 fi 863 fi 864 if [ -n "$DISABLE_FEATURE_COVERAGE" ]; then 865 unset FEATURE_COVERAGE 866 fi 867 fi 868 if [ -n "$FEATURE_COVERAGE" ]; then 869 : 870 else 871 : 872 fi 873 if [ -n "$FEATURE_ASAN" ]; then 874 # check dependency 875 if dependency_error_asan ; then 876 # "auto" features can fail and are just disabled in this case 877 if [ "$FEATURE_ASAN" = "auto" ]; then 878 DISABLE_FEATURE_ASAN=1 879 else 880 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED asan " 881 ERROR=1 882 fi 883 fi 884 if [ -n "$DISABLE_FEATURE_ASAN" ]; then 885 unset FEATURE_ASAN 886 fi 887 fi 888 if [ -n "$FEATURE_ASAN" ]; then 889 : 890 else 891 : 892 fi 893 if [ -n "$FEATURE_UBSAN" ]; then 894 # check dependency 895 if dependency_error_ubsan ; then 896 # "auto" features can fail and are just disabled in this case 897 if [ "$FEATURE_UBSAN" = "auto" ]; then 898 DISABLE_FEATURE_UBSAN=1 899 else 900 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ubsan " 901 ERROR=1 902 fi 903 fi 904 if [ -n "$DISABLE_FEATURE_UBSAN" ]; then 905 unset FEATURE_UBSAN 906 fi 907 fi 908 if [ -n "$FEATURE_UBSAN" ]; then 909 : 910 else 911 : 912 fi 913 if [ -n "$FEATURE_CXX_TESTS" ]; then 914 # check dependency 915 if dependency_error_cxx ; then 916 # "auto" features can fail and are just disabled in this case 917 if [ "$FEATURE_CXX_TESTS" = "auto" ]; then 918 DISABLE_FEATURE_CXX_TESTS=1 919 else 920 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED cxx " 921 ERROR=1 922 fi 923 fi 924 if [ -n "$DISABLE_FEATURE_CXX_TESTS" ]; then 925 unset FEATURE_CXX_TESTS 926 fi 927 fi 928 if [ -n "$FEATURE_CXX_TESTS" ]; then 929 : 930 cat >> "$TEMP_DIR/make.mk" << __EOF__ 931 932 # enabled feature: cxx-tests 933 WITH_CXX_TEST=yes 934 __EOF__ 935 else 936 : 937 fi 938 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then 939 # check dependency 940 if dependency_error_no_coverage ; then 941 # "auto" features can fail and are just disabled in this case 942 if [ "$FEATURE_SZMUL_BUILTIN" = "auto" ]; then 943 DISABLE_FEATURE_SZMUL_BUILTIN=1 944 else 945 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED no_coverage " 946 ERROR=1 947 fi 948 fi 949 if [ -n "$DISABLE_FEATURE_SZMUL_BUILTIN" ]; then 950 unset FEATURE_SZMUL_BUILTIN 951 fi 952 fi 953 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then 954 : 955 else 956 : 957 TEMP_CFLAGS="$TEMP_CFLAGS -DCX_NO_SZMUL_BUILTIN" 958 TEMP_CXXFLAGS="$TEMP_CXXFLAGS -DCX_NO_SZMUL_BUILTIN" 959 fi 960 if [ -n "$FEATURE_MEMRCHR" ]; then 961 # check dependency 962 if dependency_error_memrchr ; then 963 # "auto" features can fail and are just disabled in this case 964 if [ "$FEATURE_MEMRCHR" = "auto" ]; then 965 DISABLE_FEATURE_MEMRCHR=1 966 else 967 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED memrchr " 968 ERROR=1 969 fi 970 fi 971 if [ -n "$DISABLE_FEATURE_MEMRCHR" ]; then 972 unset FEATURE_MEMRCHR 973 fi 974 fi 975 if [ -n "$FEATURE_MEMRCHR" ]; then 976 : 977 else 978 : 979 fi 980 if [ -n "$FEATURE_MKSTEMP" ]; then 981 # check dependency 982 if dependency_error_mkstemp ; then 983 # "auto" features can fail and are just disabled in this case 984 if [ "$FEATURE_MKSTEMP" = "auto" ]; then 985 DISABLE_FEATURE_MKSTEMP=1 986 else 987 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED mkstemp " 988 ERROR=1 989 fi 990 fi 991 if [ -n "$DISABLE_FEATURE_MKSTEMP" ]; then 992 unset FEATURE_MKSTEMP 993 fi 994 fi 995 if [ -n "$FEATURE_MKSTEMP" ]; then 996 : 997 else 998 : 999 fi 1000 if [ -n "$FEATURE_QSORT_R" ]; then 1001 # check dependency 1002 if dependency_error_qsort_r ; then 1003 # "auto" features can fail and are just disabled in this case 1004 if [ "$FEATURE_QSORT_R" = "auto" ]; then 1005 DISABLE_FEATURE_QSORT_R=1 1006 else 1007 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED qsort_r " 1008 ERROR=1 1009 fi 1010 fi 1011 if [ -n "$DISABLE_FEATURE_QSORT_R" ]; then 1012 unset FEATURE_QSORT_R 1013 fi 1014 fi 1015 if [ -n "$FEATURE_QSORT_R" ]; then 1016 : 1017 else 1018 : 1019 fi 1020 1021 OPTIONS_UNSELECTED= 1022 1023 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then 1024 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 1025 fi 1026 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then 1027 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" 1028 fi 1029 if [ -n "${TEMP_LDFLAGS}" ]; then 1030 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" 1031 fi 1032 1033 1034 # final result 1035 echo "configure finished" 1036 echo 1037 1038 if [ $ERROR -ne 0 ]; then 1039 echo "Error:" 1040 if [ -n "$DEPENDENCIES_FAILED" ]; then 1041 echo "Unresolved dependencies: $DEPENDENCIES_FAILED" 1042 fi 1043 if [ -n "$OPTIONS_UNSELECTED" ]; then 1044 echo "Unselected options: $OPTIONS_UNSELECTED" 1045 fi 1046 abort_configure 1047 fi 1048 1049 echo "Toolchain:" 1050 echo " name: $TOOLCHAIN_NAME" 1051 if [ -n "$TOOLCHAIN_CC" ]; then 1052 echo " cc: $TOOLCHAIN_CC" 1053 fi 1054 if [ -n "$TOOLCHAIN_CXX" ]; then 1055 echo " cxx: $TOOLCHAIN_CXX" 1056 fi 1057 if [ -n "$TOOLCHAIN_WSIZE" ]; then 1058 echo " word size: $TOOLCHAIN_WSIZE bit" 1059 fi 1060 if [ -n "$TOOLCHAIN_CSTD" ]; then 1061 echo " default C std: $TOOLCHAIN_CSTD" 1062 fi 1063 if [ $has_overridable_config_vars__ -eq 1 ]; then 1064 echo 1065 echo "Config:" 1066 if [ -n "$prefix__initialized__" ]; then 1067 printf ' %-16s' 'prefix:' 1068 echo "$prefix" 1069 fi 1070 if [ -n "$exec_prefix__initialized__" ]; then 1071 printf ' %-16s' 'exec-prefix:' 1072 echo "$exec_prefix" 1073 fi 1074 if [ -n "$libdir__initialized__" ]; then 1075 printf ' %-16s' 'libdir:' 1076 echo "$libdir" 1077 fi 1078 if [ -n "$includedir__initialized__" ]; then 1079 printf ' %-16s' 'includedir:' 1080 echo "$includedir" 1081 fi 1082 if [ -n "$pkgconfigdir__initialized__" ]; then 1083 printf ' %-16s' 'pkgconfigdir:' 1084 echo "$pkgconfigdir" 1085 fi 1086 if [ -n "$DOXYGEN__initialized__" ]; then 1087 printf ' %-16s' 'doxygen:' 1088 echo "$DOXYGEN" 1089 fi 1090 fi 1091 echo 1092 echo "Features:" 1093 printf ' %-16s' 'api-docs:' 1094 if [ -n "$FEATURE_API_DOCS" ]; then 1095 echo 'on' 1096 else 1097 echo 'off' 1098 fi 1099 printf ' %-16s' 'coverage:' 1100 if [ -n "$FEATURE_COVERAGE" ]; then 1101 echo 'on' 1102 else 1103 echo 'off' 1104 fi 1105 printf ' %-16s' 'asan:' 1106 if [ -n "$FEATURE_ASAN" ]; then 1107 echo 'on' 1108 else 1109 echo 'off' 1110 fi 1111 printf ' %-16s' 'ubsan:' 1112 if [ -n "$FEATURE_UBSAN" ]; then 1113 echo 'on' 1114 else 1115 echo 'off' 1116 fi 1117 printf ' %-16s' 'cxx-tests:' 1118 if [ -n "$FEATURE_CXX_TESTS" ]; then 1119 echo 'on' 1120 else 1121 echo 'off' 1122 fi 1123 printf ' %-16s' 'szmul-builtin:' 1124 if [ -n "$FEATURE_SZMUL_BUILTIN" ]; then 1125 echo 'on' 1126 else 1127 echo 'off' 1128 fi 1129 printf ' %-16s' 'memrchr:' 1130 if [ -n "$FEATURE_MEMRCHR" ]; then 1131 echo 'on' 1132 else 1133 echo 'off' 1134 fi 1135 printf ' %-16s' 'mkstemp:' 1136 if [ -n "$FEATURE_MKSTEMP" ]; then 1137 echo 'on' 1138 else 1139 echo 'off' 1140 fi 1141 printf ' %-16s' 'qsort_r:' 1142 if [ -n "$FEATURE_QSORT_R" ]; then 1143 echo 'on' 1144 else 1145 echo 'off' 1146 fi 1147 echo 1148 1149 # generate the config.mk file 1150 pwd=`pwd` 1151 cat > "$TEMP_DIR/config.mk" << __EOF__ 1152 # 1153 # config.mk generated by: 1154 # pwd: $pwd 1155 # $0 $@ 1156 # 1157 1158 __EOF__ 1159 write_toolchain_defaults "$TEMP_DIR/toolchain.mk" 1160 cat "$TEMP_DIR/config.mk" "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk 1161 rm -Rf "$TEMP_DIR" 1162