binutils-gdb/configure
K. Richard Pixley 5420feaa8e * Die when sub-configure's do.
* get the makefile building message line correct.
* set -e
1991-10-10 04:57:23 +00:00

685 lines
18 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 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. */
# $Id$
# 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.
#
set -e
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
ansi=
arguments=$*
commontargets=
configdirs=
defaulttargets=
destdir=
fatal=
hostsubdir=
norecursion=
objdir=
objdiroption=
progname=
recurring=
removing=
srcdir=
srctrigger=
target=
targets=
targetsubdir=
verbose=
for arg in $*;
do
case ${arg} in
-ansi | +a*)
ansi=true
clib=clib
;;
-destdir=* | +destdir=* | +destdi=* | +destd=* | +dest=* | +des=* | +de=* | +d=*)
destdir=`echo ${arg} | sed 's/[+-]d[a-z]*=//'`
;;
-languages=* | +languages=* | +language=* | +languag=* \
| +langua=* | +langu=* | +lang=* | +lan=* | +la=* \
| +l=*)
languages="${languages} `echo ${arg} | sed 's/[+-]l[a-z]*=//'`"
;;
-gas | +g*)
gas=yes
;;
-help | +h*)
fatal=true
;;
-nfp | +nf*)
nfp=yes
;;
-norecursion | +no*)
norecursion=true
;;
-objdir=* | +objdir=* | +objdi=* | +objd=* | +obj=* | +ob=* | +o=*)
objdiroption=${arg}
objdir=`echo ${arg} | sed 's/[+-]o[a-z]*=//'`
;;
-recurring | +recurring | +recurrin | +recurri | +recurr | +recur | +recu | +rec | +re)
recurring=true
;;
-rm | +rm)
removing=${arg}
;;
-site=* | +site=* | +sit=* | +si=*)
site=`echo ${arg} | sed 's/[+-]s[a-z]*=//'`
;;
# -srcdir=* | +srcdir=* | +srcdi=* | +srcd=* | +src=* | +sr=*)
# srcdir=`echo ${arg} | sed 's/[+-]s[a-z]*=//'`
# ;;
-subdirs | +su*)
subdirs=${arg}
;;
-target=* | +target=* | +targe=* | +targ=* | +tar=* | +ta=*)
if [ -n "${targets}" ] ; then
subdirs="+subdirs"
fi
newtargets="${targets} `echo ${arg} | sed 's/[+-]t[a-z]*=//'`"
targets="${newtargets}"
;;
-tmpdir=* | +tmpdir=* | +tmpdi=* | +tmpd=* | +tmp=* | +tm=*)
tmpdiroption=${arg}
TMPDIR=`echo ${arg} | sed 's/[+-]t[a-z]*=//'`
;;
-v | -verbose | +v*)
verbose=${arg}
;;
-* | +*)
(echo ;
echo "Unrecognized option: \"${arg}\"". ;
echo) 1>&2
fatal=true
;;
*)
if [ -n "${hosts}" ] ; then
subdirs="+subdirs"
fi
newhosts="${hosts} ${arg}"
hosts=${newhosts}
;;
esac
done
if [ -n "${verbose}" ] ; then
echo $0 $*
fi
## 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.
##
if (echo $0 | grep '^/' > /dev/null) ; then
progname=$0
else
if (echo $0 | grep '/' > /dev/null) ; then
progname=`pwd`/$0
else
progname=$0
PATH=$PATH:`pwd` ; export PATH
fi
fi
configsub=`echo ${progname} | sed 's/configure\$/config.sub/'`
if [ ! -f ${configsub} ] ; then
echo '***' cannot find config.sub.
echo 1
fi
# process host and target only if not removing.
if [ -z "${removing}" -a -z "${fatal}" ] ; then
# Complain if an arg is missing
if [ -z "${hosts}" ] ; then
(echo ;
echo "configure: No HOST specified." ;
echo) 1>&2
fatal=true
fi
fi
if [ -n "${fatal}" -o "${hosts}" = "help" ] ; then
(echo "Usage: configure HOST" ;
echo ;
echo "Options: [defaults in brackets]" ;
echo " +ansi configure w/ANSI library. [no ansi lib]" ;
echo " +destdir=MYDIR configure for installation 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 " +objdir=ODIR configure in a parallel tree rooted in ODIR. [rooted in \".\"]" ;
echo " +rm remove this configuration. [build a configuration]" ;
echo " +site configure with site specific makefile" ;
# This is correctly aligned in the output, even though it isn't here.
echo " +subdirs configure in subdirectories. [in source directories]" ;
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." ;
echo "Asking for more than one \"+target\" implies \"+subdirs\". Any other" ;
echo "options given will apply to all targets.") 1>&2
if [ -r config.status ] ; then
cat config.status
fi
exit 1
fi
### break up configure.in.
if [ -r configure.in ] ; then
if [ -z "`grep '^# per\-host:' configure.in`" ] ; then
echo '***' `pwd`/configure.in has no "per-host:" line. 1>&2
exit 1
fi
if [ -z "`grep '^# per\-target:' configure.in`" ] ; then
echo '***' `pwd`/configure.in has no "per-target:" line. 1>&2
exit 1
fi
if [ -z "${TMPDIR}" ] ; then
TMPDIR=/tmp ; export TMPDIR
fi
# split configure.in into common, per-host, per-target,
# and post-target parts. Post-target is optional.
sed -e '/^# per\-host:/,$d' configure.in > ${TMPDIR}/configure.$$.com
sed -e '1,/^# per\-host:/d' -e '/^# per\-target:/,$d' configure.in > ${TMPDIR}/configure.$$.hst
if grep -s '^# post-target:' configure.in ; then
sed -e '1,/^# per\-target:/d' -e '/^# post\-target:/,$d' configure.in > ${TMPDIR}/configure.$$.tgt
sed -e '1,/^# post\-target:/d' configure.in > ${TMPDIR}/configure.$$.pos
else
sed -e '1,/^# per\-target:/d' configure.in > ${TMPDIR}/configure.$$.tgt
echo >${TMPDIR}/configure.$$.pos
fi
else
echo '***' No configure.in in `pwd`
exit 1
fi
### do common part of configure.in
. ${TMPDIR}/configure.$$.com
# some sanity checks on configure.in
if [ -z "${srctrigger}" ] ; then
echo '***' srctrigger not set in `pwd`/configure.in.
exit 1
fi
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}
host_makefile_frag=config/hmake-${host}
. ${TMPDIR}/configure.$$.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}
target_makefile_frag=config/tmake-${target}
. ${TMPDIR}/configure.$$.tgt
# Temporarily, we support only direct subdir builds.
hostsubdir=H-${host_alias}
targetsubdir=T-${target_alias}
if [ -n "${removing}" ] ; then
if [ -n "${objdir}" ] ; then
echo '***' +rm not supported for +objdir. Just \"rm -rf ${objdir}\" by hand.
exit 1
fi
if [ -n "${subdirs}" ] ; then
if [ -d "${hostsubdir}" ] ; then
rm -rf ${hostsubdir}/${targetsubdir}
if [ -z "`(ls ${hostsubdir}) 2>&1 | grep T- | grep -v T-independent`" ] ; then
rm -rf ${hostsubdir}
fi
else
echo Warning: no `pwd`/${hostsubdir} to remove.
fi
else
rm -f ${Makefile} config.status ${links}
fi
else
if [ -n "${objdir}" ]; then
srcdir=`pwd`
cd ${objdir}
fi
if [ -n "${subdirs}" ] ; then
# check for existing status before allowing forced subdirs.
if [ -f ${Makefile} ] ; then
echo '***' "${Makefile} already exists in source directory. `pwd` not configured." 1>&2
exit 1
fi
if [ ! -d ${hostsubdir} ] ; then mkdir ${hostsubdir} ; fi
cd ${hostsubdir}
if [ ! -d ${targetsubdir} ] ; then
if [ -z "${commontargets}" ] ; then
mkdir ${targetsubdir}
else
if [ ! -d T-independent ] ; then
mkdir T-independent
fi
${symbolic_link} T-independent ${targetsubdir}
fi # if target independent
fi # if no target dir yet
cd ${targetsubdir}
if [ -z "${srcdir}" ] ; then
srcdir=../..
fi
else
# if not subdir builds, then make sure none exist.
if [ -n "`(ls .) 2>&1 | (grep H- ; true)`" ] ; then
echo '***' "Configured subdirs exist. `pwd` not configured." 1>&2
exit 1
else
true
fi
fi
# Find the source files, if location was not specified.
if [ -z "${srcdir}" ] ; then
srcdirdefaulted=1
srcdir=.
if [ -n "${srctrigger}" -a ! -r ${srctrigger} ] ; then
srcdir=..
fi
fi
if [ -n "${srctrigger}" -a ! -r ${srcdir}/${srctrigger} ] ; then
if [ -z "${srcdirdefaulted}" ] ; then
echo '***' "${progname}: Can't find ${srcname} sources in `pwd`/${srcdir}" 1>&2
else
echo '***' "${progname}: Can't find ${srcname} sources in `pwd`/. or `pwd`/.." 1>&2
fi
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
if [ -n "${verbose}" ] ; then
echo "Linked \"${link}\" to \"${srcdir}/${file}\"."
fi
done
# Create a .gdbinit file which runs the one in srcdir
# and tells GDB to look there for source files.
case ${srcdir} in
.)
;;
*)
echo "dir ." > .gdbinit
echo "dir ${srcdir}" >> .gdbinit
echo "source ${srcdir}/.gdbinit" >> .gdbinit
;;
esac
# Install a makefile, and make it set VPATH
# if necessary so that the sources are found.
# Also change its value of srcdir.
# FIXME-someday: This business of always writing to .tem and mv back
# is so that I don't screw things up while developing. Once this
# template is stable, these should be optimized. xoxorich.
# Define macro CROSS_COMPILE in compilation if this is a cross-compiler.
if [ "${host}" != "${target}" ] ; then
echo "CROSS=-DCROSS_COMPILE" > ${Makefile}
echo "ALL=start.encap" >> ${Makefile}
else
echo "ALL=all.internal" > ${Makefile}
fi
# set target, host, VPATH
echo "host_alias = ${host_alias}" >> ${Makefile}
echo "host_cpu = ${host_cpu}" >> ${Makefile}
echo "host_vendor = ${host_vendor}" >> ${Makefile}
echo "host_os = ${host_os}" >> ${Makefile}
echo "target_alias = ${target_alias}" >> ${Makefile}
echo "target_cpu = ${target_cpu}" >> ${Makefile}
echo "target_vendor = ${target_vendor}" >> ${Makefile}
echo "target_os = ${target_os}" >> ${Makefile}
if [ -n "${subdirs}" ] ; then
(echo "subdir = /${hostsubdir}/${targetsubdir}" ;
echo "unsubdir = ../..") >> ${Makefile}
else
(echo "subdir =" ;
echo "unsubdir = .") >> ${Makefile}
fi
# echo "workdir = `pwd`" >> ${Makefile}
echo "VPATH = ${srcdir}" >> ${Makefile}
# add "Makefile.in" (or whatever it's called)
cat ${srcdir}/${Makefile_in} >> ${Makefile}
# Conditionalize the makefile for this host.
if [ -f ${srcdir}/${host_makefile_frag} ] ; then
(echo "host_makefile_frag = ${srcdir}/${host_makefile_frag}" ;
sed -e "/^####/ r ${srcdir}/${host_makefile_frag}" ${Makefile}) > Makefile.tem
mv Makefile.tem ${Makefile}
fi
# Conditionalize the makefile for this target.
if [ -f ${srcdir}/${target_makefile_frag} ] ; then
(echo "target_makefile_frag = ${srcdir}/${target_makefile_frag}" ;
sed -e "/^####/ r ${srcdir}/${target_makefile_frag}" ${Makefile}) > Makefile.tem
mv Makefile.tem ${Makefile}
fi
# Conditionalize the makefile for this site.
if [ -n "${site}" ] ; then
site_makefile_frag=smake-${site}
if [ -f ${srcdir}/${site_makefile_frag} ] ; then
(echo "site_makefile_frag = ${srcdir}/${site_makefile_frag}" ;
sed -e "/^####/ r ${srcdir}/${site_makefile_frag}" ${Makefile}) > Makefile.tem
mv Makefile.tem ${Makefile}
fi
fi
# set srcdir
sed "s@^srcdir = \.@srcdir = ${srcdir}@" ${Makefile} > Makefile.tem
mv Makefile.tem ${Makefile}
# set destdir
if [ -n "${destdir}" ] ; then
sed "s:^destdir =.*$:destdir = ${destdir}:" ${Makefile} > Makefile.tem
mv Makefile.tem ${Makefile}
fi
# reset SUBDIRS
sed "s:^SUBDIRS =.*$:SUBDIRS = ${configdirs}:" ${Makefile} > Makefile.tem
mv Makefile.tem ${Makefile}
# reset NONSUBDIRS
sed "s:^NONSUBDIRS =.*$:NONSUBDIRS = ${noconfigdirs}:" ${Makefile} > Makefile.tem
mv Makefile.tem ${Makefile}
# remove any form feeds.
sed -e "s/ //" ${Makefile} > Makefile.tem
mv Makefile.tem ${Makefile}
using=
if [ -f ${srcdir}/${host_makefile_frag} ] ; then
using=" using \"${host_makefile_frag}\""
fi
if [ -f ${srcdir}/${target_makefile_frag} ] ; then
if [ -z "${using}" ] ; then
andusing=" using \"${target_makefile_frag}\""
else
andusing="${using} and \"${target_makefile_frag}\""
fi
else
andusing=${using}
fi
if [ -f ${srcdir}/${site_makefile_frag} ] ; then
if [ -z "${andusing}" ] ; then
andandusing=" using \"${site_makefile_frag}\""
else
andandusing="${andusing} and \"${site_makefile_frag}\""
fi
else
andandusing=${andusing}
fi
if [ -n "${verbose}" -o -z "${recurring}" ] ; then
echo "Created \"${Makefile}\"" in `pwd`${andandusing}.
fi
if [ -f ${TMPDIR}/configure.$$.pos ] ; then
. ${TMPDIR}/configure.$$.pos
fi
# describe the chosen configuration in config.status.
# Make that file a shellscript which will reestablish
# the same configuration. Used in Makefiles to rebuild
# Makefiles.
echo "#!/bin/sh
# `pwd` was configured as follows:
(cd ${srcdir} ; ${progname}" ${arguments} `if [ -z "${norecursion}" ] ; then echo +norecursion ; else true ; fi` ")" > config.status
chmod a+x config.status
originaldir=`pwd`
cd ${srcdir}
fi
# If there are subdirectories, then recurse.
if [ -z "${norecursion}" -a -n "${configdirs}" ] ; then
for configdir in ${configdirs} ; do
if [ -n "${verbose}" ] ; then
echo Configuring ${configdir}...
fi
if [ -d ${configdir} ] ; then
if [ -n "${objdir}" ] ; then
if [ ! -d ${objdir}/${configdir} ] ; then
mkdir ${objdir}/${configdir}
fi
fi
POPDIR=`pwd`
cd ${configdir}
${progname} +recurring ${host_alias} +target=${target_alias} \
${verbose} ${subdirs} ${removing} +destdir=${destdir} \
`if [ -n "${objdir}" ] ; then echo +objdir=${objdir}/${configdir} ; fi` \
${tmpdiroption}
cd ${POPDIR}
# (cd ${configdir} ;
# if (${progname} +recurring ${host_alias} +target=${target_alias} \
# ${verbose} ${subdirs} ${removing} +destdir=${destdir} \
# `if [ -n "${objdir}" ] ; then echo +objdir=${objdir}/${configdir} ; fi` \
# ${tmpdiroption}) ; then true ; else exit 1 ; fi) \
# | sed 's/^/ /'
else
if [ -n "${verbose}" ] ; then
echo Warning: directory \"${configdir}\" is missing.
fi
fi
done
fi
done # for each target
# Now build a Makefile for this host.
if [ -n "${subdirs}" -a ! -n "${removing}" ] ; then
push=`pwd`
if [ -n "${objdir}" ] ; then
cd ${objdir}
fi
cd ${hostsubdir}
cat > GNUmakefile << E!O!F
# Makefile generated by configure for host ${host_alias}.
ALL := $(shell ls -d T-*)
%:
$(foreach subdir,$(ALL),$(MAKE) -C $(subdir) \$@ &&) true
all:
E!O!F
cd ${push}
fi
done # for each host
### clean up.
rm -f ${TMPDIR}/configure.$$.com ${TMPDIR}/configure.$$.tgt ${TMPDIR}/configure.$$.hst ${TMPDIR}/configure.$$.pos
exit 0
#
#
# $Log$
# Revision 1.55 1991/10/10 04:57:23 rich
# * Die when sub-configure's do.
# * get the makefile building message line correct.
# * set -e
#
# Revision 1.54 1991/10/10 01:04:42 rich
# Backed out the "/bin/sh config.sub" change. Fails when config.sub was
# on PATH.
#
# Revision 1.53 1991/10/10 00:38:08 rich
# Call config.sub as "/bin/sh config.sub" instead of directly. This
# protects us from the case where config.sub isn't executable.
#
# Revision 1.52 1991/10/09 00:48:26 rich
# Another patch from jim.
#
# Revision 1.51 1991/10/08 06:07:58 wilson
# Fix bug in smake- file code.
#
# Revision 1.50 1991/10/04 23:49:37 rich
# Per's patch for my config.sub botch.
#
# Revision 1.49 1991/10/04 22:52:09 rich
# Use john's heuristic for finding ourselves. kinda like hare krishna.
#
# Revision 1.48 1991/10/02 13:17:28 rich
# take out the set -e for now
#
# Revision 1.47 1991/10/02 10:02:23 rich
# * temporary files in TMPDIR
# * +objdir
#
# Revision 1.46 1991/10/02 06:29:53 rich
# Added +site=foo option for naming site specific Makefile fragments.
#
# Revision 1.45 1991/10/02 06:15:13 rich
# Removed +f option. Used to stand for +forcesubdirs which is now
# called +subdirs.
#
# Revision 1.44 1991/10/02 06:02:35 rich
# Added rcs log line.
#
#
#
#
# Local Variables:
# fill-column: 131
# End:
#
# end of configure