home *** CD-ROM | disk | FTP | other *** search
/ Serving the Web / ServingTheWeb1995.disc1of1.iso / linux / slacksrce / d / libc / libc-4.6 / libc-4 / libc-linux / configure < prev    next >
Encoding:
Text File  |  1994-11-12  |  8.5 KB  |  395 lines

  1. #! /bin/sh
  2. #
  3. # Changes by H.J.Lu
  4. # Original version Mitchum Dsouza <m.dsouza@mrc-apu.cam.ac.uk>
  5. #
  6. # Simple libc configuration script tested with `bash' and `ksh' and
  7. # Sun `sh'
  8.  
  9. # The following two are the ANSI sequences for start and end embolden
  10. case $TERM in
  11. vt*|ansi*|con*|xterm*)
  12.   S=
  13.   E=
  14.   ;;
  15. *)
  16.   S=
  17.   E=
  18.   ;;
  19. esac
  20.  
  21. # Define some defaults
  22. TARGET_OS=linux
  23. HOST_ROOTDIR=/usr
  24. HOST_BINDIR=${HOST_ROOTDIR}/bin
  25. TARGET_ROOTDIR=/
  26. STATIC_SHARED=
  27. SPEED=fast
  28. BAD_GCCVERSION="Invalid gcc version"
  29. LIBGCC=`gcc --print-libgcc-file-name`
  30.  
  31. # Get the latest nys directory
  32. NYSDIR="`echo nys* | awk '{print $NF}'`"
  33.  
  34. if [ -f ./config.in ]; then 
  35.      grep = ./config.in | .
  36. fi
  37.  
  38. response() {
  39.     echo -n "$1 [$2] ? " 1> /dev/tty
  40.     read answer
  41.     if [ x${answer} = x ]; then
  42.         echo $2
  43.     else
  44.         echo ${answer}
  45.     fi
  46. }
  47.  
  48. getresponse ()
  49. {
  50.   OLD_TARGET_MACHINE=${TARGET_MACHINE}
  51.  
  52.   case ${TARGET_ARCH} in
  53.   i*86|pentium)
  54.     TMP=4 
  55.     ;;
  56.   *)
  57.     TMP=m;
  58.     ;;
  59.   esac
  60.   TARGET_ARCH=`response "Build 386, 486 or m68k library code (486 default) 4/3/m" "${TMP}"`
  61.  
  62.   case i${TARGET_ARCH} in
  63.   i4)
  64.     TARGET_MACHINE=i486-linux
  65.     TARGET_ARCH_486=true;
  66.     TARGET_ARCH=i386;
  67.     ;;
  68.   i3)
  69.     TARGET_MACHINE=i386-linux
  70.     TARGET_ARCH_486=false;
  71.     TARGET_ARCH=i386;
  72.     ;;
  73.   im)
  74.     TARGET_MACHINE=m68k-linux
  75.     TARGET_ARCH_486=false;
  76.     TARGET_ARCH=m68k;
  77.     ;;
  78.   *)
  79.     echo Unknown arch: \"${TARGET_ARCH}\".
  80.     exit 1
  81.     ;;
  82.   esac
  83.  
  84.   TARGET_MACHINE=`response "The target platform" "${TARGET_MACHINE}"`
  85.   TARGET_OS=`response "The target OS" "${TARGET_OS}"`
  86.  
  87.   TMP=a
  88.   STATIC_SHARED=`response "Build targets (static/shared default) s/a" "${TMP}"`
  89.   case i${STATIC_SHARED} in
  90.   is)
  91.     STATIC_SHARED=true
  92.     ;;
  93.   *)
  94.     STATIC_SHARED=
  95.     ;;
  96.   esac
  97.   
  98.   get_host_rootdir $TARGET_MACHINE
  99.   HOST_ROOTDIR=`response "Root path to $TARGET_MACHINE related files" "${HOST_ROOTDIR}"`
  100.   HOST_BINDIR=`response "Bin path to gcc" "${HOST_BINDIR}"`
  101.   GCCVERSION=`response "The gcc version" "${GCCVERSION}"`
  102.  
  103.   TMP=f
  104.   SPEED=`response "Fast build/save space (fast default) f/s" "${TMP}"`
  105.   case i${SPEED}x in
  106.   ifx)
  107.     SPEED=fast
  108.     ;;
  109.   *)
  110.     SPEED=
  111.     ;;
  112.   esac
  113.  
  114.   MAKE=`response "GNU \\\`make' executable" "${MAKE}"`
  115.   TARGET_ROOTDIR=`response "Root path to installation dirs" "${TARGET_ROOTDIR}"`
  116.  
  117.   if [ x${NYSDIR} != x ]; then
  118.   TMP=n
  119.   NYS=`response "Build a NYS libc from ${NYSDIR} (y default)  y/n" "${TMP}"`
  120.   case i${NYS}x in
  121.   iyx)
  122.     NYS=true
  123.     ( cd jump/libc-nys; ./genfuncs )
  124.     ;;
  125.   *)
  126.     NYS=
  127.     ;;
  128.   esac
  129.   fi
  130. }
  131.  
  132. showdefaults ()
  133. {
  134.   echo 
  135.   echo *******Current defaults********
  136.   echo
  137.   if [ ${TARGET_ARCH_486} = "true" ]; then
  138.     echo "Build ${S}${TARGET_MACHINE}${E} library for ${S}i486${E} running ${S}${TARGET_OS}${E}"
  139.   else
  140.     echo "Build ${S}${TARGET_MACHINE}${E} library for ${S}${TARGET_ARCH}${E} running ${S}${TARGET_OS}${E}"
  141.   fi
  142.   if [ x${STATIC_SHARED} = x"true" ]; then
  143.     echo "Build targets are ${S}static and shared libraries only${E}."
  144.   else
  145.     echo "Build targets are ${S}static, shared, debug and profile libraries${E}."
  146.   fi
  147.   echo "Root path to ${S}${TARGET_MACHINE}${E} related files is ${S}${HOST_ROOTDIR}${E}"
  148.   echo "Bin path to gcc is ${S}${HOST_BINDIR}${E}"
  149.   echo "The version of gcc to be used is ${S}${GCCVERSION}${E}"
  150.   if [ x${SPEED} = x"fast" ]; then
  151.     echo "Build option is ${S}fast build${E}."
  152.   else
  153.     echo "Build option is ${S}save space${E}."
  154.   fi
  155.   echo "GNU \`make' executable is ${S}${MAKE}${E}"
  156.   echo "Root path to installation dirs is ${S}${TARGET_ROOTDIR}${E}"
  157.   if [ x${NYS} != x -a x${NYSDIR} != x ]; then
  158.     echo "Build a NYS libc from ${S}${NYSDIR}${E}."
  159.   fi
  160.  
  161.   echo
  162. }
  163.  
  164. get_gnu_make ()
  165. {
  166.   make_list="make gmake gnumake"
  167.   gf=0
  168.   v=
  169.  
  170.   for m in $make_list
  171.   do
  172.     $m -v 2> /dev/null | grep GNU > /dev/null 2>&1
  173.     if [ $? = 0 ]; then
  174.       gf=1
  175.       TMP=`$m -v 2> /dev/null | head -1 | grep GNU | cut -f4 -d' '`
  176.       v="$TMP $v"
  177.       case $TMP in
  178.       3.7*|3.8*|3.9*|4*|5*|6*|7*|8*|9*)
  179.         MAKE=$m
  180.         return
  181.        ;;
  182.       esac
  183.     fi
  184.   done
  185.  
  186.   if [ $gf = 1 ]; then
  187.     echo GNU make version, $v are found. Need GNU make 3.70 or above.
  188.   else
  189.     echo No GNU make is found. Need GNU make 3.70 or above.
  190.   fi
  191.   exit 1
  192. }
  193.  
  194. get_target_rootdir ()
  195. {
  196.   if [ -d /home/linux ]; then
  197.     TARGET_ROOTDIR=/home/linux
  198.   fi
  199. }
  200.  
  201. get_host_rootdir ()
  202. {
  203.   target=$1
  204. #  LIBGCC=`gcc --print-libgcc-file-name`
  205.  
  206.   if [ ${LIBGCC} != libgcc.a ]; then
  207.     position=2
  208.     TMP=`echo $LIBGCC | cut -f$position -d'/'`
  209.     HOST_ROOTDIR=
  210.     HOST_ROOTDIR=$HOST_ROOTDIR/$TMP
  211.     until [ $TMP = "lib" ]
  212.     do
  213.       position=`expr $position + 1`
  214.       TMP=`echo $LIBGCC | cut -f$position -d'/'`
  215.       HOST_ROOTDIR=$HOST_ROOTDIR/$TMP
  216.     done
  217.     HOST_ROOTDIR=`(cd $HOST_ROOTDIR/..; pwd)`
  218.     HOST_BINDIR=${HOST_ROOTDIR}/bin
  219.   fi
  220. }
  221.  
  222. get_default_gcc_version ()
  223. {
  224. #  LIBGCC=`gcc -b $1 --print-libgcc-file-name`
  225.  
  226.   if [ ${LIBGCC} != libgcc.a ]; then
  227.     position=2
  228.     TMP=`echo $LIBGCC | cut -f$position -d'/'`
  229.     until [ $TMP = "gcc-lib" ]
  230.     do
  231.       position=`expr $position + 1`
  232.       TMP=`echo $LIBGCC | cut -f$position -d'/'`
  233.     done
  234.     position=`expr $position + 2`
  235.     GCCVERSION=`echo $LIBGCC | cut -f$position -d'/'`
  236.   else
  237.     GCCVERSION="${BAD_GCCVERSION}"
  238.   fi
  239. }
  240.  
  241. get_default_gcc_target ()
  242. {
  243. #  LIBGCC=`gcc --print-libgcc-file-name`
  244.  
  245.   if [ ${LIBGCC} != libgcc.a ]; then
  246.     position=2
  247.     TMP=`echo $LIBGCC | cut -f$position -d'/'`
  248.     until [ $TMP = "gcc-lib" ]
  249.     do
  250.       position=`expr $position + 1`
  251.       TMP=`echo $LIBGCC | cut -f$position -d'/'`
  252.     done
  253.     position=`expr $position + 1`
  254.     DEFAULT_GCC_TARGET=`echo $LIBGCC | cut -f$position -d'/'`
  255.   fi
  256. }
  257.  
  258. get_target_info ()
  259. {
  260. #  LIBGCC=`gcc --print-libgcc-file-name`
  261.  
  262.   if [ ${LIBGCC} != libgcc.a ]; then
  263.     position=2
  264.     TMP=`echo $LIBGCC | cut -f$position -d'/'`
  265.     GCC_LIB_DIR=
  266.     GCC_LIB_DIR=$GCC_LIB_DIR/$TMP
  267.     until [ $TMP = "gcc-lib" ]
  268.     do
  269.       position=`expr $position + 1`
  270.       TMP=`echo $LIBGCC | cut -f$position -d'/'`
  271.       GCC_LIB_DIR=$GCC_LIB_DIR/$TMP
  272.     done
  273.     TARGET_MACHINE=`(cd $GCC_LIB_DIR; echo *linux*)`
  274.     if [ xx"${TARGET_MACHINE}"xx != xxxx ]; then
  275.       if [ `echo $TARGET_MACHINE | wc -w` != 1 ]; then
  276.     echo More than one Linux targets found:
  277.     echo "    $TARGET_MACHINE"
  278.     echo $TARGET_MACHINE | grep $DEFAULT_GCC_TARGET > /dev/null
  279.     if [ $? = 0 ]; then
  280.       TARGET_MACHINE=$DEFAULT_GCC_TARGET
  281.     else
  282.       TARGET_MACHINE=`echo $TARGET_MACHINE | cut -f1 -d ' '`
  283.     fi
  284.     echo \"$TARGET_MACHINE\" is chosen.
  285.       fi
  286.       TARGET_OS=linux
  287.       case $TARGET_MACHINE in
  288.       *486*)
  289.     TARGET_ARCH_486=true
  290.     TARGET_ARCH=i386
  291.     ;;
  292.       *386*)
  293.     TARGET_ARCH_486=false
  294.     TARGET_ARCH=i386
  295.     ;;
  296.       *68*)
  297.     TARGET_ARCH_486=false
  298.     TARGET_ARCH=m68k
  299.     ;;
  300.       *)
  301.     echo Oops: Unknown target machine "$TARGET_MACHINE".
  302.     ;;
  303.       esac
  304.     fi
  305.   fi
  306. }
  307.  
  308. get_host_info ()
  309. {
  310.   # First check out who you are.
  311.   HOST_OS=`uname -s`
  312.  
  313.   case $HOST_OS in
  314.   [Ll][Ii][Nn][Uu][Xx])
  315.     HOST_OS=linux
  316.     HOST_ROOTDIR=/usr
  317.     HOST_BINDIR=${HOST_ROOTDIR}/bin
  318.     TARGET_ROOTDIR=/
  319.     get_default_gcc_target
  320.     TARGET_ARCH=`uname -m`
  321.     case $TARGET_ARCH in
  322.     *386*)
  323.      TARGET_ARCH_486=false
  324.      TARGET_ARCH=i386
  325.      ;;
  326.     *486*)
  327.      TARGET_ARCH_486=true
  328.      TARGET_ARCH=i386
  329.      ;;
  330.     *68*)
  331.      TARGET_ARCH_486=false
  332.      TARGET_ARCH=m68k
  333.      ;;
  334.     esac
  335.     ;;
  336.   *)
  337.     get_host_rootdir $TARGET_MACHINE
  338.     get_target_rootdir
  339.     ;;
  340.   esac
  341. }
  342.  
  343. get_default_gcc_target
  344. get_target_info
  345. get_host_info
  346. get_gnu_make
  347. get_default_gcc_version $TARGET_MACHINE
  348. #GCCVERSION=`gcc --version`
  349. get_host_rootdir $TARGET_MACHINE
  350.  
  351. showdefaults
  352. if [ "${GCCVERSION}" = "${BAD_GCCVERSION}" ]; then
  353.   echo Please provide a valid gcc version: ${S}${BAD_GCCVERSION}${E}!
  354.   echo
  355.   ans=n
  356. else
  357.   ans=`response "Values correct (y/n)" "y"`
  358. fi
  359.  
  360. while [ x${ans} != x -a x${ans} != xy ]
  361. do
  362.   getresponse
  363.   showdefaults
  364.   if [ "${GCCVERSION}" = "${BAD_GCCVERSION}" ]; then
  365.     echo Please provide a valid gcc version: ${S}${BAD_GCCVERSION}${E}!
  366.     echo
  367.     ans=n
  368.   else
  369.     ans=`response "Values correct (y/n)" "y"`
  370.   fi
  371. done
  372.  
  373. {
  374.   echo STATIC_SHARED="${STATIC_SHARED}"
  375.   echo MAKE="${MAKE}"
  376.   echo SPEED="${SPEED}"
  377.   echo HOST_ROOTDIR="${HOST_ROOTDIR}"
  378.   echo HOST_BINDIR="${HOST_BINDIR}"
  379.   echo TARGET_ROOTDIR="${TARGET_ROOTDIR}"
  380.   echo ifeq \(\$\(ELF\), true\)
  381.   echo TARGET_MACHINE="${TARGET_MACHINE}elf"
  382.   echo else
  383.   echo TARGET_MACHINE="${TARGET_MACHINE}"
  384.   echo endif
  385.   echo TARGET_OS="${TARGET_OS}"
  386.   echo TARGET_ARCH="${TARGET_ARCH}"
  387.   echo TARGET_ARCH_486="${TARGET_ARCH_486}"
  388.   echo GCCVERSION="${GCCVERSION}"
  389.   if [ x${NYS} != x -a x${NYSDIR} != x ]; then
  390.     echo NYS="${NYS}"
  391.     echo NYSDIR="${NYSDIR}"
  392.     echo MAKE="${MAKE} NYS=${NYS}" 
  393.   fi
  394. } > config.in
  395.