| 1 #!/bin/sh |
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 cat << __EOF__ |
| |
89 Installation directories: |
| |
90 --prefix=PREFIX path prefix for architecture-independent files |
| |
91 [$prefix] |
| |
92 --exec-prefix=EPREFIX path prefix for architecture-dependent files |
| |
93 [PREFIX] |
| |
94 |
| |
95 --bindir=DIR user executables [EPREFIX/bin] |
| |
96 --sbindir=DIR system admin executables [EPREFIX/sbin] |
| |
97 --libexecdir=DIR program executables [EPREFIX/libexec] |
| |
98 --sysconfdir=DIR system configuration files [PREFIX/etc] |
| |
99 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] |
| |
100 --localstatedir=DIR modifiable single-machine data [PREFIX/var] |
| |
101 --runstatedir=DIR run-time variable data [LOCALSTATEDIR/run] |
| |
102 --libdir=DIR object code libraries [EPREFIX/lib] |
| |
103 --includedir=DIR C header files [PREFIX/include] |
| |
104 --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] |
| |
105 --datadir=DIR read-only architecture-independent data [DATAROOTDIR] |
| |
106 --infodir=DIR info documentation [DATAROOTDIR/info] |
| |
107 --mandir=DIR man documentation [DATAROOTDIR/man] |
| |
108 --localedir=DIR locale-dependent data [DATAROOTDIR/locale] |
| |
109 |
| |
110 Build Types: |
| |
111 --debug add extra compile flags for debug builds |
| |
112 --release add extra compile flags for release builds |
| |
113 |
| |
114 __EOF__ |
| |
115 } |
| 2 |
116 |
| 3 # create temporary directory |
117 # create temporary directory |
| 4 TEMP_DIR=".tmp-`uname -n`" |
118 TEMP_DIR=".tmp-`uname -n`" |
| 5 rm -Rf "$TEMP_DIR" |
119 rm -Rf "$TEMP_DIR" |
| 6 if mkdir -p "$TEMP_DIR"; then |
120 if mkdir -p "$TEMP_DIR"; then |
| 12 fi |
126 fi |
| 13 touch "$TEMP_DIR/options" |
127 touch "$TEMP_DIR/options" |
| 14 touch "$TEMP_DIR/features" |
128 touch "$TEMP_DIR/features" |
| 15 |
129 |
| 16 # define standard variables |
130 # define standard variables |
| 17 PREFIX=/usr |
131 # also define standard prefix (this is where we will search for config.site) |
| 18 EPREFIX= |
132 prefix=/usr |
| 19 BINDIR= |
133 exec_prefix= |
| 20 SBINDIR= |
134 bindir= |
| 21 LIBDIR= |
135 sbindir= |
| 22 LIBEXECDIR= |
136 libdir= |
| 23 DATADIR= |
137 libexecdir= |
| 24 SYSCONFDIR= |
138 datarootdir= |
| 25 SHAREDSTATEDIR= |
139 datadir= |
| 26 LOCALSTATEDIR= |
140 sysconfdir= |
| 27 INCLUDEDIR= |
141 sharedstatedir= |
| 28 INFODIR= |
142 localstatedir= |
| 29 MANDIR= |
143 runstatedir= |
| |
144 includedir= |
| |
145 infodir= |
| |
146 localedir= |
| |
147 mandir= |
| 30 |
148 |
| 31 # custom variables |
149 # custom variables |
| 32 BUILDDIR=`pwd`/build |
|
| 33 |
150 |
| 34 # features |
151 # features |
| 35 |
|
| 36 # clean abort |
|
| 37 abort_configure() |
|
| 38 { |
|
| 39 rm -Rf "$TEMP_DIR" |
|
| 40 exit 1 |
|
| 41 } |
|
| 42 |
|
| 43 # help text |
|
| 44 printhelp() |
|
| 45 { |
|
| 46 echo "Usage: $0 [OPTIONS]..." |
|
| 47 cat << __EOF__ |
|
| 48 Installation directories: |
|
| 49 --prefix=PREFIX path prefix for architecture-independent files |
|
| 50 [/usr] |
|
| 51 --exec-prefix=EPREFIX path prefix for architecture-dependent files |
|
| 52 [PREFIX] |
|
| 53 |
|
| 54 --bindir=DIR user executables [EPREFIX/bin] |
|
| 55 --sbindir=DIR system admin executables [EPREFIX/sbin] |
|
| 56 --libexecdir=DIR program executables [EPREFIX/libexec] |
|
| 57 --sysconfdir=DIR system configuration files [PREFIX/etc] |
|
| 58 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] |
|
| 59 --localstatedir=DIR modifiable single-machine data [PREFIX/var] |
|
| 60 --libdir=DIR object code libraries [EPREFIX/lib] |
|
| 61 --includedir=DIR C header files [PREFIX/include] |
|
| 62 --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] |
|
| 63 --datadir=DIR read-only architecture-independent data [DATAROOTDIR] |
|
| 64 --infodir=DIR info documentation [DATAROOTDIR/info] |
|
| 65 --mandir=DIR man documentation [DATAROOTDIR/man] |
|
| 66 |
|
| 67 __EOF__ |
|
| 68 } |
|
| 69 |
152 |
| 70 # |
153 # |
| 71 # parse arguments |
154 # parse arguments |
| 72 # |
155 # |
| 73 BUILD_TYPE="default" |
156 BUILD_TYPE="default" |
| 74 for ARG in "$@" |
157 for ARG in "$@" |
| 75 do |
158 do |
| 76 case "$ARG" in |
159 case "$ARG" in |
| 77 "--prefix="*) PREFIX=${ARG#--prefix=} ;; |
160 "--prefix="*) prefix=${ARG#--prefix=} ;; |
| 78 "--exec-prefix="*) EPREFIX=${ARG#--exec-prefix=} ;; |
161 "--exec-prefix="*) exec_prefix=${ARG#--exec-prefix=} ;; |
| 79 "--bindir="*) BINDIR=${ARG#----bindir=} ;; |
162 "--bindir="*) bindir=${ARG#----bindir=} ;; |
| 80 "--sbindir="*) SBINDIR=${ARG#--sbindir=} ;; |
163 "--sbindir="*) sbindir=${ARG#--sbindir=} ;; |
| 81 "--libdir="*) LIBDIR=${ARG#--libdir=} ;; |
164 "--libdir="*) libdir=${ARG#--libdir=} ;; |
| 82 "--libexecdir="*) LIBEXECDIR=${ARG#--libexecdir=} ;; |
165 "--libexecdir="*) libexecdir=${ARG#--libexecdir=} ;; |
| 83 "--datadir="*) DATADIR=${ARG#--datadir=} ;; |
166 "--datarootdir="*) datarootdir=${ARG#--datarootdir=} ;; |
| 84 "--sysconfdir="*) SYSCONFDIR=${ARG#--sysconfdir=} ;; |
167 "--datadir="*) datadir=${ARG#--datadir=} ;; |
| 85 "--sharedstatedir="*) SHAREDSTATEDIR=${ARG#--sharedstatedir=} ;; |
168 "--sysconfdir="*) sysconfdir=${ARG#--sysconfdir=} ;; |
| 86 "--localstatedir="*) LOCALSTATEDIR=${ARG#--localstatedir=} ;; |
169 "--sharedstatedir="*) sharedstatedir=${ARG#--sharedstatedir=} ;; |
| 87 "--includedir="*) INCLUDEDIR=${ARG#--includedir=} ;; |
170 "--localstatedir="*) localstatedir=${ARG#--localstatedir=} ;; |
| 88 "--infodir="*) INFODIR=${ARG#--infodir=} ;; |
171 "--includedir="*) includedir=${ARG#--includedir=} ;; |
| 89 "--mandir"*) MANDIR=${ARG#--mandir} ;; |
172 "--infodir="*) infodir=${ARG#--infodir=} ;; |
| 90 "--help"*) printhelp; abort_configure ;; |
173 "--mandir"*) mandir=${ARG#--mandir} ;; |
| 91 "--debug") BUILD_TYPE="debug" ;; |
174 "--localedir"*) localedir=${ARG#--localedir} ;; |
| 92 "--release") BUILD_TYPE="release" ;; |
175 "--help"*) printhelp; abort_configure ;; |
| |
176 "--debug") BUILD_TYPE="debug" ;; |
| |
177 "--release") BUILD_TYPE="release" ;; |
| 93 "-"*) echo "unknown option: $ARG"; abort_configure ;; |
178 "-"*) echo "unknown option: $ARG"; abort_configure ;; |
| 94 esac |
179 esac |
| 95 done |
180 done |
| 96 |
181 |
| 97 |
182 |
| 98 # set dir variables |
183 |
| 99 : ${EPREFIX:="$PREFIX"} |
184 # set defaults for dir variables |
| 100 : ${BINDIR:="$EPREFIX/bin"} |
185 : ${exec_prefix:="$prefix"} |
| 101 : ${SBINDIR:="$EPREFIX/sbin"} |
186 : ${bindir:='${exec_prefix}/bin'} |
| 102 : ${LIBDIR:="$EPREFIX/lib"} |
187 : ${sbindir:='${exec_prefix}/sbin'} |
| 103 : ${LIBEXECDIR:="$EPREFIX/libexec"} |
188 : ${libdir:='${exec_prefix}/lib'} |
| 104 : ${DATADIR:="$PREFIX/share"} |
189 : ${libexecdir:='${exec_prefix}/libexec'} |
| 105 : ${SYSCONFDIR:="$PREFIX/etc"} |
190 : ${datarootdir:='${prefix}/share'} |
| 106 : ${SHAREDSTATEDIR:="$PREFIX/com"} |
191 : ${datadir:='${datarootdir}'} |
| 107 : ${LOCALSTATEDIR:="$PREFIX/var"} |
192 : ${sysconfdir:='${prefix}/etc'} |
| 108 : ${INCLUDEDIR:="$PREFIX/include"} |
193 : ${sharedstatedir:='${prefix}/com'} |
| 109 : ${INFODIR:="$PREFIX/info"} |
194 : ${localstatedir:='${prefix}/var'} |
| 110 : ${MANDIR:="$PREFIX/man"} |
195 : ${runstatedir:='${localstatedir}/run'} |
| 111 |
196 : ${includedir:='${prefix}/include'} |
| 112 # Test for availability of pkg-config |
197 : ${infodir:='${datarootdir}/info'} |
| 113 PKG_CONFIG=`command -v pkg-config` |
198 : ${mandir:='${datarootdir}/man'} |
| 114 : ${PKG_CONFIG:="false"} |
199 : ${localedir:='${datarootdir}/locale'} |
| 115 |
200 |
| 116 # Simple uname based platform detection |
201 # remember the above values and compare them later |
| 117 # $PLATFORM is used for platform dependent dependency selection |
202 orig_bindir="$bindir" |
| 118 OS=`uname -s` |
203 orig_sbindir="$sbindir" |
| 119 OS_VERSION=`uname -r` |
204 orig_libdir="$libdir" |
| 120 printf "detect platform... " |
205 orig_libexecdir="$libexecdir" |
| 121 if [ "$OS" = "SunOS" ]; then |
206 orig_datarootdir="$datarootdir" |
| 122 PLATFORM="solaris sunos unix svr4" |
207 orig_datadir="$datadir" |
| 123 fi |
208 orig_sysconfdir="$sysconfdir" |
| 124 if [ "$OS" = "Linux" ]; then |
209 orig_sharedstatedir="$sharedstatedir" |
| 125 PLATFORM="linux unix" |
210 orig_localstatedir="$localstatedir" |
| 126 fi |
211 orig_runstatedir="$runstatedir" |
| 127 if [ "$OS" = "FreeBSD" ]; then |
212 orig_includedir="$includedir" |
| 128 PLATFORM="freebsd bsd unix" |
213 orig_infodir="$infodir" |
| 129 fi |
214 orig_mandir="$mandir" |
| 130 if [ "$OS" = "Darwin" ]; then |
215 orig_localedir="$localedir" |
| 131 PLATFORM="macos osx bsd unix" |
216 |
| 132 fi |
217 # check if a config.site exists and load it |
| 133 if echo "$OS" | grep -i "MINGW" > /dev/null; then |
218 if [ -n "$CONFIG_SITE" ]; then |
| 134 PLATFORM="windows mingw" |
219 # CONFIG_SITE may contain space separated file names |
| 135 fi |
220 for cs in $CONFIG_SITE; do |
| 136 : ${PLATFORM:="unix"} |
221 printf "loading defaults from $cs... " |
| 137 |
222 . "$cs" |
| 138 PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -` |
223 echo ok |
| 139 echo "$PLATFORM_NAME" |
224 done |
| 140 |
225 elif [ -f "$prefix/share/config.site" ]; then |
| 141 isplatform() |
226 printf "loading site defaults... " |
| 142 { |
227 . "$prefix/share/config.site" |
| 143 for p in $PLATFORM |
228 echo ok |
| 144 do |
229 elif [ -f "$prefix/etc/config.site" ]; then |
| 145 if [ "$p" = "$1" ]; then |
230 printf "loading site defaults... " |
| 146 return 0 |
231 . "$prefix/etc/config.site" |
| 147 fi |
232 echo ok |
| 148 done |
233 else |
| 149 return 1 |
234 # try to detect the correct libdir on our own, except it was changed by the user |
| 150 } |
235 if test "$libdir" = '${exec_prefix}/lib'; then |
| 151 notisplatform() |
236 if [ "$OS" = "SunOS" ]; then |
| 152 { |
237 test -d "${exec_prefix}/lib/amd64" && libdir='${exec_prefix}/lib/amd64' |
| 153 for p in $PLATFORM |
238 else |
| 154 do |
239 # check if the standard libdir even exists |
| 155 if [ "$p" = "$1" ]; then |
240 if test -d "${exec_prefix}/lib" ; then |
| 156 return 1 |
241 : |
| 157 fi |
242 else |
| 158 done |
243 # if it does not, maybe a lib32 exists |
| 159 return 0 |
244 test -d "${exec_prefix}/lib32" && libdir='${exec_prefix}/lib32' |
| 160 } |
245 fi |
| |
246 # now check if there is a special 64bit libdir that we should use |
| |
247 for i in x86_64 ppc64 s390x aarch64 aarch64_be arm64 ; do |
| |
248 if [ $ARCH = $i ]; then |
| |
249 test -d "${exec_prefix}/lib64" && libdir='${exec_prefix}/lib64' |
| |
250 break |
| |
251 fi |
| |
252 done |
| |
253 fi |
| |
254 fi |
| |
255 fi |
| 161 |
256 |
| 162 |
257 |
| 163 # generate vars.mk |
258 # generate vars.mk |
| 164 cat > "$TEMP_DIR/vars.mk" << __EOF__ |
259 cat > "$TEMP_DIR/vars.mk" << __EOF__ |
| 165 PREFIX=$PREFIX |
260 prefix=$prefix |
| 166 EPREFIX=$EPREFIX |
261 exec_prefix=$exec_prefix |
| 167 BINDIR=$BINDIR |
262 bindir=$bindir |
| 168 SBINDIR=$SBINDIR |
263 sbindir=$sbindir |
| 169 LIBDIR=$LIBDIR |
264 libdir=$libdir |
| 170 LIBEXECDIR=$LIBEXECDIR |
265 libexecdir=$libexecdir |
| 171 DATADIR=$DATADIR |
266 datarootdir=$datarootdir |
| 172 SYSCONFDIR=$SYSCONFDIR |
267 datadir=$datadir |
| 173 SHAREDSTATEDIR=$SHAREDSTATEDIR |
268 sysconfdir=$sysconfdir |
| 174 LOCALSTATEDIR=$LOCALSTATEDIR |
269 sharedstatedir=$sharedstatedir |
| 175 INCLUDEDIR=$INCLUDEDIR |
270 localstatedir=$localstatedir |
| 176 INFODIR=$INFODIR |
271 runstatedir=$runstatedir |
| 177 MANDIR=$MANDIR |
272 includedir=$includedir |
| 178 BUILDDIR=$BUILDDIR |
273 infodir=$infodir |
| 179 __EOF__ |
274 mandir=$mandir |
| 180 sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk" |
275 localedir=$localedir |
| 181 |
276 __EOF__ |
| 182 |
277 |
| 183 # toolchain detection utilities |
278 # toolchain detection utilities |
| 184 . make/toolchain.sh |
279 . make/toolchain.sh |
| 185 |
280 |
| 186 # |
281 # |
| 409 abort_configure |
516 abort_configure |
| 410 fi |
517 fi |
| 411 |
518 |
| 412 echo "configure finished" |
519 echo "configure finished" |
| 413 echo |
520 echo |
| |
521 echo "Toolchain" |
| |
522 echo " name: $TOOLCHAIN_NAME" |
| |
523 if [ -n "$TOOLCHAIN_CC" ]; then |
| |
524 echo " cc: $TOOLCHAIN_CC" |
| |
525 fi |
| |
526 if [ -n "$TOOLCHAIN_CXX" ]; then |
| |
527 echo " cxx: $TOOLCHAIN_CXX" |
| |
528 fi |
| |
529 if [ -n "$TOOLCHAIN_WSIZE" ]; then |
| |
530 echo " word size: $TOOLCHAIN_WSIZE bit" |
| |
531 fi |
| |
532 if [ -n "$TOOLCHAIN_CSTD" ]; then |
| |
533 echo " default C std: $TOOLCHAIN_CSTD" |
| |
534 fi |
| |
535 echo |
| 414 echo "Build Config:" |
536 echo "Build Config:" |
| 415 echo " PREFIX: $PREFIX" |
537 echo " prefix: $prefix" |
| 416 echo " TOOLCHAIN: $TOOLCHAIN_NAME" |
538 echo " exec_prefix: $exec_prefix" |
| |
539 if [ "$orig_bindir" != "$bindir" ]; then |
| |
540 echo " bindir: $bindir" |
| |
541 fi |
| |
542 if [ "$orig_sbindir" != "$sbindir" ]; then |
| |
543 echo " sbindir: $sbindir" |
| |
544 fi |
| |
545 if [ "$orig_libdir" != "$libdir" ]; then |
| |
546 echo " libdir: $libdir" |
| |
547 fi |
| |
548 if [ "$orig_libexecdir" != "$libexecdir" ]; then |
| |
549 echo " libexecdir: $libexecdir" |
| |
550 fi |
| |
551 if [ "$orig_datarootdir" != "$datarootdir" ]; then |
| |
552 echo " datarootdir: $datarootdir" |
| |
553 fi |
| |
554 if [ "$orig_datadir" != "$datadir" ]; then |
| |
555 echo " datadir: $datadir" |
| |
556 fi |
| |
557 if [ "$orig_sysconfdir" != "$sysconfdir" ]; then |
| |
558 echo " sysconfdir: $sysconfdir" |
| |
559 fi |
| |
560 if [ "$orig_sharedstatedir" != "$sharedstatedir" ]; then |
| |
561 echo " sharedstatedir: $sharedstatedir" |
| |
562 fi |
| |
563 if [ "$orig_localstatedir" != "$localstatedir" ]; then |
| |
564 echo " localstatedir: $localstatedir" |
| |
565 fi |
| |
566 if [ "$orig_runstatedir" != "$runstatedir" ]; then |
| |
567 echo " runstatedir: $runstatedir" |
| |
568 fi |
| |
569 if [ "$orig_includedir" != "$includedir" ]; then |
| |
570 echo " includedir: $includedir" |
| |
571 fi |
| |
572 if [ "$orig_infodir" != "$infodir" ]; then |
| |
573 echo " infodir: $infodir" |
| |
574 fi |
| |
575 if [ "$orig_mandir" != "$mandir" ]; then |
| |
576 echo " mandir: $mandir" |
| |
577 fi |
| |
578 if [ "$orig_localedir" != "$localedir" ]; then |
| |
579 echo " localedir: $localedir" |
| |
580 fi |
| 417 echo |
581 echo |
| 418 |
582 |
| 419 # generate the config.mk file |
583 # generate the config.mk file |
| |
584 pwd=`pwd` |
| 420 cat > "$TEMP_DIR/config.mk" << __EOF__ |
585 cat > "$TEMP_DIR/config.mk" << __EOF__ |
| 421 # |
586 # |
| 422 # config.mk generated by configure |
587 # config.mk generated by: |
| |
588 # pwd: $pwd |
| |
589 # $0 $@ |
| 423 # |
590 # |
| 424 |
591 |
| 425 __EOF__ |
592 __EOF__ |
| 426 write_toolchain_defaults "$TEMP_DIR/toolchain.mk" |
593 write_toolchain_defaults "$TEMP_DIR/toolchain.mk" |
| 427 cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk |
594 cat "$TEMP_DIR/config.mk" "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk |
| 428 rm -Rf "$TEMP_DIR" |
595 rm -Rf "$TEMP_DIR" |
| 429 |
|
| 430 |
|