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