#!/bin/csh -f

# this is a very low-tech version of configure, not built by autoconf.
# we check for the following libraries:

# we need to be able to list the required libraries for a given distribution

# libX11.a
# libsocket.a
# libnsl.a
# libpng.a
# libjpeg.a
# libz.a
# libreadline.a
# libtermcap.a

# evaluate command-line options
set vararch = 0
set prefix  = ""

set bindir  = ""
set libdir  = ""
set incdir  = ""
set mandir  = ""
set datadir  = ""
set sysconfdir  = ""
set optflags = "-g -O0"
set pedantic = ""

set root    = ""
set args    = ""
while ("$1" != "") 
 switch ($1)
  case --vararch
   set vararch = 1
   breaksw;
  case --enable-optimze
   set optflags = "-O2"
   breaksw;
  case --pedantic
   set pedantic = "-Wall -Werror"
   breaksw;
  case --prefix*
   set prefix = `echo $1 | tr = ' ' | awk '{print $2}'`
   breaksw;
  case --bindir*
   set bindir = `echo $1 | tr = ' ' | awk '{print $2}'`
   breaksw;
  case --libdir*
   set libdir = `echo $1 | tr = ' ' | awk '{print $2}'`
   breaksw;
  case --includedir*
   set incdir = `echo $1 | tr = ' ' | awk '{print $2}'`
   breaksw;
  case --sysconfdir*
   set sysconfdir = `echo $1 | tr = ' ' | awk '{print $2}'`
   breaksw;
  case --datadir*
   set datadir = `echo $1 | tr = ' ' | awk '{print $2}'`
   breaksw;
  case --mandir*
   set mandir = `echo $1 | tr = ' ' | awk '{print $2}'`
   breaksw;
  case --help:
  case -*: 
   goto usage
   breaksw;
  default:
   set args=($args $1);
   breaksw;
 endsw
 shift
end
if ($#args != 1) goto usage

# sun (at least) seems to need the socket library 
# linux does not
set archlib = ""

# check the hardware architecture:
set sys=`uname -s` 
switch ($sys)
 case IRIX64:
   set arch="irix";
   breaksw;
 case SunOS:
   set ver=`uname -r | awk '{print substr($1,1,1)}'`;
   if ($ver == 5) then
     set arch="sol";
   else 
     set arch="sun4";
   endif
   # XXX old solaris needed termcap for readline
   set archlib = "libsocket libnsl"
   breaksw;
 case Linux:
   set arch="linux";
   if (-e /etc/sidious.config) set arch="sid";
   set mach=`uname -m`
   if ("$mach" == "x86_64") then
    set arch="lin64";
   endif
   breaksw;
 case HP-UX:
    set arch="hpux";
    breaksw;
 default:
   echo "unknown architecture";
   exit 1;
   breaksw;
endsw
echo "setting architecture to: $arch" 

# set up the basic directory names:
# XXX : this should be set based on the rules for libdir below
set root = `pwd`
if ($prefix == "") set prefix = $root
set inc = $prefix/include/$arch
set lib = $prefix/lib/$arch
if ($?LD_LIBRARY_PATH) then 
  set libpath = `echo $LD_LIBRARY_PATH | tr ':' ' '`
else
  set libpath = ""
endif

# check for basic libraries
set fail = 0
foreach f ( libpng libz libjpeg libreadline $archlib )
    foreach g ( /usr/lib $lib $libpath )
	set name = "$g/$f.a"
	if (-e $name) then
	    echo "found $name"
	    goto next_lib;
	endif
	set name = "$g/$f.so"
	if (-e $name) then
	    echo "found $name"
	    goto next_lib;
	endif
    end
    echo "missing $f"
    set fail = 1
next_lib:
    continue
end

# check for termcap, curses, etc
set tlibflag = ""
foreach f ( ncurses curses termcap )
      foreach g ( /usr/lib $lib $libpath )
	set name = "$g/lib$f.a"
	if (-e $name) then
	    echo "found $name"
	    set tlibflag = "-l$f"
	    goto got_curses;
	endif
	set name = "$g/lib$f.so"
	if (-e $name) then
	    echo "found $name"
	    set tlibflag = "-l$f"
	    goto got_curses;
	endif
    end
end
if ("$tlibflag" == "") then
  echo "missing a valid curses library"
  set fail = 1
endif

got_curses:

if ($fail) then
  echo "your installation is missing some important libraries"
  echo "please find them and install them in $lib"
  exit 1
endif    

# check for basic libraries
set fail = 0
foreach f ( libX11.a )
    foreach g ( /usr/lib $lib $libpath /usr/X11R6/lib /usr/openwin/lib )
	set name = "$g/$f"
	if (-e $name) then 
	    echo "found $g/$f"
	    set xlib = $g
	    goto next_xlib;
	endif
    end
    echo "missing $f"
    set fail = 1
next_xlib:
    continue
end

if ($fail) then
  echo "your installation is missing some important libraries"
  echo "please find them and install them in $lib"
  exit 1
endif    

# check for X11 headers
set fail = 0
foreach f ( X11/X.h )
    foreach g ( /usr/include $inc /usr/X11R6/include /usr/openwin/include )
	set name = "$g/$f"
	if (-e $name) then 
	    echo "found $g/$f"
	    set xinc = $g
	    goto next_xinc;
	endif
    end
    echo "missing $f"
    set fail = 1
next_xinc:
    continue
end

if ($fail) then
  echo "your installation is missing some important libraries"
  echo "please find them and install them in $lib"
  exit 1
endif    

echo XINC: $xinc
echo XLIB: $xlib

echo ARCH: $arch
echo ROOT: $root
echo PREFIX: $prefix
echo 

#echo BINDIR $bindir
#echo LIBDIR $libdir
#echo INCDIR $incdir
#echo DATADIR $datadir
#echo MANDIR $mandir

if (-e Configure) mv Configure Configure.bak

rm -f Configure.in.tmp Configure.tmp
cp Configure.in Configure.in.tmp

# modify the BINDIR
if ("$bindir" == "") then
  set subdir = bin/$arch
  if ($vararch) set subdir = 'bin/$(ARCH)'
  set bindir = $prefix/$subdir
endif
cat Configure.in.tmp | sed "s| BINDIR| $bindir|" > Configure.tmp
rm -f Configure.in.tmp
mv Configure.tmp Configure.in.tmp
echo BINDIR $bindir

# modify the INCDIR
if ("$incdir" == "") then
  set subdir = include/$arch
  if ($vararch) set subdir = 'include/$(ARCH)'
  set incdir = $prefix/$subdir
endif
cat Configure.in.tmp | sed "s| INCDIR| $incdir|" > Configure.tmp
rm -f Configure.in.tmp
mv Configure.tmp Configure.in.tmp
echo INCDIR $incdir

# modify the LIBDIR
if ("$libdir" == "") then
  set subdir = lib/$arch
  if ($vararch) set subdir = 'lib/$(ARCH)'
  set libdir = $prefix/$subdir
endif
cat Configure.in.tmp | sed "s| LIBDIR| $libdir|" > Configure.tmp
rm -f Configure.in.tmp
mv Configure.tmp Configure.in.tmp
echo LIBDIR $libdir

# modify the MANDIR
if ("$mandir" == "") then
  set mandir = $prefix/man
endif
cat Configure.in.tmp | sed "s| MANDIR| $mandir|" > Configure.tmp
rm -f Configure.in.tmp
mv Configure.tmp Configure.in.tmp
echo MANDIR $mandir

# modify the HELPDIR
if ("$datadir" == "") then
  set datadir = $prefix
endif
set helpdir = $datadir/help
cat Configure.in.tmp | sed "s| HELPDIR| $helpdir|" > Configure.tmp
rm -f Configure.in.tmp
mv Configure.tmp Configure.in.tmp
echo HELPDIR $helpdir

if ($vararch) then
  cat Configure.in.tmp | sed "s|^\s*ARCH|# ARCH|" > Configure.tmp
else 
  cat Configure.in.tmp | sed "s|ARCHVAL|$arch|" > Configure.tmp
endif 
rm -f Configure.in.tmp
mv Configure.tmp Configure.in.tmp

cat Configure.in.tmp | sed "s|ROOTDIR|$root|" | sed "s|XINCDIR|$xinc|" | sed "s|XLIBDIR|$xlib|" | sed "s|TLIBFLAG|$tlibflag|" | sed "s|OPTFLAGS|$optflags $pedantic|" > Configure
rm -f Configure.in.tmp Configure.tmp

echo ""
echo "include $bindir in your path"

exit 0

usage:
cat <<EOF
USAGE: configure [OPTION]

set the installation directory root with --prefix
if you define the environment variable ARCH, you can set --vararch
 
Configuration:
  -h, --help              display this help and exit
  --enable-optimize       enable compiler optimization
  --pedantic              include -Wall -Werror on compilation

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
  --vararch               install with ARCH suffixes for variable architectures

Fine tuning of the installation directories:
  --bindir=DIR           user executables [PREFIX/bin/$ARCH] 
  --libdir=DIR           object code libraries [PREFIX/lib/$ARCH]
  --includedir=DIR       C header files [PREFIX/include]
  --mandir=DIR           man documentation [PREFIX/man]
  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]

EOF
 exit 2;
