Blob Blame History Raw
#! /bin/sh

#########################################################################
#                                                                       #
#                                 OCaml                                 #
#                                                                       #
#            Xavier Leroy, projet Cristal, INRIA Rocquencourt           #
#                                                                       #
#   Copyright 1999 Institut National de Recherche en Informatique et    #
#   en Automatique.  All rights reserved.  This file is distributed     #
#   under the terms of the GNU Library General Public License, with     #
#   the special exception on linking described in file LICENSE.         #
#                                                                       #
#########################################################################

configure_options="$*"
where=''
installbindir=''
installdir=''
tk_defs=''
tk_libs=''
tk_x11=yes
use_findlib=no
verbose=no
optcomps=no

# The inf(), wrn(), err() functions below can be used to provide a consistent
# way to notify the user. The notification is always given to the stdout
# descriptor.
inf() {
  printf "%b\n" "$*" 1>&3
}

wrn() {
  printf "[WARNING] %b\n" "$*" 1>&3
}

err() {
  printf "[ERROR!]%b\n" "$*" 1>&3
  exit 2
}

exec 3>&1

# Parse command-line arguments

if echo "$configure_options" | grep -q -e '--\?[a-zA-Z0-9-]\+='; then
  err "Arguments to this script look like '-libdir /foo/bar', not '-libdir=/foo/bar' (note the '=')."
fi

while : ; do
  case "$1" in
    "") break;;
    -installbindir|--installbindir)
        installbindir=$2; shift;;
    -installdir|--installdir)
        installdir=$2; shift;;
    -libdir|--libdir)
        where=$2; shift;;
    -tkdefs*|--tkdefs*)
        tk_defs=$2; shift;;
    -tklibs*|--tklibs*)
        tk_libs=$2; shift;;
    -tk-no-x11|--tk-no-x11)
        tk_x11=no;;
    -use-findlib|--use-findlib)
        use_findlib=yes;;
    -verbose|--verbose)
        verbose=yes;;
    *) err "Unknown option \"$1\".";;
  esac
  shift
done

export verbose

# Where to install

if test -n "$where"; then :
elif test $use_findlib = yes; then
  where=`ocamlfind printconf stdlib`
else
  where=`ocamlc -where 2> /dev/null || echo '/usr/local/lib/ocaml'`
fi

if test -n "$installdir" ; then :
elif test "$use_findlib" = yes; then
  installdir="`ocamlfind printconf destdir`/labltk"
else
  installdir='$(LIBDIR)/labltk'
fi

if test -z "$installbindir"; then
  installbindir='$(BINDIR)'
fi

# Sanity checks

case "$where" in
  /*) ;;
   *) err "The ocaml library directory must be absolute.";;
esac
case "$installdir" in
  /*|'$'*) ;;
   *) err "The installation directory must be absolute.";;
esac
case "$installbindir" in
  /*|'$'*) ;;
   *) err "The binary installation directory must be absolute.";;
esac

# Generate the files

cd config/auto-aux
rm -f Makefile
touch Makefile

# Write options to Makefile

echo "# generated by ./configure $configure_options" >> Makefile

# Include OCaml configuration

echo "include $where/Makefile.config" >> Makefile

# Where to install

echo "USE_FINDLIB=$use_findlib" >> Makefile
echo "INSTALLDIR=$installdir" >> Makefile
echo "INSTALLBINDIR=$installbindir" >> Makefile

# Which compiler to use

ocamlc_where=`ocamlc -where 2> /dev/null`
ocamlc_ver=`ocamlc -version 2> /dev/null`
ocamlc_opt_ver=`ocamlc.opt -version 2> /dev/null`
ocamlopt_ver=`$ocamlopt -version 2> /dev/null`
ocamlopt_opt_ver=`$ocamlopt.opt -version 2> /dev/null`
if test x"$where" = x"$ocamlc_where" \
  && test -n "$ocamlc_opt_ver" && test x"$ocamlc_opt_ver" = x"$ocamlc_ver" \
  && (test -z "$ocamlopt_ver" || test x"$ocamlopt_ver" = x"$ocamlopt_opt_ver")
then
  optcomps=yes
  echo "OPT=.opt" >> Makefile
else
  echo "OPT=" >> Makefile
fi

# Look for tcl/tk

inf "Configuring LablTk..."

if test $tk_x11 = no; then
  has_tk=true
else
  tk_x11_include=`cat $where/Makefile.config | grep '^X11_INCLUDES=' | sed -e 's/^X11_INCLUDES=//'`
  tk_x11_libs=`cat $where/Makefile.config | grep '^X11_LIBS=' | sed -e 's/^X11_LIBS=//'`
  has_tk=true
fi

cc=`cat $where/Makefile.config | grep '^CC=' | sed -e 's/^CC=//'`
cclibs=`cat $where/Makefile.config | grep '^NATIVECCLIBS=' | sed -e 's/^NATIVECCLIBS=//'`
export cc cclibs

if test $has_tk = true; then
  tcl_version=''
  tcl_version=`sh ./runtest $tk_defs $tk_x11_include tclversion.c`
  for tk_incs in \
    "-I/usr/local/include" \
    "-I/opt/local/include" \
    "-I/sw/include" \
    "-I/usr/pkg/include" \
    "-I/usr/include" \
    "-I/usr/local/include/tcl8.6 -I/usr/local/include/tk8.6" \
    "-I/usr/include/tcl8.6 -I/usr/include/tk8.6" \
    "-I/usr/local/include/tcl8.5 -I/usr/local/include/tk8.5" \
    "-I/usr/include/tcl8.5 -I/usr/include/tk8.5" \
    "-I/usr/local/include/tcl8.4 -I/usr/local/include/tk8.4" \
    "-I/usr/include/tcl8.4 -I/usr/include/tk8.4" \
    "-I/usr/local/include/tcl8.3 -I/usr/local/include/tk8.3" \
    "-I/usr/include/tcl8.3 -I/usr/include/tk8.3" \
    "-I/usr/local/include/tcl8.2 -I/usr/local/include/tk8.2" \
    "-I/usr/include/tcl8.2 -I/usr/include/tk8.2"
  do if test -z "$tcl_version"; then
    tk_defs="$tk_incs"
    tcl_version=`sh ./runtest $tk_defs $tk_x11_include tclversion.c`
  fi; done
  if test -n "$tcl_version" && test "x$tcl_version" != "xnone"; then
    inf "tcl.h and tk.h version $tcl_version found with \"$tk_defs\"."
    case $tcl_version in
    8.6) tclmaj=8 tclmin=6 tkmaj=8 tkmin=6 ;;
    8.5) tclmaj=8 tclmin=5 tkmaj=8 tkmin=5 ;;
    8.4) tclmaj=8 tclmin=4 tkmaj=8 tkmin=4 ;;
    8.3) tclmaj=8 tclmin=3 tkmaj=8 tkmin=3 ;;
    8.2) tclmaj=8 tclmin=2 tkmaj=8 tkmin=2 ;;
    8.1) tclmaj=8 tclmin=1 tkmaj=8 tkmin=1 ;;
    8.0) tclmaj=8 tclmin=0 tkmaj=8 tkmin=0 ;;
    7.6) tclmaj=7 tclmin=6 tkmaj=4 tkmin=2 ;;
    7.5) tclmaj=7 tclmin=5 tkmaj=4 tkmin=1 ;;
    *) wrn "This version is not known." ; has_tk=false ;;
    esac
  else
    inf "tcl.h and/or tk.h not found."
    has_tk=false
  fi
fi

system=`cat $where/Makefile.config | grep '^SYSTEM=' | sed -e 's/^SYSTEM=//'`

if test $has_tk = true && test -z "$tk_libs"; then
  tklibdir=""
  if test -n "$tk_defs"; then
    tkinclude="$tk_defs"
  else
    tkinclude="$tk_x11_include"
  fi  
  case "$tkinclude" in
  -I/opt/local/include*) tklibdir="/opt/local/lib" ;;
  -I/usr/local/include*) tklibdir="/usr/local/lib" ;;
  -I/sw/include*) tklibdir="/sw/lib" ;;
  -I/usr/pkg/include*) tklibdir="/usr/pkg/lib" ;;
  esac
  if test -n "$tklibdir"; then
    case "$system" in
    *bsd*) tk_libs="-R$tklibdir -L$tklibdir" ;;
    *) tk_libs="-L$tklibdir" ;;
    esac
  else
    tk
  fi
fi

tkauxlibs="$cclibs"
if test $has_tk = true; then
  if test -n "$tk_libs" && \
     sh ./hasgot $tk_libs $tk_x11_libs $tkauxlibs Tcl_DoOneEvent
  then tk_libs="$tk_libs $dllib"
  elif sh ./hasgot $tk_libs -ltcl$tclmaj.$tclmin $tkauxlibs Tcl_DoOneEvent
  then
    tk_libs="$tk_libs -ltk$tkmaj.$tkmin -ltcl$tclmaj.$tclmin $dllib"
  elif sh ./hasgot $tk_libs -ltcl$tclmaj$tclmin $tkauxlibs Tcl_DoOneEvent
  then
    tk_libs="$tk_libs -ltk$tkmaj$tkmin -ltcl$tclmaj$tclmin $dllib"
  elif test -z "$tk_libs" && tk_libs=-L/usr/local/lib && \
    sh ./hasgot $tk_libs -ltcl$tclmaj.$tclmin $tkauxlibs Tcl_DoOneEvent
  then
    tk_libs="$tk_libs -ltk$tkmaj.$tkmin -ltcl$tclmaj.$tclmin $dllib"
  elif sh ./hasgot $tk_libs -ltcl$tclmaj$tclmin $tkauxlibs Tcl_DoOneEvent
  then
    tk_libs="$tk_libs -ltk$tkmaj$tkmin -ltcl$tclmaj$tclmin $dllib"
  else
    inf "Tcl library not found."
    has_tk=false
  fi
fi

if test $has_tk = true; then
  if sh ./hasgot $tk_libs $tk_x11_libs $tkauxlibs Tk_SetGrid; then
    inf "Tcl/Tk libraries found."
  else
    has_tk=false
    for tklibdir in "/usr/local/lib" "/opt/local/lib" "/sw/lib" "/usr/pkg/lib";
    do
      if test $found = no &&
         sh ./hasgot -L$tklibdir $tk_libs $tk_x11_libs $tkauxlibs Tk_SetGrid
      then
        has_tk=true
        case "$system" in
        *bsd*) tk_libs="-R$tklibdir -L$tklibdir $tk_libs";;
        *) tk_libs="-L$tklibdir $tk_libs";;
        esac
      fi
    done
    if test $has_tk = true; then
      inf "Tcl/Tk libraries found."
    else
      inf "Tcl library found."
      wrn "Tk library not found."
    fi
  fi
fi

if test $has_tk = true; then
  if test $tk_x11 = yes; then
    echo "TK_DEFS=$tk_defs "'$(X11_INCLUDES)' >> Makefile
    echo "TK_LINK=$tk_libs "'$(X11_LINK)' >> Makefile
  else
    echo "TK_DEFS=$tk_defs" >> Makefile
    echo "TK_LINK=$tk_libs" >> Makefile
  fi
  otherlibraries="$otherlibraries labltk"
else
  echo "TK_DEFS=" >> Makefile
  echo "TK_LINK=" >> Makefile
fi

mv Makefile ..

# Print a summary

inf
inf "** Configuration summary **"
inf
if test $has_tk = true; then
inf "Configuration for the \"labltk\" library:"
inf "        use tcl/tk version ....... $tcl_version"
inf "        options for compiling .... $tk_defs $tk_x11_include"
inf "        options for linking ...... $tk_libs $tk_x11_libs"
inf "        use native compilers ..... $optcomps"
else
inf "The \"labltk\" library: not supported"
fi