make/configure.vm

changeset 573
2360c1696a34
parent 277
5099a34747c4
child 607
cfcc3fb12d7d
equal deleted inserted replaced
572:e655587695c0 573:2360c1696a34
1 #!/bin/sh 1 #!/bin/sh
2 2
3 # create temporary directory 3 #set( $D = '$' )
4 TEMP_DIR=".tmp-`uname -n`" 4 #[[
5 rm -Rf "$TEMP_DIR" 5 # some utility functions
6 if mkdir -p "$TEMP_DIR"; then 6 isplatform()
7 : 7 {
8 else 8 for p in $PLATFORM
9 echo "Cannot create tmp dir $TEMP_DIR" 9 do
10 echo "Abort" 10 if [ "$p" = "$1" ]; then
11 exit 1 11 return 0
12 fi 12 fi
13 touch "$TEMP_DIR/options" 13 done
14 touch "$TEMP_DIR/features" 14 return 1
15 15 }
16 # define standard variables 16 notisplatform()
17 # also define standard prefix (this is where we will search for config.site) 17 {
18 prefix=/usr 18 for p in $PLATFORM
19 exec_prefix= 19 do
20 bindir= 20 if [ "$p" = "$1" ]; then
21 sbindir= 21 return 1
22 libdir= 22 fi
23 libexecdir= 23 done
24 datarootdir= 24 return 0
25 datadir= 25 }
26 sysconfdir= 26 istoolchain()
27 sharedstatedir= 27 {
28 localstatedir= 28 for t in $TOOLCHAIN
29 runstatedir= 29 do
30 includedir= 30 if [ "$t" = "$1" ]; then
31 infodir= 31 return 0
32 localedir= 32 fi
33 mandir= 33 done
34 34 return 1
35 # custom variables 35 }
36 #foreach( $var in $vars ) 36 notistoolchain()
37 #if( $var.exec ) 37 {
38 ${var.varName}=`${var.value}` 38 for t in $TOOLCHAIN
39 #else 39 do
40 ${var.varName}="${var.value}" 40 if [ "$t" = "$1" ]; then
41 #end 41 return 1
42 #end 42 fi
43 43 done
44 # features 44 return 0
45 #foreach( $feature in $features ) 45 }
46 #if( ${feature.auto} )
47 ${feature.varName}=auto
48 #end
49 #end
50 46
51 # clean abort 47 # clean abort
52 abort_configure() 48 abort_configure()
53 { 49 {
54 rm -Rf "$TEMP_DIR" 50 rm -Rf "$TEMP_DIR"
55 exit 1 51 exit 1
56 } 52 }
57
58 # help text
59 printhelp()
60 {
61 echo "Usage: $0 [OPTIONS]..."
62 cat << __EOF__
63 Installation directories:
64 --prefix=PREFIX path prefix for architecture-independent files
65 [/usr]
66 --exec-prefix=EPREFIX path prefix for architecture-dependent files
67 [PREFIX]
68
69 --bindir=DIR user executables [EPREFIX/bin]
70 --sbindir=DIR system admin executables [EPREFIX/sbin]
71 --libexecdir=DIR program executables [EPREFIX/libexec]
72 --sysconfdir=DIR system configuration files [PREFIX/etc]
73 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
74 --localstatedir=DIR modifiable single-machine data [PREFIX/var]
75 --runstatedir=DIR run-time variable data [LOCALSTATEDIR/run]
76 --libdir=DIR object code libraries [EPREFIX/lib]
77 --includedir=DIR C header files [PREFIX/include]
78 --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
79 --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
80 --infodir=DIR info documentation [DATAROOTDIR/info]
81 --mandir=DIR man documentation [DATAROOTDIR/man]
82 --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
83
84 #if( $options.size() > 0 )
85 Options:
86 --debug add extra compile flags for debug builds
87 --release add extra compile flags for release builds
88 #foreach( $opt in $options )
89 --${opt.argument}=${opt.valuesString}
90 #end
91
92 #end
93 #if( $features.size() > 0 )
94 Optional Features:
95 #foreach( $feature in $features )
96 ${feature.helpText}
97 #end
98
99 #end
100 __EOF__
101 }
102
103 #
104 # parse arguments
105 #
106 BUILD_TYPE="default"
107 #set( $D = '$' )
108 for ARG in "$@"
109 do
110 case "$ARG" in
111 "--prefix="*) prefix=${D}{ARG#--prefix=} ;;
112 "--exec-prefix="*) exec_prefix=${D}{ARG#--exec-prefix=} ;;
113 "--bindir="*) bindir=${D}{ARG#----bindir=} ;;
114 "--sbindir="*) sbindir=${D}{ARG#--sbindir=} ;;
115 "--libdir="*) libdir=${D}{ARG#--libdir=} ;;
116 "--libexecdir="*) libexecdir=${D}{ARG#--libexecdir=} ;;
117 "--datarootdir="*) datarootdir=${D}{ARG#--datarootdir=} ;;
118 "--datadir="*) datadir=${D}{ARG#--datadir=} ;;
119 "--sysconfdir="*) sysconfdir=${D}{ARG#--sysconfdir=} ;;
120 "--sharedstatedir="*) sharedstatedir=${D}{ARG#--sharedstatedir=} ;;
121 "--localstatedir="*) localstatedir=${D}{ARG#--localstatedir=} ;;
122 "--includedir="*) includedir=${D}{ARG#--includedir=} ;;
123 "--infodir="*) infodir=${D}{ARG#--infodir=} ;;
124 "--mandir"*) mandir=${D}{ARG#--mandir} ;;
125 "--localedir"*) localedir=${D}{ARG#--localedir} ;;
126 "--help"*) printhelp; abort_configure ;;
127 "--debug") BUILD_TYPE="debug" ;;
128 "--release") BUILD_TYPE="release" ;;
129 #foreach( $opt in $options )
130 "--${opt.argument}="*) ${opt.varName}=${D}{ARG#--${opt.argument}=} ;;
131 #end
132 #foreach( $feature in $features )
133 "--enable-${feature.arg}") ${feature.varName}=on ;;
134 "--disable-${feature.arg}") unset ${feature.varName} ;;
135 #end
136 "-"*) echo "unknown option: $ARG"; abort_configure ;;
137 esac
138 done
139
140 ## Begin unparsed content. **
141 #[[
142
143 # set defaults for dir variables
144 : ${exec_prefix:="$prefix"}
145 : ${bindir:='${exec_prefix}/bin'}
146 : ${sbindir:='${exec_prefix}/sbin'}
147 : ${libdir:='${exec_prefix}/lib'}
148 : ${libexecdir:='${exec_prefix}/libexec'}
149 : ${datarootdir:='${prefix}/share'}
150 : ${datadir:='${datarootdir}'}
151 : ${sysconfdir:='${prefix}/etc'}
152 : ${sharedstatedir:='${prefix}/com'}
153 : ${localstatedir:='${prefix}/var'}
154 : ${runstatedir:='${localstatedir}/run'}
155 : ${includedir:='${prefix}/include'}
156 : ${infodir:='${datarootdir}/info'}
157 : ${mandir:='${datarootdir}/man'}
158 : ${localedir:='${datarootdir}/locale'}
159
160 # check if a config.site exists and load it
161 if [ -n "$CONFIG_SITE" ]; then
162 # CONFIG_SITE may contain space separated file names
163 for cs in $CONFIG_SITE; do
164 printf "loading defaults from $cs... "
165 . "$cs"
166 echo ok
167 done
168 elif [ -f "$prefix/share/config.site" ]; then
169 printf "loading site defaults... "
170 . "$prefix/share/config.site"
171 echo ok
172 elif [ -f "$prefix/etc/config.site" ]; then
173 printf "loading site defaults... "
174 . "$prefix/etc/config.site"
175 echo ok
176 fi
177 53
178 # Test for availability of pkg-config 54 # Test for availability of pkg-config
179 PKG_CONFIG=`command -v pkg-config` 55 PKG_CONFIG=`command -v pkg-config`
180 : ${PKG_CONFIG:="false"} 56 : ${PKG_CONFIG:="false"}
181 57
201 fi 77 fi
202 : ${PLATFORM:="unix"} 78 : ${PLATFORM:="unix"}
203 79
204 PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -` 80 PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -`
205 echo "$PLATFORM_NAME" 81 echo "$PLATFORM_NAME"
206 82 ]]#
207 isplatform() 83
208 { 84 # help text
209 for p in $PLATFORM 85 printhelp()
210 do 86 {
211 if [ "$p" = "$1" ]; then 87 echo "Usage: $0 [OPTIONS]..."
212 return 0 88 cat << __EOF__
213 fi 89 Installation directories:
90 --prefix=PREFIX path prefix for architecture-independent files
91 [${D}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 #if( $options.size() > 0 )
114
115 Options:
116 #foreach( $opt in $options )
117 --${opt.argument}=${opt.valuesString}
118 #end
119 #end
120 #if( $features.size() > 0 )
121
122 Optional Features:
123 #foreach( $feature in $features )
124 ${feature.helpText}
125 #end
126 #end
127
128 __EOF__
129 }
130
131 # create temporary directory
132 TEMP_DIR=".tmp-`uname -n`"
133 rm -Rf "$TEMP_DIR"
134 if mkdir -p "$TEMP_DIR"; then
135 :
136 else
137 echo "Cannot create tmp dir $TEMP_DIR"
138 echo "Abort"
139 exit 1
140 fi
141 touch "$TEMP_DIR/options"
142 touch "$TEMP_DIR/features"
143
144 # define standard variables
145 # also define standard prefix (this is where we will search for config.site)
146 prefix=/usr
147 exec_prefix=
148 bindir=
149 sbindir=
150 libdir=
151 libexecdir=
152 datarootdir=
153 datadir=
154 sysconfdir=
155 sharedstatedir=
156 localstatedir=
157 runstatedir=
158 includedir=
159 infodir=
160 localedir=
161 mandir=
162
163 # custom variables
164 #foreach( $cfg in $config )
165 if true \
166 #if( $cfg.platform )
167 && isplatform "${cfg.platform}" \
168 #end
169 #foreach( $np in $cfg.notList )
170 && notisplatform "${np}" \
171 #end
172 ; then
173 #foreach( $var in $cfg.vars )
174 #if( $var.exec )
175 ${var.varName}=`${var.value}`
176 #else
177 ${var.varName}="${var.value}"
178 #end
179 #end
180 fi
181 #end
182
183 # features
184 #foreach( $feature in $features )
185 #if( ${feature.auto} )
186 ${feature.varName}=auto
187 #end
188 #end
189
190 #
191 # parse arguments
192 #
193 BUILD_TYPE="default"
194 for ARG in "$@"
195 do
196 case "$ARG" in
197 "--prefix="*) prefix=${D}{ARG#--prefix=} ;;
198 "--exec-prefix="*) exec_prefix=${D}{ARG#--exec-prefix=} ;;
199 "--bindir="*) bindir=${D}{ARG#----bindir=} ;;
200 "--sbindir="*) sbindir=${D}{ARG#--sbindir=} ;;
201 "--libdir="*) libdir=${D}{ARG#--libdir=} ;;
202 "--libexecdir="*) libexecdir=${D}{ARG#--libexecdir=} ;;
203 "--datarootdir="*) datarootdir=${D}{ARG#--datarootdir=} ;;
204 "--datadir="*) datadir=${D}{ARG#--datadir=} ;;
205 "--sysconfdir="*) sysconfdir=${D}{ARG#--sysconfdir=} ;;
206 "--sharedstatedir="*) sharedstatedir=${D}{ARG#--sharedstatedir=} ;;
207 "--localstatedir="*) localstatedir=${D}{ARG#--localstatedir=} ;;
208 "--includedir="*) includedir=${D}{ARG#--includedir=} ;;
209 "--infodir="*) infodir=${D}{ARG#--infodir=} ;;
210 "--mandir"*) mandir=${D}{ARG#--mandir} ;;
211 "--localedir"*) localedir=${D}{ARG#--localedir} ;;
212 "--help"*) printhelp; abort_configure ;;
213 "--debug") BUILD_TYPE="debug" ;;
214 "--release") BUILD_TYPE="release" ;;
215 #foreach( $opt in $options )
216 "--${opt.argument}="*) ${opt.varName}=${D}{ARG#--${opt.argument}=} ;;
217 "--${opt.argument}") echo "option '$ARG' needs a value:"; echo " $ARG=${opt.valuesString}"; abort_configure ;;
218 #end
219 #foreach( $feature in $features )
220 "--enable-${feature.arg}") ${feature.varName}=on ;;
221 "--disable-${feature.arg}") unset ${feature.varName} ;;
222 #end
223 "-"*) echo "unknown option: $ARG"; abort_configure ;;
224 esac
225 done
226
227 ## Begin unparsed content. **
228 #[[
229
230 # set defaults for dir variables
231 : ${exec_prefix:="$prefix"}
232 : ${bindir:='${exec_prefix}/bin'}
233 : ${sbindir:='${exec_prefix}/sbin'}
234 : ${libdir:='${exec_prefix}/lib'}
235 : ${libexecdir:='${exec_prefix}/libexec'}
236 : ${datarootdir:='${prefix}/share'}
237 : ${datadir:='${datarootdir}'}
238 : ${sysconfdir:='${prefix}/etc'}
239 : ${sharedstatedir:='${prefix}/com'}
240 : ${localstatedir:='${prefix}/var'}
241 : ${runstatedir:='${localstatedir}/run'}
242 : ${includedir:='${prefix}/include'}
243 : ${infodir:='${datarootdir}/info'}
244 : ${mandir:='${datarootdir}/man'}
245 : ${localedir:='${datarootdir}/locale'}
246
247 # check if a config.site exists and load it
248 if [ -n "$CONFIG_SITE" ]; then
249 # CONFIG_SITE may contain space separated file names
250 for cs in $CONFIG_SITE; do
251 printf "loading defaults from $cs... "
252 . "$cs"
253 echo ok
214 done 254 done
215 return 1 255 elif [ -f "$prefix/share/config.site" ]; then
216 } 256 printf "loading site defaults... "
217 notisplatform() 257 . "$prefix/share/config.site"
218 { 258 echo ok
219 for p in $PLATFORM 259 elif [ -f "$prefix/etc/config.site" ]; then
220 do 260 printf "loading site defaults... "
221 if [ "$p" = "$1" ]; then 261 . "$prefix/etc/config.site"
222 return 1 262 echo ok
223 fi 263 fi
224 done
225 return 0
226 }
227 istoolchain()
228 {
229 for t in $TOOLCHAIN
230 do
231 if [ "$t" = "$1" ]; then
232 return 0
233 fi
234 done
235 return 1
236 }
237 notistoolchain()
238 {
239 for t in $TOOLCHAIN
240 do
241 if [ "$t" = "$1" ]; then
242 return 1
243 fi
244 done
245 return 0
246 }
247 ]]# 264 ]]#
248 ## End of unparsed content ** 265 ## End of unparsed content **
249 266
250 # generate vars.mk 267 # generate vars.mk
251 cat > "$TEMP_DIR/vars.mk" << __EOF__ 268 cat > "$TEMP_DIR/vars.mk" << __EOF__
392 409
393 DEPENDENCIES_FAILED= 410 DEPENDENCIES_FAILED=
394 ERROR=0 411 ERROR=0
395 #if( $dependencies.size() > 0 ) 412 #if( $dependencies.size() > 0 )
396 # unnamed dependencies 413 # unnamed dependencies
397 TEMP_CFLAGS= 414 TEMP_CFLAGS="$CFLAGS"
398 TEMP_CXXFLAGS= 415 TEMP_CXXFLAGS="$CXXFLAGS"
399 TEMP_LDFLAGS= 416 TEMP_LDFLAGS="$LDFLAGS"
400 #foreach( $dependency in $dependencies ) 417 #foreach( $dependency in $dependencies )
401 while true 418 while true
402 do 419 do
403 #if( $dependency.platform ) 420 #if( $dependency.platform )
404 if notisplatform "${dependency.platform}"; then 421 if notisplatform "${dependency.platform}"; then
465 break 482 break
466 done 483 done
467 break 484 break
468 done 485 done
469 #end 486 #end
487
488 # build type
489 if [ "$BUILD_TYPE" = "debug" ]; then
490 TEMP_CFLAGS="\${DEBUG_CFLAGS}$TEMP_CFLAGS"
491 TEMP_CXXFLAGS="\${DEBUG_CXXFLAGS}$TEMP_CXXFLAGS"
492 fi
493 if [ "$BUILD_TYPE" = "release" ]; then
494 TEMP_CFLAGS="\${RELEASE_CFLAGS}$TEMP_CFLAGS"
495 TEMP_CXXFLAGS="\${RELEASE_CXXFLAGS}$TEMP_CXXFLAGS"
496 fi
470 497
471 # add general dependency flags to flags.mk 498 # add general dependency flags to flags.mk
472 echo "# general flags" >> "$TEMP_DIR/flags.mk" 499 echo "# general flags" >> "$TEMP_DIR/flags.mk"
473 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then 500 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
474 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 501 echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
551 fi 578 fi
552 #end 579 #end
553 if [ -n "$DISABLE_${feature.varName}" ]; then 580 if [ -n "$DISABLE_${feature.varName}" ]; then
554 unset ${feature.varName} 581 unset ${feature.varName}
555 fi 582 fi
583 fi
584 if [ -n "${D}${feature.varName}" ]; then
585 :
586 #foreach( $def in $feature.defines )
587 TEMP_CFLAGS="$TEMP_CFLAGS ${def.toFlags()}"
588 TEMP_CXXFLAGS="$TEMP_CXXFLAGS ${def.toFlags()}"
589 #end
590 #if( $feature.hasMake() )
591 cat >> "$TEMP_DIR/make.mk" << __EOF__
592 $feature.make
593 __EOF__
594 #end
595 else
596 :
597 #foreach( $def in $feature.disabled.defines )
598 TEMP_CFLAGS="$TEMP_CFLAGS ${def.toFlags()}"
599 TEMP_CXXFLAGS="$TEMP_CXXFLAGS ${def.toFlags()}"
600 #end
601 #if( $feature.disabled.hasMake() )
602 cat >> "$TEMP_DIR/make.mk" << __EOF__
603 $feature.disabled.make
604 __EOF__
605 #end
606 #foreach( $dependency in $feature.disabled.dependencies )
607 if dependency_error_$dependency ; then
608 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ${dependency} "
609 ERROR=1
610 fi
611 #end
556 fi 612 fi
557 #end 613 #end
558 614
559 #foreach( $opt in $target.options ) 615 #foreach( $opt in $target.options )
560 # Option: --${opt.argument} 616 # Option: --${opt.argument}
598 else 654 else
599 ERROR=1 655 ERROR=1
600 DEPENDENCIES_FAILED="option '${opt.argument}' $DEPENDENCIES_FAILED" 656 DEPENDENCIES_FAILED="option '${opt.argument}' $DEPENDENCIES_FAILED"
601 fi 657 fi
602 #end 658 #end
659 else
660 echo
661 echo "Invalid option value - usage:"
662 echo " --${opt.argument}=${opt.valuesString}"
663 abort_configure
603 fi 664 fi
604 fi 665 fi
605 #end 666 #end
606 667
607 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then 668 if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
608 echo "${target.cFlags} += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 669 echo "${target.cFlags} += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
609 fi 670 fi
610 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then 671 if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
611 echo "${target.cxxFlags} += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" 672 echo "${target.cxxFlags} += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
612 fi
613 if [ "$BUILD_TYPE" = "debug" ]; then
614 if [ -n "$lang_c" ]; then
615 echo '${target.cFlags} += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
616 fi
617 if [ -n "$lang_cpp" ]; then
618 echo '${target.cxxFlags} += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
619 fi
620 fi
621 if [ "$BUILD_TYPE" = "release" ]; then
622 if [ -n "$lang_c" ]; then
623 echo '${target.cFlags} += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk"
624 fi
625 if [ -n "$lang_cpp" ]; then
626 echo '${target.cxxFlags} += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk"
627 fi
628 fi 673 fi
629 if [ -n "${TEMP_LDFLAGS}" ]; then 674 if [ -n "${TEMP_LDFLAGS}" ]; then
630 echo "${target.ldFlags} += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" 675 echo "${target.ldFlags} += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk"
631 fi 676 fi
632 677
660 #end 705 #end
661 #end 706 #end
662 echo 707 echo
663 708
664 # generate the config.mk file 709 # generate the config.mk file
710 pwd=`pwd`
665 cat > "$TEMP_DIR/config.mk" << __EOF__ 711 cat > "$TEMP_DIR/config.mk" << __EOF__
666 # 712 #
667 # config.mk generated by configure 713 # config.mk generated by:
714 # pwd: $pwd
715 # $0 $@
668 # 716 #
669 717
670 __EOF__ 718 __EOF__
671 write_toolchain_defaults "$TEMP_DIR/toolchain.mk" 719 write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
672 cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk 720 cat "$TEMP_DIR/config.mk" "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
673 rm -Rf "$TEMP_DIR" 721 rm -Rf "$TEMP_DIR"

mercurial