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