home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume26 / xc-4.1 / part01 / Configure < prev    next >
Encoding:
Text File  |  1993-04-13  |  8.8 KB  |  541 lines

  1. #! /bin/sh
  2.  
  3. trap "rm -f tmp*; exit 0" 0
  4. trap "rm -f tmp*; exit 1" 1 2 3 15
  5.  
  6. die()
  7. {
  8.     echo "$*"
  9.     exit 1
  10. }
  11.  
  12. yorn()
  13. {
  14.     while :
  15.     do
  16.         read ans
  17.  
  18.     case "${ans:-$1}" in
  19.     [Yy]*)    return 0
  20.         ;;
  21.     [Nn]*)    return 1
  22.         ;;
  23.     *)    nonl "Please respond 'Y' or 'N': "
  24.         ;;
  25.     esac
  26.     done
  27. }
  28.  
  29. find_exe()
  30. {
  31. for i in `echo $PATH |
  32.       sed -e 's/^:/.:/' \
  33.           -e 's/::/:.:/g' \
  34.           -e 's/:$/:./' \
  35.           -e 's/:/ /g`
  36. do
  37.     if [ -x "$i/$1" ]
  38.     then
  39.         return 0
  40.     fi
  41. done
  42. return 1
  43. }
  44.  
  45. case `echo -n` in
  46. -n)    nonl() { echo "$*\c"; };;
  47. *)    nonl() { echo -n "$*"; };;
  48. esac
  49.  
  50. echo
  51. echo "XC Configuration Utility -- written by lar3ry gensch, ESQ"
  52. echo
  53. echo "When a default answer is suggested [in brackets],"
  54. echo "you may accept it by just hitting <ENTER>."
  55. echo
  56.  
  57. need_answers=true
  58.  
  59. if [ -f configure.out ]
  60. then
  61.     echo "Configure has already been run."
  62.     nonl "Do you wish to use the previous results? (Y/N) [N]: "
  63.     if yorn N
  64.     then
  65.         . ./configure.out
  66.         need_answers=false
  67.     fi
  68. fi
  69.  
  70. if $need_answers
  71. then
  72.     UUCPLIBDIR=/usr/lib/uucp
  73.  
  74.     if [ ! -d "$UUCPLIBDIR" ]
  75.     then
  76.         echo "*** Warning:  Cannot determine UUCP lib directory"
  77.         echo "***           Using $UUCPLIBDIR"
  78.         echo
  79.     fi
  80.  
  81.     if [ -f $UUCPLIBDIR/ungetty -a -f /xenix ]
  82.     then
  83.         DIDO="2"    
  84.     elif [ -d /var/spool/locks -a -f /usr/include/sys/mkdev.h ]
  85.     then
  86.         DIDO="4"
  87.     elif [ -f /unix ]
  88.     then
  89.         DIDO="3"
  90.     else
  91.         DIDO="0"
  92.     fi
  93.  
  94.     echo
  95.     echo "Determining compile environment..."
  96.  
  97.     CC=""
  98.     COPTS=""
  99.  
  100.     while :
  101.     do
  102.         if find_exe gcc
  103.         then
  104.             CC=gcc
  105.             COPTS="-O2"
  106.         elif find_exe cc
  107.         then
  108.             CC=cc
  109.             COPTS="-O"
  110.         else
  111.             CC=""
  112.         fi
  113.  
  114.         nonl "C compiler to use [${CC}]: "
  115.         read cc
  116.  
  117.         [ -n "$cc" ] && CC="$cc"
  118.  
  119.         if find_exe $CC
  120.         then
  121.            break
  122.         fi
  123.     done
  124.  
  125.     echo
  126.     echo "C Compiler is $CC"
  127.  
  128.     default="$COPTS"
  129.     while :
  130.     do
  131.         echo
  132.         nonl "Enter compiler options [$default]: "
  133.         read ans
  134.  
  135.         [ -n "$ans" ] && COPTS="$ans"
  136.  
  137.         echo "main() { }" >tmp.c
  138.         $CC $COPTS tmp.c -o tmp >/dev/null 2>&1 && break
  139.  
  140.         echo "Those options don't seem quite right... try again."
  141.     done
  142.  
  143.     echo
  144.     echo "Determining where to find screen control functions..."
  145.  
  146.     echo "main() { tgetent(); }" >tmp.c
  147.     for LDFLAGS in -ltermcap -ltinfo -lcurses ""
  148.     do
  149.         $CC tmp.c -o tmp $LDFLAGS >/dev/null 2>&1 && break
  150.     done
  151.         
  152.     if [ ! $LDFLAGS ]
  153.     then
  154.         echo
  155.         echo "*** We tried -ltermcap, -ltinfo, and -lcurses without success."
  156.         while :
  157.         do
  158.             nonl "Enter a '-lLIB' option for a screen control library: "
  159.             read LDFLAGS
  160.  
  161.             $CC tmp.c -o tmp $LDFLAGS >/dev/null 2>&1 && break
  162.  
  163.             echo "That isn't finding the tgetent() function... try again."
  164.             echo
  165.         done
  166.     fi
  167.  
  168.     if [ -f /lib/libc_s.a -o -f /usr/lib/libc_s.a ]
  169.     then
  170.         LDFLAGS="$LDFLAGS -lc_s"
  171.     fi
  172.  
  173.     echo
  174.     echo "LDFLAGS = $LDFLAGS"
  175.  
  176.     echo
  177.     echo "Checking run time library for functions..."
  178.  
  179.     eval `for i in "dup2(i,j)" \
  180.            "memset(s,c,i)" \
  181.            "strchr(s,c)" \
  182.            "strrchr(s,c)" \
  183.            "strdup(s)" \
  184.            "strstr(s,t)"
  185.     do
  186.         funct=\`echo "$i" | sed 's/(.*$//'\`
  187.  
  188.         cat >tmp.c <<!
  189. int i,j;
  190. char *s,*t;
  191. char c;
  192. main() { $i; }
  193. !
  194.  
  195.         $CC $COPTS -o tmp tmp.c $LDFLAGS >/dev/null 2>&1 || rm -f tmp
  196.         if [ -f tmp ]
  197.         then
  198.             val="1"
  199.             echo "    $funct was found" 1>&2
  200.         else
  201.             val="0"
  202.             echo "    $funct was not found" 1>&2
  203.         fi
  204.  
  205.         rm -f tmp*
  206.         echo "have_${funct}=$val"
  207.     done`
  208.  
  209.     echo
  210.     echo "Checking <sys/types.h> for typedefs..."
  211.  
  212.     eval `for i in pid_t ulong unchar ushort
  213.     do
  214.         if [ ! -f /usr/include/sys/types.h ]
  215.         then
  216.             echo "have_$i=false"
  217.             continue
  218.         fi
  219.  
  220.         cat >tmp.c <<!
  221. #include <sys/types.h>
  222. $i foo;
  223. !
  224.  
  225.         $CC $COPTS -c tmp.c >/dev/null 2>&1
  226.         if [ -f tmp.o ]
  227.         then
  228.             val=1
  229.             echo "    $i was found" 1>&2
  230.         else
  231.             val=0
  232.             echo "    $i was not found" 1>&2
  233.         fi
  234.  
  235.         echo "have_$i=$val"
  236.         rm -f tmp*
  237.     done`
  238.  
  239.     echo
  240.     echo "XC Local Configuration Section"
  241.  
  242.     while :
  243.     do
  244.         nonl "Enter user name to own xc [uucp]: "
  245.  
  246.         read ans
  247.  
  248.         OWNER="${ans:-uucp}"
  249.  
  250.         case "$OWNER" in
  251.         *:*)    echo "Invalid user name"
  252.             ;;
  253.         *)    grep "^${OWNER}:" /etc/passwd >/dev/null 2>&1 && break
  254.             echo "User $OWNER not found in /etc/passwd"
  255.             ;;
  256.         esac
  257.     done
  258.  
  259.     while :
  260.     do
  261.         nonl "Enter group name to own xc [uucp]: "
  262.  
  263.         read ans
  264.  
  265.         GROUP="${ans:-uucp}"
  266.  
  267.         case "$GROUP" in
  268.         *:*)    echo "Invalid group name"
  269.             ;;
  270.         *)    grep "^${GROUP}:" /etc/group >/dev/null 2>&1 && break
  271.             echo "Group $GROUP not found in /etc/group"
  272.         ;;
  273.         esac
  274.     done
  275.  
  276.     while :
  277.     do
  278.         nonl "Enter permissions for xc executable [4755]: "
  279.  
  280.         read ans
  281.  
  282.         BINMODE="${ans:-4755}"
  283.  
  284.         case "$BINMODE" in
  285.         [0-1][0-7][0-7][0-7]|[0-7][0-7][0-7])
  286.             echo "*** Warning permissions are not SUID or SGID"
  287.             INSTALL="install"
  288.             break
  289.             ;;
  290.  
  291.         [2-7][0-7][0-7][0-7])
  292.             INSTALL="install.suid"
  293.             INSTPREF="su to 'root', and then "
  294.             break
  295.             ;;
  296.         *)    echo "Invalid permissions"
  297.             ;;
  298.         esac
  299.     done
  300.  
  301.     echo
  302.  
  303.     MDIR=""
  304.     MANDIR=""
  305.     MANEXT=""
  306.  
  307.     for i in /usr/local/man /usr/catman /usr/man
  308.     do
  309.         if [ -d "$i" ]
  310.     then
  311.         MANDIR=$i
  312.         break
  313.     fi
  314.     done
  315.  
  316.     if [ -z "$MANDIR" ]
  317.     then
  318.         echo "*** Warning:  Cannot determine MANDIR"
  319.         echo "              Using /usr/man/mann"
  320.         MANDIR=/usr/man
  321.         MDIR=mann
  322.         MANEXT=n
  323.     else
  324.         eval `for i in cat man
  325.         do
  326.             for j in n l 1 L LOCAL
  327.             do
  328.                 dir=${i}${j}
  329.                 if [ -d "$MANDIR/$dir" ]
  330.                 then
  331.                     echo MDIR=$dir
  332.                     echo MANEXT=$j
  333.                     break 2
  334.                 fi
  335.                 dir=${i}.${j}
  336.                 if [ -d "$MANDIR/$dir" ]
  337.                 then
  338.                     echo MDIR=$dir
  339.                     echo MANEXT=$j
  340.                     break 2
  341.                 fi
  342.             done
  343.         done`
  344.  
  345.         if [ -z "$MDIR" ]
  346.         then
  347.             echo "*** Warning: Could not locate online man pages"
  348.             MDIR=mann
  349.             MANEXT=n
  350.         fi
  351.     fi
  352.  
  353.     echo "Using MANDIR $MANDIR/$MDIR ..."
  354.     echo
  355.  
  356.     case "$MDIR" in
  357.     cat*)    CATMAN=true
  358.         ;;
  359.     *)        CATMAN=false
  360.         ;;
  361.     esac
  362.  
  363.     default=""
  364.     for i in /usr/local/bin /pub/bin /usr/lbin /usr/bin/local /u/bin
  365.     do
  366.         if [ -d "$i" ]
  367.         then
  368.             default="$i"
  369.             break
  370.         fi
  371.     done
  372.  
  373.     while :
  374.     do
  375.         nonl "Enter installation directory [$default]: "
  376.         read ans
  377.  
  378.         INSDIR="${ans:-$default}"
  379.  
  380.         case "$INSDIR" in
  381.         /*)    [ -d "$INSDIR" ] && break
  382.             echo "Directory $ans was not found"
  383.             ;;
  384.         *)    echo "Directory $ans is not an absolute path"
  385.             ;;
  386.         esac
  387.     done
  388.  
  389.     echo
  390.     nonl "Do you wish to add DEBUG code into XC? (Y/N) [Y]: "
  391.     if yorn Y
  392.     then
  393.         DEBUG="1"
  394.     else
  395.         DEBUG="0"
  396.     fi
  397.  
  398.     echo
  399.     nonl "Do you wish to disallow shell escapes? (Y/N) [N]: "
  400.  
  401.     if yorn N
  402.     then
  403.         NOSHELL="1"
  404.     else
  405.         NOSHELL="0"
  406.     fi
  407.  
  408.     echo
  409.     nonl "Does dropping carrier cause your modem to hang up? (Y/N) [Y]: "
  410.  
  411.     if yorn Y
  412.     then
  413.         DTR_DROPS_CARRIER="1"
  414.     else
  415.         DTR_DROPS_CARRIER="0"
  416.     fi
  417.  
  418.     default=""
  419.     for i in /usr/local/lib /usr/lib/local /usr/lib /u/lib
  420.     do
  421.         if [ -d "$i" ]
  422.     then
  423.         default="$i/xc"
  424.         break
  425.     fi
  426.     done
  427.  
  428.     echo
  429.     while :
  430.     do
  431.         nonl "Enter default XC data file directory [$default]: "
  432.  
  433.         read ans
  434.  
  435.         LIBDIR=${ans:-$default}
  436.  
  437.         case "$LIBDIR" in
  438.         /*)    [ -d "$LIBDIR" ] && break
  439.             parent=`dirname $LIBDIR`
  440.             [ -d "$parent" -a ! -f $LIBDIR ] && break
  441.             if [ -d "$parent" ]
  442.             then
  443.                 echo "$LIBDIR is not a directory"
  444.             else
  445.                 echo "Parent directory $parent not found"
  446.             fi
  447.             ;;
  448.         *)    echo "Directory $LIBDIR is not an absolute path"
  449.             ;;
  450.         esac
  451.     done
  452.  
  453.     DATE=`date`
  454.     USER=`id | sed -e 's/[^(]*(//' -e s'/).*$//'`
  455.  
  456.     cat >./configure.out <<!
  457. BINMODE="$BINMODE"
  458. CATMAN="$CATMAN"
  459. CC="$CC"
  460. COPTS="$COPTS"
  461. DATE="$DATE"
  462. DEBUG="$DEBUG"
  463. DIDO="$DIDO"
  464. DTR_DROPS_CARRIER="$DTR_DROPS_CARRIER"
  465. GROUP="$GROUP"
  466. have_dup2="$have_dup2"
  467. have_memset="$have_memset"
  468. have_pid_t="$have_pid_t"
  469. have_strchr="$have_strchr"
  470. have_strdup="$have_strdup"
  471. have_strrchr="$have_strrchr"
  472. have_strstr="$have_strstr"
  473. have_ulong="$have_ulong"
  474. have_unchar="$have_unchar"
  475. have_ushort="$have_ushort"
  476. INSDIR="$INSDIR"
  477. INSTALL="$INSTALL"
  478. INSTPREF="$INSTPREF"
  479. LDFLAGS="$LDFLAGS"
  480. LIBDIR="$LIBDIR"
  481. MANDIR="$MANDIR"
  482. MANEXT="$MANEXT"
  483. MDIR="$MDIR"
  484. NOSHELL="$NOSHELL"
  485. OWNER="$OWNER"
  486. USER="$USER"
  487. !
  488. fi
  489.  
  490. set -e
  491.  
  492. echo
  493. echo "Creating xc.h ..."
  494.  
  495. sed "
  496. s;{{DATE}};$DATE;g
  497. s;{{DEBUG}};$DEBUG;g
  498. s;{{DIDO}};$DIDO;g
  499. s;{{DTR_DROPS_CARRIER}};$DTR_DROPS_CARRIER;g
  500. s;{{HAVE_DUP2}};$have_dup2;g
  501. s;{{HAVE_MEMSET}};$have_memset;g
  502. s;{{HAVE_PID_T}};$have_pid_t;g
  503. s;{{HAVE_STRCHR}};$have_strchr;g
  504. s;{{HAVE_STRDUP}};$have_strdup;g
  505. s;{{HAVE_STRRCHR}};$have_strrchr;g
  506. s;{{HAVE_STRSTR}};$have_strstr;g
  507. s;{{HAVE_ULONG}};$have_ulong;g
  508. s;{{HAVE_UNCHAR}};$have_unchar;g
  509. s;{{HAVE_USHORT}};$have_ushort;g
  510. s;{{LIBDIR}};$LIBDIR;g
  511. s;{{NOSHELL}};$NOSHELL;g
  512. s;{{USER}};$USER;g
  513. " xc.h.in >xc.h
  514.  
  515. echo
  516. echo "Creating Makefile.xc ..."
  517.  
  518. sed "
  519. s;{{BINMODE}};$BINMODE;g
  520. s;{{CATMAN}};$CATMAN;g
  521. s;{{CC}};$CC;g
  522. s;{{COPTS}};$COPTS;g
  523. s;{{DATE}};$DATE;g
  524. s;{{GROUP}};$GROUP;g
  525. s;{{INSDIR}};$INSDIR;g
  526. s;{{INSTALL}};$INSTALL;g
  527. s;{{INSTPREF}};$INSTPREF;g
  528. s;{{LDFLAGS}};$LDFLAGS;g
  529. s;{{LIBDIR}};$LIBDIR;g
  530. s;{{MANDIR}};$MANDIR;g
  531. s;{{MANEXT}};$MANEXT;g
  532. s;{{MDIR}};$MDIR;g
  533. s;{{OWNER}};$OWNER;g
  534. s;{{USER}};$USER;g
  535. " Makefile.in >Makefile.xc
  536.  
  537. echo
  538. echo "XC Configuration is now complete..."
  539.  
  540. exit 0
  541.