my $prefix="/usr/local";
my $python=1;
+my $noocamlscripting=0;
my $opt=".opt";
my $tarzan=1;
my $pydir="pycaml";
local $_ = join ' ', @ARGV;
# Parse options
-/-h/ || /--help/ and die "usage: $0 [--prefix=path] [--without-python] [--no-opt]\n\n\t--no-opt\tDo not use the optimimized version of OCaml\n\t--opt\tUse the optimimized version of OCaml\n\n";
+/-h/ || /--help/ and die "usage: $0 [--prefix=path] [--without-python] [--without-ocaml] [--no-opt]\n\n\t--no-opt\tDo not use the optimimized version of OCaml\n\t--opt\tUse the optimimized version of OCaml\n\n";
/--prefix=([^ ]*)/ and $prefix = $1;
/--without-python/ and $python = 0;
+/--without-ocaml/ and $noocamlscripting = 1;
/--no-opt/ and $opt = "";
/--opt/ and $opt = ".opt";
#---------------------------------------------------------------------
# Compilers and runtimes
#---------------------------------------------------------------------
+
$error +=
check_config("echo \"1;;\\n\" | ocaml |",
-# "Objective(.*) 3.0[9]",
- "Objective(.*) 3.",
+ "Objective(.*) 3.\(09|1[0-9]\)",
"OCaml (the wonderful language) is present.",
"The program ocaml is missing or is not a good version. We need at least 3.09",
);
+unless ($noocamlscripting) {
+$noocamlscripting = check_config("echo \"1;;\\n\" | ocaml |",
+ "Objective(.*) 3.1[1-9]",
+ "OCaml >= 3.11 is present. OCaml scripting activated.",
+ "OCaml scripting disabled. We need at least OCaml 3.11",
+ );
+}
+my $ocamlprefix = $noocamlscripting ? "no" : "yes";
+
if ($opt eq ".opt") {
my $opt_check = `which ocamlc.opt 2> /dev/null`;
if($opt_check =~ "/ocamlc.opt\$") {
We need 3.XX",
);
-
#---------------------------------------------------------------------
# More developers tools
#---------------------------------------------------------------------
# Librairies
#---------------------------------------------------------------------
+# Python dev
+my $PY_VERSION;
+if($python) {
+ if(check_config(
+ "python --version 2>&1 |",
+ '^Python 2\.([4567]|[4567]\.\S*)$',
+ "python is present",
+ "python is missing or is not a good version."
+ ))
+ {
+ $python=0;
+ }
+ if($python) {
+ my $PY_PREFIX = `python pycaml/getprefix.py | tr -d '\n'`;
+ $PY_VERSION = `python pycaml/getversion.py | tr -d '\n'`;
+ my $python_hdr = "$PY_PREFIX/include/python$PY_VERSION/Python.h";
+ if(check_config(
+ "ls $python_hdr 2> /dev/null | ",
+ $python_hdr,
+ "Python.h found",
+ "Python.h missing - You need to install python-dev"
+ ))
+ {
+ $python=0
+ }
+ }
+}
+
+my $ocamlfind=!check_config(
+ "which ocamlfind 2> /dev/null |",
+ '/ocamlfind$',
+ "ocamlfind is present",
+ "ocamlfind is missing -- Switch to local library copies."
+ );
+
# pycaml. Binding between Python and OCaml
my $syspydir=`ocamlfind query pycaml 2> /dev/null | xargs echo -n`;
if($syspydir) {
$pydir=$syspydir;
- pr2 "'pycaml' library present in $pydir";
+ pr2 "'pycaml' library is present in $pydir";
+} else {
+ pr2 "'pycaml' library is not present. A local copy will be used.";
}
# menhirLib. Runtime system for the parsers generated with menhir
if($sysmenhirdir) {
$menhirdir=$sysmenhirdir;
- pr2 "'menhirLib' library present in $menhirdir";
+ pr2 "'menhirLib' library is present in $menhirdir";
+} else {
+ pr2 "'menhirLib' library is not present. A local copy will be used..";
}
# sexplib. Runtime system for the parsers generated with menhir
if($syssexpdir) {
$sexpdir=$syssexpdir;
- pr2 "'sexplib' library present in $sexpdir";
+ pr2 "'sexplib' library is present in $sexpdir";
+} else {
+ pr2 "'sexplib' library is not present. A local copy will be used..";
}
######################################################################
";
} else {
-#pad: before the message was saying (make depend); make all
-# I found this confusing so I removed it.
-
- pr2 "
-
-----------------------------------------------------------------------
+ pr2
+"----------------------------------------------------------------------
All seems fine for $project.
";
-if($python) {
- pr2
+ if($python) {
+ pr2
"To use the python SmPL feature you may have to set some environment variables.
+However, they are automatically set by the front-end installed in $prefix/bin.
For bash do:
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$prefix/lib
-export PYTHONPATH=\$PYTHONPATH:$src/python
-"
+export PYTHONPATH=\$PYTHONPATH:$src/python"
}
- pr2 "
-----------------------------------------------------------------------
-";
-}
-
+ pr2 "----------------------------------------------------------------------";
+}
######################################################################
# Generating the configuration
######################################################################
+pr2 " Compilation configuration\n";
+
pr2 "$project target prefix: $prefix (you can use --prefix to override it)";
pr2 "Generating Makefile.config";
open(CONFIG, ">Makefile.config");
# Where to install the configuration files
SHAREDIR=$src
+BASH_COMPLETION_DIR=/etc/bash_completion.d
+
# Features
FEATURE_PYTHON=$python
FEATURE_TARZAN=$tarzan
+";
+
+if ($python) {
+print CONFIG "PYVER=$PY_VERSION";
+}
+print CONFIG "
PYCAMLDIR=$pydir
MENHIRDIR=$menhirdir
SEXPDIR=$sexpdir
+DYNLINK=$ocamlprefix
# The OPTBIN variable is here to allow to use ocamlc.opt instead of
# ocaml, when it is available, which speeds up compilation. So
OPTBIN=$opt
";
-pr2 "Modifying globals/config.ml";
-pr2 "Generating appropriate links in python/ (python=$python)";
-my $pythonprefix = $python ? "yes_" : "no_";
-`cd python; rm -f pycocci.ml pycocci_aux.ml;`;
-`cd python; ln -s ${pythonprefix}pycocci.ml pycocci.ml; `;
-`cd python; ln -s ${pythonprefix}pycocci_aux.ml pycocci_aux.ml;`;
+
+my $pythonprefix = $python ? "yes" : "no";
+pr2 "Support for python scripting: $pythonprefix";
+`cd python; ln -sf ${pythonprefix}_pycocci.ml pycocci.ml; `;
`cd python; make depend`;
+pr2 "Support for ocaml scripting: $ocamlprefix";
+`cd ocaml; ln -sf ${ocamlprefix}_prepare_ocamlcocci.ml prepare_ocamlcocci.ml;`;
+`cd ocaml; make depend`;
+
+pr2 "Modifying globals/config.ml";
my $command = "perl -p -e 's#Not_found.\*#Not_found->\\\"$src\\\"#' globals/config.ml.in > globals/config.ml";
`$command`;
+pr2 "----------------------------------------------------------------------";
+pr2 " Runtime dependency\n";
+
+if ($ocamlfind) {
+pr2 "Support for external ocaml library in ocaml scripting: yes (ocamlfind found)";
+}
+else {
+pr2 "Support for external ocaml library in ocaml scripting: no";
+pr2 "!!!!!!! WARNING !!!!!!! ocamlfind may be required at runtime";
+}
+
+pr2 "";