#!/bin/sh # Configuration script # Copyright (C) 1988, 1990, 1991, 1992 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ # Please email any bugs, comments, and/or additions to this file to: # configure@cygnus.com # This file was written by K. Richard Pixley. # # Shell script to create proper links to machine-dependent files in # preparation for compilation. # # If configure succeeds, it leaves its status in config.status. # If configure fails after disturbing the status quo, # config.status is removed. # export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0 $argv; kill $$) remove=rm hard_link=ln symbolic_link='ln -s' #for Test #remove="echo rm" #hard_link="echo ln" #symbolic_link="echo ln -s" # clear some things potentially inherited from environment. Makefile=Makefile Makefile_in=Makefile.in arguments=$* configdirs= exec_prefix= exec_prefixoption= fatal= floating_point=default gas=default host_alias= host_makefile_frag= next_host= next_prefix= next_site= next_srcdir= next_target= next_tmpdir= norecursion= removing= prefix=/usr/local progname= program_prefix= program_prefix_option= silent= site= site_option= site_makefile_frag= srcdir= srctrigger= subdirs= target_alias= target_makefile_frag= undefinedargs= verbose= version="$Revision$" x11=default NO_EDIT="This file was generated automatically by configure. Do not edit." ## this is a little touchy and won't always work, but... ## ## if the argv[0] starts with a slash then it is an absolute name that can (and ## must) be used as is. ## ## otherwise, if argv[0] has no slash in it, we can assume that it is on the ## path. Since PATH might include "." we also add `pwd` to the end of PATH. ## PWD=`pwd` progname=$0 case "${progname}" in /*) ;; */*) ;; *) PATH=$PATH:${PWD} ; export PATH ;; esac for arg in $*; do # handle things that might have args following as separate words if [ -n "${next_prefix}" ] ; then prefix=${arg} ; prefixoption="-prefix=${prefix}" ; next_prefix= elif [ -n "${next_exec_prefix}" ] ; then exec_prefix=${arg} exec_prefixoption="-exec_prefix=${exec_prefix}" next_exec_prefix= elif [ -n "${next_site}" ] ; then site=${arg} ; site_option=-site=${site} ; next_site= # remove any possible trailing slash from srcdir. See note below. elif [ -n "${next_srcdir}" ] ; then srcdir=`echo ${arg} | sed -e 's:/$::'` ; next_srcdir= elif [ -n "${next_program_prefix}" ] ; then program_prefix=${arg} program_prefixoption="-program_prefix=${program_prefix}" next_program_prefix= elif [ -n "${next_target}" ] ; then next_target= case "${target_alias}" in "") target_alias="${arg}" ;; *) echo '***' Can only configure for one target at a time. 1>&2 fatal=yes ;; esac elif [ -n "${next_tmpdir}" ] ; then next_tmpdir= tmpdiroption="--tmpdir=${arg}" TMPDIR=${arg} else case ${arg} in -exec_prefix=* | --exec_prefix=* | --exec_prefi=* | --exec_pref=* | --exec_pre=* | --exec_pr=* | --exec_p=* | --exec_=* | --exec=* | --exe=* | --ex=* | --e=*) exec_prefix=`echo ${arg} | sed 's/^[-a-z_]*=//'` exec_prefixoption=${arg} ;; -exec_prefix | --exec_prefix | --exec_prefi | --exec_pref | --exec_pre | --exec_pr | --exec_p | --exec_ | --exec | --exe | --ex | --e) next_exec_prefix=yes ;; -gas | --g*) gas=yes ;; -help | --he*) fatal=true ;; -host=* | --host=* | --hos=* | --ho=*) case "${host_alias}" in "") host_alias="`echo ${arg} | sed 's/^[-a-z]*=//'`" ;; *) echo '***' Can only configure for one host at a time. 1>&2 fatal=yes ;; esac ;; -nfp | --nf*) floating_point=no ;; -norecursion | --no*) norecursion=true ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=*) prefix=`echo ${arg} | sed 's/^[-a-z]*=//'` prefixoption=${arg} ;; -prefix | --prefix | --prefi | --pref | --pre) next_prefix=yes ;; -rm | --rm) removing=${arg} ;; -program_prefix=* | --program_prefix=* | --program_prefi=* | --program_pref=* | --program_pre=* | --program_pr=* | --program_p=* | --program_=* | --program=* | --progra=* | --progr=* | --prog=* | --pro=*) program_prefix=`echo ${arg} | sed 's/^[-a-z]*=//'` program_prefixoption=${arg} ;; -program_prefix | --program_prefix | --program_prefi | --program_pref | --program_pre | --program_pr | --program_p | --program_ | --program | --progra | --progr | --prog | --pro) next_program_prefix=yes ;; -s | -silent | --silent | --silen | --sile | --sil) silent=true arguments=`echo ${arguments} | sed "s:${arg}::"` ;; -site=* | --site=* | --sit=* | --si=*) site_option=${arg} site=`echo ${arg} | sed 's/^[-a-z]*=//'` ;; -site | --site | --sit) next_site=yes ;; # remove trailing slashes. Otherwise, when the file name gets # bolted into an object file as debug info, it has two slashes in # it. Ordinarily this is ok, but emacs takes double slash to # mean "forget the first part". -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=`echo ${arg} | sed 's/^[-a-z]*=//' | sed -e 's:/$::'` ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) next_srcdir=yes ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=*) case "${target_alias}" in "") target_alias="`echo ${arg} | sed 's/^[-a-z]*=//'`" ;; *) echo '***' Can only configure for one target at a time. 1>&2 fatal=yes ;; esac ;; -target | --target | --targe | --targ | --tar | --ta) next_target=yes ;; -tmpdir=* | --tmpdir=* | --tmpdi=* | --tmpd=* | --tmp=* | --tm=*) tmpdiroption=${arg} TMPDIR=`echo ${arg} | sed 's/^[-a-z]*=//'` ;; -tmpdir | --tmpdir | --tmpdi | --tmpd | --tmp | --tm) next_tmpdir=yes ;; -v | -verbose | --v) verbose=${arg} ;; -version | -V | --version | --V) echo "This is Cygnus Configure version" `echo ${version} | sed 's/[ $:]//g'` exit 0 ;; -x | --x) ;; -* | --*) (echo ; echo "Unrecognized option: \"${arg}\"". ; echo) 1>&2 fatal=true ;; *) case "${undefs}" in "") undefs="${arg}" ;; *) echo '***' Can only configure for one host and one target at a time. 1>&2 fatal=yes ;; esac ;; esac fi done # process host and target case "${fatal}" in "") # # Complain if an arg is missing # if [ -z "${host_alias}" ] ; then # (echo ; # echo "configure: No HOST specified." ; # echo) 1>&2 # fatal=true # fi ### This is a bit twisted. ### * if all three are specified, this is an error. ### * if we have neither hosts, nor unadorned args, this is an error. ### * if no hosts are specified, then the unadorned args are hosts, but if ### there were none, this is an error. ### * if no targets are specified, then the unadorned args are targets, but if ### there were no unadorned args, then the hosts are also targets. if [ -n "${host_alias}" -a -n "${target_alias}" -a -n "${undefs}" ] ; then echo '***' Can only configure for one host and one target at a time. 1>&2 fatal=yes elif [ -z "${host_alias}" -a -z "${undefs}" ] ; then echo '***' You must tell me for which host you want to configure. 1>&2 fatal=yes else case "${host_alias}" in "") host_alias=${undefs} ;; *) ;; esac case "${target_alias}" in "") case "${undefs}" in "") target_alias=${host_alias} ;; *) target_alias=${undefs} ;; esac ;; *) ;; esac fi ;; *) ;; esac if [ -n "${fatal}" -o "${host_alias}" = "help" ] ; then (echo "Usage: configure HOST" ; echo ; echo "Options: [defaults in brackets]" ; echo " -exec_prefix=MYDIR configure for installation of host dependent files into MYDIR. [\"/usr/local\"]" ; echo " -gas configure the compilers for use with gas. [native as]" ; echo " -help print this message. [normal config]" ; echo " -lang=LANG configure to build LANG. [gcc]" ; echo " -nfp configure the compilers default to soft floating point. [hard float]" ; echo " -norecursion configure this directory only. [recurse]" ; echo " -prefix=MYDIR configure for installation of host dependent files into MYDIR. [\"/usr/local\"]" ; echo " -program_prefix=FOO install programs with FOO prepended to their names. [ \"\" ]" ; echo " -site=SITE configure with site specific makefile for SITE" ; echo " -srcdir=DIR find the sources in DIR. [\".\" or \"..\"]" ; echo " -target=TARGET configure for TARGET. [TARGET = HOST]" ; echo " -tmpdir=TMPDIR create temporary files in TMPDIR. [ TMPDIR = \"/tmp\" ]" ; echo ; echo "Where HOST and TARGET are something like \"vax\", \"sun3\", \"encore\", etc." ; ) 1>&2 if [ -r config.status ] ; then cat config.status fi exit 1 fi configsub=`echo ${progname} | sed 's/configure$/config.sub/'` # this is a hack. sun4 must always be a valid host alias or this will fail. if ${configsub} sun4 >/dev/null 2>&1 ; then true else echo '***' cannot find config.sub. 1>&2 exit 1 fi case "${srcdir}" in "") if [ -r configure.in ] ; then srcdir=. else if [ -r ${progname}.in ] ; then srcdir=`echo ${progname} | sed 's:/configure$::'` else echo '***' "Can't find configure.in. Try using -srcdir=some_dir" 1>&2 exit 1 fi fi ;; *) ;; esac ### warn about some conflicting configurations. case "${srcdir}" in ".") ;; *) if [ -f ${srcdir}/config.status ] ; then echo '***' Cannot configure here in \"${PWD}\" when \"${srcdir}\" is currently configured. 1>&2 exit 1 fi esac # default exec_prefix case "${exec_prefix}" in "") exec_prefix="\$(prefix)" ;; *) ;; esac ### break up ${srcdir}/configure.in. case "`grep '^# per\-host:' ${srcdir}/configure.in`" in "") echo '***' ${srcdir}/configure.in has no "per-host:" line. 1>&2 exit 1 ;; *) ;; esac case "`grep '^# per\-target:' ${srcdir}/configure.in`" in "") echo '***' ${srcdir}/configure.in has no "per-target:" line. 1>&2 exit 1 ;; *) ;; esac case "${TMPDIR}" in "") TMPDIR=/tmp ; export TMPDIR ;; *) ;; esac # keep this filename short for &%*%$*# 14 char file names tmpfile=${TMPDIR}/cONf$$ trap "rm -f ${tmpfile}.com ${tmpfile}.tgt ${tmpfile}.hst ${tmpfile}.pos" 0 # split ${srcdir}/configure.in into common, per-host, per-target, # and post-target parts. Post-target is optional. sed -e '/^# per\-host:/,$d' ${srcdir}/configure.in > ${tmpfile}.com sed -e '1,/^# per\-host:/d' -e '/^# per\-target:/,$d' ${srcdir}/configure.in > ${tmpfile}.hst if grep '^# post-target:' ${srcdir}/configure.in >/dev/null ; then sed -e '1,/^# per\-target:/d' -e '/^# post\-target:/,$d' ${srcdir}/configure.in > ${tmpfile}.tgt sed -e '1,/^# post\-target:/d' ${srcdir}/configure.in > ${tmpfile}.pos else sed -e '1,/^# per\-target:/d' ${srcdir}/configure.in > ${tmpfile}.tgt echo >${tmpfile}.pos fi ### do common part of configure.in . ${tmpfile}.com # some sanity checks on configure.in case "${srctrigger}" in "") echo '***' srctrigger not set in ${PWD}/configure.in. 1>&2 exit 1 ;; *) ;; esac result=`${configsub} ${host_alias}` host_cpu=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'` host_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` host_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` host=${host_cpu}-${host_vendor}-${host_os} . ${tmpfile}.hst result=`${configsub} ${target_alias}` target_cpu=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'` target_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` target_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` target=${target_cpu}-${target_vendor}-${target_os} . ${tmpfile}.tgt # Find the source files, if location was not specified. case "${srcdir}" in "") srcdirdefaulted=1 srcdir=. if [ ! -r ${srctrigger} ] ; then srcdir=.. fi ;; *) ;; esac if [ ! -r ${srcdir}/${srctrigger} ] ; then case "${srcdirdefaulted}" in "") echo '***' "${progname}: Can't find ${srcname} sources in ${PWD}/${srcdir}" 1>&2 ;; *) echo '***' "${progname}: Can't find ${srcname} sources in ${PWD}/. or ${PWD}/.." 1>&2 ;; esac echo '***' \(At least ${srctrigger} is missing.\) 1>&2 exit 1 fi for subdir in . ${subdirs} ; do # ${subdir} is relative path from . to the directory we're currently # configuring. # ${invsubdir} is inverse of ${subdir), *with* trailing /, if needed. invsubdir=`echo ${subdir}/ | sed -e 's|\./||g' -e 's|[^/]*/|../|g'` ### figure out what to do with srcdir case "${srcdir}" in ".") # no -srcdir option. We're building in place. makesrcdir=. ;; /*) # absolute path makesrcdir=`echo ${srcdir}/${subdir} | sed -e 's|/\.$||'` ;; *) # otherwise relative case "${subdir}" in .) makesrcdir=${srcdir} ;; *) makesrcdir=../${srcdir}/${subdir} ;; esac ;; esac if [ "${subdir}/" != "./" ] ; then Makefile=${subdir}/Makefile fi if [ ! -d ${subdir} ] ; then mkdir ${subdir} fi case "${removing}" in "") if [ -n "${verbose}" -o -z "${silent}" ] ; then echo Building in ${subdir} fi # FIXME Should this be done recursively ??? (Useful for e.g. gdbtest) # Set up the list of links to be made. # ${links} is the list of link names, and ${files} is the list of names to link to. # Make the links. configlinks="${links}" while [ -n "${files}" ] ; do # set file to car of files, files to cdr of files set ${files}; file=$1; shift; files=$* set ${links}; link=$1; shift; links=$* if [ ! -r ${srcdir}/${file} ] ; then echo '***' "${progname}: cannot create a link \"${link}\"," 1>&2 echo '***' "since the file \"${file}\" does not exist." 1>&2 exit 1 fi ${remove} -f ${link} rm -f config.status # Make a symlink if possible, otherwise try a hard link ${symbolic_link} ${srcdir}/${file} ${link} 2>/dev/null || ${hard_link} ${srcdir}/${file} ${link} if [ ! -r ${link} ] ; then echo '***' "${progname}: unable to link \"${link}\" to \"${srcdir}/${file}\"." 1>&2 exit 1 fi case "${verbose}" in "") ;; *) echo "Linked \"${link}\" to \"${srcdir}/${file}\"." ;; esac done # Create a .gdbinit file which runs the one in srcdir # and tells GDB to look there for source files. if [ -r ${srcdir}/${subdir}/.gdbinit ] ; then case ${srcdir} in .) ;; *) cat > ${subdir}/.gdbinit < ${subdir}/Makefile.tem else cp ${srcdir}/${subdir}/${Makefile_in} ${subdir}/Makefile.tem site_makefile_frag= fi ;; esac # working copy now in ${subdir}/Makefile.tem # Conditionalize the makefile for this host. case "${host_makefile_frag}" in "") mv ${subdir}/Makefile.tem ${Makefile} ;; *) if [ ! -f ${host_makefile_frag} ] ; then host_makefile_frag=${srcdir}/${host_makefile_frag} fi if [ -f ${host_makefile_frag} ] ; then sed -e "/^####/ r ${host_makefile_frag}" ${subdir}/Makefile.tem > ${Makefile} else echo '***' Expected host makefile fragment \"${host_makefile_frag}\" 1>&2 echo '***' is missing in ${PWD}. 1>&2 mv ${subdir}/Makefile.tem ${Makefile} fi esac # working copy now in ${Makefile} # Conditionalize the makefile for this target. case "${target_makefile_frag}" in "") mv ${Makefile} ${subdir}/Makefile.tem ;; *) target_makefile_frag=${srcdir}/${target_makefile_frag} if [ -f ${target_makefile_frag} ] ; then sed -e "/^####/ r ${target_makefile_frag}" ${Makefile} > ${subdir}/Makefile.tem else mv ${Makefile} ${subdir}/Makefile.tem target_makefile_frag= fi ;; esac # real copy now in ${subdir}/Makefile.tem # prepend warning about editting, and a bunch of variables. cat > ${Makefile} <>${Makefile} fi if [ "${host_makefile_frag}" != "" ] ; then echo host_makefile_frag = ${invsubdir}${host_makefile_frag} >>${Makefile} fi if [ "${site_makefile_frag}" != "" ] ; then echo site_makefile_frag = ${invsubdir}${site_makefile_frag} >>${Makefile} fi # fixme: this shouldn't be in configure. # Define macro CROSS_COMPILE in compilation if this is a cross-compiler. case "${host_alias}" in "${target_alias}") tooldir='$(libdir)' echo "ALL=all.internal" >> ${Makefile} ;; *) echo "CROSS=-DCROSS_COMPILE" >> ${Makefile} echo "ALL=all.cross" >> ${Makefile} case "${program_prefix}" in "") program_prefix=${target_alias}- ;; *) ;; esac tooldir="\$(libdir)/${target_alias}" ;; esac # reset prefix, exec_prefix, srcdir, SUBDIRS, NONSUBDIRS, # remove any form feeds. if [ -z "${subdirs}" ]; then sed -e "s:^SUBDIRS[ ]*=.*$:SUBDIRS = ${configdirs}:" \ -e "s:^NONSUBDIRS[ ]*=.*$:NONSUBDIRS = ${noconfigdirs}:" \ ${subdir}/Makefile.tem > ${subdir}/Makefile.tem2 mv ${subdir}/Makefile.tem2 ${subdir}/Makefile.tem fi sed -e "s:^prefix[ ]*=.*$:prefix = ${prefix}:" \ -e "s:^exec_prefix[ ]*=.*$:exec_prefix = ${exec_prefix}:" \ -e "s:^srcdir[ ]*=.*$:srcdir = ${makesrcdir}:" \ -e "s/ //" \ -e "s:^program_prefix[ ]*=.*$:program_prefix = ${program_prefix}:" \ -e "s:^tooldir[ ]*=.*$:tooldir = ${tooldir}:" \ ${subdir}/Makefile.tem >> ${Makefile} # final copy now in ${Makefile} rm ${subdir}/Makefile.tem if [ -n "${verbose}" -o -z "${silent}" ] ; then case "${host_makefile_frag}" in "") using= ;; *) using="and \"${host_makefile_frag}\"" ;; esac case "${target_makefile_frag}" in "") ;; *) using="${using} and \"${target_makefile_frag}\"" ;; esac case "${site_makefile_frag}" in "") ;; *) using="${using} and \"${site_makefile_frag}\"" ;; esac echo "Created \"${Makefile}\" in" ${PWD} `echo "${using}" | sed 's/and/using/'` fi . ${tmpfile}.pos # describe the chosen configuration in config.status. # Make that file a shellscript which will reestablish # the same configuration. Used in Makefiles to rebuild # Makefiles. case "${norecursion}" in "") arguments="${arguments} -norecursion" ;; *) ;; esac if [ ${subdir} = . ] ; then echo "#!/bin/sh # ${NO_EDIT} # ${PWD} was configured as follows: ${progname}" ${arguments} " # ${using}" > ${subdir}/config.status else echo "#!/bin/sh # ${NO_EDIT} # ${PWD}/${subdir} was configured as follows: cd ${invsubdir} ${progname}" ${arguments} " # ${using}" > ${subdir}/config.status fi chmod a+x ${subdir}/config.status ;; *) rm -f ${Makefile} ${subdir}/config.status ${links} ;; esac done # If there are subdirectories, then recur. if [ -z "${norecursion}" -a -n "${configdirs}" ] ; then for configdir in ${configdirs} ; do case "${verbose}" in "") ;; *) echo Configuring ${configdir}... ;; esac if [ -d ${srcdir}/${configdir} ] ; then case "${srcdir}" in ".") ;; *) if [ ! -d ./${configdir} ] ; then mkdir ./${configdir} fi ;; esac POPDIR=${PWD} cd ${configdir} ### figure out what to do with srcdir case "${srcdir}" in ".") newsrcdir=${srcdir} ;; # no -srcdir option. We're building in place. /*) # absolute path newsrcdir=${srcdir}/${configdir} srcdiroption="-srcdir=${newsrcdir}" ;; *) # otherwise relative newsrcdir=../${srcdir}/${configdir} srcdiroption="-srcdir=${newsrcdir}" ;; esac ### check for guested configure, otherwise fix possibly relative progname if [ -f ${newsrcdir}/configure ] ; then recprog=${newsrcdir}/configure else case "${progname}" in /*) recprog=${progname} ;; *) recprog=../${progname} ;; esac fi ### The recursion line is here. if ${recprog} -s ${host_alias} -target=${target_alias} \ ${verbose} ${prefixoption} ${tmpdiroption} ${exec_prefixoption} \ ${srcdiroption} ${program_prefixoption} ${site_option} ${removing} ; then true else exit 1 fi cd ${POPDIR} else case "${verbose}" in "") ;; *) echo Warning: source directory \"${srcdir}/${configdir}\" is missing. ;; esac fi done fi ### clean up. # trap cmd above handles this now: #rm -f ${tmpfile}.com ${tmpfile}.tgt ${tmpfile}.hst ${tmpfile}.pos exit 0 # # Local Variables: # fill-column: 131 # End: # # end of configure