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