5 VERSION=$( cat .version )
8 PREFIX_DEFAULT=/usr/local
19 # Simply print the error message, and exit. Obvious, he?
21 echo "${myname}: ${@}"
25 # Given an option string and the following argument,
26 # echoes the value of the option.
27 # If --var=val => echoes val and returns 0, meaning second arg was not consumed
28 # If --var val => echoes val and returns non null, meaning second arg was used
42 # The set_xxx functions will set the corresponding configuration variable
43 # They return 0 if second arg was not consumed, and non-zero if it was consumed.
45 PREFIX="$( get_optval "$1" "$2" )"
49 BINDIR="$( get_optval "$1" "$2" )"
53 LIBDIR="$( get_optval "$1" "$2" )"
57 DOCDIR="$( get_optval "$1" "$2" )"
61 MANDIR="$( get_optval "$1" "$2" )"
64 local var_name="${1%%=*}"
65 var_name="${var_name#--with-}"
66 eval ${var_name}="\$( get_optval "$1" "$2" )"
69 # var_list is a list of variables, each one holding a path to a
70 # tool, either detected by ./configure, or specified by the user.
73 # This function adds a variable name to the above list of variable names.
74 # $1: the name of the variable to add to the list
76 var_list="${var_list} ${1}"
79 # A function to test for required tools/headers/libraries
80 # $*: [prog|inc|lib]=<name[ name...]>
81 # the name(s) of tool(s) to test for
83 # eg: prog=bash prog="curl wget"
85 # the name of the variable to test and set
87 # eg: var=bash if ${bash} is set and non-null, use that,
88 # else check for bash and set bash=$(which bash)
90 # for each 'prog', test if $(prog --version) matches 'regexp'
92 # eg: ver='^GNU bash, version [34]\.'
93 # $*: err=<error_message>
94 # the error message to print if tool is missing
95 # optional, defaults to: '${prog}: none found'
96 # eg: err="'bash' 3.x or above was not found"
106 for item in "${@}"; do
108 prog=*|inc=*|lib=*|var=*|ver=*|err=*)
109 eval ${item%%=*}="'${item#*=}'"
111 *) do_error "has_or_abort: incorrect parameters: '$@'";;
115 case "${prog}:${inc}:${lib}" in
117 for item in ${prog}; do
118 printf "Checking for '${item}'... "
119 if [ -n "${var}" ]; then
120 eval val="\${${var}}"
121 if [ -n "${val}" ]; then
122 printf "${val} (cached)\n"
126 where="$( which "${item}" 2>/dev/null )"
127 if [ -z "${where}" ]; then
130 elif [ -n "${ver}" ]; then
131 version=$( ${where} --version 2>&1 )
132 str=$( echo "${version}" |grep -E "${ver}" |head -n 1 )
133 if [ -z "${str}" ]; then
144 for item in ${inc}; do
145 printf "Checking for '${item}'... "
146 if printf "#include \"${item}\"" |gcc -x c -c - -o /dev/null >/dev/null 2>&1; then
155 for item in ${lib}; do
156 printf "Checking for '${item}'... "
157 where="$( gcc -print-file-name="${item}" )"
158 if [ "${where}" != "${item}" ]; then
159 where="$( readlink -e "${where}" )"
167 if [ -z "${status}" ]; then
168 printf "\n${err:-${prog}${inc}${lib}: none found}\n\n"
169 printf "Either you are missing entirely the needed tool,\n"
170 printf "or the version you have is too old.\n"
171 if [ -n "${var}" ]; then
172 printf "You can give the path to this tool using: --with-${var}=PATH\n"
174 # FORCE can be set in the environment
175 [ -z "${FORCE}" ] && do_error "Bailing out..."
178 printf "<* FORCE in action: *>\n"
179 printf "<* Continuing despite missing pre-requisite *>\n"
180 printf "<* Prepare for breakage *>\n"
185 if [ -n "${var}" ]; then
186 eval ${var}='"'"${where}"'"'
187 add_to_var_list "${var}"
195 \`configure' configures crosstool-NG-${VERSION} to adapt to many kind of systems.
197 USAGE: ./configure [OPTION]...
199 Defaults for the options are specified in brackets.
202 -h, --help display this help and exit
203 --force force configure to continue, even in case
204 some pre-requisites are missing
206 Installation directories:
207 --prefix=PREFIX install files in PREFIX [${PREFIX_DEFAULT}]
208 --local don't install, and use current directory
210 By default, \`make install' will install all the files in
211 \`${PREFIX_DEFAULT}/bin', \`${PREFIX_DEFAULT}/lib' etc. You can specify
212 an installation prefix other than \`${PREFIX_DEFAULT}' using \`--prefix',
213 for instance \`--prefix=\${HOME}'.
215 For better control, use the options below.
217 Fine tuning of the installation directories:
218 --bindir=DIR user executables [PREFIX/bin]
219 --libdir=DIR object code libraries [PREFIX/lib]
220 --docdir=DIR info documentation [PREFIX/share/doc]
221 --mandir=DIR man documentation [PREFIX/share/man]
224 --with-install=PATH Specify the full PATH to GNU install
225 --with-make=PATH Specify the full PATH to GNU make >= 3.80
226 --with-grep=PATH Specify the full PATH to GNU grep
227 --with-sed=PATH Specify the full PATH to GNU sed
228 --with-bash=PATH Specify the full PATH to bash >= 3.0
232 #---------------------------------------------------------------------
235 while [ $# -ne 0 ]; do
237 --local) LOCAL_set="y"; shift;;
238 --prefix*) set_prefix "$1" "$2" && shift || shift 2;;
239 --bindir*) set_bindir "$1" "$2" && shift || shift 2;;
240 --libdir*) set_libdir "$1" "$2" && shift || shift 2;;
241 --docdir*) set_docdir "$1" "$2" && shift || shift 2;;
242 --mandir*) set_mandir "$1" "$2" && shift || shift 2;;
243 --with-*) set_tool "$1" "$2" && shift || shift 2;;
244 --force) FORCE=1; shift;;
245 --help|-h) do_help; exit 0;;
246 *) echo "Unrecognised option: '${1}'"; do_help; exit 1;;
251 [ -z "${PREFIX}" ] && set_prefix "" "${PREFIX_DEFAULT}"
253 # Special case when installing locally
254 if [ "${LOCAL_set}" = "y" ]; then
255 set_prefix "" "$( pwd )"
256 set_bindir "" "$( pwd )"
257 set_libdir "" "$( pwd )"
258 set_docdir "" "$( pwd )/docs"
259 set_mandir "" "$( pwd )/docs"
262 #---------------------------------------------------------------------
263 # Some sanity checks, now
265 # We check for grep and sed manually, because they are used in has_or_abort
266 printf "Checking for 'grep'... "
267 if [ -n "${grep}" ]; then
268 echo "${grep} (cached)"
270 grep="$( which grep 2>/dev/null )"
271 if [ -z "${grep}" ]; then
275 printf "Checking whether '${grep}' supports -E... "
276 if echo 'foo' |"${grep}" -E 'foo' >/dev/null 2>&1; then
284 if [ -z "${grep}" ]; then
285 echo "Either you are missing entirely the needed tool,"
286 echo "or the version you have is too old."
287 echo "You can give the path to this tool using: --with-grep=PATH"
288 do_error "Bailing out..."
292 printf "Checking for 'sed'... "
293 if [ -n "${sed}" ]; then
294 echo "${sed} (cached)"
296 sed="$( which sed 2>/dev/null )"
297 if [ -z "${sed}" ]; then
301 printf "Checking whether '${sed}' supports -i and -e... "
302 touch .ct-ng.sed.test
303 if "${sed}" -r -i -e 's/foo/bar/' .ct-ng.sed.test >/dev/null 2>&1; then
309 rm -f .ct-ng.sed.test
312 if [ -z "${sed}" ]; then
313 echo "Either you are missing entirely the needed tool,"
314 echo "or the version you have is too old."
315 echo "You can give the path to this tool using: --with-sed=PATH"
316 do_error "Bailing out..."
320 # The regular list of tools we can now easily check for
321 has_or_abort prog=bash \
323 ver='^GNU bash, version [34]\.' \
324 err="'bash' 3.x or above was not found"
325 has_or_abort prog=cut
326 has_or_abort prog=install var=install
327 has_or_abort prog=make \
329 ver='^GNU Make (3.[89][[:digit:]]|[4-9])' \
330 err="GNU 'make' 3.80 or above was not found"
331 has_or_abort prog=gcc
332 has_or_abort prog=awk
333 has_or_abort prog=bison
334 has_or_abort prog=flex
335 has_or_abort prog=makeinfo
336 has_or_abort prog=automake \
337 ver='\(GNU automake\) (1\.[[:digit:]]{2,}\.|[2-9][[:digit:]]*\.)' \
338 err="'automake' 1.10 or above was not found"
339 has_or_abort prog=libtool \
340 ver='\(GNU libtool.*\) (2[[:digit:]]*\.|1\.6[[:digit:]]*\.|1\.5\.[2-9][[:digit:]]+)' \
341 err="'libtool' 1.5.26 or above was not found"
342 has_or_abort prog="curl wget"
343 has_or_abort prog=patch
344 has_or_abort prog=tar
345 has_or_abort prog=gzip
346 has_or_abort prog=bzip2
347 has_or_abort prog=lzma
348 has_or_abort prog=readlink
350 has_or_abort inc="ncurses/ncurses.h ncurses/curses.h ncurses.h curses.h" \
351 err="'ncurses' headers files were not found"
353 has_or_abort lib="$( echo lib{ncursesw,ncurses,curses}.{so,a,dylib} )" \
354 err="'ncurses' library was not found"
356 #---------------------------------------------------------------------
357 # Compute the version string
359 # If this version is a svn snapshot, try to get the revision number
360 # If we can't get the revision number, use date
363 has_or_abort prog=svnversion
364 printf "Computing version string... "
365 REVISION="$( LC_ALL=C svnversion )"
366 case "${REVISION}" in
368 VERSION="${VERSION}_unknown@$( date +%Y%m%d.%H%M%S )";;
370 URL="$( LC_ALL=C svn info 2>/dev/null \
374 ROOT="$( LC_ALL=C svn info 2>/dev/null \
375 |"${grep}" '^Repository Root: ' \
378 VERSION="${VERSION}${URL#${ROOT}}@${REVISION}"
381 # Arrange to have no / in the directory name, no need to create an
382 # arbitrarily deep directory structure
383 VERSION="$( echo "${VERSION}" |"${sed}" -r -e 's|/+|_|g;' )"
388 #---------------------------------------------------------------------
389 # Compute and check install paths
391 # Now we have the version string, we can build up the paths
392 [ -z "${BINDIR_set}" ] && BINDIR="${PREFIX}/bin"
393 [ -z "${LIBDIR_set}" ] && LIBDIR="${PREFIX}/lib/ct-ng-${VERSION}"
394 [ -z "${DOCDIR_set}" ] && DOCDIR="${PREFIX}/share/doc/ct-ng-${VERSION}"
395 [ -z "${MANDIR_set}" ] && MANDIR="${PREFIX}/share/man/man1"
397 # Check that install PATHs are absolute
398 for p in BIN LIB DOC MAN; do
400 eval v='"${'"${var}"'}"'
403 *) do_error "'${var}' is not an absolute path: '${v}'"
407 #---------------------------------------------------------------------
410 printf "Building up Makefile... "
411 var_sed="$( for var_name in ${var_list}; do
412 eval echo 's,@@${var_name}@@,${'"${var_name}"'},g'
415 "${sed}" -r -e "s,@@BINDIR@@,${BINDIR},g
416 s,@@LIBDIR@@,${LIBDIR},g
417 s,@@DOCDIR@@,${DOCDIR},g
418 s,@@MANDIR@@,${MANDIR},g
419 s,@@VERSION@@,${VERSION},g
422 s,@@LOCAL@@,${LOCAL_set},g" Makefile.in >Makefile
427 crosstool-NG configured as follows:
437 if [ "${LOCAL_set}" != "y" ]; then
438 printf " make install\n"