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