|
Packit |
b513ef |
#! /bin/sh
|
|
Packit |
b513ef |
# $Id$
|
|
Packit |
b513ef |
# ----------------------------------------------------------------------
|
|
Packit |
b513ef |
#
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Some functions
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
#set -x
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
version="1.8.0"
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Remember the old IFS value:
|
|
Packit |
b513ef |
oldifs="$IFS"
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
in_path () {
|
|
Packit |
b513ef |
# Does $1 exist in $PATH?
|
|
Packit |
b513ef |
IFS=":"
|
|
Packit |
b513ef |
for d in $PATH; do
|
|
Packit |
b513ef |
if test -x "$d/$1"; then
|
|
Packit |
b513ef |
IFS="$oldifs"
|
|
Packit |
b513ef |
return 0
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
done
|
|
Packit |
b513ef |
IFS="$oldifs"
|
|
Packit |
b513ef |
return 1
|
|
Packit |
b513ef |
#--- The following is not portable enough:
|
|
Packit |
b513ef |
# if test -x `type -p ls`; then
|
|
Packit |
b513ef |
# # type -p works!
|
|
Packit |
b513ef |
# type -p $1 >/dev/null
|
|
Packit |
b513ef |
# else
|
|
Packit |
b513ef |
# # use 'which' instead
|
|
Packit |
b513ef |
# p=`which $1`
|
|
Packit |
b513ef |
# test -x "$p"
|
|
Packit |
b513ef |
# fi
|
|
Packit |
b513ef |
}
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
get_path () {
|
|
Packit |
b513ef |
IFS=":"
|
|
Packit |
b513ef |
for d in $PATH; do
|
|
Packit |
b513ef |
if test -x "$d/$1"; then
|
|
Packit |
b513ef |
IFS="$oldifs"
|
|
Packit |
b513ef |
echo "$d/$1"
|
|
Packit |
b513ef |
return
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
done
|
|
Packit |
b513ef |
IFS="$oldifs"
|
|
Packit |
b513ef |
#--- The following is not portable enough:
|
|
Packit |
b513ef |
# if test -x `type -p ls`; then
|
|
Packit |
b513ef |
# # type -p works!
|
|
Packit |
b513ef |
# type -p $1
|
|
Packit |
b513ef |
# else
|
|
Packit |
b513ef |
# # use 'which' instead
|
|
Packit |
b513ef |
# p=`which $1`
|
|
Packit |
b513ef |
# test -x "$p" && echo $p
|
|
Packit |
b513ef |
# fi
|
|
Packit |
b513ef |
}
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
get_stdlib () {
|
|
Packit |
b513ef |
# Older versions of ocamlc do not accept -where, so there is a fallback
|
|
Packit |
b513ef |
# method:
|
|
Packit |
b513ef |
ocamlc -where 2>/dev/null | tr -d '\015' || {
|
|
Packit |
b513ef |
ocamlc -v | sed -n -e "/Standard library directory/s/.*: \(.*\)/\1/p"; }
|
|
Packit |
b513ef |
}
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
get_lib () {
|
|
Packit |
b513ef |
# $1: name of a library to search for
|
|
Packit |
b513ef |
# $2...: places to test
|
|
Packit |
b513ef |
libname="$1"
|
|
Packit |
b513ef |
while [ "$#" != "0" ]; do
|
|
Packit |
b513ef |
if [ -f "$1/lib${libname}.so" -o -f "$1/lib${libname}.a" ]; then
|
|
Packit |
b513ef |
echo "$1"
|
|
Packit |
b513ef |
return 0
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
shift
|
|
Packit |
b513ef |
done
|
|
Packit |
b513ef |
return 1
|
|
Packit |
b513ef |
}
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
get_lib_file () {
|
|
Packit |
b513ef |
# $1: name of library without "lib" and suffix
|
|
Packit |
b513ef |
# $2: directory
|
|
Packit |
b513ef |
# returns full path of library
|
|
Packit |
b513ef |
if [ -f "$2/lib$1.so" ]; then
|
|
Packit |
b513ef |
echo "$2/lib$1.so"
|
|
Packit |
b513ef |
elif [ -f "$2/lib$1.a" ]; then
|
|
Packit |
b513ef |
echo "$2/lib$1.a"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo ""
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
}
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
cygpath_to_unix () {
|
|
Packit |
b513ef |
v=$1
|
|
Packit |
b513ef |
eval "p=\"\$$v\""
|
|
Packit |
b513ef |
p="`cygpath -w -s \"$p\"`"
|
|
Packit |
b513ef |
p="`cygpath -u \"$p\"`"
|
|
Packit |
b513ef |
eval "$v=\"$p\""
|
|
Packit |
b513ef |
}
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Here the main program begins:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Interpret the command line
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
ocamlfind_bin=""
|
|
Packit |
b513ef |
ocamlfind_man=""
|
|
Packit |
b513ef |
ocaml_sitelib=""
|
|
Packit |
b513ef |
ocamlfind_config=""
|
|
Packit |
b513ef |
with_toolbox=0
|
|
Packit |
b513ef |
with_topfind=1
|
|
Packit |
b513ef |
with_camlp4=1
|
|
Packit |
b513ef |
custom=-custom
|
|
Packit |
b513ef |
system=""
|
|
Packit |
b513ef |
sh=""
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
while [ "$#" != "0" ]; do
|
|
Packit |
b513ef |
case "$1" in
|
|
Packit |
b513ef |
-bindir) ocamlfind_bin=$2
|
|
Packit |
b513ef |
shift 2
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-mandir) ocamlfind_man=$2
|
|
Packit |
b513ef |
shift 2
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-sitelib) ocaml_sitelib=$2
|
|
Packit |
b513ef |
shift 2
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-config) ocamlfind_config=$2
|
|
Packit |
b513ef |
shift 2
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-no-custom) custom=
|
|
Packit |
b513ef |
shift
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-cygpath) system=mingw
|
|
Packit |
b513ef |
shift
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-system) system=$2
|
|
Packit |
b513ef |
shift 2
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-with-toolbox) with_toolbox=1
|
|
Packit |
b513ef |
shift
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-no-topfind) with_topfind=0
|
|
Packit |
b513ef |
shift
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-no-camlp4) with_camlp4=0
|
|
Packit |
b513ef |
shift
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-version)
|
|
Packit |
b513ef |
echo "$version"
|
|
Packit |
b513ef |
exit 0
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
-h|-help|--help) echo "usage: configure [options]" 1>&2
|
|
Packit |
b513ef |
echo " -bindir path where binaries are installed" 1>&2
|
|
Packit |
b513ef |
echo " -mandir path where manual pages are installed" 1>&2
|
|
Packit |
b513ef |
echo " -sitelib path set the location of the site-specific packages" 1>&2
|
|
Packit |
b513ef |
echo " -config path set the location of the configuration file" 1>&2
|
|
Packit |
b513ef |
echo " -no-custom don't link in custom runtime mode" 1>&2
|
|
Packit |
b513ef |
echo " -system <systype> override system type (esp. mingw and win32)" 1>&2
|
|
Packit |
b513ef |
echo " -with-toolbox also build the toolbox" 1>&2
|
|
Packit |
b513ef |
echo " -no-topfind don't install topfind script into stdlib directory" 1>&2
|
|
Packit |
b513ef |
echo " -no-camlp4 don't install the camlp4 META file" 1>&2
|
|
Packit |
b513ef |
exit
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
*) echo "configure: run 'configure -h' to get help" 1>&2
|
|
Packit |
b513ef |
exit 1
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
esac
|
|
Packit |
b513ef |
done
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo "Welcome to findlib version $version"
|
|
Packit |
b513ef |
echo "Configuring core..."
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
#######################################################################
|
|
Packit |
b513ef |
# inspect the system
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Some standard Unix tools must be available:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
for tool in sed awk ocaml ocamlc uname rm make cat m4 dirname basename; do
|
|
Packit |
b513ef |
if in_path $tool; then true; else
|
|
Packit |
b513ef |
echo "configure: $tool not in PATH; this is required" 1>&2
|
|
Packit |
b513ef |
exit 1
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
done
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
lib_suffix=`ocamlc -config 2>/dev/null|tr -d '\015'|sed -n -e 's/^ext_lib: //p'`
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Check for Cygwin:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
exec_suffix=
|
|
Packit |
b513ef |
pure_mingw="no"
|
|
Packit |
b513ef |
mingw_lib=
|
|
Packit |
b513ef |
case `uname` in
|
|
Packit |
b513ef |
CYGWIN*)
|
|
Packit |
b513ef |
exec_suffix=.exe
|
|
Packit |
b513ef |
echo "Cygwin build environment found; using .exe as suffix for binaries"
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
MSYS_NT*)
|
|
Packit |
b513ef |
exec_suffix=.exe
|
|
Packit |
b513ef |
echo "MSYS_NT build environment found; using .exe as suffix for binaries"
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
MINGW*)
|
|
Packit |
b513ef |
exec_suffix=.exe
|
|
Packit |
b513ef |
pure_mingw="yes"
|
|
Packit |
b513ef |
echo "MinGW build environment found; using .exe as suffix for binaries"
|
|
Packit |
b513ef |
mingw_lib=`get_path gcc`
|
|
Packit |
b513ef |
mingw_lib=`dirname "$mingw_lib"`/../lib
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
*)
|
|
Packit |
b513ef |
true ;;
|
|
Packit |
b513ef |
esac
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Is the target Win32?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
use_cygpath=0
|
|
Packit |
b513ef |
# Whether we have to translate Unix paths to/from Windows paths.
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -z "$system" ]; then
|
|
Packit |
b513ef |
system=`ocamlc -config 2>/dev/null|tr -d '\015'|sed -n -e 's/^system: //p'`
|
|
Packit |
b513ef |
# This may be
|
|
Packit |
b513ef |
# - mingw or mingw64
|
|
Packit |
b513ef |
# - win32
|
|
Packit |
b513ef |
# - win64
|
|
Packit |
b513ef |
# - cygwin
|
|
Packit |
b513ef |
# - some other string means Unix
|
|
Packit |
b513ef |
# - empty means ocamlc does not support -config
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
case "$system" in
|
|
Packit |
b513ef |
mingw|mingw64)
|
|
Packit |
b513ef |
if [ "$pure_mingw" = "no" ]; then
|
|
Packit |
b513ef |
# CYGWIN
|
|
Packit |
b513ef |
use_cygpath=1
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
win32) use_cygpath=1;;
|
|
Packit |
b513ef |
win64) use_cygpath=1;;
|
|
Packit |
b513ef |
esac
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# check for presence of /bin/sh
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ ! -f /bin/sh ]; then
|
|
Packit |
b513ef |
sh=sh
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Find out standard library location
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
ocaml_core_stdlib=`get_stdlib`
|
|
Packit |
b513ef |
if [ ! -d "$ocaml_core_stdlib" ]; then
|
|
Packit |
b513ef |
echo "configure: cannot determine ocaml's standard library directory" 1>&2
|
|
Packit |
b513ef |
exit 1
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ ${use_cygpath} -gt 0 ]; then
|
|
Packit |
b513ef |
cygpath_to_unix ocaml_core_stdlib
|
|
Packit |
b513ef |
# This makes ocaml_core_stdlib a Unix-type path
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Set site-lib directory:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -z "$ocaml_sitelib" ]; then
|
|
Packit |
b513ef |
case "$ocaml_core_stdlib" in
|
|
Packit |
b513ef |
/opt/*) ocaml_sitelib=`dirname "${ocaml_core_stdlib}"`/site-lib
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
*) ocaml_sitelib="${ocaml_core_stdlib}/site-lib"
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
esac
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Find out the directory where ocamlc is:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
ocamlc=`get_path ocamlc`
|
|
Packit |
b513ef |
ocaml_core_bin=`dirname "${ocamlc}"`
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Set the directory of ocamlfind:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
test -n "$ocamlfind_bin" || ocamlfind_bin="$ocaml_core_bin"
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Find the directory for the manual:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Fallback:
|
|
Packit |
b513ef |
ocaml_core_man=/usr/local/man
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
d="$ocaml_core_bin"
|
|
Packit |
b513ef |
while [ "$d" != '/' ]; do
|
|
Packit |
b513ef |
f=0
|
|
Packit |
b513ef |
if [ -d "$d/man/man1" ]; then
|
|
Packit |
b513ef |
if [ -f "$d/man/man1/ocamlc.1" -o \
|
|
Packit |
b513ef |
-f "$d/man/man1/ocamlc.1.gz" -o \
|
|
Packit |
b513ef |
-f "$d/man/man1/ocamlc.1.Z" ]; then
|
|
Packit |
b513ef |
f=1
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
if [ -d "$d/man/mann" ]; then
|
|
Packit |
b513ef |
if [ -f "$d/man/mann/ocamlc.n" -o \
|
|
Packit |
b513ef |
-f "$d/man/mann/ocamlc.n.gz" -o \
|
|
Packit |
b513ef |
-f "$d/man/mann/ocamlc.n.Z" ]; then
|
|
Packit |
b513ef |
f=1
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
if [ "$f" = "1" ]; then
|
|
Packit |
b513ef |
ocaml_core_man="$d/man"
|
|
Packit |
b513ef |
d="/"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
d=`dirname "$d"`
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
done
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Set the directory for ocamlfind's manuals:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
test -n "$ocamlfind_man" || ocamlfind_man="$ocaml_core_man"
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Guess the right directory for the configuration file:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -z "${ocamlfind_config}" ]; then
|
|
Packit |
b513ef |
d="$ocaml_core_bin"
|
|
Packit |
b513ef |
case "$d" in
|
|
Packit |
b513ef |
*/bin)
|
|
Packit |
b513ef |
if [ -f `dirname "$d"`/lib/findlib.conf ]; then
|
|
Packit |
b513ef |
ocamlfind_config=`dirname "$d"`/lib/findlib.conf
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
ocamlfind_config=`dirname "$d"`/etc/findlib.conf
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
*)
|
|
Packit |
b513ef |
ocamlfind_config=/usr/local/etc/findlib.conf
|
|
Packit |
b513ef |
# Fallback value
|
|
Packit |
b513ef |
;;
|
|
Packit |
b513ef |
esac
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# do we have #remove_directory?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo "Checking for #remove_directory..."
|
|
Packit |
b513ef |
have_remdir=1
|
|
Packit |
b513ef |
ocaml itest-aux/remdir.ml >/dev/null 2>/dev/null || have_remdir=0
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Test the threading model
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo "Testing threading model..."
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if ocamlc -vmthread >/dev/null 2>/dev/null; then
|
|
Packit |
b513ef |
:
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "The -vmthread switch is not supported: Your ocaml version is too old!"
|
|
Packit |
b513ef |
exit 1
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if ocamlc -config >/dev/null 2>/dev/null; then
|
|
Packit |
b513ef |
# Good. ocamlc tells us the threading model.
|
|
Packit |
b513ef |
if ocamlc -config | grep 'systhread_supported: true'; then
|
|
Packit |
b513ef |
ocaml_threads="posix"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
ocaml_threads="vm"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
# Old ocamlc do not have -config.
|
|
Packit |
b513ef |
rm -f itest-aux/simple
|
|
Packit |
b513ef |
ocamlc -w a -custom -thread -o itest-aux/simple unix.cma threads.cma itest-aux/simple_threads.ml \
|
|
Packit |
b513ef |
>itest-aux/err.out 2>&1
|
|
Packit |
b513ef |
output=`cat itest-aux/err.out`
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -z "$output" ]; then
|
|
Packit |
b513ef |
ocaml_threads="posix"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
ocaml_threads="vm"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Does this version of OCaml support autolinking?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Works for O'Caml >= 3.00 on. Because findlib can only be compiled
|
|
Packit |
b513ef |
# with these O'Caml versions, we can safely assume that autolinking
|
|
Packit |
b513ef |
# is enabled.
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
ocaml_autolink="true"
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Does this version of OCaml support DLLs?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo "Testing DLLs..."
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
have_dlls="yes"
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
ocaml unix.cma itest-aux/simple.ml >/dev/null || have_dlls="no"
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Does this version of OCaml support extension points?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo "Testing whether ppxopt can be supported..."
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
with_ppxopt=1
|
|
Packit |
b513ef |
enable_topfind_ppxopt=true
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
ocaml -I +compiler-libs itest-aux/ppx.ml >/dev/null || {
|
|
Packit |
b513ef |
with_ppxopt=0
|
|
Packit |
b513ef |
enable_topfind_ppxopt=false
|
|
Packit |
b513ef |
}
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Check for -opaque
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo "Checking for ocamlc -opaque..."
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
opaque="-opaque"
|
|
Packit |
b513ef |
ocamlc -opaque >/dev/null 2>/dev/null || opaque=""
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Configure libraries
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo "Configuring libraries..."
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Check whether Bigarray is present.
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
lbigarray=bigarray
|
|
Packit |
b513ef |
# always
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Dynlink check.
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
have_natdynlink=0
|
|
Packit |
b513ef |
natdynlink=""
|
|
Packit |
b513ef |
camlp4_dynlink=""
|
|
Packit |
b513ef |
if [ -f "${ocaml_core_stdlib}/dynlink.cmxa" ]; then
|
|
Packit |
b513ef |
have_natdynlink=1
|
|
Packit |
b513ef |
natdynlink="archive(native) = \"dynlink.cmxa\""
|
|
Packit |
b513ef |
camlp4_dynlink="dynlink"
|
|
Packit |
b513ef |
echo "native dynlink: found"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
natdynlink="archive(native) = \"\""
|
|
Packit |
b513ef |
echo "native dynlink: not found"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Check whether labltk is present.
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -f "${ocaml_core_stdlib}/labltk/labltk.cma" ]; then
|
|
Packit |
b513ef |
llabltk=labltk
|
|
Packit |
b513ef |
echo "labltk: found"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
llabltk=''
|
|
Packit |
b513ef |
echo "labltk: not present"
|
|
Packit |
b513ef |
if [ $with_toolbox -gt 0 ]; then
|
|
Packit |
b513ef |
echo "Sorry, toolbox requires labltk - omitting toolbox."
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
with_toolbox=0
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Check whether ocamlbuild is present
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -f "${ocaml_core_stdlib}/ocamlbuild/ocamlbuildlib.cma" ]; then
|
|
Packit |
b513ef |
lobuild=ocamlbuild
|
|
Packit |
b513ef |
echo "ocamlbuild: found"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
lobuild=""
|
|
Packit |
b513ef |
echo "ocamlbuild: not present"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Check on camlp4:
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ $with_camlp4 -eq 0 ]; then
|
|
Packit |
b513ef |
lcamlp4=''
|
|
Packit |
b513ef |
echo "camlp4: disabled"
|
|
Packit |
b513ef |
else if in_path camlp4; then
|
|
Packit |
b513ef |
camlp4_dir=`camlp4 -where | tr -d '\015'`
|
|
Packit |
b513ef |
if [ ${use_cygpath} -gt 0 ]; then
|
|
Packit |
b513ef |
camlp4_dir=`echo x | env USE_CYGPATH=1 tools/patch x "$camlp4_dir"`
|
|
Packit |
b513ef |
# This makes camlp4_dir a windows path
|
|
Packit |
b513ef |
elif [ "${pure_mingw}" = "yes" ]; then
|
|
Packit |
b513ef |
# Must double the backslahes
|
|
Packit |
b513ef |
camlp4_dir="$(echo "${camlp4_dir}" | sed -e 's;\\;\\\\;g')"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
camlp4_version=`camlp4 -v 2>&1`
|
|
Packit |
b513ef |
if [ "$have_dlls" = "yes" ]; then
|
|
Packit |
b513ef |
camlp4_cmd="camlp4"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
camlp4_cmd="safe_camlp4"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
# Check whether 3.09 or 3.10 style:
|
|
Packit |
b513ef |
if camlp4 -loaded-modules >/dev/null 2>/dev/null; then
|
|
Packit |
b513ef |
camlp4style=310
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
camlp4style=309
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
lcamlp4="camlp4"
|
|
Packit |
b513ef |
rm -rf "site-lib-src/camlp4"
|
|
Packit |
b513ef |
mkdir "site-lib-src/camlp4"
|
|
Packit |
b513ef |
cp "site-lib-src/camlp4.$camlp4style/META.in" "site-lib-src/camlp4/"
|
|
Packit |
b513ef |
echo "camlp4: using $camlp4_cmd, style $camlp4style"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
lcamlp4=''
|
|
Packit |
b513ef |
with_camlp4=0
|
|
Packit |
b513ef |
echo "camlp4: not present (normal since OCaml-4.02)"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# compiler-libs?
|
|
Packit |
b513ef |
if [ -d "${ocaml_core_stdlib}/compiler-libs" ]; then
|
|
Packit |
b513ef |
echo "compiler-libs: found"
|
|
Packit |
b513ef |
lcomplibs="compiler-libs"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "compiler-libs: not present"
|
|
Packit |
b513ef |
lcomplibs=""
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# dbm?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -f "${ocaml_sitelib}/dbm/META" ]; then
|
|
Packit |
b513ef |
echo "dbm: package already present"
|
|
Packit |
b513ef |
ldbm=""
|
|
Packit |
b513ef |
elif [ -f "${ocaml_core_stdlib}/dbm.cmi" ]; then
|
|
Packit |
b513ef |
echo "dbm: found"
|
|
Packit |
b513ef |
ldbm="dbm"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "dbm: not present (normal since OCaml-4.00)"
|
|
Packit |
b513ef |
ldbm=""
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# num?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -f "${ocaml_sitelib}/num/META" ]; then
|
|
Packit |
b513ef |
echo "num: package already present"
|
|
Packit |
b513ef |
lnum=""
|
|
Packit |
b513ef |
numtop=""
|
|
Packit |
b513ef |
elif [ -f "${ocaml_core_stdlib}/num.cmi" ]; then
|
|
Packit |
b513ef |
echo "num: found but not as package"
|
|
Packit |
b513ef |
lnum="num num-top"
|
|
Packit |
b513ef |
numtop="num-top"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "num: not present (normal since OCaml-4.06)"
|
|
Packit |
b513ef |
lnum=""
|
|
Packit |
b513ef |
numtop=""
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# bytes?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -f "${ocaml_core_stdlib}/bytes.cmi" -o \
|
|
Packit |
b513ef |
-f "${ocaml_core_stdlib}/stdlib__bytes.cmi" ]; then
|
|
Packit |
b513ef |
echo "bytes: found, installing fake library"
|
|
Packit |
b513ef |
lbytes="bytes"
|
|
Packit |
b513ef |
cbytes=0
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "bytes: not found, installing compat library"
|
|
Packit |
b513ef |
lbytes=""
|
|
Packit |
b513ef |
cbytes=1
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# spacetime?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -f "${ocaml_core_stdlib}/raw_spacetime_lib.cmxa" ]; then
|
|
Packit |
b513ef |
echo "spacetime: found"
|
|
Packit |
b513ef |
lspacetime="raw_spacetime"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "spacetime: not found"
|
|
Packit |
b513ef |
lspacetime=""
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# graphics?
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -f "${ocaml_core_stdlib}/graphics.cmi" ]; then
|
|
Packit |
b513ef |
echo "graphics: found"
|
|
Packit |
b513ef |
lgraphics="graphics"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "graphics: not found"
|
|
Packit |
b513ef |
lgraphics=""
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# Generate the META files now.
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
l="$ldbm dynlink $lgraphics $lnum str threads unix stdlib bigarray ocamldoc $llabltk $lcamlp4 $lobuild $lcomplibs $lbytes $lspacetime"
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
for dir in site-lib-src/*; do
|
|
Packit |
b513ef |
# We do not really know if $dir is a directory.
|
|
Packit |
b513ef |
rm -f $dir/META
|
|
Packit |
b513ef |
done
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
for lib in $l; do
|
|
Packit |
b513ef |
if=""
|
|
Packit |
b513ef |
if [ -f site-lib-src/$lib/interfaces.out ]; then
|
|
Packit |
b513ef |
if=`cat site-lib-src/$lib/interfaces.out`
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
m4 -Dos=$os \
|
|
Packit |
b513ef |
"-Dtype_of_threads=${ocaml_threads}" \
|
|
Packit |
b513ef |
"-Dcamlp4_dir=${camlp4_dir}" \
|
|
Packit |
b513ef |
"-Dcamlp4_version=${camlp4_version}" \
|
|
Packit |
b513ef |
"-Dcamlp4_cmd=${camlp4_cmd}" \
|
|
Packit |
b513ef |
"-Dcamlp4_dynlink=${camlp4_dynlink}" \
|
|
Packit |
b513ef |
"-Dinterfaces=${if}" \
|
|
Packit |
b513ef |
"-Dfindlib_version=${version}" \
|
|
Packit |
b513ef |
"-Dnatdynlink=${natdynlink}" \
|
|
Packit |
b513ef |
site-lib-src/$lib/META.in >site-lib-src/$lib/META
|
|
Packit |
b513ef |
echo "Configuration for $lib written to site-lib-src/$lib/META"
|
|
Packit |
b513ef |
done
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
for part in `cd src; echo *`; do
|
|
Packit |
b513ef |
if [ -f "src/$part/META.in" ]; then
|
|
Packit |
b513ef |
sed -e "s/@VERSION@/$version/g" src/$part/META.in >src/$part/META
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
done
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
printf "Detecting compiler arguments: "
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
( cd tools/extract_args && make ) >ocargs.log 2>&1
|
|
Packit |
b513ef |
if [ "$?" -eq 0 ]; then
|
|
Packit |
b513ef |
printf "(extractor built) "
|
|
Packit |
b513ef |
tools/extract_args/extract_args -o src/findlib/ocaml_args.ml ocamlc ocamlcp ocamloptp ocamlmklib ocamlmktop ocamlopt ocamldep ocamldoc >>ocargs.log 2>&1
|
|
Packit |
b513ef |
# ocamlbrowser does not work!
|
|
Packit |
b513ef |
if [ $? -eq 0 ]; then
|
|
Packit |
b513ef |
echo "ok"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "FAILED (see the file ocargs.log for details)"
|
|
Packit |
b513ef |
exit 1
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "FAILED (see the file ocargs.log for details)"
|
|
Packit |
b513ef |
exit 1
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
######################################################################
|
|
Packit |
b513ef |
# Write Makefile.config
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
parts="findlib"
|
|
Packit |
b513ef |
if [ $with_toolbox -gt 0 ]; then
|
|
Packit |
b513ef |
parts="$parts findlib-toolbox"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
if [ $cbytes -gt 0 ]; then
|
|
Packit |
b513ef |
parts="$parts bytes"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo "# Makefile.config written by configure" >Makefile.config
|
|
Packit |
b513ef |
echo "OCAML_CORE_STDLIB=${ocaml_core_stdlib}" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAML_CORE_BIN=${ocaml_core_bin}" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAML_CORE_MAN=${ocaml_core_man}" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAML_SITELIB=${ocaml_sitelib}" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAML_THREADS=${ocaml_threads}" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAMLFIND_BIN=${ocamlfind_bin}" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAMLFIND_MAN=${ocamlfind_man}" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAMLFIND_CONF=${ocamlfind_config}" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAML_AUTOLINK=${ocaml_autolink}" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAML_REMOVE_DIRECTORY=${have_remdir}" >>Makefile.config
|
|
Packit |
b513ef |
echo "EXEC_SUFFIX=${exec_suffix}" >>Makefile.config
|
|
Packit |
b513ef |
echo "LIB_SUFFIX=${lib_suffix}" >>Makefile.config
|
|
Packit |
b513ef |
echo "CUSTOM=${custom}" >>Makefile.config
|
|
Packit |
b513ef |
echo "PARTS=${parts}" >>Makefile.config
|
|
Packit |
b513ef |
echo "INSTALL_TOPFIND=${with_topfind}" >>Makefile.config
|
|
Packit |
b513ef |
echo "INSTALL_CAMLP4=${with_camlp4}" >>Makefile.config
|
|
Packit |
b513ef |
echo "USE_CYGPATH=${use_cygpath}" >>Makefile.config
|
|
Packit |
b513ef |
echo "HAVE_NATDYNLINK=${have_natdynlink}" >>Makefile.config
|
|
Packit |
b513ef |
echo "VERSION=${version}" >>Makefile.config
|
|
Packit |
b513ef |
echo "ENABLE_TOPFIND_PPXOPT=${enable_topfind_ppxopt}" >>Makefile.config
|
|
Packit |
b513ef |
echo "SYSTEM=${system}" >>Makefile.config
|
|
Packit |
b513ef |
echo "NUMTOP=${numtop}" >>Makefile.config
|
|
Packit |
b513ef |
echo "SH=${sh}" >>Makefile.config
|
|
Packit |
b513ef |
if [ "$mingw_lib" != "" ]; then
|
|
Packit |
b513ef |
echo "OCAMLC_FLAGS=-I \"${mingw_lib}\"" >>Makefile.config
|
|
Packit |
b513ef |
echo "OCAMLOPT_FLAGS=-I \"${mingw_lib}\"" >>Makefile.config
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
echo "OPAQUE=${opaque}" >>Makefile.config
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
# All OK
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo
|
|
Packit |
b513ef |
echo "About the OCAML core installation:"
|
|
Packit |
b513ef |
echo " Standard library: ${ocaml_core_stdlib}"
|
|
Packit |
b513ef |
echo " Binaries: ${ocaml_core_bin}"
|
|
Packit |
b513ef |
echo " Manual pages: ${ocaml_core_man}"
|
|
Packit |
b513ef |
echo " Multi-threading type: ${ocaml_threads}"
|
|
Packit |
b513ef |
echo "The directory of site-specific packages will be"
|
|
Packit |
b513ef |
echo " site-lib: ${ocaml_sitelib}"
|
|
Packit |
b513ef |
echo "The configuration file is written to:"
|
|
Packit |
b513ef |
echo " findlib config file: ${ocamlfind_config}"
|
|
Packit |
b513ef |
echo "Software will be installed:"
|
|
Packit |
b513ef |
echo " Libraries: in <site-lib>/findlib"
|
|
Packit |
b513ef |
echo " Binaries: ${ocamlfind_bin}"
|
|
Packit |
b513ef |
echo " Manual pages: ${ocamlfind_man}"
|
|
Packit |
b513ef |
if [ $with_topfind -gt 0 ]; then
|
|
Packit |
b513ef |
echo " topfind script: ${ocaml_core_stdlib}"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo " topfind script: omitted"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ $with_ppxopt -gt 0 ]; then
|
|
Packit |
b513ef |
echo "Topfind ppxopt support: yes"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "Topfind ppxopt support: no"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ $with_toolbox -gt 0 ]; then
|
|
Packit |
b513ef |
echo "Toolbox: yes"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "Toolbox: no"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ -z "$custom" ]; then
|
|
Packit |
b513ef |
echo "Link custom runtime: no"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "Link custom runtime: yes"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
if [ $cbytes -gt 0 ]; then
|
|
Packit |
b513ef |
echo "Need bytes compatibility: yes"
|
|
Packit |
b513ef |
else
|
|
Packit |
b513ef |
echo "Need bytes compatibility: no"
|
|
Packit |
b513ef |
fi
|
|
Packit |
b513ef |
|
|
Packit |
b513ef |
echo
|
|
Packit |
b513ef |
echo "Configuration has been written to Makefile.config"
|
|
Packit |
b513ef |
echo
|
|
Packit |
b513ef |
echo "You can now do 'make all', and optionally 'make opt', to build ocamlfind."
|