flac: Saner EOF handling
[cmus.git] / scripts / configure.sh
blob0284d6d3d75a6c6d4957501e2d3c141fd617cc5f
1 #!/bin/sh
3 # Copyright 2005 Timo Hirvonen
5 # This file is licensed under the GPLv2.
7 . scripts/utils.sh || exit 1
8 . scripts/checks.sh || exit 1
10 # Usage: parse_command_line "$@"
11 # USAGE string must be defined in configure (used for --help)
12 parse_command_line()
14 while test $# -gt 0
16 case $1 in
17 --help)
18 show_usage
20 -f)
21 shift
22 test $# -eq 0 && die "-f requires an argument"
23 . "$1"
25 -*)
26 die "unrecognized option \`$1'"
28 *=*)
29 _var=`echo "$1" | sed "s/=.*//"`
30 _val=`echo "$1" | sed "s/${_var}=//"`
31 set_var "$_var" "$_val"
34 die "unrecognized argument \`$1'"
36 esac
37 shift
38 done
41 # check function [variable]
43 # Example:
44 # check check_cc
45 # check check_vorbis CONFIG_VORBIS
46 check()
48 argc check $# 1 2
49 if test $# -eq 1
50 then
51 $1 || die "configure failed."
52 return
55 # optional feature
56 case `get_var $2` in
60 $1 || die "configure failed."
62 a|'')
63 if $1
64 then
65 set_var $2 y
66 else
67 set_var $2 n
71 die "invalid value for $2. 'y', 'n', 'a' or '' expected"
73 esac
76 # Set and register variable to be added to config.mk
78 # @name name of the variable
79 # @value value of the variable
80 makefile_var()
82 argc makefile_var $# 2 2
83 set_var $1 "$2"
84 makefile_vars $1
87 # Register variables to be added to config.mk
88 makefile_vars()
90 makefile_variables="$makefile_variables $*"
93 # generate config.mk
94 generate_config_mk()
96 CFLAGS="$CFLAGS $EXTRA_CFLAGS"
97 CXXFLAGS="$CXXFLAGS $EXTRA_CXXFLAGS"
98 if test -z "$GINSTALL"
99 then
100 GINSTALL=`path_find ginstall`
101 test "$GINSTALL" || GINSTALL=install
103 # $PWD is useless!
104 topdir=`pwd`
105 makefile_vars GINSTALL topdir
107 __tmp=`tmp_file config.mk`
108 for __i in $makefile_variables
110 echo "$__i = `get_var $__i`"
111 done > $__tmp
112 update_file $__tmp config.mk
115 # -----------------------------------------------------------------------------
116 # Config header generation
118 # Simple interface
120 # Guesses variable types:
121 # y or n -> bool
122 # [0-9]+ -> int
123 # anything else -> str
125 # Example:
126 # CONFIG_FOO=y # bool
127 # VERSION=2.0.1 # string
128 # DEBUG=1 # int
129 # config_header config.h CONFIG_FOO VERSION DEBUG
130 config_header()
132 argc config_header $# 2
133 config_header_begin "$1"
134 shift
135 while test $# -gt 0
137 __var=`get_var $1`
138 case "$__var" in
139 [yn])
140 config_bool $1
143 if test "$__var" && test "$__var" = "`echo $__var | sed 's/[^0-9]//g'`"
144 then
145 config_int $1
146 else
147 config_str $1
150 esac
151 shift
152 done
153 config_header_end
156 # Low-level interface
158 # Example:
159 # config_header_begin config.h
160 # config_str PACKAGE VERSION
161 # config_bool CONFIG_ALSA
162 # config_header_end
164 config_header_begin()
166 argc config_header_begin $# 1 1
167 config_header_file="$1"
168 config_header_tmp=`tmp_file config_header`
170 __def=`echo $config_header_file | to_upper | sed 's/[-\.\/]/_/g'`
171 cat <<EOF > "$config_header_tmp"
172 #ifndef $__def
173 #define $__def
178 config_str()
180 while test $# -gt 0
182 echo "#define $1 \"`get_var $1`\"" >> "$config_header_tmp"
183 shift
184 done
187 config_int()
189 while test $# -gt 0
191 echo "#define $1 `get_var $1`" >> "$config_header_tmp"
192 shift
193 done
196 config_bool()
198 while test $# -gt 0
200 case "`get_var $1`" in
202 echo "/* #define $1 */" >> "$config_header_tmp"
205 echo "#define $1 1" >> "$config_header_tmp"
208 die "bool '$1' has invalid value '`get_var $1`'"
210 esac
211 shift
212 done
215 config_header_end()
217 argc config_header_end $# 0 0
218 echo "" >> "$config_header_tmp"
219 echo "#endif" >> "$config_header_tmp"
220 mkdir -p `dirname "$config_header_file"`
221 update_file "$config_header_tmp" "$config_header_file"