#!/usr/bin/perl
+
+# Author: Yoann Padioleau
+
######################################################################
# Prelude
######################################################################
# assume standard: diff
# assume standard: perl
-#TODO python 2.5 and perhaps a --disable-python
+#TODO check python 2.5 ?
+
+# need latex and hevea if want to compile the documentation
#old: --with-menhir=/path/to/menhirLib or `ocamlfind query menhirLib`
my $project =
"coccinelle";
my $projectcmdline =
- "spatch -cocci_file demos/simple.cocci demos/simple.c";
+ "spatch -sp_file demos/simple.cocci demos/simple.c -o /tmp/new_simple.c";
######################################################################
# Options
my $prefix="/usr/local";
my $python=1;
-my $trac=0;
+my $noocamlscripting=0;
my $opt=".opt";
+my $tarzan=1;
+my $pydir="pycaml";
+my $menhirdir="menhirlib";
+my $sexpdir="ocamlsexp";
local $_ = join ' ', @ARGV;
# Parse options
-/-h/ || /--help/ and die "usage: $0 [--prefix=path] [--without-python] [--with-trac] [--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] [--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-trac/ and $trac = 0;
-/--with-trac/ and $trac = 1;
/--no-opt/ and $opt = "";
/--opt/ and $opt = ".opt";
+#tarzan by default (used by score file parsing and now also for sexp_ast_c.ml)
+
+
#if($ARGV[0] =~ "--prefix=(.*)") {
# $prefix = $1;
#}
#---------------------------------------------------------------------
# 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",
);
+$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\$") {
$error += check_config(
"make -v 2>&1 |grep Make|",
- "GNU Make 3\.[0-9]+", #version 3.81
+ "GNU Make [^0-9]*3\.[0-9]+.*", #version 3.79.1, 3.81
"make (gnu version) is present.",
"The program gnu make is missing or is not a good version.
We need 3.XX",
# Librairies
#---------------------------------------------------------------------
+# pycaml. Binding between Python and OCaml
+my $syspydir=`ocamlfind query pycaml 2> /dev/null | xargs echo -n`;
+
+if($syspydir) {
+ $pydir=$syspydir;
+ 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
+my $sysmenhirdir=`ocamlfind query menhirLib 2> /dev/null | xargs echo -n`;
+
+if($sysmenhirdir) {
+ $menhirdir=$sysmenhirdir;
+ 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
+my $syssexpdir=`ocamlfind query sexplib 2> /dev/null | xargs echo -n`;
+
+if($syssexpdir) {
+ $sexpdir=$syssexpdir;
+ pr2 "'sexplib' library is present in $sexpdir";
+} else {
+ pr2 "'sexplib' library is not present. A local copy will be used..";
+}
+
######################################################################
# Generate config files (platform/portability issues)
######################################################################
";
} else {
- pr2 "
-
-----------------------------------------------------------------------
+ pr2
+"----------------------------------------------------------------------
All seems fine for $project.
To compile $project type:
- (make depend); make all
-or alternatively, for the optimized version:
- (make depend); make all.opt
+ \$ make depend
+ \$ make all
+
+Or alternatively, for the optimized version:
+ \$ make all.opt
If you want both, you could use:
- (make depend); make world
+ \$ make world
+
To install type:
- make install
+ \$ make install
Then, to test $project simply type:
- $projectcmdline
+ \$ $projectcmdline
";
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
######################################################################
# Where to install the configuration files
SHAREDIR=$src
+BASH_COMPLETION_DIR=/etc/bash_completion.d
+
# Features
FEATURE_PYTHON=$python
+FEATURE_TARZAN=$tarzan
+
+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`;
-#
-# Configuration of python with or without trac
-#
-`cd python/coccilib; ln -sf output_base.py output.py;`;
-if($trac) {
-# Switch between implementation
-# in python/coccilib
-pr2 "Selecting python trac extension";
-`cd python/coccilib; ln -sf output_trac.py output.py;`;
-}
-
-
-
-