1*2159047fSniklas#!/bin/sh 2*2159047fSniklas 3*2159047fSniklas### WARNING: this file contains embedded tabs. Do not run untabify on this file. 4*2159047fSniklas 5*2159047fSniklas# Configuration script 6*2159047fSniklas# Copyright (C) 1988, 90, 91, 92, 93, 94 Free Software Foundation, Inc. 7*2159047fSniklas 8*2159047fSniklas# This program is free software; you can redistribute it and/or modify 9*2159047fSniklas# it under the terms of the GNU General Public License as published by 10*2159047fSniklas# the Free Software Foundation; either version 2 of the License, or 11*2159047fSniklas# (at your option) any later version. 12*2159047fSniklas# 13*2159047fSniklas# This program is distributed in the hope that it will be useful, 14*2159047fSniklas# but WITHOUT ANY WARRANTY; without even the implied warranty of 15*2159047fSniklas# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*2159047fSniklas# GNU General Public License for more details. 17*2159047fSniklas# 18*2159047fSniklas# You should have received a copy of the GNU General Public License 19*2159047fSniklas# along with this program; if not, write to the Free Software 20*2159047fSniklas# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 21*2159047fSniklas 22*2159047fSniklas# This file was originally written by K. Richard Pixley. 23*2159047fSniklas 24*2159047fSniklas# 25*2159047fSniklas# Shell script to create proper links to machine-dependent files in 26*2159047fSniklas# preparation for compilation. 27*2159047fSniklas# 28*2159047fSniklas# If configure succeeds, it leaves its status in config.status. 29*2159047fSniklas# If configure fails after disturbing the status quo, 30*2159047fSniklas# config.status is removed. 31*2159047fSniklas# 32*2159047fSniklas 33*2159047fSniklasexport PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0 $argv; kill $$) 34*2159047fSniklas 35*2159047fSniklasremove=rm 36*2159047fSniklashard_link=ln 37*2159047fSniklassymbolic_link='ln -s' 38*2159047fSniklas 39*2159047fSniklas#for Test 40*2159047fSniklas#remove="echo rm" 41*2159047fSniklas#hard_link="echo ln" 42*2159047fSniklas#symbolic_link="echo ln -s" 43*2159047fSniklas 44*2159047fSniklas# clear some things potentially inherited from environment. 45*2159047fSniklas 46*2159047fSniklasMakefile=Makefile 47*2159047fSniklasMakefile_in=Makefile.in 48*2159047fSniklasarguments=$* 49*2159047fSniklasbuild_alias= 50*2159047fSniklascache_file= 51*2159047fSniklascache_file_option= 52*2159047fSniklasconfigdirs= 53*2159047fSniklasexec_prefix= 54*2159047fSniklasexec_prefixoption= 55*2159047fSniklasfatal= 56*2159047fSniklasfloating_point=default 57*2159047fSniklasgas=default 58*2159047fSniklashost_alias=NOHOST 59*2159047fSniklashost_makefile_frag= 60*2159047fSniklasmoveifchange= 61*2159047fSniklasnorecursion= 62*2159047fSniklasother_options= 63*2159047fSniklaspackage_makefile_frag= 64*2159047fSniklasprefix=/usr/local 65*2159047fSniklasprogname= 66*2159047fSniklasprogram_prefix= 67*2159047fSniklasprogram_prefixoption= 68*2159047fSniklasprogram_suffix= 69*2159047fSniklasprogram_suffixoption= 70*2159047fSniklasprogram_transform_name= 71*2159047fSniklasprogram_transform_nameoption= 72*2159047fSniklasredirect=">/dev/null" 73*2159047fSniklasremoving= 74*2159047fSniklassite= 75*2159047fSniklassite_makefile_frag= 76*2159047fSniklassite_option= 77*2159047fSniklassrcdir= 78*2159047fSniklassrctrigger= 79*2159047fSniklassubdirs= 80*2159047fSniklastarget_alias=NOTARGET 81*2159047fSniklastarget_makefile_frag= 82*2159047fSniklasundefs=NOUNDEFS 83*2159047fSniklasversion="$Revision: 1.1.1.1 $" 84*2159047fSniklasx11=default 85*2159047fSniklas 86*2159047fSniklas### we might need to use some other shell than /bin/sh for running subshells 87*2159047fSniklas# 88*2159047fSniklasconfig_shell=${CONFIG_SHELL-/bin/sh} 89*2159047fSniklas 90*2159047fSniklasNO_EDIT="This file was generated automatically by configure. Do not edit." 91*2159047fSniklas 92*2159047fSniklas## this is a little touchy and won't always work, but... 93*2159047fSniklas## 94*2159047fSniklas## if the argv[0] starts with a slash then it is an absolute name that can (and 95*2159047fSniklas## must) be used as is. 96*2159047fSniklas## 97*2159047fSniklas## otherwise, if argv[0] has no slash in it, we can assume that it is on the 98*2159047fSniklas## path. Since PATH might include "." we also add `pwd` to the end of PATH. 99*2159047fSniklas## 100*2159047fSniklas 101*2159047fSniklasprogname=$0 102*2159047fSniklas# if PWD already has a value, it is probably wrong. 103*2159047fSniklasif [ -n "$PWD" ]; then PWD=`pwd`; fi 104*2159047fSniklas 105*2159047fSniklascase "${progname}" in 106*2159047fSniklas/*) ;; 107*2159047fSniklas*/*) ;; 108*2159047fSniklas*) 109*2159047fSniklas PATH=$PATH:${PWD=`pwd`} ; export PATH 110*2159047fSniklas ;; 111*2159047fSniklasesac 112*2159047fSniklas 113*2159047fSniklas# Loop over all args 114*2159047fSniklas 115*2159047fSniklaswhile : 116*2159047fSniklasdo 117*2159047fSniklas 118*2159047fSniklas# Break out if there are no more args 119*2159047fSniklas case $# in 120*2159047fSniklas 0) 121*2159047fSniklas break 122*2159047fSniklas ;; 123*2159047fSniklas esac 124*2159047fSniklas 125*2159047fSniklas# Get the first arg, and shuffle 126*2159047fSniklas option=$1 127*2159047fSniklas shift 128*2159047fSniklas 129*2159047fSniklas# Make all options have two hyphens 130*2159047fSniklas orig_option=$option # Save original for error messages 131*2159047fSniklas case $option in 132*2159047fSniklas --*) ;; 133*2159047fSniklas -*) option=-$option ;; 134*2159047fSniklas esac 135*2159047fSniklas 136*2159047fSniklas# Split out the argument for options that take them 137*2159047fSniklas case $option in 138*2159047fSniklas --*=*) 139*2159047fSniklas optarg=`echo $option | sed -e 's/^[^=]*=//'` 140*2159047fSniklas ;; 141*2159047fSniklas# These options have mandatory values. Since we didn't find an = sign, 142*2159047fSniklas# the value must be in the next argument 143*2159047fSniklas --b* | --cache* | --ex* | --ho* | --pre* | --program-p* | --program-s* | --program-t* | --si* | --sr* | --ta* | --tm* | --x-*) 144*2159047fSniklas optarg=$1 145*2159047fSniklas shift 146*2159047fSniklas ;; 147*2159047fSniklas esac 148*2159047fSniklas 149*2159047fSniklas# Now, process the options 150*2159047fSniklas case $option in 151*2159047fSniklas 152*2159047fSniklas --build* | --b*) 153*2159047fSniklas case "$build_alias" in 154*2159047fSniklas "") build_alias=$optarg ;; 155*2159047fSniklas *) echo '***' Can only configure for one build machine at a time. 1>&2 156*2159047fSniklas fatal=yes 157*2159047fSniklas ;; 158*2159047fSniklas esac 159*2159047fSniklas ;; 160*2159047fSniklas --cache*) 161*2159047fSniklas cache_file=$optarg 162*2159047fSniklas ;; 163*2159047fSniklas --disable-*) 164*2159047fSniklas enableopt=`echo ${option} | sed 's:^--disable-:enable_:;s:-:_:g'` 165*2159047fSniklas eval $enableopt=no 166*2159047fSniklas disableoptions="$disableoptions $option" 167*2159047fSniklas ;; 168*2159047fSniklas --enable-*) 169*2159047fSniklas case "$option" in 170*2159047fSniklas *=*) ;; 171*2159047fSniklas *) optarg=yes ;; 172*2159047fSniklas esac 173*2159047fSniklas 174*2159047fSniklas enableopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'` 175*2159047fSniklas eval $enableopt="$optarg" 176*2159047fSniklas enableoptions="$enableoptions $option" 177*2159047fSniklas ;; 178*2159047fSniklas --exec-prefix* | --ex*) 179*2159047fSniklas exec_prefix=$optarg 180*2159047fSniklas exec_prefixoption="--exec-prefix=$optarg" 181*2159047fSniklas ;; 182*2159047fSniklas --gas | --g*) 183*2159047fSniklas gas=yes 184*2159047fSniklas ;; 185*2159047fSniklas --help | --he*) 186*2159047fSniklas fatal=yes 187*2159047fSniklas ;; 188*2159047fSniklas --host* | --ho*) 189*2159047fSniklas case $host_alias in 190*2159047fSniklas NOHOST) host_alias=$optarg ;; 191*2159047fSniklas *) echo '***' Can only configure for one host at a time. 1>&2 192*2159047fSniklas fatal=yes 193*2159047fSniklas ;; 194*2159047fSniklas esac 195*2159047fSniklas ;; 196*2159047fSniklas --nfp | --nf*) 197*2159047fSniklas floating_point=no 198*2159047fSniklas ;; 199*2159047fSniklas --norecursion | --no*) 200*2159047fSniklas norecursion=yes 201*2159047fSniklas ;; 202*2159047fSniklas --prefix* | --pre*) 203*2159047fSniklas prefix=$optarg 204*2159047fSniklas prefixoption="--prefix=$optarg" 205*2159047fSniklas ;; 206*2159047fSniklas --program-prefix* | --program-p*) 207*2159047fSniklas program_prefix=$optarg 208*2159047fSniklas program_prefixoption="--program-prefix=$optarg" 209*2159047fSniklas ;; 210*2159047fSniklas --program-suffix* | --program-s*) 211*2159047fSniklas program_suffix=$optarg 212*2159047fSniklas program_suffixoption="--program-suffix=$optarg" 213*2159047fSniklas ;; 214*2159047fSniklas --program-transform-name* | --program-t*) 215*2159047fSniklas # Double any backslashes or dollar signs in the argument 216*2159047fSniklas program_transform_name="${program_transform_name} -e `echo ${optarg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`" 217*2159047fSniklas program_transform_nameoption="${program_transform_nameoption} --program-transform-name='$optarg'" 218*2159047fSniklas ;; 219*2159047fSniklas --rm) 220*2159047fSniklas removing=--rm 221*2159047fSniklas ;; 222*2159047fSniklas --silent | --sil* | --quiet | --q*) 223*2159047fSniklas redirect=">/dev/null" 224*2159047fSniklas verbose=--silent 225*2159047fSniklas ;; 226*2159047fSniklas --site* | --sit*) 227*2159047fSniklas site=$optarg 228*2159047fSniklas site_option="--site=$optarg" 229*2159047fSniklas ;; 230*2159047fSniklas --srcdir*/ | --sr*/) 231*2159047fSniklas # Remove trailing slashes. Otherwise, when the file name gets 232*2159047fSniklas # bolted into an object file as debug info, it has two slashes 233*2159047fSniklas # in it. Ordinarily this is ok, but emacs takes double slash 234*2159047fSniklas # to mean "forget the first part". 235*2159047fSniklas srcdir=`echo $optarg | sed -e 's:/$::'` 236*2159047fSniklas ;; 237*2159047fSniklas --srcdir* | --sr*) 238*2159047fSniklas srcdir=$optarg 239*2159047fSniklas ;; 240*2159047fSniklas --target* | --ta*) 241*2159047fSniklas case $target_alias in 242*2159047fSniklas NOTARGET) target_alias=$optarg ;; 243*2159047fSniklas *) echo '***' Can only configure for one target at a time. 1>&2 244*2159047fSniklas fatal=yes 245*2159047fSniklas ;; 246*2159047fSniklas esac 247*2159047fSniklas ;; 248*2159047fSniklas --tmpdir* | --tm*) 249*2159047fSniklas TMPDIR=$optarg 250*2159047fSniklas tmpdiroption="--tmpdir=$optarg" 251*2159047fSniklas ;; 252*2159047fSniklas --verbose | --v | --verb*) 253*2159047fSniklas redirect= 254*2159047fSniklas verbose=--verbose 255*2159047fSniklas ;; 256*2159047fSniklas --version | --V | --vers*) 257*2159047fSniklas echo "This is Cygnus Configure version" `echo ${version} | sed 's/[ $:]//g'` 258*2159047fSniklas exit 0 259*2159047fSniklas ;; 260*2159047fSniklas --with-*) 261*2159047fSniklas case "$option" in 262*2159047fSniklas *=*) ;; 263*2159047fSniklas *) optarg=yes ;; 264*2159047fSniklas esac 265*2159047fSniklas 266*2159047fSniklas withopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'` 267*2159047fSniklas eval $withopt="$optarg" 268*2159047fSniklas withoptions="$withoptions $option" 269*2159047fSniklas ;; 270*2159047fSniklas --without-*) 271*2159047fSniklas withopt=`echo ${option} | sed 's:^--::;s:out::;s:-:_:g'` 272*2159047fSniklas eval $withopt=no 273*2159047fSniklas withoutoptions="$withoutoptions $option" 274*2159047fSniklas ;; 275*2159047fSniklas --x) with_x=yes 276*2159047fSniklas withoptions="$withoptions --with-x" 277*2159047fSniklas ;; 278*2159047fSniklas --x-i* | --x-l*) other_options="$other_options $orig_option" 279*2159047fSniklas ;; 280*2159047fSniklas --*) 281*2159047fSniklas echo "configure: Unrecognized option: \"$orig_option\"; use --help for usage." >&2 282*2159047fSniklas exit 1 283*2159047fSniklas ;; 284*2159047fSniklas *) 285*2159047fSniklas case $undefs in 286*2159047fSniklas NOUNDEFS) undefs=$option ;; 287*2159047fSniklas *) echo '***' Can only configure for one host and one target at a time. 1>&2 288*2159047fSniklas fatal=yes 289*2159047fSniklas ;; 290*2159047fSniklas esac 291*2159047fSniklas ;; 292*2159047fSniklas esac 293*2159047fSniklasdone 294*2159047fSniklas 295*2159047fSniklas# process host and target 296*2159047fSniklas 297*2159047fSniklas# Do some error checking and defaulting for the host and target type. 298*2159047fSniklas# The inputs are: 299*2159047fSniklas# configure --host=HOST --target=TARGET UNDEFS 300*2159047fSniklas# 301*2159047fSniklas# The rules are: 302*2159047fSniklas# 1. You aren't allowed to specify --host, --target, and undefs at the 303*2159047fSniklas# same time. 304*2159047fSniklas# 2. Host defaults to undefs. 305*2159047fSniklas# 3. If undefs is not specified, then host defaults to the current host, 306*2159047fSniklas# as determined by config.guess. 307*2159047fSniklas# 4. Target defaults to undefs. 308*2159047fSniklas# 5. If undefs is not specified, then target defaults to host. 309*2159047fSniklas 310*2159047fSniklascase "${fatal}" in 311*2159047fSniklas"") 312*2159047fSniklas # Make sure that host, target & undefs aren't all specified at the 313*2159047fSniklas # same time. 314*2159047fSniklas case $host_alias---$target_alias---$undefs in 315*2159047fSniklas NOHOST---*---* | *---NOTARGET---* | *---*---NOUNDEFS) 316*2159047fSniklas ;; 317*2159047fSniklas *) echo '***' Can only configure for one host and one target at a time. 1>&2 318*2159047fSniklas fatal=yes 319*2159047fSniklas break 2 320*2159047fSniklas ;; 321*2159047fSniklas esac 322*2159047fSniklas 323*2159047fSniklas # Now, do defaulting for host. 324*2159047fSniklas case $host_alias in 325*2159047fSniklas NOHOST) 326*2159047fSniklas case $undefs in 327*2159047fSniklas NOUNDEFS) 328*2159047fSniklas # Neither --host option nor undefs were present. 329*2159047fSniklas # Call config.guess. 330*2159047fSniklas guesssys=`echo ${progname} | sed 's/configure$/config.guess/'` 331*2159047fSniklas if host_alias=`${guesssys}` 332*2159047fSniklas then 333*2159047fSniklas # If the string we are going to use for 334*2159047fSniklas # the target is a prefix of the string 335*2159047fSniklas # we just guessed for the host, then 336*2159047fSniklas # assume we are running native, and force 337*2159047fSniklas # the same string for both target and host. 338*2159047fSniklas case $target_alias in 339*2159047fSniklas NOTARGET) ;; 340*2159047fSniklas *) 341*2159047fSniklas if expr $host_alias : $target_alias >/dev/null 342*2159047fSniklas then 343*2159047fSniklas host_alias=$target_alias 344*2159047fSniklas fi 345*2159047fSniklas ;; 346*2159047fSniklas esac 347*2159047fSniklas echo "Configuring for a ${host_alias} host." 1>&2 348*2159047fSniklas arguments="--host=$host_alias $arguments" 349*2159047fSniklas else 350*2159047fSniklas echo 'Config.guess failed to determine the host type. You need to specify one.' 1>&2 351*2159047fSniklas fatal=yes 352*2159047fSniklas fi 353*2159047fSniklas ;; 354*2159047fSniklas *) 355*2159047fSniklas host_alias=$undefs 356*2159047fSniklas ;; 357*2159047fSniklas esac 358*2159047fSniklas esac 359*2159047fSniklas 360*2159047fSniklas # Do defaulting for target. If --target option isn't present, default 361*2159047fSniklas # to undefs. If undefs isn't present, default to host. 362*2159047fSniklas case $target_alias in 363*2159047fSniklas NOTARGET) 364*2159047fSniklas case $undefs in 365*2159047fSniklas NOUNDEFS) 366*2159047fSniklas target_alias=$host_alias 367*2159047fSniklas ;; 368*2159047fSniklas *) 369*2159047fSniklas target_alias=$undefs 370*2159047fSniklas ;; 371*2159047fSniklas esac 372*2159047fSniklas esac 373*2159047fSniklas ;; 374*2159047fSniklas*) ;; 375*2159047fSniklasesac 376*2159047fSniklas 377*2159047fSniklasif [ -n "${fatal}" -o "${host_alias}" = "help" ] ; then 378*2159047fSniklas exec 1>&2 379*2159047fSniklas echo Usage: configure [OPTIONS] [HOST] 380*2159047fSniklas echo 381*2159047fSniklas echo Options: [defaults in brackets] 382*2159047fSniklas echo ' --prefix=MYDIR install into MYDIR [/usr/local]' 383*2159047fSniklas echo ' --exec-prefix=MYDIR install host-dependent files into MYDIR [/usr/local]' 384*2159047fSniklas echo ' --help print this message [normal config]' 385*2159047fSniklas echo ' --build=BUILD configure for building on BUILD [BUILD=HOST]' 386*2159047fSniklas echo ' --host=HOST configure for HOST [determined via config.guess]' 387*2159047fSniklas echo ' --norecursion configure this directory only [recurse]' 388*2159047fSniklas echo ' --program-prefix=FOO prepend FOO to installed program names [""]' 389*2159047fSniklas echo ' --program-suffix=FOO append FOO to installed program names [""]' 390*2159047fSniklas echo ' --program-transform-name=P transform installed names by sed pattern P [""]' 391*2159047fSniklas echo ' --site=SITE configure with site-specific makefile for SITE' 392*2159047fSniklas echo ' --srcdir=DIR find the sources in DIR [. or ..]' 393*2159047fSniklas echo ' --target=TARGET configure for TARGET [TARGET=HOST]' 394*2159047fSniklas echo ' --tmpdir=TMPDIR create temporary files in TMPDIR [/tmp]' 395*2159047fSniklas echo ' --nfp configure for software floating point [hard float]' 396*2159047fSniklas echo ' --with-FOO, --with-FOO=BAR package FOO is available (parameter BAR)' 397*2159047fSniklas echo ' --without-FOO package FOO is NOT available' 398*2159047fSniklas echo ' --enable-FOO, --enable-FOO=BAR include feature FOO (parameter BAR)' 399*2159047fSniklas echo ' --disable-FOO do not include feature FOO' 400*2159047fSniklas echo 401*2159047fSniklas echo 'Where HOST and TARGET are something like "sparc-sunos", "mips-sgi-irix5", etc.' 402*2159047fSniklas echo 403*2159047fSniklas if [ -r config.status ] ; then 404*2159047fSniklas cat config.status 405*2159047fSniklas fi 406*2159047fSniklas 407*2159047fSniklas exit 1 408*2159047fSniklasfi 409*2159047fSniklas 410*2159047fSniklasconfigsub=`echo ${progname} | sed 's/configure$/config.sub/'` 411*2159047fSniklasmoveifchange=`echo ${progname} | sed 's/configure$/move-if-change/'` 412*2159047fSniklas 413*2159047fSniklas# this is a hack. sun4 must always be a valid host alias or this will fail. 414*2159047fSniklasif ${configsub} sun4 >/dev/null 2>&1 ; then 415*2159047fSniklas true 416*2159047fSniklaselse 417*2159047fSniklas echo '***' cannot find config.sub. 1>&2 418*2159047fSniklas exit 1 419*2159047fSniklasfi 420*2159047fSniklas 421*2159047fSniklastouch config.junk 422*2159047fSniklasif ${moveifchange} config.junk config.trash ; then 423*2159047fSniklas true 424*2159047fSniklaselse 425*2159047fSniklas echo '***' cannot find move-if-change. 1>&2 426*2159047fSniklas exit 1 427*2159047fSniklasfi 428*2159047fSniklasrm -f config.junk config.trash 429*2159047fSniklas 430*2159047fSniklascase "${srcdir}" in 431*2159047fSniklas"") 432*2159047fSniklas if [ -r configure.in ] ; then 433*2159047fSniklas srcdir=. 434*2159047fSniklas else 435*2159047fSniklas if [ -r ${progname}.in ] ; then 436*2159047fSniklas srcdir=`echo ${progname} | sed 's:/configure$::'` 437*2159047fSniklas else 438*2159047fSniklas echo '***' "Can't find configure.in. Try using --srcdir=some_dir" 1>&2 439*2159047fSniklas exit 1 440*2159047fSniklas fi 441*2159047fSniklas fi 442*2159047fSniklas ;; 443*2159047fSniklas*) 444*2159047fSniklas # Set srcdir to "." if that's what it is. 445*2159047fSniklas # This is important for multilib support. 446*2159047fSniklas if [ ! -d ${srcdir} ] ; then 447*2159047fSniklas echo "Invalid source directory ${srcdir}" >&2 448*2159047fSniklas exit 1 449*2159047fSniklas fi 450*2159047fSniklas pwd=`pwd` 451*2159047fSniklas srcpwd=`cd ${srcdir} ; pwd` 452*2159047fSniklas if [ "${pwd}" = "${srcpwd}" ] ; then 453*2159047fSniklas srcdir=. 454*2159047fSniklas fi 455*2159047fSniklasesac 456*2159047fSniklas 457*2159047fSniklas### warn about some conflicting configurations. 458*2159047fSniklas 459*2159047fSniklascase "${srcdir}" in 460*2159047fSniklas".") ;; 461*2159047fSniklas*) 462*2159047fSniklas if [ -f ${srcdir}/config.status ] ; then 463*2159047fSniklas echo '***' Cannot configure here in \"${PWD=`pwd`}\" when \"${srcdir}\" is currently configured. 1>&2 464*2159047fSniklas exit 1 465*2159047fSniklas fi 466*2159047fSniklasesac 467*2159047fSniklas 468*2159047fSniklas# default exec_prefix 469*2159047fSniklascase "${exec_prefixoption}" in 470*2159047fSniklas"") exec_prefix="\$(prefix)" ;; 471*2159047fSniklas*) ;; 472*2159047fSniklasesac 473*2159047fSniklas 474*2159047fSniklas### break up ${srcdir}/configure.in. 475*2159047fSniklascase "`grep '^# per\-host:' ${srcdir}/configure.in`" in 476*2159047fSniklas"") 477*2159047fSniklas echo '***' ${srcdir}/configure.in has no \"per-host:\" line. 1>&2 478*2159047fSniklas # Check for a directory that's been converted to use autoconf since 479*2159047fSniklas # it was last configured. 480*2159047fSniklas if grep AC_OUTPUT ${srcdir}/configure.in >/dev/null ; then 481*2159047fSniklas echo '***' Hmm, looks like this directory has been autoconfiscated. 1>&2 482*2159047fSniklas if [ -r ${srcdir}/configure ] ; then 483*2159047fSniklas echo '***' Running the local configure script. 1>&2 484*2159047fSniklas case "${cache_file}" in 485*2159047fSniklas "") cache_file_option= ;; 486*2159047fSniklas *) cache_file_option="--cache-file=${cache_file}" ;; 487*2159047fSniklas esac 488*2159047fSniklas srcdiroption="--srcdir=${srcdir}" 489*2159047fSniklas case "${build_alias}" in 490*2159047fSniklas "") buildopt= ;; 491*2159047fSniklas *) buildopt="--build=${build_alias}" ;; 492*2159047fSniklas esac 493*2159047fSniklas eval exec ${config_shell} ${srcdir}/configure ${verbose} \ 494*2159047fSniklas ${buildopt} --host=${host_alias} --target=${target_alias} \ 495*2159047fSniklas ${prefixoption} ${tmpdiroption} ${exec_prefixoption} \ 496*2159047fSniklas ${srcdiroption} \ 497*2159047fSniklas ${program_prefixoption} ${program_suffixoption} \ 498*2159047fSniklas ${program_transform_nameoption} ${site_option} \ 499*2159047fSniklas ${withoptions} ${withoutoptions} \ 500*2159047fSniklas ${enableoptions} ${disableoptions} \ 501*2159047fSniklas ${cache_file_option} ${removing} ${other_options} ${redirect} 502*2159047fSniklas else 503*2159047fSniklas echo '***' There is no configure script present though. 1>&2 504*2159047fSniklas fi 505*2159047fSniklas fi 506*2159047fSniklas exit 1 507*2159047fSniklas ;; 508*2159047fSniklas*) ;; 509*2159047fSniklasesac 510*2159047fSniklas 511*2159047fSniklascase "`grep '^# per\-target:' ${srcdir}/configure.in`" in 512*2159047fSniklas"") 513*2159047fSniklas echo '***' ${srcdir}/configure.in has no \"per-target:\" line. 1>&2 514*2159047fSniklas exit 1 515*2159047fSniklas ;; 516*2159047fSniklas*) ;; 517*2159047fSniklasesac 518*2159047fSniklas 519*2159047fSniklascase "${TMPDIR}" in 520*2159047fSniklas"") TMPDIR=/tmp ; export TMPDIR ;; 521*2159047fSniklas*) ;; 522*2159047fSniklasesac 523*2159047fSniklas 524*2159047fSniklas# keep this filename short for &%*%$*# 14 char file names 525*2159047fSniklastmpfile=${TMPDIR}/cONf$$ 526*2159047fSniklas# Note that under many versions of sh a trap handler for 0 will *override* any 527*2159047fSniklas# exit status you explicitly specify! At this point, the only non-error exit 528*2159047fSniklas# is at the end of the script; these actions are duplicated there, minus 529*2159047fSniklas# the "exit 1". Don't use "exit 0" anywhere after this without resetting the 530*2159047fSniklas# trap handler, or you'll lose. 531*2159047fSniklastrap "rm -f Makefile.tem ${tmpfile}.com ${tmpfile}.tgt ${tmpfile}.hst ${tmpfile}.pos; exit 1" 0 1 2 15 532*2159047fSniklas 533*2159047fSniklas# split ${srcdir}/configure.in into common, per-host, per-target, 534*2159047fSniklas# and post-target parts. Post-target is optional. 535*2159047fSniklassed -e '/^# per\-host:/,$d' ${srcdir}/configure.in > ${tmpfile}.com 536*2159047fSniklassed -e '1,/^# per\-host:/d' -e '/^# per\-target:/,$d' ${srcdir}/configure.in > ${tmpfile}.hst 537*2159047fSniklasif grep '^# post-target:' ${srcdir}/configure.in >/dev/null ; then 538*2159047fSniklas sed -e '1,/^# per\-target:/d' -e '/^# post\-target:/,$d' ${srcdir}/configure.in > ${tmpfile}.tgt 539*2159047fSniklas sed -e '1,/^# post\-target:/d' ${srcdir}/configure.in > ${tmpfile}.pos 540*2159047fSniklaselse 541*2159047fSniklas sed -e '1,/^# per\-target:/d' ${srcdir}/configure.in > ${tmpfile}.tgt 542*2159047fSniklas echo >${tmpfile}.pos 543*2159047fSniklasfi 544*2159047fSniklas 545*2159047fSniklas### do common part of configure.in 546*2159047fSniklas 547*2159047fSniklas. ${tmpfile}.com 548*2159047fSniklas 549*2159047fSniklas# some sanity checks on configure.in 550*2159047fSniklascase "${srctrigger}" in 551*2159047fSniklas"") 552*2159047fSniklas echo '***' srctrigger not set in ${PWD=`pwd`}/configure.in. 1>&2 553*2159047fSniklas exit 1 554*2159047fSniklas ;; 555*2159047fSniklas*) ;; 556*2159047fSniklasesac 557*2159047fSniklas 558*2159047fSniklascase "${build_alias}" in 559*2159047fSniklas"") 560*2159047fSniklas if result=`${config_shell} ${configsub} ${host_alias}` ; then 561*2159047fSniklas build_cpu=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'` 562*2159047fSniklas build_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` 563*2159047fSniklas build_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` 564*2159047fSniklas build=${build_cpu}-${build_vendor}-${build_os} 565*2159047fSniklas build_alias=${host_alias} 566*2159047fSniklas fi 567*2159047fSniklas ;; 568*2159047fSniklas*) 569*2159047fSniklas if result=`${config_shell} ${configsub} ${build_alias}` ; then 570*2159047fSniklas buildopt="--build=${build_alias}" 571*2159047fSniklas build_cpu=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'` 572*2159047fSniklas build_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` 573*2159047fSniklas build_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` 574*2159047fSniklas build=${build_cpu}-${build_vendor}-${build_os} 575*2159047fSniklas else 576*2159047fSniklas echo "Unrecognized build system name ${build_alias}." 1>&2 577*2159047fSniklas exit 1 578*2159047fSniklas fi 579*2159047fSniklas ;; 580*2159047fSniklasesac 581*2159047fSniklas 582*2159047fSniklasif result=`${config_shell} ${configsub} ${host_alias}` ; then 583*2159047fSniklas true 584*2159047fSniklaselse 585*2159047fSniklas echo "Unrecognized host system name ${host_alias}." 1>&2 586*2159047fSniklas exit 1 587*2159047fSniklasfi 588*2159047fSniklashost_cpu=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'` 589*2159047fSniklashost_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` 590*2159047fSniklashost_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` 591*2159047fSniklashost=${host_cpu}-${host_vendor}-${host_os} 592*2159047fSniklas 593*2159047fSniklas. ${tmpfile}.hst 594*2159047fSniklas 595*2159047fSniklasif result=`${config_shell} ${configsub} ${target_alias}` ; then 596*2159047fSniklas true 597*2159047fSniklaselse 598*2159047fSniklas echo "Unrecognized target system name ${target_alias}." 1>&2 599*2159047fSniklas exit 1 600*2159047fSniklasfi 601*2159047fSniklastarget_cpu=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'` 602*2159047fSniklastarget_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` 603*2159047fSniklastarget_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` 604*2159047fSniklastarget=${target_cpu}-${target_vendor}-${target_os} 605*2159047fSniklas 606*2159047fSniklas. ${tmpfile}.tgt 607*2159047fSniklas 608*2159047fSniklas# Find the source files, if location was not specified. 609*2159047fSniklascase "${srcdir}" in 610*2159047fSniklas"") 611*2159047fSniklas srcdirdefaulted=1 612*2159047fSniklas srcdir=. 613*2159047fSniklas if [ ! -r ${srctrigger} ] ; then 614*2159047fSniklas srcdir=.. 615*2159047fSniklas fi 616*2159047fSniklas ;; 617*2159047fSniklas*) ;; 618*2159047fSniklasesac 619*2159047fSniklas 620*2159047fSniklasif [ ! -r ${srcdir}/${srctrigger} ] ; then 621*2159047fSniklas case "${srcdirdefaulted}" in 622*2159047fSniklas "") echo '***' "${progname}: Can't find ${srcname} sources in ${PWD=`pwd`}/${srcdir}" 1>&2 ;; 623*2159047fSniklas *) echo '***' "${progname}: Can't find ${srcname} sources in ${PWD=`pwd`}/. or ${PWD=`pwd`}/.." 1>&2 ;; 624*2159047fSniklas esac 625*2159047fSniklas 626*2159047fSniklas echo '***' \(At least ${srctrigger} is missing.\) 1>&2 627*2159047fSniklas exit 1 628*2159047fSniklasfi 629*2159047fSniklas 630*2159047fSniklas# Some systems (e.g., one of the i386-aix systems the gas testers are 631*2159047fSniklas# using) don't handle "\$" correctly, so don't use it here. 632*2159047fSniklastooldir='$(exec_prefix)'/${target_alias} 633*2159047fSniklas 634*2159047fSniklasif [ "${host_alias}" != "${target_alias}" ] ; then 635*2159047fSniklas if [ "${program_prefixoption}" = "" ] ; then 636*2159047fSniklas if [ "${program_suffixoption}" = "" ] ; then 637*2159047fSniklas if [ "${program_transform_nameoption}" = "" ] ; then 638*2159047fSniklas program_prefix=${target_alias}- ; 639*2159047fSniklas fi 640*2159047fSniklas fi 641*2159047fSniklas fi 642*2159047fSniklasfi 643*2159047fSniklas 644*2159047fSniklas# Merge program_prefix and program_suffix onto program_transform_name. 645*2159047fSniklas# (program_suffix used to use $, but it's hard to preserve $ through both 646*2159047fSniklas# make and sh.) 647*2159047fSniklasif [ "${program_suffix}" != "" ] ; then 648*2159047fSniklas program_transform_name="-e s,\\\\(.*\\\\),\\\\1${program_suffix}, ${program_transform_name}" 649*2159047fSniklasfi 650*2159047fSniklas 651*2159047fSniklasif [ "${program_prefix}" != "" ] ; then 652*2159047fSniklas program_transform_name="-e s,^,${program_prefix}, ${program_transform_name}" 653*2159047fSniklasfi 654*2159047fSniklas 655*2159047fSniklas# If CC and CXX are not set in the environment, and the Makefile 656*2159047fSniklas# exists, try to extract them from it. This is to handle running 657*2159047fSniklas# ./config.status by hand. 658*2159047fSniklasif [ -z "${CC}" -a -r Makefile ]; then 659*2159047fSniklas sed -n -e ':loop 660*2159047fSniklas/\\$/ N 661*2159047fSniklas/\\$/ b loop 662*2159047fSniklass/\\\n//g 663*2159047fSniklas/^CC[ ]*=/ s/CC[ ]*=[ ]*\(.*\)/\1/p' < Makefile > Makefile.cc 664*2159047fSniklas CC=`tail -1 Makefile.cc` 665*2159047fSniklas rm -f Makefile.cc 666*2159047fSniklasfi 667*2159047fSniklas 668*2159047fSniklasif [ -z "${CXX}" -a -r Makefile ]; then 669*2159047fSniklas sed -n -e ':loop 670*2159047fSniklas/\\$/ N 671*2159047fSniklas/\\$/ b loop 672*2159047fSniklass/\\\n//g 673*2159047fSniklas/^CXX[ ]*=/ s/CXX[ ]*=[ ]*\(.*\)/\1/p' < Makefile > Makefile.cc 674*2159047fSniklas CXX=`tail -1 Makefile.cc` 675*2159047fSniklas rm -f Makefile.cc 676*2159047fSniklasfi 677*2159047fSniklas 678*2159047fSniklasif [ "${build}" != "${host}" ]; then 679*2159047fSniklas # If we are doing a Canadian Cross, in which the host and build systems 680*2159047fSniklas # are not the same, we set reasonable default values for the tools. 681*2159047fSniklas 682*2159047fSniklas tools="AR AR_FOR_TARGET AS AS_FOR_TARGET BISON CC_FOR_BUILD" 683*2159047fSniklas tools="${tools} CC_FOR_TARGET CXX_FOR_TARGET HOST_PREFIX" 684*2159047fSniklas tools="${tools} HOST_PREFIX_1 LD LD_FOR_TARGET LEX MAKEINFO NM" 685*2159047fSniklas tools="${tools} NM_FOR_TARGET RANLIB RANLIB_FOR_TARGET" 686*2159047fSniklas 687*2159047fSniklas for var in ${tools}; do 688*2159047fSniklas if [ -z "`eval 'echo $'"${var}"`" -a -r Makefile ]; then 689*2159047fSniklas sed -n -e ':loop 690*2159047fSniklas/\\$/ N 691*2159047fSniklas/\\$/ b loop 692*2159047fSniklass/\\\n//g 693*2159047fSniklas/^'"${var}"'[ ]*=/ s/'"${var}"'[ ]*=[ ]*\(.*\)/\1/p' \ 694*2159047fSniklas < Makefile > Makefile.v 695*2159047fSniklas t=`tail -1 Makefile.v` 696*2159047fSniklas if [ -n "${t}" ]; then 697*2159047fSniklas eval "${var}='${t}'" 698*2159047fSniklas fi 699*2159047fSniklas rm -f Makefile.v 700*2159047fSniklas fi 701*2159047fSniklas done 702*2159047fSniklas 703*2159047fSniklas AR=${AR-${host_alias}-ar} 704*2159047fSniklas AR_FOR_TARGET=${AR_FOR_TARGET-${target_alias}-ar} 705*2159047fSniklas AS=${AS-${host_alias}-as} 706*2159047fSniklas AS_FOR_TARGET=${AS_FOR_TARGET-${target_alias}-as} 707*2159047fSniklas CC=${CC-${host_alias}-gcc} 708*2159047fSniklas CXX=${CXX-${host_alias}-gcc} 709*2159047fSniklas CC_FOR_BUILD=${CC_FOR_BUILD-gcc} 710*2159047fSniklas CC_FOR_TARGET=${CC_FOR_TARGET-${target_alias}-gcc} 711*2159047fSniklas CXX_FOR_TARGET=${CXX_FOR_TARGET-${target_alias}-gcc} 712*2159047fSniklas HOST_PREFIX=${build_alias}- 713*2159047fSniklas HOST_PREFIX_1=${build_alias}- 714*2159047fSniklas LD=${LD-${host_alias}-ld} 715*2159047fSniklas LD_FOR_TARGET=${LD_FOR_TARGET-${target_alias}-ld} 716*2159047fSniklas MAKEINFO=${MAKEINFO-makeinfo} 717*2159047fSniklas NM=${NM-${host_alias}-nm} 718*2159047fSniklas NM_FOR_TARGET=${NM_FOR_TARGET-${target_alias}-nm} 719*2159047fSniklas RANLIB=${RANLIB-${host_alias}-ranlib} 720*2159047fSniklas RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET-${target_alias}-ranlib} 721*2159047fSniklas 722*2159047fSniklas if [ -z "${BISON}" ]; then 723*2159047fSniklas IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" 724*2159047fSniklas for dir in $PATH; do 725*2159047fSniklas test -z "$dir" && dir=. 726*2159047fSniklas if test -f $dir/byacc; then 727*2159047fSniklas BISON=byacc 728*2159047fSniklas break 729*2159047fSniklas fi 730*2159047fSniklas if test -f $dir/bison; then 731*2159047fSniklas BISON=bison 732*2159047fSniklas break 733*2159047fSniklas fi 734*2159047fSniklas if test -f $dir/yacc; then 735*2159047fSniklas BISON=yacc 736*2159047fSniklas break 737*2159047fSniklas fi 738*2159047fSniklas done 739*2159047fSniklas IFS="$save_ifs" 740*2159047fSniklas BISON=${BISON-bison} 741*2159047fSniklas fi 742*2159047fSniklas 743*2159047fSniklas if [ -z "${LEX}" ]; then 744*2159047fSniklas IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" 745*2159047fSniklas for dir in $PATH; do 746*2159047fSniklas test -z "$dir" && dir=. 747*2159047fSniklas if test -f $dir/flex; then 748*2159047fSniklas LEX=flex 749*2159047fSniklas break 750*2159047fSniklas fi 751*2159047fSniklas if test -f $dir/lex; then 752*2159047fSniklas LEX=lex 753*2159047fSniklas break 754*2159047fSniklas fi 755*2159047fSniklas done 756*2159047fSniklas IFS="$save_ifs" 757*2159047fSniklas LEX=${LEX-flex} 758*2159047fSniklas fi 759*2159047fSniklas 760*2159047fSniklas # Export variables which autoconf might try to set. 761*2159047fSniklas export AS 762*2159047fSniklas export AR 763*2159047fSniklas export CC_FOR_BUILD 764*2159047fSniklas export LD 765*2159047fSniklas export NM 766*2159047fSniklas export RANLIB 767*2159047fSniklaselse 768*2159047fSniklas # If CC is still not set, try to get gcc. 769*2159047fSniklas if [ -z "${CC}" ]; then 770*2159047fSniklas IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" 771*2159047fSniklas for dir in $PATH; do 772*2159047fSniklas test -z "$dir" && dir=. 773*2159047fSniklas if test -f $dir/gcc; then 774*2159047fSniklas CC="gcc -O2" 775*2159047fSniklas break 776*2159047fSniklas fi 777*2159047fSniklas done 778*2159047fSniklas IFS="$save_ifs" 779*2159047fSniklas CC=${CC-cc} 780*2159047fSniklas fi 781*2159047fSniklas 782*2159047fSniklas CXX=${CXX-"gcc"} 783*2159047fSniklasfi 784*2159047fSniklas 785*2159047fSniklasexport CC 786*2159047fSniklasexport CXX 787*2159047fSniklas 788*2159047fSniklasfor subdir in . ${subdirs} ; do 789*2159047fSniklas 790*2159047fSniklas # ${subdir} is relative path from . to the directory we're currently 791*2159047fSniklas # configuring. 792*2159047fSniklas # ${invsubdir} is inverse of ${subdir), *with* trailing /, if needed. 793*2159047fSniklas invsubdir=`echo ${subdir}/ | sed -e 's|\./||g' -e 's|[^/]*/|../|g'` 794*2159047fSniklas 795*2159047fSniklas ### figure out what to do with srcdir 796*2159047fSniklas case "${srcdir}" in 797*2159047fSniklas ".") # no -srcdir option. We're building in place. 798*2159047fSniklas makesrcdir=. ;; 799*2159047fSniklas /*) # absolute path 800*2159047fSniklas makesrcdir=`echo ${srcdir}/${subdir} | sed -e 's|/\.$||'` 801*2159047fSniklas ;; 802*2159047fSniklas *) # otherwise relative 803*2159047fSniklas case "${subdir}" in 804*2159047fSniklas .) makesrcdir=${srcdir} ;; 805*2159047fSniklas *) makesrcdir=${invsubdir}${srcdir}/${subdir} ;; 806*2159047fSniklas esac 807*2159047fSniklas ;; 808*2159047fSniklas esac 809*2159047fSniklas 810*2159047fSniklas if [ "${subdir}/" != "./" ] ; then 811*2159047fSniklas Makefile=${subdir}/Makefile 812*2159047fSniklas fi 813*2159047fSniklas 814*2159047fSniklas if [ ! -d ${subdir} ] ; then 815*2159047fSniklas if mkdir ${subdir} ; then 816*2159047fSniklas true 817*2159047fSniklas else 818*2159047fSniklas echo '***' "${progname}: could not make ${PWD=`pwd`}/${subdir}" 1>&2 819*2159047fSniklas exit 1 820*2159047fSniklas fi 821*2159047fSniklas fi 822*2159047fSniklas 823*2159047fSniklas case "${removing}" in 824*2159047fSniklas "") 825*2159047fSniklas case "${subdir}" in 826*2159047fSniklas .) ;; 827*2159047fSniklas *) eval echo Building in ${subdir} ${redirect} ;; 828*2159047fSniklas esac 829*2159047fSniklas 830*2159047fSniklas # FIXME Should this be done recursively ??? (Useful for e.g. gdbtest) 831*2159047fSniklas # Set up the list of links to be made. 832*2159047fSniklas # ${links} is the list of link names, and ${files} is the list of names to link to. 833*2159047fSniklas 834*2159047fSniklas # Make the links. 835*2159047fSniklas configlinks="${links}" 836*2159047fSniklas if [ -r ${subdir}/config.status ] ; then 837*2159047fSniklas mv -f ${subdir}/config.status ${subdir}/config.back 838*2159047fSniklas fi 839*2159047fSniklas while [ -n "${files}" ] ; do 840*2159047fSniklas # set file to car of files, files to cdr of files 841*2159047fSniklas set ${files}; file=$1; shift; files=$* 842*2159047fSniklas set ${links}; link=$1; shift; links=$* 843*2159047fSniklas 844*2159047fSniklas if [ ! -r ${srcdir}/${file} ] ; then 845*2159047fSniklas echo '***' "${progname}: cannot create a link \"${link}\"," 1>&2 846*2159047fSniklas echo '***' "since the file \"${srcdir}/${file}\" does not exist." 1>&2 847*2159047fSniklas exit 1 848*2159047fSniklas fi 849*2159047fSniklas 850*2159047fSniklas ${remove} -f ${link} 851*2159047fSniklas # Make a symlink if possible, otherwise try a hard link 852*2159047fSniklas if ${symbolic_link} ${srcdir}/${file} ${link} >/dev/null 2>&1 ; then 853*2159047fSniklas true 854*2159047fSniklas else 855*2159047fSniklas # We need to re-remove the file because Lynx leaves a 856*2159047fSniklas # very strange directory there when it fails an NFS symlink. 857*2159047fSniklas ${remove} -r -f ${link} 858*2159047fSniklas ${hard_link} ${srcdir}/${file} ${link} 859*2159047fSniklas fi 860*2159047fSniklas if [ ! -r ${link} ] ; then 861*2159047fSniklas echo '***' "${progname}: unable to link \"${link}\" to \"${srcdir}/${file}\"." 1>&2 862*2159047fSniklas exit 1 863*2159047fSniklas fi 864*2159047fSniklas 865*2159047fSniklas echo "Linked \"${link}\" to \"${srcdir}/${file}\"." 866*2159047fSniklas done 867*2159047fSniklas 868*2159047fSniklas # Create a .gdbinit file which runs the one in srcdir 869*2159047fSniklas # and tells GDB to look there for source files. 870*2159047fSniklas 871*2159047fSniklas if [ -r ${srcdir}/${subdir}/.gdbinit ] ; then 872*2159047fSniklas case ${srcdir} in 873*2159047fSniklas .) ;; 874*2159047fSniklas *) cat > ${subdir}/.gdbinit <<EOF 875*2159047fSniklas# ${NO_EDIT} 876*2159047fSniklasdir ${makesrcdir} 877*2159047fSniklasdir . 878*2159047fSniklassource ${makesrcdir}/.gdbinit 879*2159047fSniklasEOF 880*2159047fSniklas ;; 881*2159047fSniklas esac 882*2159047fSniklas fi 883*2159047fSniklas 884*2159047fSniklas # Install a makefile, and make it set VPATH 885*2159047fSniklas # if necessary so that the sources are found. 886*2159047fSniklas # Also change its value of srcdir. 887*2159047fSniklas # NOTE: Makefile generation constitutes the majority of the time in configure. Hence, this section has 888*2159047fSniklas # been somewhat optimized and is perhaps a bit twisty. 889*2159047fSniklas 890*2159047fSniklas # code is order so as to try to sed the smallest input files we know. 891*2159047fSniklas 892*2159047fSniklas # the four makefile fragments MUST end up in the resulting Makefile in this order: 893*2159047fSniklas # package, target, host, and site. so do these separately because I don't trust the 894*2159047fSniklas # order of sed -e expressions. 895*2159047fSniklas 896*2159047fSniklas if [ -f ${srcdir}/${subdir}/${Makefile_in} ] ; then 897*2159047fSniklas 898*2159047fSniklas # Conditionalize for this site from "Makefile.in" (or whatever it's called) into Makefile.tem 899*2159047fSniklas rm -f ${subdir}/Makefile.tem 900*2159047fSniklas case "${site}" in 901*2159047fSniklas "") cp ${srcdir}/${subdir}/${Makefile_in} ${subdir}/Makefile.tem ;; 902*2159047fSniklas *) 903*2159047fSniklas site_makefile_frag=${srcdir}/config/ms-${site} 904*2159047fSniklas 905*2159047fSniklas if [ -f ${site_makefile_frag} ] ; then 906*2159047fSniklas sed -e "/^####/ r ${site_makefile_frag}" ${srcdir}/${subdir}/${Makefile_in} \ 907*2159047fSniklas > ${subdir}/Makefile.tem 908*2159047fSniklas else 909*2159047fSniklas cp ${srcdir}/${subdir}/${Makefile_in} ${subdir}/Makefile.tem 910*2159047fSniklas site_makefile_frag= 911*2159047fSniklas fi 912*2159047fSniklas ;; 913*2159047fSniklas esac 914*2159047fSniklas # working copy now in ${subdir}/Makefile.tem 915*2159047fSniklas 916*2159047fSniklas # Conditionalize the makefile for this host. 917*2159047fSniklas rm -f ${Makefile} 918*2159047fSniklas case "${host_makefile_frag}" in 919*2159047fSniklas "") mv ${subdir}/Makefile.tem ${Makefile} ;; 920*2159047fSniklas *) 921*2159047fSniklas if [ ! -f ${host_makefile_frag} ] ; then 922*2159047fSniklas host_makefile_frag=${srcdir}/${host_makefile_frag} 923*2159047fSniklas fi 924*2159047fSniklas if [ -f ${host_makefile_frag} ] ; then 925*2159047fSniklas sed -e "/^####/ r ${host_makefile_frag}" ${subdir}/Makefile.tem > ${Makefile} 926*2159047fSniklas else 927*2159047fSniklas echo '***' Expected host makefile fragment \"${host_makefile_frag}\" 1>&2 928*2159047fSniklas echo '***' is missing in ${PWD=`pwd`}. 1>&2 929*2159047fSniklas mv ${subdir}/Makefile.tem ${Makefile} 930*2159047fSniklas fi 931*2159047fSniklas esac 932*2159047fSniklas # working copy now in ${Makefile} 933*2159047fSniklas 934*2159047fSniklas # Conditionalize the makefile for this target. 935*2159047fSniklas rm -f ${subdir}/Makefile.tem 936*2159047fSniklas case "${target_makefile_frag}" in 937*2159047fSniklas "") mv ${Makefile} ${subdir}/Makefile.tem ;; 938*2159047fSniklas *) 939*2159047fSniklas if [ ! -f ${target_makefile_frag} ] ; then 940*2159047fSniklas target_makefile_frag=${srcdir}/${target_makefile_frag} 941*2159047fSniklas fi 942*2159047fSniklas if [ -f ${target_makefile_frag} ] ; then 943*2159047fSniklas sed -e "/^####/ r ${target_makefile_frag}" ${Makefile} > ${subdir}/Makefile.tem 944*2159047fSniklas else 945*2159047fSniklas mv ${Makefile} ${subdir}/Makefile.tem 946*2159047fSniklas target_makefile_frag= 947*2159047fSniklas fi 948*2159047fSniklas ;; 949*2159047fSniklas esac 950*2159047fSniklas # real copy now in ${subdir}/Makefile.tem 951*2159047fSniklas 952*2159047fSniklas # Conditionalize the makefile for this package. 953*2159047fSniklas rm -f ${Makefile} 954*2159047fSniklas case "${package_makefile_frag}" in 955*2159047fSniklas "") mv ${subdir}/Makefile.tem ${Makefile} ;; 956*2159047fSniklas *) 957*2159047fSniklas if [ ! -f ${package_makefile_frag} ] ; then 958*2159047fSniklas package_makefile_frag=${srcdir}/${package_makefile_frag} 959*2159047fSniklas fi 960*2159047fSniklas if [ -f ${package_makefile_frag} ] ; then 961*2159047fSniklas sed -e "/^####/ r ${package_makefile_frag}" ${subdir}/Makefile.tem > ${Makefile} 962*2159047fSniklas rm -f ${subdir}/Makefile.tem 963*2159047fSniklas else 964*2159047fSniklas echo '***' Expected package makefile fragment \"${package_makefile_frag}\" 1>&2 965*2159047fSniklas echo '***' is missing in ${PWD=`pwd`}. 1>&2 966*2159047fSniklas mv ${subdir}/Makefile.tem ${Makefile} 967*2159047fSniklas fi 968*2159047fSniklas esac 969*2159047fSniklas # working copy now in ${Makefile} 970*2159047fSniklas 971*2159047fSniklas mv ${Makefile} ${subdir}/Makefile.tem 972*2159047fSniklas 973*2159047fSniklas # real copy now in ${subdir}/Makefile.tem 974*2159047fSniklas 975*2159047fSniklas # prepend warning about editting, and a bunch of variables. 976*2159047fSniklas rm -f ${Makefile} 977*2159047fSniklas cat > ${Makefile} <<EOF 978*2159047fSniklas# ${NO_EDIT} 979*2159047fSniklasVPATH = ${makesrcdir} 980*2159047fSniklaslinks = ${configlinks} 981*2159047fSniklashost_alias = ${host_alias} 982*2159047fSniklashost_cpu = ${host_cpu} 983*2159047fSniklashost_vendor = ${host_vendor} 984*2159047fSniklashost_os = ${host_os} 985*2159047fSniklashost_canonical = ${host_cpu}-${host_vendor}-${host_os} 986*2159047fSniklastarget_alias = ${target_alias} 987*2159047fSniklastarget_cpu = ${target_cpu} 988*2159047fSniklastarget_vendor = ${target_vendor} 989*2159047fSniklastarget_os = ${target_os} 990*2159047fSniklastarget_canonical = ${target_cpu}-${target_vendor}-${target_os} 991*2159047fSniklasEOF 992*2159047fSniklas case "${build}" in 993*2159047fSniklas "") ;; 994*2159047fSniklas *) cat >> ${Makefile} << EOF 995*2159047fSniklasbuild_alias = ${build_alias} 996*2159047fSniklasbuild_cpu = ${build_cpu} 997*2159047fSniklasbuild_vendor = ${build_vendor} 998*2159047fSniklasbuild_os = ${build_os} 999*2159047fSniklasbuild_canonical = ${build_cpu}-${build_vendor}-${build_os} 1000*2159047fSniklasEOF 1001*2159047fSniklas esac 1002*2159047fSniklas 1003*2159047fSniklas case "${package_makefile_frag}" in 1004*2159047fSniklas "") ;; 1005*2159047fSniklas /*) echo package_makefile_frag = ${package_makefile_frag} >>${Makefile} ;; 1006*2159047fSniklas *) echo package_makefile_frag = ${invsubdir}${package_makefile_frag} >>${Makefile} ;; 1007*2159047fSniklas esac 1008*2159047fSniklas 1009*2159047fSniklas case "${target_makefile_frag}" in 1010*2159047fSniklas "") ;; 1011*2159047fSniklas /*) echo target_makefile_frag = ${target_makefile_frag} >>${Makefile} ;; 1012*2159047fSniklas *) echo target_makefile_frag = ${invsubdir}${target_makefile_frag} >>${Makefile} ;; 1013*2159047fSniklas esac 1014*2159047fSniklas 1015*2159047fSniklas case "${host_makefile_frag}" in 1016*2159047fSniklas "") ;; 1017*2159047fSniklas /*) echo host_makefile_frag = ${host_makefile_frag} >>${Makefile} ;; 1018*2159047fSniklas *) echo host_makefile_frag = ${invsubdir}${host_makefile_frag} >>${Makefile} ;; 1019*2159047fSniklas esac 1020*2159047fSniklas 1021*2159047fSniklas if [ "${site_makefile_frag}" != "" ] ; then 1022*2159047fSniklas echo site_makefile_frag = ${invsubdir}${site_makefile_frag} >>${Makefile} 1023*2159047fSniklas fi 1024*2159047fSniklas 1025*2159047fSniklas # reset prefix, exec_prefix, srcdir, SUBDIRS, NONSUBDIRS, 1026*2159047fSniklas # remove any form feeds. 1027*2159047fSniklas if [ -z "${subdirs}" ]; then 1028*2159047fSniklas rm -f ${subdir}/Makefile.tem2 1029*2159047fSniklas sed -e "s:^SUBDIRS[ ]*=.*$:SUBDIRS = ${configdirs}:" \ 1030*2159047fSniklas -e "s:^NONSUBDIRS[ ]*=.*$:NONSUBDIRS = ${noconfigdirs}:" \ 1031*2159047fSniklas ${subdir}/Makefile.tem > ${subdir}/Makefile.tem2 1032*2159047fSniklas rm -f ${subdir}/Makefile.tem 1033*2159047fSniklas mv ${subdir}/Makefile.tem2 ${subdir}/Makefile.tem 1034*2159047fSniklas fi 1035*2159047fSniklas sed -e "s:^prefix[ ]*=.*$:prefix = ${prefix}:" \ 1036*2159047fSniklas -e "s:^exec_prefix[ ]*=.*$:exec_prefix = ${exec_prefix}:" \ 1037*2159047fSniklas -e "/^CC[ ]*=/{ 1038*2159047fSniklas :loop1 1039*2159047fSniklas /\\\\$/ N 1040*2159047fSniklas /\\\\$/ b loop1 1041*2159047fSniklas s/\\\\\\n//g 1042*2159047fSniklas s%^CC[ ]*=.*$%CC = ${CC}% 1043*2159047fSniklas }" \ 1044*2159047fSniklas -e "/^CXX[ ]*=/{ 1045*2159047fSniklas :loop2 1046*2159047fSniklas /\\\\$/ N 1047*2159047fSniklas /\\\\$/ b loop2 1048*2159047fSniklas s/\\\\\\n//g 1049*2159047fSniklas s%^CXX[ ]*=.*$%CXX = ${CXX}% 1050*2159047fSniklas }" \ 1051*2159047fSniklas -e "s:^SHELL[ ]*=.*$:SHELL = ${config_shell}:" \ 1052*2159047fSniklas -e "s:^srcdir[ ]*=.*$:srcdir = ${makesrcdir}:" \ 1053*2159047fSniklas -e "s///" \ 1054*2159047fSniklas -e "s:^program_prefix[ ]*=.*$:program_prefix = ${program_prefix}:" \ 1055*2159047fSniklas -e "s:^program_suffix[ ]*=.*$:program_suffix = ${program_suffix}:" \ 1056*2159047fSniklas -e "s:^program_transform_name[ ]*=.*$:program_transform_name = ${program_transform_name}:" \ 1057*2159047fSniklas -e "s:^tooldir[ ]*=.*$:tooldir = ${tooldir}:" \ 1058*2159047fSniklas ${subdir}/Makefile.tem >> ${Makefile} 1059*2159047fSniklas 1060*2159047fSniklas # If this is a Canadian Cross, preset the values of many more 1061*2159047fSniklas # tools. 1062*2159047fSniklas if [ "${build}" != "${host}" ]; then 1063*2159047fSniklas for var in ${tools}; do 1064*2159047fSniklas val=`eval 'echo $'"${var}"` 1065*2159047fSniklas sed -e "/^${var}[ ]*=/{ 1066*2159047fSniklas :loop1 1067*2159047fSniklas /\\\\$/ N 1068*2159047fSniklas /\\\\$/ b loop1 1069*2159047fSniklas s/\\\\\\n//g 1070*2159047fSniklas s%^${var}[ ]*=.*$%${var} = ${val}% 1071*2159047fSniklas }" ${Makefile} > ${Makefile}.tem 1072*2159047fSniklas mv -f ${Makefile}.tem ${Makefile} 1073*2159047fSniklas done 1074*2159047fSniklas fi 1075*2159047fSniklas 1076*2159047fSniklas # final copy now in ${Makefile} 1077*2159047fSniklas 1078*2159047fSniklas else 1079*2159047fSniklas echo "No Makefile.in found in ${srcdir}/${subdir}, unable to configure" 1>&2 1080*2159047fSniklas fi 1081*2159047fSniklas 1082*2159047fSniklas rm -f ${subdir}/Makefile.tem 1083*2159047fSniklas 1084*2159047fSniklas case "${host_makefile_frag}" in 1085*2159047fSniklas "") using= ;; 1086*2159047fSniklas *) using="and \"${host_makefile_frag}\"" ;; 1087*2159047fSniklas esac 1088*2159047fSniklas 1089*2159047fSniklas case "${target_makefile_frag}" in 1090*2159047fSniklas "") ;; 1091*2159047fSniklas *) using="${using} and \"${target_makefile_frag}\"" ;; 1092*2159047fSniklas esac 1093*2159047fSniklas 1094*2159047fSniklas case "${site_makefile_frag}" in 1095*2159047fSniklas "") ;; 1096*2159047fSniklas *) using="${using} and \"${site_makefile_frag}\"" ;; 1097*2159047fSniklas esac 1098*2159047fSniklas 1099*2159047fSniklas newusing=`echo "${using}" | sed 's/and/using/'` 1100*2159047fSniklas using=${newusing} 1101*2159047fSniklas echo "Created \"${Makefile}\" in" ${PWD=`pwd`} ${using} 1102*2159047fSniklas 1103*2159047fSniklas . ${tmpfile}.pos 1104*2159047fSniklas 1105*2159047fSniklas # describe the chosen configuration in config.status. 1106*2159047fSniklas # Make that file a shellscript which will reestablish 1107*2159047fSniklas # the same configuration. Used in Makefiles to rebuild 1108*2159047fSniklas # Makefiles. 1109*2159047fSniklas 1110*2159047fSniklas case "${norecursion}" in 1111*2159047fSniklas "") arguments="${arguments} --norecursion" ;; 1112*2159047fSniklas *) ;; 1113*2159047fSniklas esac 1114*2159047fSniklas 1115*2159047fSniklas if [ ${subdir} = . ] ; then 1116*2159047fSniklas echo "#!/bin/sh 1117*2159047fSniklas# ${NO_EDIT} 1118*2159047fSniklas# This directory was configured as follows: 1119*2159047fSniklas${progname}" ${arguments} " 1120*2159047fSniklas# ${using}" > ${subdir}/config.new 1121*2159047fSniklas else 1122*2159047fSniklas echo "#!/bin/sh 1123*2159047fSniklas# ${NO_EDIT} 1124*2159047fSniklas# This directory was configured as follows: 1125*2159047fSniklascd ${invsubdir} 1126*2159047fSniklas${progname}" ${arguments} " 1127*2159047fSniklas# ${using}" > ${subdir}/config.new 1128*2159047fSniklas fi 1129*2159047fSniklas chmod a+x ${subdir}/config.new 1130*2159047fSniklas if [ -r ${subdir}/config.back ] ; then 1131*2159047fSniklas mv -f ${subdir}/config.back ${subdir}/config.status 1132*2159047fSniklas fi 1133*2159047fSniklas ${moveifchange} ${subdir}/config.new ${subdir}/config.status 1134*2159047fSniklas ;; 1135*2159047fSniklas 1136*2159047fSniklas *) rm -f ${Makefile} ${subdir}/config.status ${links} ;; 1137*2159047fSniklas esac 1138*2159047fSniklasdone 1139*2159047fSniklas 1140*2159047fSniklas# If there are subdirectories, then recur. 1141*2159047fSniklasif [ -z "${norecursion}" -a -n "${configdirs}" ] ; then 1142*2159047fSniklas for configdir in ${configdirs} ; do 1143*2159047fSniklas 1144*2159047fSniklas if [ -d ${srcdir}/${configdir} ] ; then 1145*2159047fSniklas eval echo Configuring ${configdir}... ${redirect} 1146*2159047fSniklas case "${srcdir}" in 1147*2159047fSniklas ".") ;; 1148*2159047fSniklas *) 1149*2159047fSniklas if [ ! -d ./${configdir} ] ; then 1150*2159047fSniklas if mkdir ./${configdir} ; then 1151*2159047fSniklas true 1152*2159047fSniklas else 1153*2159047fSniklas echo '***' "${progname}: could not make ${PWD=`pwd`}/${configdir}" 1>&2 1154*2159047fSniklas exit 1 1155*2159047fSniklas fi 1156*2159047fSniklas fi 1157*2159047fSniklas ;; 1158*2159047fSniklas esac 1159*2159047fSniklas 1160*2159047fSniklas POPDIR=${PWD=`pwd`} 1161*2159047fSniklas cd ${configdir} 1162*2159047fSniklas 1163*2159047fSniklas### figure out what to do with srcdir 1164*2159047fSniklas case "${srcdir}" in 1165*2159047fSniklas ".") newsrcdir=${srcdir} ;; # no -srcdir option. We're building in place. 1166*2159047fSniklas /*) # absolute path 1167*2159047fSniklas newsrcdir=${srcdir}/${configdir} 1168*2159047fSniklas srcdiroption="--srcdir=${newsrcdir}" 1169*2159047fSniklas ;; 1170*2159047fSniklas *) # otherwise relative 1171*2159047fSniklas newsrcdir=../${srcdir}/${configdir} 1172*2159047fSniklas srcdiroption="--srcdir=${newsrcdir}" 1173*2159047fSniklas ;; 1174*2159047fSniklas esac 1175*2159047fSniklas 1176*2159047fSniklas # Handle --cache-file=../XXX 1177*2159047fSniklas case "${cache_file}" in 1178*2159047fSniklas "") # empty 1179*2159047fSniklas ;; 1180*2159047fSniklas /*) # absolute path 1181*2159047fSniklas cache_file_option="--cache-file=${cache_file}" 1182*2159047fSniklas ;; 1183*2159047fSniklas *) # relative path 1184*2159047fSniklas cache_file_option="--cache-file=../${cache_file}" 1185*2159047fSniklas ;; 1186*2159047fSniklas esac 1187*2159047fSniklas 1188*2159047fSniklas### check for guested configure, otherwise fix possibly relative progname 1189*2159047fSniklas if [ -f ${newsrcdir}/configure ] ; then 1190*2159047fSniklas recprog=${newsrcdir}/configure 1191*2159047fSniklas elif [ -f ${newsrcdir}/configure.in ] ; then 1192*2159047fSniklas case "${progname}" in 1193*2159047fSniklas /*) recprog=${progname} ;; 1194*2159047fSniklas *) recprog=../${progname} ;; 1195*2159047fSniklas esac 1196*2159047fSniklas else 1197*2159047fSniklas eval echo No configuration information in ${configdir} ${redirect} 1198*2159047fSniklas recprog= 1199*2159047fSniklas fi 1200*2159047fSniklas 1201*2159047fSniklas### The recursion line is here. 1202*2159047fSniklas if [ ! -z "${recprog}" ] ; then 1203*2159047fSniklas if eval ${config_shell} ${recprog} ${verbose} ${buildopt} --host=${host_alias} --target=${target_alias} \ 1204*2159047fSniklas ${prefixoption} ${tmpdiroption} ${exec_prefixoption} \ 1205*2159047fSniklas ${srcdiroption} ${program_prefixoption} ${program_suffixoption} ${program_transform_nameoption} ${site_option} ${withoptions} ${withoutoptions} ${enableoptions} ${disableoptions} ${cache_file_option} ${removing} ${other_options} ${redirect} ; then 1206*2159047fSniklas true 1207*2159047fSniklas else 1208*2159047fSniklas echo Configure in `pwd` failed, exiting. 1>&2 1209*2159047fSniklas exit 1 1210*2159047fSniklas fi 1211*2159047fSniklas fi 1212*2159047fSniklas 1213*2159047fSniklas cd ${POPDIR} 1214*2159047fSniklas fi 1215*2159047fSniklas done 1216*2159047fSniklasfi 1217*2159047fSniklas 1218*2159047fSniklas# Perform the same cleanup as the trap handler, minus the "exit 1" of course, 1219*2159047fSniklas# and reset the trap handler. 1220*2159047fSniklasrm -f ${tmpfile}.com ${tmpfile}.tgt ${tmpfile}.hst ${tmpfile}.pos 1221*2159047fSniklastrap 0 1222*2159047fSniklas 1223*2159047fSniklasexit 0 1224*2159047fSniklas 1225*2159047fSniklas# 1226*2159047fSniklas# Local Variables: 1227*2159047fSniklas# fill-column: 131 1228*2159047fSniklas# End: 1229*2159047fSniklas# 1230*2159047fSniklas 1231*2159047fSniklas# end of configure 1232