Skip to content
Snippets Groups Projects
configure.in 70.2 KiB
Newer Older
      ${srcdir}/install-sh -c -m 644 config.temp $2/COPIED
    fi

    # Copy the directory, assuming we have tar.
    # FIXME: Should we use B in the second tar?  Not all systems support it.
    (cd $1; tar -cf - .) | (cd $2; tar -xpf -)

    # It is the responsibility of the user to correctly adjust all
    # symlinks.  If somebody can figure out how to handle them correctly
    # here, feel free to add the code.

    echo $1 > $2/COPIED
  fi
  shift; shift
done

# Work in distributions that contain no compiler tools, like Autoconf.
tentative_cc=""
host_makefile_frag=/dev/null
if test -d ${srcdir}/config ; then
case "${host}" in
  m68k-hp-hpux*)
    # Avoid "too much defining" errors from HPUX compiler.
    tentative_cc="cc -Wp,-H256000"
    # If "ar" in $PATH is GNU ar, the symbol table may need rebuilding.
    # If it's HP/UX ar, this should be harmless.
    RANLIB="ar ts"
    ;;
  m68k-apollo-sysv*)
    tentative_cc="cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DUSG"
    ;;
  m68k-apollo-bsd*)
    #None of the Apollo compilers can compile gas or binutils.  The preprocessor
    # chokes on bfd, the compiler won't let you assign integers to enums, and
    # other problems.  Defining CC to gcc is a questionable way to say "don't use
    # the apollo compiler" (the preferred version of GCC could be called cc,
    # or whatever), but I'm not sure leaving CC as cc is any better...
    #CC=cc -A ansi -A runtype,any -A systype,any -U__STDC__ -DNO_STDARG
    # Used to have BISON=yacc.
    tentative_cc=gcc
    ;;
  m88k-dg-dgux*)
    tentative_cc="gcc -Wall -ansi -D__using_DGUX"
    ;;
  m88k-harris-cxux*)
    # Under CX/UX, we want to tell the compiler to use ANSI mode.
    tentative_cc="cc -Xa"
    host_makefile_frag="config/mh-cxux"
    ;;
  m88k-motorola-sysv*)
    ;;
  mips*-dec-ultrix*)
    tentative_cc="cc -Wf,-XNg1000"
    host_makefile_frag="config/mh-decstation"
    ;;
  mips*-nec-sysv4*)
    # The C compiler on NEC MIPS SVR4 needs bigger tables.
    tentative_cc="cc -ZXNd=5000 -ZXNg=1000"
    host_makefile_frag="config/mh-necv4"
    ;;
  mips*-sgi-irix4*)
    # Tell compiler to use K&R C.  We can't compile under the SGI Ansi
    # environment.  Also bump switch table size so that cp-parse will
    # compile.  Bump string length limit so linker builds.
    tentative_cc="cc -cckr -Wf,-XNg1500 -Wf,-XNk1000 -Wf,-XNh2000 -Wf,-XNl8192"
    ;;
  mips*-*-sysv4*)
    host_makefile_frag="config/mh-sysv4"
    ;;
  mips*-*-sysv*)
    # This is for a MIPS running RISC/os 4.52C.

    # This is needed for GDB, but needs to be in the top-level make because
    # if a library is compiled with the bsd headers and gets linked with the
    # sysv system libraries all hell can break loose (e.g. a jmp_buf might be
    # a different size).
    # ptrace(2) apparently has problems in the BSD environment.  No workaround is
    # known except to select the sysv environment.  Could we use /proc instead?
    # These "sysv environments" and "bsd environments" often end up being a pain.
    #
    # This is not part of CFLAGS because perhaps not all C compilers have this
    # option.
    tentative_cc="cc -systype sysv"
    ;;
  i370-ibm-opened*)
    tentative_cc="c89"
    ;;
  i[[3456789]]86-*-sysv5*)
    host_makefile_frag="config/mh-sysv5"
    ;;
  i[[3456789]]86-*-dgux*)
    tentative_cc="gcc -Wall -ansi -D__using_DGUX"
    host_makefile_frag="config/mh-dgux386"
    ;;
  i[[3456789]]86-ncr-sysv4.3*)
    # The MetaWare compiler will generate a copyright message unless you
    # turn it off by adding the -Hnocopyr flag.
    tentative_cc="cc -Hnocopyr"
    ;;
  i[[3456789]]86-ncr-sysv4*)
    # for an NCR 3000 (i486/SVR4) system.
    # The NCR 3000 ships with a MetaWare compiler installed as /bin/cc.
    # This compiler not only emits obnoxious copyright messages every time
    # you run it, but it chokes and dies on a whole bunch of GNU source
    # files.  Default to using the AT&T compiler installed in /usr/ccs/ATT/cc.
    tentative_cc="/usr/ccs/ATT/cc"
    host_makefile_frag="config/mh-ncr3000"
    ;;
  i[[3456789]]86-*-sco3.2v5*)
  i[[3456789]]86-*-sco*)
    # The native C compiler botches some simple uses of const.  Unfortunately,
    # it doesn't defined anything like "__sco__" for us to test for in ansidecl.h.
    tentative_cc="cc -Dconst="
    host_makefile_frag="config/mh-sco"
    ;;
  i[[3456789]]86-*-udk*)
    host_makefile_frag="config/mh-sysv5"
    ;;
  i[[3456789]]86-*-solaris2*)
    host_makefile_frag="config/mh-sysv4"
    ;;
  i[[3456789]]86-*-msdosdjgpp*)
    host_makefile_frag="config/mh-djgpp"
    ;;
  *-cygwin*)
    host_makefile_frag="config/mh-cygwin"
    ;;
  *-mingw32*)
    host_makefile_frag="config/mh-mingw32"
    ;;
  *-interix*)
    host_makefile_frag="config/mh-interix"
    ;;
  vax-*-ultrix2*)
    # The old BSD pcc isn't up to compiling parts of gdb so use gcc
    tentative_cc=gcc
    ;;
  *-*-solaris2*)
    host_makefile_frag="config/mh-solaris"
    ;;
  m68k-sun-sunos*)
    # Sun's C compiler needs the -J flag to be able to compile cp-parse.c
    # without overflowing the jump tables (-J says to use a 32 bit table)
    tentative_cc="cc -J"
    ;;
  *-hp-hpux*)
    tentative_cc="cc -Wp,-H256000"
    ;;
  *-*-hiux*)
    tentative_cc="cc -Wp,-H256000"
    ;;
  rs6000-*-lynxos*)
    # /bin/cc is less than useful for our purposes.  Always use GCC
    tentative_cc="/usr/cygnus/progressive/bin/gcc"
    host_makefile_frag="config/mh-lynxrs6k"
    ;;
  *-*-lynxos*)
    # /bin/cc is less than useful for our purposes.  Always use GCC
    tentative_cc="/bin/gcc"
    ;;
  *-*-sysv4*)
    host_makefile_frag="config/mh-sysv4"
    ;;
esac
fi

extra_arflags_for_target=
extra_nmflags_for_target=
extra_ranlibflags_for_target=
target_makefile_frag=/dev/null
case "${target}" in
  i[[3456789]]86-*-netware*)
    target_makefile_frag="config/mt-netware"
    ;;
  powerpc-*-netware*)
    target_makefile_frag="config/mt-netware"
    target_makefile_frag="config/mt-linux"
  *-*-aix4.[[3456789]]* | *-*-aix[[56789]].*)
    # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm 
    # commands to handle both 32-bit and 64-bit objects.  These flags are
    # harmless if we're using GNU nm or ar.
    extra_arflags_for_target=" -X32_64"
    extra_nmflags_for_target=" -B -X32_64"
  *-*-darwin*)
    # ranlib from Darwin requires the -c flag to look at common symbols.
    extra_ranlibflags_for_target=" -c"
    ;;
  mips*-*-pe | sh*-*-pe | *arm-wince-pe)
    target_makefile_frag="config/mt-wince"
    ;;
esac

alphaieee_frag=/dev/null
case $target in
  alpha*-*-*)
    # This just makes sure to use the -mieee option to build target libs.
    # This should probably be set individually by each library.
    alphaieee_frag="config/mt-alphaieee"
# If --enable-target-optspace always use -Os instead of -O2 to build
# the target libraries, similarly if it is not specified, use -Os
# on selected platforms.
ospace_frag=/dev/null
case "${enable_target_optspace}:${target}" in
  yes:*)
    ;;
  :m32r-* | :d10v-* | :fr30-*)
    ;;
  no:* | :*)
    ;;
  *)
    echo "*** bad value \"${enable_target_optspace}\" for --enable-target-optspace flag; ignored" 1>&2
    ;;
esac
Jason Merrill's avatar
Jason Merrill committed

# Set with_gnu_as and with_gnu_ld as appropriate.
#
# This is done by determining whether or not the appropriate directory
# is available, and by checking whether or not specific configurations
# have requested that this magic not happen.
# 
# The command line options always override the explicit settings in 
# configure.in, and the settings in configure.in override this magic.
#
# If the default for a toolchain is to use GNU as and ld, and you don't 
# want to do that, then you should use the --without-gnu-as and
# --without-gnu-ld options for the configure script.

if test x${use_gnu_as} = x &&
   echo " ${configdirs} " | grep " gas " > /dev/null 2>&1 ; then
  with_gnu_as=yes
  extra_host_args="$extra_host_args --with-gnu-as"
if test x${use_gnu_ld} = x &&
   echo " ${configdirs} " | grep " ld " > /dev/null 2>&1 ; then
  with_gnu_ld=yes
  extra_host_args="$extra_host_args --with-gnu-ld"
# If using newlib, add --with-newlib to the extra_host_args so that gcc/configure
Jason Merrill's avatar
Jason Merrill committed
# can detect this case.

if test x${with_newlib} != xno && echo " ${target_configdirs} " | grep " target-newlib " > /dev/null 2>&1 ; then
Jason Merrill's avatar
Jason Merrill committed
  with_newlib=yes
  extra_host_args="$extra_host_args --with-newlib"

# Default to using --with-stabs for certain targets.
if test x${with_stabs} = x ; then
  case "${target}" in
    ;;
  mips*-*-* | alpha*-*-osf*)
    with_stabs=yes;
    extra_host_args="${extra_host_args} --with-stabs"
    ;;
  esac
fi

# hpux11 in 64bit mode has libraries in a weird place.  Arrange to find
# them automatically.
case "${host}" in
  hppa*64*-*-hpux11*)	
    extra_host_args="$extra_host_args -x-libraries=/usr/lib/pa20_64 -x-includes=/usr/X11R6/include"
# If we aren't going to be using gcc, see if we can extract a definition
# of CC from the fragment.
# Actually, use the 'pre-extracted' version above.
if test -z "${CC}" && test "${build}" = "${host}" ; then
  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
  found=
  for dir in $PATH; do
    test -z "$dir" && dir=.
    if test -f $dir/gcc; then
      found=yes
      break
    fi
  done
  IFS="$save_ifs"
  if test -z "${found}" && test -n "${tentative_cc}" ; then
    CC=$tentative_cc
  fi
fi

# Some systems (e.g., one of the i386-aix systems the gas testers are
# using) don't handle "\$" correctly, so don't use it here.
tooldir='${exec_prefix}'/${target_alias}
build_tooldir=${tooldir}

# Generate a default definition for YACC.  This is used if the makefile can't
# locate bison or byacc in objdir.

for prog in 'bison -y' byacc yacc
do
  set dummy $prog; tmp=$2
  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
  for dir in $PATH; do
    test -z "$dir" && dir=.
    if test -f $dir/$tmp; then
      DEFAULT_YACC="$prog"
      break
    fi
  done
  IFS="$save_ifs"

  test -n "$DEFAULT_YACC" && break
done

# Generate a default definition for M4.  This is used if the makefile can't
# locate m4 in objdir.

for prog in gm4 gnum4 m4
do
  set dummy $prog; tmp=$2
  IFS="${IFS=   }"; save_ifs="$IFS"; IFS="${IFS}:"
  for dir in $PATH; do
    test -z "$dir" && dir=.
    if test -f $dir/$tmp; then
      DEFAULT_M4="$prog"
      break
    fi
  done
  IFS="$save_ifs"

  test -n "$DEFAULT_M4" && break
done

# Generate a default definition for LEX.  This is used if the makefile can't
# locate flex in objdir.

for prog in flex lex
do
  set dummy $prog; tmp=$2
  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
  for dir in $PATH; do
    test -z "$dir" && dir=.
    if test -f $dir/$tmp; then
      DEFAULT_LEX="$prog"
      break
    fi
  done
  IFS="$save_ifs"

  test -n "$DEFAULT_LEX" && break
done

if test "${build}" != "${host}" ; then
  # If we are doing a Canadian Cross, in which the host and build systems
  # are not the same, we set reasonable default values for the tools.

  BISON=${BISON-bison}
  CC=${CC-${host_alias}-gcc}
  CFLAGS=${CFLAGS-"-g -O2"}
  CXX=${CXX-${host_alias}-c++}
  CXXFLAGS=${CXXFLAGS-"-g -O2"}
  CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
  CC_FOR_TARGET=${CC_FOR_TARGET-${target_alias}-gcc}
  CXX_FOR_TARGET=${CXX_FOR_TARGET-${target_alias}-c++}
  GCJ_FOR_TARGET=${GCJ_FOR_TARGET-${target_alias}-gcj}
  GCC_FOR_TARGET=${GCC_FOR_TARGET-${CC_FOR_TARGET-${target_alias}-gcc}}
  BUILD_PREFIX=${build_alias}-
  BUILD_PREFIX_1=${build_alias}-
  MAKEINFO=${MAKEINFO-makeinfo}

  if test -z "${YACC}" ; then
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
    for dir in $PATH; do
      test -z "$dir" && dir=.
      if test -f $dir/bison; then
	YACC="bison -y"
	break
      fi
      if test -f $dir/byacc; then
	YACC=byacc
	break
      fi
      if test -f $dir/yacc; then
	YACC=yacc
	break
      fi
    done
    IFS="$save_ifs"
    if test -z "${YACC}" ; then
      YACC="bison -y"
    fi
  fi

  if test -z "${LEX}" ; then
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
    for dir in $PATH; do
      test -z "$dir" && dir=.
      if test -f $dir/flex; then
	LEX=flex
	break
      fi
      if test -f $dir/lex; then
	LEX=lex
	break
      fi
    done
    IFS="$save_ifs"
    LEX=${LEX-flex}
  fi

else
  # Set reasonable default values for some tools even if not Canadian.
  # Of course, these are different reasonable default values, originally
  # specified directly in the Makefile.
  # We don't export, so that autoconf can do its job.
  # Note that all these settings are above the fragment inclusion point
  # in Makefile.in, so can still be overridden by fragments.
  # This is all going to change when we autoconfiscate...

  BISON="\$(USUAL_BISON)"
  CC_FOR_BUILD="\$(CC)"
  GCC_FOR_TARGET="\$(USUAL_GCC_FOR_TARGET)"
  BUILD_PREFIX=
  BUILD_PREFIX_1=loser-
  MAKEINFO="\$(USUAL_MAKEINFO)"
  LEX="\$(USUAL_LEX)"
  YACC="\$(USUAL_YACC)"

  # If CC is still not set, try to get gcc.
  if test -z "${CC}" ; then
    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
    for dir in $PATH; do
      test -z "$dir" && dir=.
      if test -f $dir/gcc; then
	CC="gcc"
	cc_prog_is_gcc=yes
	echo 'void f(){}' > conftest.c
	if test -z "`${CC} -g -c conftest.c 2>&1`"; then
	  CFLAGS=${CFLAGS-"-g -O2"}
	  CXXFLAGS=${CXXFLAGS-"-g -O2"}
	else
	  CFLAGS=${CFLAGS-"-O2"}
	  CXXFLAGS=${CXXFLAGS-"-O2"}
	fi
	rm -f conftest*
	break
      fi
    done
    IFS="$save_ifs"
    CC=${CC-cc}
  else
    # Determine if we are using gcc.
    cat > conftest.c <<EOF
#ifdef __GNUC__
  yes;
#endif
EOF
    if ${CC} -E conftest.c | grep yes >/dev/null 2>&1; then
      cc_prog_is_gcc=yes
    fi
    rm -f conftest.c
    if test -z "${CFLAGS}"; then
      # Here CC is set but CFLAGS is not.  Use a quick hack to use -O2 if CC
      # is set to a version of gcc.
      if test "$cc_prog_is_gcc" = yes; then
	echo 'void f(){}' > conftest.c
	if test -z "`${CC} -g -c conftest.c 2>&1`"; then
	  CFLAGS=${CFLAGS-"-g -O2"}
	  CXXFLAGS=${CXXFLAGS-"-g -O2"}
	else
	  CFLAGS=${CFLAGS-"-O2"}
	  CXXFLAGS=${CXXFLAGS-"-O2"}
	fi
	rm -f conftest*
      fi
    fi
  fi

  # We must set the default linker to the linker used by gcc for the correct
  # operation of libtool.  If LD is not defined and we are using gcc, try to
  # set the LD default to the ld used by gcc.
  if test -z "$LD"; then
    if test "$cc_prog_is_gcc" = yes; then
      case $build in
      *-*-mingw*)
	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
      *)
	gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
      esac
      case $gcc_prog_ld in
      # Accept absolute paths.
      [[\\/]* | [A-Za-z]:[\\/]*)]
        LD="$gcc_prog_ld" ;;
      esac
    fi
  fi

  CXX=${CXX-"c++"}
  CFLAGS=${CFLAGS-"-g"}
  CXXFLAGS=${CXXFLAGS-"-g -O2"}
fi

# FIXME Should this be done recursively ??? (Useful for e.g. gdbtest)
# Set up the list of links to be made.
# ${links} is the list of link names, and ${files} is the list of names to link to.

# Make the links.
configlinks="${links}"
if test -r ./config.status  ; then
  mv -f ./config.status ./config.back
fi
while test -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 test ! -r ${srcdir}/${file} ; then
    if test ! -r ${file} ; then
      echo '***' "${progname}: cannot create a link \"${link}\"," 1>&2
      echo '***' "since the file \"${srcdir}/${file}\" does not exist." 1>&2
      exit 1
    else
      srcfile=${file}
    fi
  else
    srcfile=${srcdir}/${file}
  fi

  ${remove} -f ${link}
  # Make a symlink if possible, otherwise try a hard link
  if ${symbolic_link} ${srcfile} ${link} >/dev/null 2>&1 ; then
    true
  else
    # We need to re-remove the file because Lynx leaves a 
    # very strange directory there when it fails an NFS symlink.
    ${remove} -r -f ${link}
    ${hard_link} ${srcfile} ${link}
  fi
  if test ! -r ${link} ; then
    echo '***' "${progname}: unable to link \"${link}\" to \"${srcfile}\"." 1>&2
    exit 1
  fi

  echo "Linked \"${link}\" to \"${srcfile}\"."
done

# Create a .gdbinit file which runs the one in srcdir
# and tells GDB to look there for source files.

if test -r ${srcdir}/.gdbinit ; then
  case ${srcdir} in
    .) ;;
    *) cat > ./.gdbinit <<EOF
# ${NO_EDIT}
dir ${srcdir}
dir .
source ${srcdir}/.gdbinit
EOF
    ;;
  esac
fi

Jason Merrill's avatar
Jason Merrill committed
# Make sure that the compiler is able to generate an executable.  If it
# can't, we are probably in trouble.  We don't care whether we can run the
# executable--we might be using a cross compiler--we only care whether it
# can be created.  At this point the main configure script has set CC.
Jason Merrill's avatar
Jason Merrill committed
echo "int main () { return 0; }" > conftest.c
${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c
if test $? = 0 ; then
  if test -s conftest || test -s conftest.exe ; then
    we_are_ok=yes
  fi
fi 
case $we_are_ok in
  no)
    echo 1>&2 "*** The command '${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c' failed."
    echo 1>&2 "*** You must set the environment variable CC to a working compiler."
    rm -f conftest*
    exit 1
    ;;
esac
Jason Merrill's avatar
Jason Merrill committed
rm -f conftest*

# The Solaris /usr/ucb/cc compiler does not appear to work.
case "${host}" in
  sparc-sun-solaris2*)
      CCBASE="`echo ${CC-cc} | sed 's/ .*$//'`"
      if test "`type $CCBASE | sed 's/^[[^/]]*//'`" = "/usr/ucb/cc" ; then
Jason Merrill's avatar
Jason Merrill committed
          could_use=
          test -d /opt/SUNWspro/bin && could_use="/opt/SUNWspro/bin"
          if test -d /opt/cygnus/bin ; then
              if test "$could_use" = "" ; then
Jason Merrill's avatar
Jason Merrill committed
                  could_use="/opt/cygnus/bin"
              else
                  could_use="$could_use or /opt/cygnus/bin"
              fi
          fi
        if test "$could_use" = "" ; then
Jason Merrill's avatar
Jason Merrill committed
            echo "Warning: compilation may fail because you're using"
            echo "/usr/ucb/cc.  You should change your PATH or CC "
            echo "variable and rerun configure."
        else
            echo "Warning: compilation may fail because you're using"
            echo "/usr/ucb/cc, when you should use the C compiler from"
            echo "$could_use.  You should change your"
            echo "PATH or CC variable and rerun configure."
        fi
      fi
  ;;
esac

# If --enable-shared was set, we must set LD_LIBRARY_PATH so that the
# binutils tools will find libbfd.so.
case "${enable_shared}" in
  no | "") SET_LIB_PATH= ;;
  *) SET_LIB_PATH="\$(REALLY_SET_LIB_PATH)" ;;
esac

case "${host}" in
  *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
  *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
esac

# Record target_configdirs and the configure arguments for target and
# build configuration in Makefile.
target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`

# This is the final value for target_configdirs.  configdirs already
Nathanael Nerode's avatar
Nathanael Nerode committed
# has its final value, as does build_modules.  It's time to create some 
# lists of valid targets.
all_build_modules=
configure_build_modules=
Nathanael Nerode's avatar
Nathanael Nerode committed
for module in ${build_modules} ; do
  all_build_modules=all-build-${module}
  configure_build_modules=configure-build-${module}
done

# Determine whether gdb needs tk/tcl or not.
# Use 'maybe' since enable_gdbtk might be true even if tk isn't available
# and in that case we want gdb to be built without tk.  Ugh!
# In fact I believe gdb is the *only* package directly dependent on tk,
# so we should be able to put the 'maybe's in unconditionally and
# leave out the maybe dependencies when enable_gdbtk is false.  I'm not
# 100% sure that that's safe though.

gdb_tk="maybe-all-tcl maybe-all-tk maybe-all-itcl maybe-all-tix maybe-all-libgui"
case "$enable_gdbtk" in
  no)
    GDB_TK="" ;;
    # Only add the dependency on gdbtk when GDBtk is part of the gdb
    # distro.  Eventually someone will fix this and move Insight, nee
    # gdbtk to a separate directory.
    if test -d ${srcdir}/gdb/gdbtk ; then
      GDB_TK="${gdb_tk}"
    else
      GDB_TK=""
    fi
    ;;
esac

# Create the 'maybe dependencies'.  This uses a temporary file.
Nathanael Nerode's avatar
Nathanael Nerode committed

# While at that, we remove Makefiles if we were started for recursive
# configuration, so that the top-level Makefile reconfigures them,
# like we used to do when configure itself was recursive.
rm -f maybedep.tmp
Nathanael Nerode's avatar
Nathanael Nerode committed

# Make-targets which may need maybe dependencies.
mts="configure all install check clean distclean dvi info install-info"
mts="${mts} installcheck mostlyclean maintainer-clean TAGS"
Nathanael Nerode's avatar
Nathanael Nerode committed

# Loop over modules and make-targets.
for module in ${build_modules} ; do
  if test -z "${no_recursion}" \
     && test -f ${build_subdir}/${module}/Makefile; then
    echo 1>&2 "*** removing ${build_subdir}/${module}/Makefile to force reconfigure"
    rm -f ${build_subdir}/${module}/Makefile
  fi
  for mt in ${mts} ; do
    case ${mt} in
      install) ;; # No installing build modules.
      *) echo "maybe-${mt}-build-${module}: ${mt}-build-${module}" >> maybedep.tmp ;;
    esac
  done
done
for module in ${configdirs} ; do
  if test -z "${no_recursion}" \
     && test -f ${module}/Makefile; then
    echo 1>&2 "*** removing ${module}/Makefile to force reconfigure"
    rm -f ${module}/Makefile
  fi
  for mt in ${mts} ; do
    echo "maybe-${mt}-${module}: ${mt}-${module}" >> maybedep.tmp
  done
done
for module in ${target_configdirs} ; do
  if test -z "${no_recursion}" \
     && test -f ${target_subdir}/${module}/Makefile; then
    echo 1>&2 "*** removing ${target_subdir}/${module}/Makefile to force reconfigure"
    rm -f ${target_subdir}/${module}/Makefile
  fi
  for mt in ${mts} ; do
    echo "maybe-${mt}-target-${module}: ${mt}-target-${module}" >> maybedep.tmp
  done
maybe_dependencies=maybedep.tmp
AC_SUBST_FILE(maybe_dependencies)

# Create the serialization dependencies.  This uses a temporary file.

[  --enable-serial-[{host,target,build}-]configure
                          Force sequential configuration of
                          sub-packages for the host, target or build
			  machine, or all sub-packages])

case ${enable_serial_configure} in
  yes)
    enable_serial_build_configure=yes
    enable_serial_host_configure=yes
    enable_serial_target_configure=yes
    ;;
esac
# These force 'configure's to be done one at a time, to avoid problems
# with contention over a shared config.cache.
rm -f serdep.tmp
test "x${enable_serial_build_configure}" = xyes &&
for item in ${build_configdirs} ; do
  case ${olditem} in
    "") ;;
    *) echo "configure-build-${item}: configure-build-${olditem}" >> serdep.tmp ;;
  esac
  olditem=${item}
done
olditem=
test "x${enable_serial_host_configure}" = xyes &&
for item in ${configdirs} ; do
  case ${olditem} in
    "") ;;
    *) echo "configure-${item}: configure-${olditem}" >> serdep.tmp ;;
  esac
  olditem=${item}
done
olditem=
test "x${enable_serial_target_configure}" = xyes &&
for item in ${target_configdirs} ; do
  case ${olditem} in
    "") ;;
    *) echo "configure-target-${item}: configure-target-${olditem}" >> serdep.tmp ;;
  esac
  olditem=${item}
done
serialization_dependencies=serdep.tmp
AC_SUBST_FILE(serialization_dependencies)
# Base args.  Strip norecursion, cache-file, srcdir, host, build,
# target and nonopt.  These are the ones we might not want to pass
# down to subconfigures.  Also strip program-prefix, program-suffix,
# and program-transform-name, so that we can pass down a consistent
# program-transform-name.  If autoconf has put single quotes around
# any of these arguments (because they contain shell metacharacters)
# then this will fail; in practice this only happens for
# --program-transform-name, so be sure to override --program-transform-name
# at the end of the argument list.
# These will be expanded by make, so quote '$'.
cat <<\EOF_SED > conftestsed
s/ --no[[^ ]]* / /
s/ --c[[a-z-]]*[[= ]][[^ ]]* / /
s/ --sr[[a-z-]]*[[= ]][[^ ]]* / /
s/ --ho[[a-z-]]*[[= ]][[^ ]]* / /
s/ --bu[[a-z-]]*[[= ]][[^ ]]* / /
s/ --t[[a-z-]]*[[= ]][[^ ]]* / /
s/ --program-[[pst]][[a-z-]]*[[= ]][[^ ]]* / /
s/ -cache-file[[= ]][[^ ]]* / /
s/ -srcdir[[= ]][[^ ]]* / /
s/ -host[[= ]][[^ ]]* / /
s/ -build[[= ]][[^ ]]* / /
s/ -target[[= ]][[^ ]]* / /
s/ -program-prefix[[= ]][[^ ]]* / /
s/ -program-suffix[[= ]][[^ ]]* / /
s/ -program-transform-name[[= ]][[^ ]]* / /
s,\$,$$,g
EOF_SED
sed -f conftestsed <<EOF_SED > conftestsed.out
 ${ac_configure_args} 
baseargs=`cat conftestsed.out`
rm -f conftestsed conftestsed.out
Jason Merrill's avatar
Jason Merrill committed

# Add in --program-transform-name, after --program-prefix and
# --program-suffix have been applied to it.  Autoconf has already
# doubled dollar signs and backslashes in program_transform_name; we want
# the backslashes un-doubled, and then the entire thing wrapped in single
# quotes, because this will be expanded first by make and then by the shell. 
# Also, because we want to override the logic in subdir configure scripts to
# choose program_transform_name, replace any s,x,x, with s,y,y,.
sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g; s/s,x,x,/s,y,y,/" <<EOF_SED > conftestsed.out
${program_transform_name}
EOF_SED
gcc_transform_name=`cat conftestsed.out`
rm -f conftestsed.out
baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"

Zack Weinberg's avatar
Zack Weinberg committed
# For the build-side libraries, we just need to pretend we're native,
# and not use the same cache file.  Multilibs are neither needed nor
# desired.
build_configargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} ${baseargs}"
# For host modules, accept cache file option, or specification as blank.
case "${cache_file}" in
"") # empty
  cache_file_option="" ;;
/* | [[A-Za-z]]:[[\\/]]* ) # absolute path
  cache_file_option="--cache-file=${cache_file}" ;;
*) # relative path
  cache_file_option="--cache-file=../${cache_file}" ;;
esac

# Host dirs don't like to share a cache file either, horribly enough.
# This seems to be due to autoconf 2.5x stupidity.
host_configargs="--cache-file=./config.cache --build=${build_alias} --host=${host_alias} --target=${target_alias} ${extra_host_args} ${baseargs}"
Zack Weinberg's avatar
Zack Weinberg committed

Jason Merrill's avatar
Jason Merrill committed
# Passing a --with-cross-host argument lets the target libraries know
# whether they are being built with a cross-compiler or being built
# native.  However, it would be better to use other mechanisms to make the
# sorts of decisions they want to make on this basis.  Please consider
# this option to be deprecated.  FIXME.
if test x${is_cross_compiler} = xyes ; then
  target_configargs="--with-cross-host=${host_alias} ${target_configargs}"
Jason Merrill's avatar
Jason Merrill committed
fi

# Default to --enable-multilib.
if test x${enable_multilib} = x ; then
  target_configargs="--enable-multilib ${target_configargs}"
# Pass --with-newlib if appropriate.  Note that target_configdirs has
# changed from the earlier setting of with_newlib.
if test x${with_newlib} != xno && echo " ${target_configdirs} " | grep " newlib " > /dev/null 2>&1 && test -d ${srcdir}/newlib ; then
  target_configargs="--with-newlib ${target_configargs}"
# Different target subdirs use different values of certain variables
# (notably CXX).  Worse, multilibs use *lots* of different values.
# Worse yet, autoconf 2.5x makes some of these 'precious', meaning that
# it doesn't automatically accept command-line overrides of them.
# This means it's not safe for target subdirs to share a cache file,
# which is disgusting, but there you have it.  Hopefully this can be
# fixed in future.  It's still worthwhile to use a cache file for each
# directory.  I think.

Zack Weinberg's avatar
Zack Weinberg committed
# Pass the appropriate --host, --build, and --cache-file arguments.
target_configargs="--cache-file=./config.cache --host=${target_alias} --build=${build_alias} ${target_configargs}"
Zack Weinberg's avatar
Zack Weinberg committed

# provide a proper gxx_include_dir.
# Note, if you change the default, make sure to fix both here and in
# the gcc and libstdc++-v3 subdirectories.
# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
case "${with_gxx_include_dir}" in
  yes)
    AC_MSG_ERROR([--with-gxx-include-dir=[[dir]] requires a directory])
    ;;
  no | "")
    case "${enable_version_specific_runtime_libs}" in
      yes) gxx_include_dir='${libsubdir}/include/c++' ;;
      *)
        . ${srcdir}/config.if
        gxx_include_dir='${prefix}/include/'${libstdcxx_incdir} ;;
    esac ;;
  *) gxx_include_dir=${with_gxx_include_dir} ;;
esac
FLAGS_FOR_TARGET=
case " $target_configdirs " in
   case "$target" in
     FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/winsup -L$$r/$(TARGET_SUBDIR)/winsup/cygwin -L$$r/$(TARGET_SUBDIR)/winsup/w32api/lib -isystem $$s/winsup/include -isystem $$s/winsup/cygwin/include -isystem $$s/winsup/w32api/include' ;;
   # If we're not building GCC, don't discard standard headers.
   if test -d ${srcdir}/gcc; then
     FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -nostdinc'

     if test "${build}" != "${host}"; then
       # On Canadian crosses, CC_FOR_TARGET will have already been set
       # by `configure', so we won't have an opportunity to add -Bgcc/
       # to it.  This is right: we don't want to search that directory
       # for binaries, but we want the header files in there, so add
       # them explicitly.
       FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/gcc/include'

       # Someone might think of using the pre-installed headers on
       # Canadian crosses, in case the installed compiler is not fully
       # compatible with the compiler being built.  In this case, it
       # would be better to flag an error than risking having
       # incompatible object files being constructed.  We can't
       # guarantee that an error will be flagged, but let's hope the
       # compiler will do it, when presented with incompatible header
       # files.
     fi
   case "${target}-${is_cross_compiler}" in
   i[[3456789]]86-*-linux*-no)
      # Here host == target, so we don't need to build gcc,
      # so we don't want to discard standard headers.
      FLAGS_FOR_TARGET=`echo " $FLAGS_FOR_TARGET " | sed -e 's/ -nostdinc / /'`
      ;;
   *)
      # If we're building newlib, use its generic headers last, but search
      # for any libc-related directories first (so make it the last -B
      # switch).
      FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$$r/$(TARGET_SUBDIR)/newlib/ -isystem $$r/$(TARGET_SUBDIR)/newlib/targ-include -isystem $$s/newlib/libc/include'
      ;;
   esac
# Allow the user to override the flags for
# our build compiler if desired.
CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}

# On Canadian crosses, we'll be searching the right directories for
# the previously-installed cross compiler, so don't bother to add
# flags for directories within the install tree of the compiler
# being built; programs in there won't even run.
if test "${build}" = "${host}" && test -d ${srcdir}/gcc; then
  # Search for pre-installed headers if nothing else fits.
  FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include'
if test "x${use_gnu_ld}" = x &&
   echo " ${configdirs} " | grep " ld " > /dev/null ; then
  # Arrange for us to find uninstalled linker scripts.
  FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/ld'
fi

if test "x${CC_FOR_TARGET+set}" = xset; then
  :
elif test -d ${srcdir}/gcc; then
  CC_FOR_TARGET='$$r/gcc/xgcc -B$$r/gcc/'
elif test "$host" = "$target"; then
  CC_FOR_TARGET='$(CC)'
else
  CC_FOR_TARGET=`echo gcc | sed "${program_transform_name}"`
CC_FOR_TARGET=$CC_FOR_TARGET' $(FLAGS_FOR_TARGET)'
if test "x${GCJ_FOR_TARGET+set}" = xset; then
  :
elif test -d ${srcdir}/gcc; then
  GCJ_FOR_TARGET='$$r/gcc/gcj -B$$r/gcc/'
elif test "$host" = "$target"; then
  GCJ_FOR_TARGET='gcj'
else
  GCJ_FOR_TARGET=`echo gcj | sed "${program_transform_name}"`
GCJ_FOR_TARGET=$GCJ_FOR_TARGET' $(FLAGS_FOR_TARGET)'
# Don't use libstdc++-v3's flags to configure/build itself.
libstdcxx_flags='`test ! -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags || $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags --build-includes` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'
raw_libstdcxx_flags='-L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'
if test "x${CXX_FOR_TARGET+set}" = xset; then
  if test "x${RAW_CXX_FOR_TARGET+set}" != xset; then
    RAW_CXX_FOR_TARGET=${CXX_FOR_TARGET}
  fi
elif test -d ${srcdir}/gcc; then
  # We add -shared-libgcc to CXX_FOR_TARGET whenever we use xgcc instead
  # of g++ for linking C++ or Java, because g++ has -shared-libgcc by
  # default whereas gcc does not.