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 |
|