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 printf "detect platform... "
62 if [ "$OS" = "SunOS" ]; then
63 PLATFORM="solaris sunos unix svr4"
64 elif [ "$OS" = "Linux" ]; then
65 PLATFORM="linux unix"
66 elif [ "$OS" = "FreeBSD" ]; then
67 PLATFORM="freebsd bsd unix"
68 elif [ "$OS" = "OpenBSD" ]; then
69 PLATFORM="openbsd bsd unix"
70 elif [ "$OS" = "NetBSD" ]; then
71 PLATFORM="netbsd bsd unix"
72 elif [ "$OS" = "Darwin" ]; then
73 PLATFORM="macos osx bsd unix"
74 elif echo "$OS" | grep -i "MINGW" > /dev/null; then
75 PLATFORM="windows mingw"
76 fi
77 : ${PLATFORM:="unix"}
78
79 PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -`
80 echo "$PLATFORM_NAME"
81
82
83 # help text
84 printhelp()
85 {
86 echo "Usage: $0 [OPTIONS]..."
87 cat << __EOF__
88 Installation directories:
89 --prefix=PREFIX path prefix for architecture-independent files
90 [$prefix]
91 --exec-prefix=EPREFIX path prefix for architecture-dependent files
92 [PREFIX]
93
94 --bindir=DIR user executables [EPREFIX/bin]
95 --sbindir=DIR system admin executables [EPREFIX/sbin]
96 --libexecdir=DIR program executables [EPREFIX/libexec]
97 --sysconfdir=DIR system configuration files [PREFIX/etc]
98 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
99 --localstatedir=DIR modifiable single-machine data [PREFIX/var]
100 --runstatedir=DIR run-time variable data [LOCALSTATEDIR/run]
101 --libdir=DIR object code libraries [EPREFIX/lib]
102 --includedir=DIR C header files [PREFIX/include]
103 --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
104 --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
105 --infodir=DIR info documentation [DATAROOTDIR/info]
106 --mandir=DIR man documentation [DATAROOTDIR/man]
107 --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
108
109 Build Types:
110 --debug add extra compile flags for debug builds
111 --release add extra compile flags for release builds
112
113 Options:
114 --toolkit=(libadwaita|gtk4|gtk3|cocoa|qt5|motif)
115
116 __EOF__
117 }
118
119 # create temporary directory
120 TEMP_DIR=".tmp-`uname -n`"
121 rm -Rf "$TEMP_DIR"
122 if mkdir -p "$TEMP_DIR"; then
123 :
124 else
125 echo "Cannot create tmp dir $TEMP_DIR"
126 echo "Abort"
127 exit 1
128 fi
129 touch "$TEMP_DIR/options"
130 touch "$TEMP_DIR/features"
131
132 # define standard variables
133 # also define standard prefix (this is where we will search for config.site)
134 prefix=/usr
135 exec_prefix=
136 bindir=
137 sbindir=
138 libdir=
139 libexecdir=
140 datarootdir=
141 datadir=
142 sysconfdir=
143 sharedstatedir=
144 localstatedir=
145 runstatedir=
146 includedir=
147 infodir=
148 localedir=
149 mandir=
150
151 # custom variables
152
153 # features
154
155 #
156 # parse arguments
157 #
158 BUILD_TYPE="default"
159 for ARG in "$@"
160 do
161 case "$ARG" in
162 "--prefix="*) prefix=${ARG#--prefix=} ;;
163 "--exec-prefix="*) exec_prefix=${ARG#--exec-prefix=} ;;
164 "--bindir="*) bindir=${ARG#----bindir=} ;;
165 "--sbindir="*) sbindir=${ARG#--sbindir=} ;;
166 "--libdir="*) libdir=${ARG#--libdir=} ;;
167 "--libexecdir="*) libexecdir=${ARG#--libexecdir=} ;;
168 "--datarootdir="*) datarootdir=${ARG#--datarootdir=} ;;
169 "--datadir="*) datadir=${ARG#--datadir=} ;;
170 "--sysconfdir="*) sysconfdir=${ARG#--sysconfdir=} ;;
171 "--sharedstatedir="*) sharedstatedir=${ARG#--sharedstatedir=} ;;
172 "--localstatedir="*) localstatedir=${ARG#--localstatedir=} ;;
173 "--includedir="*) includedir=${ARG#--includedir=} ;;
174 "--infodir="*) infodir=${ARG#--infodir=} ;;
175 "--mandir"*) mandir=${ARG#--mandir} ;;
176 "--localedir"*) localedir=${ARG#--localedir} ;;
177 "--help"*) printhelp; abort_configure ;;
178 "--debug") BUILD_TYPE="debug" ;;
179 "--release") BUILD_TYPE="release" ;;
180 "--toolkit="*) OPT_TOOLKIT=${ARG#--toolkit=} ;;
181 "--toolkit") echo "option '$ARG' needs a value:"; echo " $ARG=(libadwaita|gtk4|gtk3|cocoa|qt5|motif)"; abort_configure ;;
182 "-"*) echo "unknown option: $ARG"; abort_configure ;;
183 esac
184 done
185
186
187
188 # set defaults for dir variables
189 : ${exec_prefix:="$prefix"}
190 : ${bindir:='${exec_prefix}/bin'}
191 : ${sbindir:='${exec_prefix}/sbin'}
192 : ${libdir:='${exec_prefix}/lib'}
193 : ${libexecdir:='${exec_prefix}/libexec'}
194 : ${datarootdir:='${prefix}/share'}
195 : ${datadir:='${datarootdir}'}
196 : ${sysconfdir:='${prefix}/etc'}
197 : ${sharedstatedir:='${prefix}/com'}
198 : ${localstatedir:='${prefix}/var'}
199 : ${runstatedir:='${localstatedir}/run'}
200 : ${includedir:='${prefix}/include'}
201 : ${infodir:='${datarootdir}/info'}
202 : ${mandir:='${datarootdir}/man'}
203 : ${localedir:='${datarootdir}/locale'}
204
205 # remember the above values and compare them later
206 orig_bindir="$bindir"
207 orig_sbindir="$sbindir"
208 orig_libdir="$libdir"
209 orig_libexecdir="$libexecdir"
210 orig_datarootdir="$datarootdir"
211 orig_datadir="$datadir"
212 orig_sysconfdir="$sysconfdir"
213 orig_sharedstatedir="$sharedstatedir"
214 orig_localstatedir="$localstatedir"
215 orig_runstatedir="$runstatedir"
216 orig_includedir="$includedir"
217 orig_infodir="$infodir"
218 orig_mandir="$mandir"
219 orig_localedir="$localedir"
220
221 # check if a config.site exists and load it
222 if [ -n "$CONFIG_SITE" ]; then
223 # CONFIG_SITE may contain space separated file names
224 for cs in $CONFIG_SITE; do
225 printf "loading defaults from $cs... "
226 . "$cs"
227 echo ok
228 done
229 elif [ -f "$prefix/share/config.site" ]; then
230 printf "loading site defaults... "
231 . "$prefix/share/config.site"
232 echo ok
233 elif [ -f "$prefix/etc/config.site" ]; then
234 printf "loading site defaults... "
235 . "$prefix/etc/config.site"
236 echo ok
237 fi
238
239
240 # generate vars.mk
241 cat > "$TEMP_DIR/vars.mk" << __EOF__
242 prefix=$prefix
243 exec_prefix=$exec_prefix
244 bindir=$bindir
245 sbindir=$sbindir
246 libdir=$libdir
247 libexecdir=$libexecdir
248 datarootdir=$datarootdir
249 datadir=$datadir
250 sysconfdir=$sysconfdir
251 sharedstatedir=$sharedstatedir
252 localstatedir=$localstatedir
253 runstatedir=$runstatedir
254 includedir=$includedir
255 infodir=$infodir
256 mandir=$mandir
257 localedir=$localedir
258 __EOF__
259
260 # toolchain detection utilities
261 . make/toolchain.sh
262
263 #
264 # DEPENDENCIES
265 #
266
267 # check languages
268 lang_c=
269 lang_cpp=
270 if detect_cpp_compiler ; then
271 lang_cpp=1
272 fi
273 if detect_c_compiler ; then
274 lang_c=1
275 fi
276
277 # create buffer for make variables required by dependencies
278 echo > "$TEMP_DIR/make.mk"
279
280 test_pkg_config()
281 {
282 if "$PKG_CONFIG" --exists "$1" ; then :
283 else return 1 ; fi
284 if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then :
285 else return 1 ; fi
286 if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then :
287 else return 1 ; fi
288 if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then :
289 else return 1 ; fi
290 return 0
291 }
292
293 print_check_msg()
294 {
295 if [ -z "$1" ]; then
296 shift
297 printf "$@"
298 fi
299 }
300
301 dependency_error_curl()
302 {
303 print_check_msg "$dep_checked_curl" "checking for curl... "
304 # dependency curl platform="macos"
305 while true
306 do
307 if notisplatform "macos"; then
308 break
309 fi
310 if tmp_flags=`curl-config --cflags` ; then
311 TEMP_CFLAGS="$TEMP_CFLAGS $tmp_flags"
312 else
313 break
314 fi
315 if tmp_flags=`curl-config --ldflags` ; then
316 TEMP_LDFLAGS="$TEMP_LDFLAGS $tmp_flags"
317 else
318 break
319 fi
320 print_check_msg "$dep_checked_curl" "yes\n"
321 dep_checked_curl=1
322 return 1
323 done
324
325 # dependency curl
326 while true
327 do
328 if [ -z "$PKG_CONFIG" ]; then
329 break
330 fi
331 if test_pkg_config "libcurl" "" "" "" ; then
332 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags libcurl`"
333 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs libcurl`"
334 else
335 break
336 fi
337 print_check_msg "$dep_checked_curl" "yes\n"
338 dep_checked_curl=1
339 return 1
340 done
341
342 # dependency curl
343 while true
344 do
345 if tmp_flags=`curl-config --cflags` ; then
346 TEMP_CFLAGS="$TEMP_CFLAGS $tmp_flags"
347 else
348 break
349 fi
350 if tmp_flags=`curl-config --libs` ; then
351 TEMP_LDFLAGS="$TEMP_LDFLAGS $tmp_flags"
352 else
353 break
354 fi
355 print_check_msg "$dep_checked_curl" "yes\n"
356 dep_checked_curl=1
357 return 1
358 done
359
360 print_check_msg "$dep_checked_curl" "no\n"
361 dep_checked_curl=1
362 return 0
363 }
364 dependency_error_gtk2()
365 {
366 print_check_msg "$dep_checked_gtk2" "checking for gtk2... "
367 # dependency gtk2
368 while true
369 do
370 if [ -z "$PKG_CONFIG" ]; then
371 break
372 fi
373 if pkg-config --atleast-version=2.20 gtk+-2.0 > /dev/null ; then
374 :
375 else
376 break
377 fi
378 if test_pkg_config "gtk+-2.0" "" "" "" ; then
379 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags gtk+-2.0`"
380 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs gtk+-2.0`"
381 else
382 break
383 fi
384 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_GTK2"
385 TEMP_LDFLAGS="$TEMP_LDFLAGS -lpthread"
386 print_check_msg "$dep_checked_gtk2" "yes\n"
387 dep_checked_gtk2=1
388 return 1
389 done
390
391 print_check_msg "$dep_checked_gtk2" "no\n"
392 dep_checked_gtk2=1
393 return 0
394 }
395 dependency_error_sqlite()
396 {
397 print_check_msg "$dep_checked_sqlite" "checking for sqlite... "
398 # dependency sqlite
399 while true
400 do
401 if [ -z "$PKG_CONFIG" ]; then
402 break
403 fi
404 if test_pkg_config "sqlite3" "" "" "" ; then
405 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags sqlite3`"
406 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs sqlite3`"
407 else
408 break
409 fi
410 TEMP_CFLAGS="$TEMP_CFLAGS -DDBU_SQLITE"
411 print_check_msg "$dep_checked_sqlite" "yes\n"
412 dep_checked_sqlite=1
413 return 1
414 done
415
416 print_check_msg "$dep_checked_sqlite" "no\n"
417 dep_checked_sqlite=1
418 return 0
419 }
420 dependency_error_gtk3()
421 {
422 print_check_msg "$dep_checked_gtk3" "checking for gtk3... "
423 # dependency gtk3
424 while true
425 do
426 if [ -z "$PKG_CONFIG" ]; then
427 break
428 fi
429 if test_pkg_config "gtk+-3.0" "" "" "" ; then
430 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags gtk+-3.0`"
431 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs gtk+-3.0`"
432 else
433 break
434 fi
435 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_GTK3"
436 TEMP_LDFLAGS="$TEMP_LDFLAGS -lpthread"
437 print_check_msg "$dep_checked_gtk3" "yes\n"
438 dep_checked_gtk3=1
439 return 1
440 done
441
442 print_check_msg "$dep_checked_gtk3" "no\n"
443 dep_checked_gtk3=1
444 return 0
445 }
446 dependency_error_gtk4()
447 {
448 print_check_msg "$dep_checked_gtk4" "checking for gtk4... "
449 # dependency gtk4
450 while true
451 do
452 if [ -z "$PKG_CONFIG" ]; then
453 break
454 fi
455 if test_pkg_config "gtk4" "" "" "" ; then
456 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags gtk4`"
457 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs gtk4`"
458 else
459 break
460 fi
461 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_GTK3"
462 TEMP_LDFLAGS="$TEMP_LDFLAGS -lpthread"
463 print_check_msg "$dep_checked_gtk4" "yes\n"
464 dep_checked_gtk4=1
465 return 1
466 done
467
468 print_check_msg "$dep_checked_gtk4" "no\n"
469 dep_checked_gtk4=1
470 return 0
471 }
472 dependency_error_webkitgtk6()
473 {
474 print_check_msg "$dep_checked_webkitgtk6" "checking for webkitgtk6... "
475 # dependency webkitgtk6
476 while true
477 do
478 if [ -z "$PKG_CONFIG" ]; then
479 break
480 fi
481 if test_pkg_config "webkitgtk-6.0" "" "" "" ; then
482 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags webkitgtk-6.0`"
483 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs webkitgtk-6.0`"
484 else
485 break
486 fi
487 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_WEBVIEW"
488 print_check_msg "$dep_checked_webkitgtk6" "yes\n"
489 dep_checked_webkitgtk6=1
490 return 1
491 done
492
493 # dependency webkitgtk6
494 while true
495 do
496 print_check_msg "$dep_checked_webkitgtk6" "yes\n"
497 dep_checked_webkitgtk6=1
498 return 1
499 done
500
501 print_check_msg "$dep_checked_webkitgtk6" "no\n"
502 dep_checked_webkitgtk6=1
503 return 0
504 }
505 dependency_error_libxml2()
506 {
507 print_check_msg "$dep_checked_libxml2" "checking for libxml2... "
508 # dependency libxml2 platform="windows"
509 while true
510 do
511 if notisplatform "windows"; then
512 break
513 fi
514 if tmp_flags=`xml2-config --cflags` ; then
515 TEMP_CFLAGS="$TEMP_CFLAGS $tmp_flags"
516 else
517 break
518 fi
519 if tmp_flags=`xml2-config --libs` ; then
520 TEMP_LDFLAGS="$TEMP_LDFLAGS $tmp_flags"
521 else
522 break
523 fi
524 print_check_msg "$dep_checked_libxml2" "yes\n"
525 dep_checked_libxml2=1
526 return 1
527 done
528
529 # dependency libxml2 platform="macos"
530 while true
531 do
532 if notisplatform "macos"; then
533 break
534 fi
535 if tmp_flags=`xml2-config --cflags` ; then
536 TEMP_CFLAGS="$TEMP_CFLAGS $tmp_flags"
537 else
538 break
539 fi
540 if tmp_flags=`xml2-config --libs` ; then
541 TEMP_LDFLAGS="$TEMP_LDFLAGS $tmp_flags"
542 else
543 break
544 fi
545 print_check_msg "$dep_checked_libxml2" "yes\n"
546 dep_checked_libxml2=1
547 return 1
548 done
549
550 # dependency libxml2
551 while true
552 do
553 if [ -z "$PKG_CONFIG" ]; then
554 break
555 fi
556 if test_pkg_config "libxml-2.0" "" "" "" ; then
557 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags libxml-2.0`"
558 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs libxml-2.0`"
559 else
560 break
561 fi
562 print_check_msg "$dep_checked_libxml2" "yes\n"
563 dep_checked_libxml2=1
564 return 1
565 done
566
567 # dependency libxml2
568 while true
569 do
570 if tmp_flags=`xml2-config --cflags` ; then
571 TEMP_CFLAGS="$TEMP_CFLAGS $tmp_flags"
572 else
573 break
574 fi
575 if tmp_flags=`xml2-config --libs` ; then
576 TEMP_LDFLAGS="$TEMP_LDFLAGS $tmp_flags"
577 else
578 break
579 fi
580 print_check_msg "$dep_checked_libxml2" "yes\n"
581 dep_checked_libxml2=1
582 return 1
583 done
584
585 print_check_msg "$dep_checked_libxml2" "no\n"
586 dep_checked_libxml2=1
587 return 0
588 }
589 dependency_error_webkit2gtk4()
590 {
591 print_check_msg "$dep_checked_webkit2gtk4" "checking for webkit2gtk4... "
592 # dependency webkit2gtk4
593 while true
594 do
595 if [ -z "$PKG_CONFIG" ]; then
596 break
597 fi
598 if test_pkg_config "webkit2gtk-4.1" "" "" "" ; then
599 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags webkit2gtk-4.1`"
600 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs webkit2gtk-4.1`"
601 else
602 break
603 fi
604 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_WEBVIEW"
605 print_check_msg "$dep_checked_webkit2gtk4" "yes\n"
606 dep_checked_webkit2gtk4=1
607 return 1
608 done
609
610 # dependency webkit2gtk4
611 while true
612 do
613 if [ -z "$PKG_CONFIG" ]; then
614 break
615 fi
616 if test_pkg_config "webkit2gtk-4.0" "" "" "" ; then
617 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags webkit2gtk-4.0`"
618 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs webkit2gtk-4.0`"
619 else
620 break
621 fi
622 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_WEBVIEW"
623 print_check_msg "$dep_checked_webkit2gtk4" "yes\n"
624 dep_checked_webkit2gtk4=1
625 return 1
626 done
627
628 # dependency webkit2gtk4
629 while true
630 do
631 print_check_msg "$dep_checked_webkit2gtk4" "yes\n"
632 dep_checked_webkit2gtk4=1
633 return 1
634 done
635
636 print_check_msg "$dep_checked_webkit2gtk4" "no\n"
637 dep_checked_webkit2gtk4=1
638 return 0
639 }
640 dependency_error_cocoa()
641 {
642 print_check_msg "$dep_checked_cocoa" "checking for cocoa... "
643 # dependency cocoa platform="macos"
644 while true
645 do
646 if notisplatform "macos"; then
647 break
648 fi
649 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_COCOA"
650 TEMP_LDFLAGS="$TEMP_LDFLAGS -lobjc -framework Cocoa"
651 print_check_msg "$dep_checked_cocoa" "yes\n"
652 dep_checked_cocoa=1
653 return 1
654 done
655
656 print_check_msg "$dep_checked_cocoa" "no\n"
657 dep_checked_cocoa=1
658 return 0
659 }
660 dependency_error_winui()
661 {
662 print_check_msg "$dep_checked_winui" "checking for winui... "
663 # dependency winui platform="windows"
664 while true
665 do
666 if notisplatform "windows"; then
667 break
668 fi
669 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_WINUI"
670 print_check_msg "$dep_checked_winui" "yes\n"
671 dep_checked_winui=1
672 return 1
673 done
674
675 print_check_msg "$dep_checked_winui" "no\n"
676 dep_checked_winui=1
677 return 0
678 }
679 dependency_error_gtk2legacy()
680 {
681 print_check_msg "$dep_checked_gtk2legacy" "checking for gtk2legacy... "
682 # dependency gtk2legacy
683 while true
684 do
685 if [ -z "$PKG_CONFIG" ]; then
686 break
687 fi
688 if test_pkg_config "gtk+-2.0" "" "" "" ; then
689 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags gtk+-2.0`"
690 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs gtk+-2.0`"
691 else
692 break
693 fi
694 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_GTK2 -DUI_GTK2LEGACY"
695 TEMP_LDFLAGS="$TEMP_LDFLAGS -lpthread"
696 print_check_msg "$dep_checked_gtk2legacy" "yes\n"
697 dep_checked_gtk2legacy=1
698 return 1
699 done
700
701 print_check_msg "$dep_checked_gtk2legacy" "no\n"
702 dep_checked_gtk2legacy=1
703 return 0
704 }
705 dependency_error_qt5()
706 {
707 print_check_msg "$dep_checked_qt5" "checking for qt5... "
708 # dependency qt5
709 while true
710 do
711 if [ -z "$lang_cpp" ] ; then
712 break
713 fi
714 if [ -z "$PKG_CONFIG" ]; then
715 break
716 fi
717 if which qmake-qt5 > /dev/null ; then
718 :
719 else
720 break
721 fi
722 if test_pkg_config "Qt5Widgets" "" "" "" ; then
723 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags Qt5Widgets`"
724 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs Qt5Widgets`"
725 else
726 break
727 fi
728 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_QT5"
729 cat >> $TEMP_DIR/make.mk << __EOF__
730 # Dependency: qt5
731 QMAKE = qmake-qt5
732 QT_PRO_FILE = qt5.pro
733 __EOF__
734 print_check_msg "$dep_checked_qt5" "yes\n"
735 dep_checked_qt5=1
736 return 1
737 done
738
739 print_check_msg "$dep_checked_qt5" "no\n"
740 dep_checked_qt5=1
741 return 0
742 }
743 dependency_error_openssl()
744 {
745 print_check_msg "$dep_checked_openssl" "checking for openssl... "
746 # dependency openssl platform="windows"
747 while true
748 do
749 if notisplatform "windows"; then
750 break
751 fi
752 TEMP_LDFLAGS="$TEMP_LDFLAGS -lssl -lcrypto"
753 print_check_msg "$dep_checked_openssl" "yes\n"
754 dep_checked_openssl=1
755 return 1
756 done
757
758 # dependency openssl platform="macos"
759 while true
760 do
761 if notisplatform "macos"; then
762 break
763 fi
764 TEMP_LDFLAGS="$TEMP_LDFLAGS -framework CoreFoundation"
765 print_check_msg "$dep_checked_openssl" "yes\n"
766 dep_checked_openssl=1
767 return 1
768 done
769
770 # dependency openssl platform="bsd"
771 while true
772 do
773 if notisplatform "bsd"; then
774 break
775 fi
776 if isplatform "macos" || istoolchain "macos"; then
777 break
778 fi
779 TEMP_LDFLAGS="$TEMP_LDFLAGS -lssl -lcrypto"
780 print_check_msg "$dep_checked_openssl" "yes\n"
781 dep_checked_openssl=1
782 return 1
783 done
784
785 # dependency openssl
786 while true
787 do
788 if [ -z "$PKG_CONFIG" ]; then
789 break
790 fi
791 if test_pkg_config "openssl" "" "" "" ; then
792 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags openssl`"
793 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs openssl`"
794 else
795 break
796 fi
797 print_check_msg "$dep_checked_openssl" "yes\n"
798 dep_checked_openssl=1
799 return 1
800 done
801
802 print_check_msg "$dep_checked_openssl" "no\n"
803 dep_checked_openssl=1
804 return 0
805 }
806 dependency_error_libadwaita()
807 {
808 print_check_msg "$dep_checked_libadwaita" "checking for libadwaita... "
809 # dependency libadwaita
810 while true
811 do
812 if [ -z "$PKG_CONFIG" ]; then
813 break
814 fi
815 if test_pkg_config "libadwaita-1" "" "" "" ; then
816 TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags libadwaita-1`"
817 TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs libadwaita-1`"
818 else
819 break
820 fi
821 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_GTK4 -DUI_LIBADWAITA"
822 TEMP_LDFLAGS="$TEMP_LDFLAGS -lpthread"
823 print_check_msg "$dep_checked_libadwaita" "yes\n"
824 dep_checked_libadwaita=1
825 return 1
826 done
827
828 print_check_msg "$dep_checked_libadwaita" "no\n"
829 dep_checked_libadwaita=1
830 return 0
831 }
832 dependency_error_motif()
833 {
834 print_check_msg "$dep_checked_motif" "checking for motif... "
835 # dependency motif platform="bsd"
836 while true
837 do
838 if notisplatform "bsd"; then
839 break
840 fi
841 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_MOTIF -I/usr/local/include/X11"
842 TEMP_LDFLAGS="$TEMP_LDFLAGS -lXm -lXt -lX11 -lpthread"
843 print_check_msg "$dep_checked_motif" "yes\n"
844 dep_checked_motif=1
845 return 1
846 done
847
848 # dependency motif
849 while true
850 do
851 TEMP_CFLAGS="$TEMP_CFLAGS -DUI_MOTIF"
852 TEMP_LDFLAGS="$TEMP_LDFLAGS -lXm -lXt -lX11 -lpthread"
853 print_check_msg "$dep_checked_motif" "yes\n"
854 dep_checked_motif=1
855 return 1
856 done
857
858 print_check_msg "$dep_checked_motif" "no\n"
859 dep_checked_motif=1
860 return 0
861 }
862
863 # start collecting dependency information
864 echo > "$TEMP_DIR/flags.mk"
865
866 DEPENDENCIES_FAILED=
867 ERROR=0
868 # unnamed dependencies
869 TEMP_CFLAGS="$CFLAGS"
870 TEMP_CXXFLAGS="$CXXFLAGS"
871 TEMP_LDFLAGS="$LDFLAGS"
872 while true
873 do
874 while true
875 do
876 if [ -z "$lang_c" ] ; then
877 ERROR=1
878 break
879 fi
880
881 cat >> "$TEMP_DIR/make.mk" << __EOF__
882 LD = \$(CC)
883 __EOF__
884 break
885 done
886 break
887 done
888 while true
889 do
890 if notisplatform "macos"; then
891 break
892 fi
893 while true
894 do
895
896 cat >> "$TEMP_DIR/make.mk" << __EOF__
897 OBJ_EXT = .o
898 LIB_EXT = .a
899 SHLIB_EXT = .dylib
900 LIB_PREFIX = lib
901 PACKAGE_SCRIPT = package_osx.sh
902 __EOF__
903 break
904 done
905 break
906 done
907 while true
908 do
909 if notisplatform "unix"; then
910 break
911 fi
912 if isplatform "macos" || istoolchain "macos"; then
913 break
914 fi
915 while true
916 do
917
918 cat >> "$TEMP_DIR/make.mk" << __EOF__
919 OBJ_EXT = .o
920 LIB_EXT = .a
921 SHLIB_EXT = .so
922 LIB_PREFIX = lib
923 PACKAGE_SCRIPT = package_unix.sh
924 __EOF__
925 break
926 done
927 break
928 done
929 while true
930 do
931 while true
932 do
933
934 cat >> "$TEMP_DIR/make.mk" << __EOF__
935 BUILD_BIN_DIR = bin
936 BUILD_LIB_DIR = lib
937 __EOF__
938 break
939 done
940 break
941 done
942 while true
943 do
944 if notisplatform "bsd"; then
945 break
946 fi
947 while true
948 do
949
950 TEMP_CFLAGS="$TEMP_CFLAGS -I/usr/local/include"
951 TEMP_LDFLAGS="$TEMP_LDFLAGS -L/usr/local/lib"
952 break
953 done
954 break
955 done
956
957 # build type
958 if [ "$BUILD_TYPE" = "debug" ]; then
959 TEMP_CFLAGS="\${DEBUG_CC_FLAGS} $TEMP_CFLAGS"
960 TEMP_CXXFLAGS="\${DEBUG_CXX_FLAGS} $TEMP_CXXFLAGS"
961 fi
962 if [ "$BUILD_TYPE" = "release" ]; then
963 TEMP_CFLAGS="\${RELEASE_CC_FLAGS} $TEMP_CFLAGS"
964 TEMP_CXXFLAGS="\${RELEASE_CXX_FLAGS} $TEMP_CXXFLAGS"
965 fi
966
967 # add general dependency flags to flags.mk
968 echo "# general flags" >> "$TEMP_DIR/flags.mk"
969 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
970 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
971 fi
972 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
973 echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
974 fi
975 if [ -n "${TEMP_LDFLAGS}" ]; then
976 echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
977 fi
978
979 #
980 # OPTION VALUES
981 #
982 checkopt_toolkit_libadwaita()
983 {
984 VERR=0
985 if dependency_error_libadwaita ; then
986 VERR=1
987 fi
988 if dependency_error_webkitgtk6 ; then
989 VERR=1
990 fi
991 if [ $VERR -ne 0 ]; then
992 return 1
993 fi
994 cat >> "$TEMP_DIR/make.mk" << __EOF__
995 TOOLKIT = gtk
996 GTKOBJ = draw_cairo.o
997 APP_PLATFORM_SRC = gtk-text.c
998 APP_PLATFORM_SRC += gtk-image.c
999 __EOF__
1000 return 0
1001 }
1002 checkopt_toolkit_gtk4()
1003 {
1004 VERR=0
1005 if dependency_error_gtk4 ; then
1006 VERR=1
1007 fi
1008 if dependency_error_webkitgtk6 ; then
1009 VERR=1
1010 fi
1011 if [ $VERR -ne 0 ]; then
1012 return 1
1013 fi
1014 cat >> "$TEMP_DIR/make.mk" << __EOF__
1015 TOOLKIT = gtk
1016 GTKOBJ = draw_cairo.o
1017 APP_PLATFORM_SRC = gtk-text.c
1018 APP_PLATFORM_SRC += gtk-image.c
1019 __EOF__
1020 return 0
1021 }
1022 checkopt_toolkit_gtk3()
1023 {
1024 VERR=0
1025 if dependency_error_gtk3 ; then
1026 VERR=1
1027 fi
1028 if dependency_error_webkit2gtk4 ; then
1029 VERR=1
1030 fi
1031 if [ $VERR -ne 0 ]; then
1032 return 1
1033 fi
1034 cat >> "$TEMP_DIR/make.mk" << __EOF__
1035 TOOLKIT = gtk
1036 GTKOBJ = draw_cairo.o
1037 GTKOBJ = draw_cairo.o
1038 APP_PLATFORM_SRC = gtk-text.c
1039 APP_PLATFORM_SRC += gtk-image.c
1040 __EOF__
1041 return 0
1042 }
1043 checkopt_toolkit_cocoa()
1044 {
1045 VERR=0
1046 if dependency_error_cocoa ; then
1047 VERR=1
1048 fi
1049 if [ $VERR -ne 0 ]; then
1050 return 1
1051 fi
1052 cat >> "$TEMP_DIR/make.mk" << __EOF__
1053 TOOLKIT = cocoa
1054 APP_PLATFORM_SRC = cocoa-text.m
1055 __EOF__
1056 return 0
1057 }
1058 checkopt_toolkit_qt5()
1059 {
1060 VERR=0
1061 if dependency_error_qt5 ; then
1062 VERR=1
1063 fi
1064 if [ $VERR -ne 0 ]; then
1065 return 1
1066 fi
1067 cat >> "$TEMP_DIR/make.mk" << __EOF__
1068 TOOLKIT = qt
1069 LD = \$(CXX)
1070 __EOF__
1071 return 0
1072 }
1073 checkopt_toolkit_motif()
1074 {
1075 VERR=0
1076 if dependency_error_motif ; then
1077 VERR=1
1078 fi
1079 if [ $VERR -ne 0 ]; then
1080 return 1
1081 fi
1082 cat >> "$TEMP_DIR/make.mk" << __EOF__
1083 TOOLKIT = motif
1084 __EOF__
1085 return 0
1086 }
1087
1088 #
1089 # TARGETS
1090 #
1091
1092 echo >> "$TEMP_DIR/flags.mk"
1093 echo "configuring target: dav"
1094 echo "# flags for target dav" >> "$TEMP_DIR/flags.mk"
1095 TEMP_CFLAGS=
1096 TEMP_CXXFLAGS=
1097 TEMP_LDFLAGS=
1098
1099 if dependency_error_curl; then
1100 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED curl "
1101 ERROR=1
1102 fi
1103 if dependency_error_libxml2; then
1104 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED libxml2 "
1105 ERROR=1
1106 fi
1107 if dependency_error_openssl; then
1108 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED openssl "
1109 ERROR=1
1110 fi
1111
1112 # Features
1113
1114
1115 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
1116 echo "DAV_CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
1117 fi
1118 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
1119 echo "DAV_CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
1120 fi
1121 if [ -n "${TEMP_LDFLAGS}" ]; then
1122 echo "DAV_LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
1123 fi
1124
1125 echo >> "$TEMP_DIR/flags.mk"
1126 echo "configuring target: dbu"
1127 echo "# flags for target dbu" >> "$TEMP_DIR/flags.mk"
1128 TEMP_CFLAGS=
1129 TEMP_CXXFLAGS=
1130 TEMP_LDFLAGS=
1131
1132 if dependency_error_sqlite; then
1133 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED sqlite "
1134 ERROR=1
1135 fi
1136
1137 # Features
1138
1139
1140 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
1141 echo "DBU_CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
1142 fi
1143 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
1144 echo "DBU_CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
1145 fi
1146 if [ -n "${TEMP_LDFLAGS}" ]; then
1147 echo "DBU_LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
1148 fi
1149
1150 echo >> "$TEMP_DIR/flags.mk"
1151 echo "configuring target: tk"
1152 echo "# flags for target tk" >> "$TEMP_DIR/flags.mk"
1153 TEMP_CFLAGS=
1154 TEMP_CXXFLAGS=
1155 TEMP_LDFLAGS=
1156
1157
1158 # Features
1159
1160 # Option: --toolkit
1161 if [ -z "$OPT_TOOLKIT" ]; then
1162 echo "auto-detecting option 'toolkit'"
1163 SAVED_ERROR="$ERROR"
1164 SAVED_DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED"
1165 ERROR=1
1166 while true
1167 do
1168 if isplatform "windows"; then
1169 if checkopt_toolkit_winui ; then
1170 echo " toolkit: winui" >> "$TEMP_DIR/options"
1171 ERROR=0
1172 break
1173 fi
1174 fi
1175 if isplatform "macos"; then
1176 if checkopt_toolkit_cocoa ; then
1177 echo " toolkit: cocoa" >> "$TEMP_DIR/options"
1178 ERROR=0
1179 break
1180 fi
1181 fi
1182 if checkopt_toolkit_libadwaita ; then
1183 echo " toolkit: libadwaita" >> "$TEMP_DIR/options"
1184 ERROR=0
1185 break
1186 fi
1187 if checkopt_toolkit_gtk4 ; then
1188 echo " toolkit: gtk4" >> "$TEMP_DIR/options"
1189 ERROR=0
1190 break
1191 fi
1192 if checkopt_toolkit_gtk3 ; then
1193 echo " toolkit: gtk3" >> "$TEMP_DIR/options"
1194 ERROR=0
1195 break
1196 fi
1197 if checkopt_toolkit_motif ; then
1198 echo " toolkit: motif" >> "$TEMP_DIR/options"
1199 ERROR=0
1200 break
1201 fi
1202 break
1203 done
1204 if [ $ERROR -ne 0 ]; then
1205 SAVED_ERROR=1
1206 SAVED_DEPENDENCIES_FAILED="option 'toolkit' $SAVED_DEPENDENCIES_FAILED"
1207 fi
1208 ERROR="$SAVED_ERROR"
1209 DEPENDENCIES_FAILED="$SAVED_DEPENDENCIES_FAILED"
1210 else
1211 echo "checking option toolkit = $OPT_TOOLKIT"
1212 if false; then
1213 false
1214 elif [ "$OPT_TOOLKIT" = "libadwaita" ]; then
1215 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
1216 if checkopt_toolkit_libadwaita ; then
1217 :
1218 else
1219 ERROR=1
1220 DEPENDENCIES_FAILED="option 'toolkit' $DEPENDENCIES_FAILED"
1221 fi
1222 elif [ "$OPT_TOOLKIT" = "gtk4" ]; then
1223 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
1224 if checkopt_toolkit_gtk4 ; then
1225 :
1226 else
1227 ERROR=1
1228 DEPENDENCIES_FAILED="option 'toolkit' $DEPENDENCIES_FAILED"
1229 fi
1230 elif [ "$OPT_TOOLKIT" = "gtk3" ]; then
1231 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
1232 if checkopt_toolkit_gtk3 ; then
1233 :
1234 else
1235 ERROR=1
1236 DEPENDENCIES_FAILED="option 'toolkit' $DEPENDENCIES_FAILED"
1237 fi
1238 elif [ "$OPT_TOOLKIT" = "cocoa" ]; then
1239 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
1240 if checkopt_toolkit_cocoa ; then
1241 :
1242 else
1243 ERROR=1
1244 DEPENDENCIES_FAILED="option 'toolkit' $DEPENDENCIES_FAILED"
1245 fi
1246 elif [ "$OPT_TOOLKIT" = "qt5" ]; then
1247 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
1248 if checkopt_toolkit_qt5 ; then
1249 :
1250 else
1251 ERROR=1
1252 DEPENDENCIES_FAILED="option 'toolkit' $DEPENDENCIES_FAILED"
1253 fi
1254 elif [ "$OPT_TOOLKIT" = "motif" ]; then
1255 echo " toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
1256 if checkopt_toolkit_motif ; then
1257 :
1258 else
1259 ERROR=1
1260 DEPENDENCIES_FAILED="option 'toolkit' $DEPENDENCIES_FAILED"
1261 fi
1262 else
1263 echo
1264 echo "Invalid option value - usage:"
1265 echo " --toolkit=(libadwaita|gtk4|gtk3|cocoa|qt5|motif)"
1266 abort_configure
1267 fi
1268 fi
1269
1270 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
1271 echo "TK_CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
1272 fi
1273 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
1274 echo "TK_CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
1275 fi
1276 if [ -n "${TEMP_LDFLAGS}" ]; then
1277 echo "TK_LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
1278 fi
1279
1280
1281 # final result
1282 if [ $ERROR -ne 0 ]; then
1283 echo
1284 echo "Error: Unresolved dependencies"
1285 echo "$DEPENDENCIES_FAILED"
1286 abort_configure
1287 fi
1288
1289 echo "configure finished"
1290 echo
1291 echo "Toolchain"
1292 echo " name: $TOOLCHAIN_NAME"
1293 if [ -n "$TOOLCHAIN_CC" ]; then
1294 echo " cc: $TOOLCHAIN_CC"
1295 fi
1296 if [ -n "$TOOLCHAIN_CXX" ]; then
1297 echo " cxx: $TOOLCHAIN_CXX"
1298 fi
1299 if [ -n "$TOOLCHAIN_WSIZE" ]; then
1300 echo " word size: $TOOLCHAIN_WSIZE bit"
1301 fi
1302 if [ -n "$TOOLCHAIN_CSTD" ]; then
1303 echo " default C std: $TOOLCHAIN_CSTD"
1304 fi
1305 echo
1306 echo "Build Config:"
1307 echo " prefix: $prefix"
1308 echo " exec_prefix: $exec_prefix"
1309 if [ "$orig_bindir" != "$bindir" ]; then
1310 echo " bindir: $bindir"
1311 fi
1312 if [ "$orig_sbindir" != "$sbindir" ]; then
1313 echo " sbindir: $sbindir"
1314 fi
1315 if [ "$orig_libdir" != "$libdir" ]; then
1316 echo " libdir: $libdir"
1317 fi
1318 if [ "$orig_libexecdir" != "$libexecdir" ]; then
1319 echo " libexecdir: $libexecdir"
1320 fi
1321 if [ "$orig_datarootdir" != "$datarootdir" ]; then
1322 echo " datarootdir: $datarootdir"
1323 fi
1324 if [ "$orig_datadir" != "$datadir" ]; then
1325 echo " datadir: $datadir"
1326 fi
1327 if [ "$orig_sysconfdir" != "$sysconfdir" ]; then
1328 echo " sysconfdir: $sysconfdir"
1329 fi
1330 if [ "$orig_sharedstatedir" != "$sharedstatedir" ]; then
1331 echo " sharedstatedir: $sharedstatedir"
1332 fi
1333 if [ "$orig_localstatedir" != "$localstatedir" ]; then
1334 echo " localstatedir: $localstatedir"
1335 fi
1336 if [ "$orig_runstatedir" != "$runstatedir" ]; then
1337 echo " runstatedir: $runstatedir"
1338 fi
1339 if [ "$orig_includedir" != "$includedir" ]; then
1340 echo " includedir: $includedir"
1341 fi
1342 if [ "$orig_infodir" != "$infodir" ]; then
1343 echo " infodir: $infodir"
1344 fi
1345 if [ "$orig_mandir" != "$mandir" ]; then
1346 echo " mandir: $mandir"
1347 fi
1348 if [ "$orig_localedir" != "$localedir" ]; then
1349 echo " localedir: $localedir"
1350 fi
1351 echo
1352 echo "Options:"
1353 cat "$TEMP_DIR/options"
1354 echo
1355
1356 # generate the config.mk file
1357 pwd=`pwd`
1358 cat > "$TEMP_DIR/config.mk" << __EOF__
1359 #
1360 # config.mk generated by:
1361 # pwd: $pwd
1362 # $0 $@
1363 #
1364
1365 __EOF__
1366 write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
1367 cat "$TEMP_DIR/config.mk" "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
1368 rm -Rf "$TEMP_DIR"
1369