update uwproj
[mizunara.git] / configure
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|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; rm -Rf "$TEMP_DIR"; exit 1 ;;
83         "--toolkit="*) OPT_TOOLKIT=${ARG#--toolkit=} ;;
84         "-"*) echo "unknown option: $ARG"; rm -Rf "$TEMP_DIR"; 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 -i "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 "# project specific flags" >> "$TEMP_DIR/config.mk"
219 if [ -n "${ENV_CFLAGS}" ]; then
220     echo "CFLAGS += $ENV_CFLAGS" >> "$TEMP_DIR/config.mk"
221 fi
222 if [ -n "${ENV_CXXFLAGS}" ]; then
223     echo "CXXFLAGS += $ENV_CXXFLAGS" >> "$TEMP_DIR/config.mk"
224 fi
225 if [ -n "${ENV_LDFLAGS}" ]; then
226     echo "LDFLAGS += $ENV_LDFLAGS" >> "$TEMP_DIR/config.mk"
227 fi
228
229 #
230 # DEPENDENCIES
231 #
232
233 dependency_curl()
234 {
235     printf "checking for curl... "
236     # dependency curl platform="windows"
237     while true
238     do
239         if isnotplatform "windows"; then
240             break
241         fi
242         TEMP_CFLAGS="$TEMP_CFLAGS -I/mingw/include"
243         TEMP_LDFLAGS="$TEMP_LDFLAGS -lcurl"
244         echo yes
245         return 0
246     done
247
248     # dependency curl platform="macos"
249     while true
250     do
251         if isnotplatform "macos"; then
252             break
253         fi
254         curl-config --cflags > /dev/null
255         if [ $? -eq 0 ]; then
256             TEMP_CFLAGS="$TEMP_CFLAGS `curl-config --cflags`"
257         else
258             break
259         fi
260         curl-config --ldflags > /dev/null
261         if [ $? -eq 0 ]; then
262             TEMP_LDFLAGS="$TEMP_LDFLAGS `curl-config --ldflags`"
263         else
264             break
265         fi
266         echo yes
267         return 0
268     done
269
270     # dependency curl
271     while true
272     do
273         if [ -z "$PKG_CONFIG" ]; then
274             break
275         fi
276         $PKG_CONFIG libcurl
277         if [ $? -ne 0 ] ; then
278             break
279         fi
280         TEMP_CFLAGS="$TEMP_CFLAGS `$PKG_CONFIG --cflags libcurl`"
281         TEMP_LDFLAGS="$TEMP_LDFLAGS `$PKG_CONFIG --libs libcurl`"
282         echo yes
283         return 0
284     done
285
286     # dependency curl
287     while true
288     do
289         which curl-config > /dev/null
290         if [ $? -ne 0 ]; then
291         break
292         fi
293         curl-config --cflags > /dev/null
294         if [ $? -eq 0 ]; then
295             TEMP_CFLAGS="$TEMP_CFLAGS `curl-config --cflags`"
296         else
297             break
298         fi
299         curl-config --ldflags > /dev/null
300         if [ $? -eq 0 ]; then
301             TEMP_LDFLAGS="$TEMP_LDFLAGS `curl-config --ldflags`"
302         else
303             break
304         fi
305         echo yes
306         return 0
307     done
308
309     echo no
310     return 1
311 }
312 dependency_gtk3()
313 {
314     printf "checking for gtk3... "
315     # dependency gtk3
316     while true
317     do
318         if [ -z "$PKG_CONFIG" ]; then
319             break
320         fi
321         $PKG_CONFIG gtk+-3.0
322         if [ $? -ne 0 ] ; then
323             break
324         fi
325         TEMP_CFLAGS="$TEMP_CFLAGS `$PKG_CONFIG --cflags gtk+-3.0`"
326         TEMP_LDFLAGS="$TEMP_LDFLAGS `$PKG_CONFIG --libs gtk+-3.0`"
327         TEMP_CFLAGS="$TEMP_CFLAGS -DUI_GTK3"
328         TEMP_LDFLAGS="$TEMP_LDFLAGS -lpthread"
329         echo yes
330         return 0
331     done
332
333     echo no
334     return 1
335 }
336 dependency_openssl()
337 {
338     printf "checking for openssl... "
339     # dependency openssl platform="windows"
340     while true
341     do
342         if isnotplatform "windows"; then
343             break
344         fi
345         TEMP_LDFLAGS="$TEMP_LDFLAGS -lssl -lcrypto"
346         echo yes
347         return 0
348     done
349
350     # dependency openssl platform="macos"
351     while true
352     do
353         if isnotplatform "macos"; then
354             break
355         fi
356         TEMP_LDFLAGS="$TEMP_LDFLAGS -framework CoreFoundation"
357         echo yes
358         return 0
359     done
360
361     # dependency openssl platform="bsd"
362     while true
363     do
364         if isnotplatform "bsd"; then
365             break
366         fi
367         if isplatform "macos"; then
368             break
369         fi
370         TEMP_LDFLAGS="$TEMP_LDFLAGS -lssl -lcrypto"
371         echo yes
372         return 0
373     done
374
375     # dependency openssl
376     while true
377     do
378         if [ -z "$PKG_CONFIG" ]; then
379             break
380         fi
381         $PKG_CONFIG openssl
382         if [ $? -ne 0 ] ; then
383             break
384         fi
385         TEMP_CFLAGS="$TEMP_CFLAGS `$PKG_CONFIG --cflags openssl`"
386         TEMP_LDFLAGS="$TEMP_LDFLAGS `$PKG_CONFIG --libs openssl`"
387         echo yes
388         return 0
389     done
390
391     echo no
392     return 1
393 }
394 dependency_libxml2()
395 {
396     printf "checking for libxml2... "
397     # dependency libxml2 platform="windows"
398     while true
399     do
400         if isnotplatform "windows"; then
401             break
402         fi
403         xml2-config --cflags > /dev/null
404         if [ $? -eq 0 ]; then
405             TEMP_CFLAGS="$TEMP_CFLAGS `xml2-config --cflags`"
406         else
407             break
408         fi
409         xml2-config --libs > /dev/null
410         if [ $? -eq 0 ]; then
411             TEMP_LDFLAGS="$TEMP_LDFLAGS `xml2-config --libs`"
412         else
413             break
414         fi
415         echo yes
416         return 0
417     done
418
419     # dependency libxml2 platform="macos"
420     while true
421     do
422         if isnotplatform "macos"; then
423             break
424         fi
425         xml2-config --cflags > /dev/null
426         if [ $? -eq 0 ]; then
427             TEMP_CFLAGS="$TEMP_CFLAGS `xml2-config --cflags`"
428         else
429             break
430         fi
431         xml2-config --libs > /dev/null
432         if [ $? -eq 0 ]; then
433             TEMP_LDFLAGS="$TEMP_LDFLAGS `xml2-config --libs`"
434         else
435             break
436         fi
437         echo yes
438         return 0
439     done
440
441     # dependency libxml2
442     while true
443     do
444         if [ -z "$PKG_CONFIG" ]; then
445             break
446         fi
447         $PKG_CONFIG libxml-2.0
448         if [ $? -ne 0 ] ; then
449             break
450         fi
451         TEMP_CFLAGS="$TEMP_CFLAGS `$PKG_CONFIG --cflags libxml-2.0`"
452         TEMP_LDFLAGS="$TEMP_LDFLAGS `$PKG_CONFIG --libs libxml-2.0`"
453         echo yes
454         return 0
455     done
456
457     # dependency libxml2
458     while true
459     do
460         xml2-config --cflags > /dev/null
461         if [ $? -eq 0 ]; then
462             TEMP_CFLAGS="$TEMP_CFLAGS `xml2-config --cflags`"
463         else
464             break
465         fi
466         xml2-config --libs > /dev/null
467         if [ $? -eq 0 ]; then
468             TEMP_LDFLAGS="$TEMP_LDFLAGS `xml2-config --libs`"
469         else
470             break
471         fi
472         echo yes
473         return 0
474     done
475
476     echo no
477     return 1
478 }
479 dependency_motif()
480 {
481     printf "checking for motif... "
482     # dependency motif
483     while true
484     do
485         TEMP_CFLAGS="$TEMP_CFLAGS -DUI_MOTIF"
486         TEMP_LDFLAGS="$TEMP_LDFLAGS -lXm -lXt -lX11 -lpthread"
487         echo yes
488         return 0
489     done
490
491     echo no
492     return 1
493 }
494
495 DEPENDENCIES_FAILED=
496 ERROR=0
497 # general dependencies
498 TEMP_CFLAGS=
499 TEMP_LDFLAGS=
500 while true
501 do
502     if isnotplatform "unix"; then
503         break
504     fi
505     if isplatform "macos"; then
506         break
507     fi
508     while true
509     do
510
511         cat >> "$TEMP_DIR/make.mk" << __EOF__
512 OBJ_EXT = o
513 LIB_EXT = a
514 PACKAGE_SCRIPT = package_unix.sh
515
516 __EOF__
517
518         break
519     done
520
521     break
522 done
523 while true
524 do
525     while true
526     do
527
528         TEMP_LDFLAGS="$TEMP_LDFLAGS -lpthread"
529
530         break
531     done
532
533     break
534 done
535 while true
536 do
537     if isnotplatform "bsd"; then
538         break
539     fi
540     if isplatform "macos"; then
541         break
542     fi
543     while true
544     do
545
546         TEMP_CFLAGS="$TEMP_CFLAGS -I/usr/local/include"
547         TEMP_LDFLAGS="$TEMP_LDFLAGS -L/usr/local/lib"
548
549         break
550     done
551
552     break
553 done
554
555 # add general dependency flags to config.mk
556 echo >> "$TEMP_DIR/config.mk"
557 if [ -n "${TEMP_CFLAGS}" ]; then
558     echo "CFLAGS += $TEMP_CFLAGS" >> $TEMP_DIR/config.mk
559 fi
560 if [ -n "${TEMP_CXXFLAGS}" ]; then
561     echo "CXXFLAGS += $TEMP_CXXFLAGS" >> $TEMP_DIR/config.mk
562 fi
563 if [ -n "${TEMP_LDFLAGS}" ]; then
564     echo "LDFLAGS += $TEMP_LDFLAGS" >> $TEMP_DIR/config.mk
565 fi
566
567 #
568 # OPTION VALUES
569 #
570 checkopt_toolkit_gtk3()
571 {
572     VERR=0
573     dependency_gtk3
574     if [ $? -ne 0 ]; then
575         VERR=1
576     fi
577     if [ $VERR -ne 0 ]; then
578         return 1
579     fi
580     cat >> "$TEMP_DIR/make.mk" << __EOF__
581 TOOLKIT = gtk
582 GTKOBJ = draw_cairo.o
583 MZUI = gtk_pathbar.c
584 MZUI += gtk_browser.c
585
586 __EOF__
587     return 0
588 }
589 checkopt_toolkit_motif()
590 {
591     VERR=0
592     dependency_motif
593     if [ $? -ne 0 ]; then
594         VERR=1
595     fi
596     if [ $VERR -ne 0 ]; then
597         return 1
598     fi
599     cat >> "$TEMP_DIR/make.mk" << __EOF__
600 TOOLKIT = motif
601 MZUI = motif_pathbar.c
602 MZUI += motif_browser.c
603
604 __EOF__
605     return 0
606 }
607
608 #
609 # TARGETS
610 #
611 TEMP_CFLAGS=
612 TEMP_CXXFLAGS=
613 TEMP_LDFLAGS=
614
615 # Target: tk
616 TEMP_CFLAGS=
617 TEMP_LDFLAGS=
618 TEMP_CXXFLAGS=
619
620
621 # Features
622
623 # Option: --toolkit
624 if [ -z $OPT_TOOLKIT ]; then
625     SAVED_ERROR="$ERROR"
626     SAVED_DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED"
627     ERROR=0
628     while true
629     do
630         checkopt_toolkit_motif
631         if [ $? -eq 0 ]; then
632             echo "  toolkit: motif" >> "$TEMP_DIR/options"
633             ERROR=0
634             break
635         fi
636         checkopt_toolkit_gtk3
637         if [ $? -eq 0 ]; then
638             echo "  toolkit: gtk3" >> "$TEMP_DIR/options"
639             ERROR=0
640             break
641         fi
642         break
643     done
644     if [ $ERROR -ne 0 ]; then
645         SAVED_ERROR=1
646     fi
647     ERROR="$SAVED_ERROR"
648     DEPENDENCIES_FAILED="$SAVED_DEPENDENCIES_FAILED"
649 else
650     if false; then
651         false
652     elif [ "$OPT_TOOLKIT" = "gtk3" ]; then
653         echo "  toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
654         checkopt_toolkit_gtk3
655         if [ $? -ne 0 ]; then
656             ERROR=1
657         fi
658     elif [ "$OPT_TOOLKIT" = "motif" ]; then
659         echo "  toolkit: $OPT_TOOLKIT" >> $TEMP_DIR/options
660         checkopt_toolkit_motif
661         if [ $? -ne 0 ]; then
662             ERROR=1
663         fi
664     fi
665 fi
666
667 echo >> "$TEMP_DIR/config.mk"
668 if [ -n "${TEMP_CFLAGS}" ]; then
669     echo "TK_CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/config.mk"
670 fi
671 if [ -n "${TEMP_CXXFLAGS}" ]; then
672     echo "TK_CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/config.mk"
673 fi
674 if [ -n "${TEMP_LDFLAGS}" ]; then
675     echo "TK_LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/config.mk"
676 fi
677
678 # Target: dav
679 TEMP_CFLAGS=
680 TEMP_LDFLAGS=
681 TEMP_CXXFLAGS=
682
683 dependency_curl
684 if [ $? -ne 0 ]; then
685     DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED curl "
686     ERROR=1
687 fi
688 dependency_libxml2
689 if [ $? -ne 0 ]; then
690     DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED libxml2 "
691     ERROR=1
692 fi
693 dependency_openssl
694 if [ $? -ne 0 ]; then
695     DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED openssl "
696     ERROR=1
697 fi
698
699 # Features
700
701
702 echo >> "$TEMP_DIR/config.mk"
703 if [ -n "${TEMP_CFLAGS}" ]; then
704     echo "DAV_CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/config.mk"
705 fi
706 if [ -n "${TEMP_CXXFLAGS}" ]; then
707     echo "DAV_CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/config.mk"
708 fi
709 if [ -n "${TEMP_LDFLAGS}" ]; then
710     echo "DAV_LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/config.mk"
711 fi
712
713 if [ $ERROR -ne 0 ]; then
714     echo
715     echo "Error: Unresolved dependencies"
716     echo "$DEPENDENCIES_FAILED"
717     rm -Rf "$TEMP_DIR"
718     exit 1
719 fi
720
721 echo "configure finished"
722 echo
723 echo "Build Config:"
724 echo "  PREFIX:    $PREFIX"
725 echo "  TOOLCHAIN: $TOOLCHAIN_NAME"
726 echo "Options:"
727 cat "$TEMP_DIR/options"
728 echo
729 cat "$TEMP_DIR/config.mk" "$TEMP_DIR/make.mk" > config.mk
730 rm -Rf "$TEMP_DIR"
731
732