old-cross-binutils/configure
K. Richard Pixley bcdbe02f82 In configure{.in} {host|target}_makefile_frag should name a file
relative to srcdir.  I think it now does.  configure has been
corrected.  configure.texi has been clarified.
1992-02-08 08:57:08 +00:00

722 lines
19 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Configuration script
# Copyright (C) 1988, 1990, 1991, 1992 Free Software Foundation, Inc.
#This file is part of GNU.
# 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
#
# 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.
#
# NOTE: This script contains support for a Cygnus experimental feature, called
# +subdirs, which is currently, tentatively, de-supported.
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=$*
commontargets=
configdirs=
datadir=
datadiroption=
defaulttargets=
fatal=
floating_point=default
gas=default
host_makefile_frag=
hosts=
next_host=
next_prefix=
next_site=
next_srcdir=
next_target=
next_tmpdir=
norecursion=
prefix=/usr/local
progname=
recurring=
removing=
site_makefile_frag=
srcdir=
srctrigger=
target=
target_makefile_frag=
targets=
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 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.
##
## otherwise we prepend `pwd` to $0 and hope that will give us an absolute
## path.
##
PWD=`pwd`
if echo $0 | grep '^/' > /dev/null ; then
progname=$0
elif echo $0 | grep '/' > /dev/null ; then
progname=${PWD}/$0
else
progname=$0
PATH=$PATH:${PWD} ; export PATH
fi
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_datadir}" ] ; then datadir=${arg} ; datadiroption="-datadir=${datadir}" ; next_datadir=
elif [ -n "${next_site}" ] ; then site=${arg} ; next_site=
elif [ -n "${next_srcdir}" ] ; then srcdir=${arg} ; next_srcdir=
elif [ -n "${next_target}" ] ; then
next_target=
case "${targets}" in
"")
newtargets="${targets} ${arg}"
targets="${newtargets}"
;;
*)
echo '***' Can only configure for one target at a time.
fatal=yes
;;
esac
elif [ -n "${next_tmpdir}" ] ; then
next_tmpdir=
tmpdiroption="--tmpdir=${arg}"
TMPDIR=${arg}
else
case ${arg} in
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* | --da=* | --d=*)
datadir=`echo ${arg} | sed 's/^[-a-z]*=//'`
datadiroption=${arg}
;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da | --d)
next_datadir=yes
;;
-gas | --g*)
gas=yes
;;
-help | --he*)
fatal=true
;;
-host=* | --host=* | --hos=* | --ho=*)
case "${hosts}" in
"")
newhosts="${hosts} `echo ${arg} | sed 's/^[-a-z]*=//'`"
hosts="${newhosts}"
;;
*)
echo '***' Can only configure for one host at a time.
fatal=yes
;;
esac
;;
-nfp | --nf*)
floating_point=no
;;
-norecursion | --no*)
norecursion=true
;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix=`echo ${arg} | sed 's/^[-a-z]*=//'`
prefixoption=${arg}
;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
next_prefix=yes
;;
-recurring | --recurring | --recurrin | --recurri | --recurr | --recur | --recu | --rec | --re)
recurring=true
arguments=`echo ${arguments} | sed "s:${arg}::"`
;;
-rm | --rm)
removing=${arg}
;;
-site=* | --site=* | --sit=* | --si=*)
site=`echo ${arg} | sed 's/^[-a-z]*=//'`
;;
-site | --site | --sit | --si)
next_site=yes
;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir=`echo ${arg} | sed 's/^[-a-z]*=//'`
;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
next_srcdir=yes
;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=*)
case "${targets}" in
"")
newtargets="${targets} `echo ${arg} | sed 's/^[-a-z]*=//'`"
targets="${newtargets}"
;;
*)
echo '***' Can only configure for one target at a time.
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
"")
newundefs="${undefs} ${arg}"
undefs=${newundefs}
;;
*)
echo '***' Can only configure for one host and one target at a time.
fatal=yes
;;
esac
;;
esac
fi
done
# process host and target
case "${fatal}" in
"")
# # Complain if an arg is missing
# if [ -z "${hosts}" ] ; 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 "${hosts}" -a -n "${targets}" -a -n "${undefs}" ] ; then
echo '***' Can only configure for one host and one target at a time.
fatal=yes
elif [ -z "${hosts}" -a -z "${undefs}" ] ; then
echo '***' You must tell me for which host you want to configure.
fatal=yes
else
case "${hosts}" in
"") hosts=${undefs} ;;
*) ;;
esac
case "${targets}" in
"")
case "${undefs}" in
"") targets=${hosts} ;;
*) targets=${undefs} ;;
esac
;;
*) ;;
esac
fi
;;
*) ;;
esac
if [ -n "${fatal}" -o "${hosts}" = "help" ] ; then
(echo "Usage: configure HOST" ;
echo ;
echo "Options: [defaults in brackets]" ;
echo " -datadir=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 " -rm remove this configuration. [build a configuration]" ;
echo " -site configure with site specific makefile" ;
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/'`
if ${configsub} `echo ${hosts} | sed -e 's/ .*//'` >/dev/null 2>&1 ; then
true
else
echo '***' cannot find config.sub.
exit 1
fi
case "${srcdir}" in
"")
if [ -r configure.in ] ; then
srcdir=.
else
echo '***' "Can't find configure.in. Try using -srcdir=some_dir"
exit 1
fi
;;
*) ;;
esac
# default datadir
case "${datadir}" in
"") datadir="$(prefix)/lib" ;;
*) ;;
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.
exit 1
;;
*) ;;
esac
for host in ${hosts} ; do
# Default other arg
if [ -z "${targets}" -o -n "${defaulttargets}" ] ; then
targets=${host}
defaulttargets=true
fi
host_alias=${host}
result=`${configsub} ${host}`
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
for target in ${targets} ; do
target_alias=${target}
result=`${configsub} ${target}`
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
case "${host_alias}" in
"${target_alias}") subdirname=H-${host_alias} ;;
*) subdirname=X-${host_alias}-${target_alias} ;;
esac
case "${namesubdir}" in
"") ;;
*) subdirname=${namesubdir} ;;
esac
case "${removing}" in
"")
# 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
# 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.
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}/.gdbinit ] ; then
case ${srcdir} in
.)
;;
*) cat > .gdbinit <<EOF
# ${NO_EDIT} > .gdbinit
dir .
dir ${srcdir}
source ${srcdir}/.gdbinit
EOF
;;
esac
fi
# Install a makefile, and make it set VPATH
# if necessary so that the sources are found.
# Also change its value of srcdir.
# NOTE: Makefile generation constitutes the majority of the time in configure. Hence, this section has
# been somewhat optimized and is perhaps a bit twisty.
# code is order so as to try to sed the smallest input files we know.
# the three makefile fragments MUST end up in the resulting Makefile in this order: target, host, and site.
# so do these separately because I don't trust the order of sed -e expressions.
# Conditionalize for this site from "Makefile.in" (or whatever it's called) into Makefile.tem
case "${site}" in
"") cp ${srcdir}/${Makefile_in} Makefile.tem ;;
*)
site_makefile_frag=${srcdir}/config/ms-${site}
if [ -f ${site_makefile_frag} ] ; then
sed -e "/^####/ r ${site_makefile_frag}" ${srcdir}/${Makefile_in} \
>> Makefile.tem
else
cp ${srcdir}/${Makefile_in} Makefile.tem
site_makefile_frag=
fi
;;
esac
# working copy now in Makefile.tem
# Conditionalize the makefile for this host.
case "${host_makefile_frag}" in
"") mv Makefile.tem ${Makefile} ;;
*)
host_makefile_frag=${srcdir}/${host_makefile_frag}
if [ -f ${host_makefile_frag} ] ; then
sed -e "/^####/ r ${host_makefile_frag}" Makefile.tem > ${Makefile}
else
echo '***' Expected host makefile fragment \"${host_makefile_frag}\" 1>&2
echo '***' is missing in ${PWD}. 1>&2
mv Makefile.tem ${Makefile}
fi
esac
# working copy now in ${Makefile}
# Conditionalize the makefile for this target.
case "${target_makefile_frag}" in
"") mv ${Makefile} Makefile.tem ;;
*)
target_makefile_frag=${srcdir}/${target_makefile_frag}
if [ -f ${target_makefile_frag} ] ; then
sed -e "/^####/ r ${target_makefile_frag}" ${Makefile} >> Makefile.tem
else
mv ${Makefile} Makefile.tem
target_makefile_frag=
fi
;;
esac
# real copy now in Makefile.tem
# prepend warning about editting, and a bunch of variables.
# fixme-someday: remove the subdir/unsubdir lines.
cat > ${Makefile} <<EOF
# ${NO_EDIT}
host_alias = ${host_alias}
host_cpu = ${host_cpu}
host_vendor = ${host_vendor}
host_os = ${host_os}
target_alias = ${target_alias}
target_cpu = ${target_cpu}
target_vendor = ${target_vendor}
target_os = ${target_os}
target_makefile_frag = ${target_makefile_frag}
host_makefile_frag = ${host_makefile_frag}
site_makefile_frag = ${site_makefile_frag}
VPATH = ${srcdir}
subdir =
unsubdir = .
EOF
# fixme: this shouldn't be in configure.
# Define macro CROSS_COMPILE in compilation if this is a cross-compiler.
case "${host}" in
"${target}") echo "ALL=all.internal" >> ${Makefile} ;;
*)
echo "CROSS=-DCROSS_COMPILE" >> ${Makefile}
echo "ALL=all.cross" >> ${Makefile}
;;
esac
# reset prefix, datadir, srcdir, SUBDIRS, NONSUBDIRS, remove any form
# feeds.
sed -e "s:^prefix[ ]*=.*$:prefix = ${prefix}:" \
-e "s:^datadir[ ]*=.*$:datadir = ${datadir}:" \
-e "s:^srcdir[ ]*=.*$:srcdir = ${srcdir}:" \
-e "s:^SUBDIRS[ ]*=.*$:SUBDIRS = ${configdirs}:" \
-e "s:^NONSUBDIRS[ ]*=.*$:NONSUBDIRS = ${noconfigdirs}:" \
-e "s/ //" Makefile.tem >> ${Makefile}
# final copy now in ${Makefile}
rm Makefile.tem
if [ -n "${verbose}" -o -z "${recurring}" ] ; 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
echo "#!/bin/sh
# ${NO_EDIT}
# ${PWD} was configured as follows:
${progname}" ${arguments} "
# ${using}" > config.status
chmod a+x config.status
;;
*) rm -f ${Makefile} config.status ${links} ;;
esac
# 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 & guest configure
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
### The recursion line is here.
if [ -f ${newsrcdir}/configure ] ; then
recprog=${newsrcdir}/configure
else
recprog=${progname}
fi
if ${recprog} -recurring ${host_alias} -target=${target_alias} \
${verbose} ${subdirs} ${removing} ${prefixoption} \
${tmpdiroption} ${namesubdiroption} ${datadiroption} \
${srcdiroption} ; then
true
else
exit 1
fi
cd ${POPDIR}
else
case "${verbose}" in
"") ;;
*) echo Warning: source directory \"${srcdir}/${configdir}\" is missing. ;;
esac
fi
done
fi
done # for each target
done # for each host
### 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