UNIXworkcode

1 #!/bin/sh 2 3 4 PREFIX=/usr 5 EPREFIX=$PREFIX 6 7 BINDIR= 8 SBINDIR= 9 LIBDIR= 10 LIBEXECDIR= 11 DATADIR= 12 SYSCONFDIR= 13 SHAREDSTATEDIR= 14 LOCALSTATEDIR= 15 INCLUDEDIR= 16 INFODIR= 17 MANDIR= 18 19 OS=`uname -s` 20 OS_VERSION=`uname -r` 21 22 TEMP_DIR=".tmp-`uname -n`" 23 mkdir -p $TEMP_DIR 24 if [ $? -ne 0 ]; then 25 echo "Cannot create tmp dir" 26 echo "Abort" 27 fi 28 touch $TEMP_DIR/options 29 touch $TEMP_DIR/features 30 31 # features 32 33 # help text 34 printhelp() 35 { 36 echo "Usage: $0 [OPTIONS]..." 37 cat << __EOF__ 38 Installation directories: 39 --prefix=PREFIX path prefix for architecture-independent files 40 [/usr] 41 --exec-prefix=EPREFIX path prefix for architecture-dependent files 42 [PREFIX] 43 44 --bindir=DIR user executables [EPREFIX/bin] 45 --sbindir=DIR system admin executables [EPREFIX/sbin] 46 --libexecdir=DIR program executables [EPREFIX/libexec] 47 --sysconfdir=DIR system configuration files [PREFIX/etc] 48 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] 49 --localstatedir=DIR modifiable single-machine data [PREFIX/var] 50 --libdir=DIR object code libraries [EPREFIX/lib] 51 --includedir=DIR C header files [PREFIX/include] 52 --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] 53 --datadir=DIR read-only architecture-independent data [DATAROOTDIR] 54 --infodir=DIR info documentation [DATAROOTDIR/info] 55 --mandir=DIR man documentation [DATAROOTDIR/man] 56 57 Options: 58 --toolkit=(gtk3|gtk2|gtk2legacy|qt5|qt4|motif) 59 60 __EOF__ 61 } 62 63 # 64 # parse arguments 65 # 66 for ARG in $@ 67 do 68 case "$ARG" in 69 "--prefix="*) PREFIX=${ARG#--prefix=} ;; 70 "--exec-prefix="*) EPREFIX=${ARG#--exec-prefix=} ;; 71 "--bindir="*) BINDIR=${ARG#----bindir=} ;; 72 "--sbindir="*) SBINDIR=${ARG#--sbindir=} ;; 73 "--libdir="*) LIBDIR=${ARG#--libdir=} ;; 74 "--libexecdir="*) LIBEXECDIR=${ARG#--libexecdir=} ;; 75 "--datadir="*) DATADIR=${ARG#--datadir=} ;; 76 "--sysconfdir="*) SYSCONFDIR=${ARG#--sysconfdir=} ;; 77 "--sharedstatedir="*) SHAREDSTATEDIR=${ARG#--sharedstatedir=} ;; 78 "--localstatedir="*) LOCALSTATEDIR=${ARG#--localstatedir=} ;; 79 "--includedir="*) INCLUDEDIR=${ARG#--includedir=} ;; 80 "--infodir="*) INFODIR=${ARG#--infodir=} ;; 81 "--mandir"*) MANDIR=${ARG#--mandir} ;; 82 "--help"*) printhelp; exit 1 ;; 83 "--toolkit="*) OPT_TOOLKIT=${ARG#--toolkit=} ;; 84 "-"*) echo "unknown option: $ARG"; exit 1 ;; 85 esac 86 done 87 88 # set dir variables 89 if [ -z "$BINDIR" ]; then 90 BINDIR=$EPREFIX/bin 91 fi 92 if [ -z "$SBINDIR" ]; then 93 SBINDIR=$EPREFIX/sbin 94 fi 95 if [ -z "$LIBDIR" ]; then 96 LIBDIR=$EPREFIX/lib 97 fi 98 if [ -z "$LIBEXEC" ]; then 99 LIBEXECDIR=$EPREFIX/libexec 100 fi 101 if [ -z "$DATADIR" ]; then 102 DATADIR=$PREFIX/share 103 fi 104 if [ -z "$SYSCONFDIR" ]; then 105 SYSCONFDIR=$PREFIX/etc 106 fi 107 if [ -z "$SHAREDSTATEDIR" ]; then 108 SHAREDSTATEDIR=$PREFIX/com 109 fi 110 if [ -z "$LOCALSTATEDIR" ]; then 111 LOCALSTATEDIR=$PREFIX/var 112 fi 113 if [ -z "$INCLUDEDIR" ]; then 114 INCLUDEDIR=$PREFIX/include 115 fi 116 if [ -z "$INFODIR" ]; then 117 INFODIR=$PREFIX/info 118 fi 119 if [ -z "$MANDIR" ]; then 120 MANDIR=$PREFIX/man 121 fi 122 123 which pkg-config > /dev/null 124 if [ $? -eq 0 ]; then 125 PKG_CONFIG=pkg-config 126 else 127 PKG_CONFIG=false 128 fi 129 130 # Simple uname based platform detection 131 # $PLATFORM is used for platform dependent dependency selection 132 printf "detect platform... " 133 if [ $OS = SunOS ]; then 134 PLATFORM="solaris sunos unix svr4" 135 fi 136 if [ $OS = Linux ]; then 137 PLATFORM="linux unix" 138 fi 139 if [ $OS = FreeBSD ]; then 140 PLATFORM="freebsd bsd unix" 141 fi 142 if [ $OS = Darwin ]; then 143 PLATFORM="macos osx bsd unix" 144 fi 145 echo $OS | grep "MINGW" > /dev/null 146 if [ $? -eq 0 ]; then 147 PLATFORM="windows mingw" 148 fi 149 150 if [ -z "$PLATFORM" ]; then 151 PLATFORM="unix" 152 fi 153 154 for p in $PLATFORM 155 do 156 PLATFORM_NAME=$p 157 break 158 done 159 echo $PLATFORM_NAME 160 161 isplatform() 162 { 163 for p in $PLATFORM 164 do 165 if [ $p = $1 ]; then 166 return 0 167 fi 168 done 169 return 1 170 } 171 isnotplatform() 172 { 173 for p in $PLATFORM 174 do 175 if [ $p = $1 ]; then 176 return 1 177 fi 178 done 179 return 0 180 } 181 182 # generate config.mk and config.h 183 cat > $TEMP_DIR/config.mk << __EOF__ 184 # 185 # config.mk generated by configure 186 # 187 188 # general vars 189 190 PREFIX=$PREFIX 191 EPREFIX=$EPREFIX 192 193 BINDIR=$BINDIR 194 SBINDIR=$SBINDIR 195 LIBDIR=$LIBDIR 196 LIBEXECDIR=$LIBEXECDIR 197 DATADIR=$DATADIR 198 SYSCONFDIR=$SYSCONFDIR 199 SHAREDSTATEDIR=$SHAREDSTATEDIR 200 LOCALSTATEDIR=$LOCALSTATEDIR 201 INCLUDEDIR=$INCLUDEDIR 202 INFODIR=$INFODIR 203 MANDIR=$MANDIR 204 205 __EOF__ 206 207 echo > $TEMP_DIR/make.mk 208 209 ENV_CFLAGS=$CFLAGS 210 ENV_LDFLAGS=$LDFLAGS 211 ENV_CXXFLAGS=$CXXFLAGS 212 213 # Toolchain detection 214 # this will insert make vars to config.mk 215 . make/toolchain.sh 216 217 # add user specified flags to config.mk 218 echo >> $TEMP_DIR/config.mk 219 if [ ! -z "${ENV_CFLAGS}" ]; then 220 echo "CFLAGS += $ENV_CFLAGS" >> $TEMP_DIR/config.mk 221 fi 222 if [ ! -z "${ENV_CXXFLAGS}" ]; then 223 echo "CXXFLAGS += $ENV_CXXFLAGS" >> $TEMP_DIR/config.mk 224 fi 225 if [ ! -z "${ENV_LDFLAGS}" ]; then 226 echo "LDFLAGS += $ENV_LDFLAGS" >> $TEMP_DIR/config.mk 227 fi 228 229 # 230 # DEPENDENCIES 231 # 232 233 dependency_qt4() 234 { 235 printf "checking for qt4... " 236 # dependency qt4 237 while true 238 do 239 qmake-qt4 -o - /dev/null | grep DEFINES\ > /dev/null 240 if [ $? -eq 0 ]; then 241 CFLAGS="$CFLAGS `qmake-qt4 -o - /dev/null | grep DEFINES\ `" 242 else 243 break 244 fi 245 qmake-qt4 -o - /dev/null | grep INCPATH\ > /dev/null 246 if [ $? -eq 0 ]; then 247 CFLAGS="$CFLAGS `qmake-qt4 -o - /dev/null | grep INCPATH\ `" 248 else 249 break 250 fi 251 > /dev/null 252 if [ $? -eq 0 ]; then 253 LDFLAGS="$LDFLAGS ``" 254 else 255 break 256 fi 257 which qmake-qt4 > /dev/null 258 if [ $? -ne 0 ]; then 259 break 260 fi 261 echo yes 262 return 0 263 done 264 265 echo no 266 return 1 267 } 268 dependency_gtk2legacy() 269 { 270 printf "checking for gtk2legacy... " 271 # dependency gtk2legacy 272 while true 273 do 274 if [ -z "$PKG_CONFIG" ]; then 275 break 276 fi 277 $PKG_CONFIG gtk+-2.0 278 if [ $? -ne 0 ] ; then 279 break 280 fi 281 CFLAGS="$CFLAGS `$PKG_CONFIG --cflags gtk+-2.0`" 282 LDFLAGS="$LDFLAGS `$PKG_CONFIG --libs gtk+-2.0`" 283 CFLAGS="$CFLAGS -DUI_GTK2 -DUI_GTK2LEGACY" 284 LDFLAGS="$LDFLAGS -lpthread" 285 echo yes 286 return 0 287 done 288 289 echo no 290 return 1 291 } 292 dependency_qt5() 293 { 294 printf "checking for qt5... " 295 # dependency qt5 296 while true 297 do 298 qmake-qt5 -o - /dev/null | grep DEFINES\ > /dev/null 299 if [ $? -eq 0 ]; then 300 CFLAGS="$CFLAGS `qmake-qt5 -o - /dev/null | grep DEFINES\ `" 301 else 302 break 303 fi 304 qmake-qt5 -o - /dev/null | grep INCPATH\ > /dev/null 305 if [ $? -eq 0 ]; then 306 CFLAGS="$CFLAGS `qmake-qt5 -o - /dev/null | grep INCPATH\ `" 307 else 308 break 309 fi 310 > /dev/null 311 if [ $? -eq 0 ]; then 312 LDFLAGS="$LDFLAGS ``" 313 else 314 break 315 fi 316 which qmake-qt5 > /dev/null 317 if [ $? -ne 0 ]; then 318 break 319 fi 320 echo yes 321 return 0 322 done 323 324 echo no 325 return 1 326 } 327 dependency_gtk2() 328 { 329 printf "checking for gtk2... " 330 # dependency gtk2 331 while true 332 do 333 if [ -z "$PKG_CONFIG" ]; then 334 break 335 fi 336 $PKG_CONFIG gtk+-2.0 337 if [ $? -ne 0 ] ; then 338 break 339 fi 340 CFLAGS="$CFLAGS `$PKG_CONFIG --cflags gtk+-2.0`" 341 LDFLAGS="$LDFLAGS `$PKG_CONFIG --libs gtk+-2.0`" 342 CFLAGS="$CFLAGS -DUI_GTK2" 343 LDFLAGS="$LDFLAGS -lpthread" 344 pkg-config --atleast-version=2.20 gtk+-2.0 > /dev/null 345 if [ $? -ne 0 ]; then 346 break 347 fi 348 echo yes 349 return 0 350 done 351 352 echo no 353 return 1 354 } 355 dependency_gtk3() 356 { 357 printf "checking for gtk3... " 358 # dependency gtk3 359 while true 360 do 361 if [ -z "$PKG_CONFIG" ]; then 362 break 363 fi 364 $PKG_CONFIG gtk+-3.0 365 if [ $? -ne 0 ] ; then 366 break 367 fi 368 CFLAGS="$CFLAGS `$PKG_CONFIG --cflags gtk+-3.0`" 369 LDFLAGS="$LDFLAGS `$PKG_CONFIG --libs gtk+-3.0`" 370 CFLAGS="$CFLAGS -DUI_GTK3" 371 LDFLAGS="$LDFLAGS -lpthread" 372 echo yes 373 return 0 374 done 375 376 echo no 377 return 1 378 } 379 dependency_motif() 380 { 381 printf "checking for motif... " 382 # dependency motif 383 while true 384 do 385 CFLAGS="$CFLAGS -DUI_MOTIF" 386 LDFLAGS="$LDFLAGS -lXm -lXt -lX11 -lpthread" 387 echo yes 388 return 0 389 done 390 391 echo no 392 return 1 393 } 394 dependency_wpf() 395 { 396 printf "checking for wpf... " 397 # dependency wpf platform="windows" 398 while true 399 do 400 if isnotplatform "windows"; then 401 break 402 fi 403 CFLAGS="$CFLAGS -DUI_WPF" 404 echo yes 405 return 0 406 done 407 408 echo no 409 return 1 410 } 411 dependency_cocoa() 412 { 413 printf "checking for cocoa... " 414 # dependency cocoa platform="macos" 415 while true 416 do 417 if isnotplatform "macos"; then 418 break 419 fi 420 CFLAGS="$CFLAGS -DUI_COCOA" 421 LDFLAGS="$LDFLAGS -lobjc -framework Cocoa" 422 echo yes 423 return 0 424 done 425 426 echo no 427 return 1 428 } 429 430 DEPENDENCIES_FAILED= 431 ERROR=0 432 # general dependencies 433 CFLAGS= 434 LDFLAGS= 435 while true 436 do 437 if isnotplatform "macos"; then 438 break 439 fi 440 while true 441 do 442 443 cat >> $TEMP_DIR/make.mk << __EOF__ 444 OBJ_EXT = o 445 LIB_EXT = a 446 PACKAGE_SCRIPT = package_osx.sh 447 448 __EOF__ 449 450 break 451 done 452 453 break 454 done 455 while true 456 do 457 if isnotplatform "unix"; then 458 break 459 fi 460 if isplatform "macos"; then 461 break 462 fi 463 while true 464 do 465 466 cat >> $TEMP_DIR/make.mk << __EOF__ 467 OBJ_EXT = o 468 LIB_EXT = a 469 PACKAGE_SCRIPT = package_unix.sh 470 471 __EOF__ 472 473 break 474 done 475 476 break 477 done 478 479 # add general dependency flags to config.mk 480 echo >> $TEMP_DIR/config.mk 481 if [ ! -z "${CFLAGS}" ]; then 482 echo "CFLAGS += $CFLAGS" >> $TEMP_DIR/config.mk 483 fi 484 if [ ! -z "${CXXFLAGS}" ]; then 485 echo "CXXFLAGS += $CXXFLAGS" >> $TEMP_DIR/config.mk 486 fi 487 if [ ! -z "${LDFLAGS}" ]; then 488 echo "LDFLAGS += $LDFLAGS" >> $TEMP_DIR/config.mk 489 fi 490 491 # 492 # OPTION VALUES 493 # 494 checkopt_toolkit_gtk3() 495 { 496 VERR=0 497 dependency_gtk3 498 if [ $? -ne 0 ]; then 499 VERR=1 500 fi 501 if [ $VERR -ne 0 ]; then 502 return 1 503 fi 504 cat >> $TEMP_DIR/make.mk << __EOF__ 505 TOOLKIT = gtk 506 GTKOBJ = draw_cairo.o 507 508 __EOF__ 509 return 0 510 } 511 checkopt_toolkit_gtk2() 512 { 513 VERR=0 514 dependency_gtk2 515 if [ $? -ne 0 ]; then 516 VERR=1 517 fi 518 if [ $VERR -ne 0 ]; then 519 return 1 520 fi 521 cat >> $TEMP_DIR/make.mk << __EOF__ 522 TOOLKIT = gtk 523 GTKOBJ = draw_cairo.o 524 525 __EOF__ 526 return 0 527 } 528 checkopt_toolkit_gtk2legacy() 529 { 530 VERR=0 531 dependency_gtk2legacy 532 if [ $? -ne 0 ]; then 533 VERR=1 534 fi 535 if [ $VERR -ne 0 ]; then 536 return 1 537 fi 538 cat >> $TEMP_DIR/make.mk << __EOF__ 539 TOOLKIT = gtk 540 GTKOBJ = draw_gdk.o 541 542 __EOF__ 543 return 0 544 } 545 checkopt_toolkit_qt5() 546 { 547 VERR=0 548 dependency_qt5 549 if [ $? -ne 0 ]; then 550 VERR=1 551 fi 552 if [ $VERR -ne 0 ]; then 553 return 1 554 fi 555 cat >> $TEMP_DIR/make.mk << __EOF__ 556 TOOLKIT = qt 557 LD = $(CXX) 558 559 __EOF__ 560 return 0 561 } 562 checkopt_toolkit_qt4() 563 { 564 VERR=0 565 dependency_qt4 566 if [ $? -ne 0 ]; then 567 VERR=1 568 fi 569 if [ $VERR -ne 0 ]; then 570 return 1 571 fi 572 cat >> $TEMP_DIR/make.mk << __EOF__ 573 TOOLKIT = qt 574 LD = $(CXX) 575 576 __EOF__ 577 return 0 578 } 579 checkopt_toolkit_motif() 580 { 581 VERR=0 582 dependency_motif 583 if [ $? -ne 0 ]; then 584 VERR=1 585 fi 586 if [ $VERR -ne 0 ]; then 587 return 1 588 fi 589 cat >> $TEMP_DIR/make.mk << __EOF__ 590 TOOLKIT = motif 591 592 __EOF__ 593 return 0 594 } 595 596 # 597 # TARGETS 598 # 599 CFLAGS= 600 CXXFLAGS= 601 LDFLAGS= 602 603 # Target: tk 604 CFLAGS= 605 LDFLAGS= 606 CXXFLAGS= 607 608 609 # Features 610 611 # Option: --toolkit 612 if [ -z $OPT_TOOLKIT ]; then 613 SAVED_ERROR=$ERROR 614 SAVED_DEPENDENCIES_FAILED=$DEPENDENCIES_FAILED 615 ERROR=0 616 while true 617 do 618 if isplatform "windows"; then 619 checkopt_toolkit_wpf 620 if [ $? -eq 0 ]; then 621 echo " toolkit: wpf" >> $TEMP_DIR/options 622 ERROR=0 623 break 624 fi 625 fi 626 if isplatform "macos"; then 627 checkopt_toolkit_cocoa 628 if [ $? -eq 0 ]; then 629 echo " toolkit: cocoa" >> $TEMP_DIR/options 630 ERROR=0 631 break 632 fi 633 fi 634 checkopt_toolkit_gtk3 635 if [ $? -eq 0 ]; then 636 echo " toolkit: gtk3" >> $TEMP_DIR/options 637 ERROR=0 638 break 639 fi 640 checkopt_toolkit_qt5 641 if [ $? -eq 0 ]; then 642 echo " toolkit: qt5" >> $TEMP_DIR/options 643 ERROR=0 644 break 645 fi 646 checkopt_toolkit_gtk2 647 if [ $? -eq 0 ]; then 648 echo " toolkit: gtk2" >> $TEMP_DIR/options 649 ERROR=0 650 break 651 fi 652 checkopt_toolkit_qt4 653 if [ $? -eq 0 ]; then 654 echo " toolkit: qt4" >> $TEMP_DIR/options 655 ERROR=0 656 break 657 fi 658 checkopt_toolkit_motif 659 if [ $? -eq 0 ]; then 660 echo " toolkit: motif" >> $TEMP_DIR/options 661 ERROR=0 662 break 663 fi 664 break 665 done 666 if [ $ERROR -ne 0 ]; then 667 SAVED_ERROR=1 668 fi 669 ERROR=$SAVED_ERROR 670 DEPENDENCIES_FAILED=$SAVED_DEPENDENCIES_FAILED= 671 else 672 if false; then 673 false 674 elif [ $OPT_TOOLKIT = "gtk3" ]; then 675 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options 676 checkopt_toolkit_gtk3 677 if [ $? -ne 0 ]; then 678 ERROR=1 679 fi 680 elif [ $OPT_TOOLKIT = "gtk2" ]; then 681 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options 682 checkopt_toolkit_gtk2 683 if [ $? -ne 0 ]; then 684 ERROR=1 685 fi 686 elif [ $OPT_TOOLKIT = "gtk2legacy" ]; then 687 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options 688 checkopt_toolkit_gtk2legacy 689 if [ $? -ne 0 ]; then 690 ERROR=1 691 fi 692 elif [ $OPT_TOOLKIT = "qt5" ]; then 693 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options 694 checkopt_toolkit_qt5 695 if [ $? -ne 0 ]; then 696 ERROR=1 697 fi 698 elif [ $OPT_TOOLKIT = "qt4" ]; then 699 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options 700 checkopt_toolkit_qt4 701 if [ $? -ne 0 ]; then 702 ERROR=1 703 fi 704 elif [ $OPT_TOOLKIT = "motif" ]; then 705 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options 706 checkopt_toolkit_motif 707 if [ $? -ne 0 ]; then 708 ERROR=1 709 fi 710 fi 711 fi 712 713 echo >> $TEMP_DIR/config.mk 714 if [ ! -z "${CFLAGS}" ]; then 715 echo "TK_CFLAGS += $CFLAGS" >> $TEMP_DIR/config.mk 716 fi 717 if [ ! -z "${CXXFLAGS}" ]; then 718 echo "TK_CXXFLAGS += $CXXFLAGS" >> $TEMP_DIR/config.mk 719 fi 720 if [ ! -z "${LDFLAGS}" ]; then 721 echo "TK_LDFLAGS += $LDFLAGS" >> $TEMP_DIR/config.mk 722 fi 723 724 if [ $ERROR -ne 0 ]; then 725 echo 726 echo "Error: Unresolved dependencies" 727 echo $DEPENDENCIES_FAILED 728 rm -Rf $TEMP_DIR 729 exit 1 730 fi 731 732 echo "configure finished" 733 echo 734 echo "Build Config:" 735 echo " PREFIX: $PREFIX" 736 echo " TOOLCHAIN: $TOOLCHAIN_NAME" 737 echo "Options:" 738 cat $TEMP_DIR/options 739 echo 740 cat $TEMP_DIR/config.mk $TEMP_DIR/make.mk > config.mk 741 rm -Rf $TEMP_DIR 742 743 744