Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Branch: master
Fetching contributors…

Cannot retrieve contributors at this time

executable file 228 lines (168 sloc) 6.417 kB
#!/usr/bin/perl
######################################################################
# Prelude
######################################################################
# Yes I know about autoconf ... and autoconf sux.
# assume standard: diff
# assume standard: perl
#TODO python 2.5 and perhaps a --disable-python
#old: --with-menhir=/path/to/menhirLib or `ocamlfind query menhirLib`
my $project =
"coccinelle";
my $projectcmdline =
"spatch -cocci_file demos/simple.cocci demos/simple.c";
######################################################################
# Options
######################################################################
my $prefix="/usr/local";
my $python=1;
local $_ = join ' ', @ARGV;
# Parse options
/-h/ || /--help/ and die "usage: $0 [--prefix=path] [--without-python]\n";
/--prefix=([^ ]*)/ and $prefix = $1;
/--without-python/ and $python = 0;
#if($ARGV[0] =~ "--prefix=(.*)") {
# $prefix = $1;
#}
#if($ARGV[1] =~ "--without-python") {
# $python = 0;
#}
my $src="$prefix/share/$project";
######################################################################
# Side effects
######################################################################
######################################################################
# Helpers
######################################################################
#BEGIN { die "need Perl 5 or greater" if $] < 5 ; }
#use Common;
sub pr2 { print STDERR "@_\n" }
sub cat {
my ($what) = @_;
my @list;
open(TMP, $what);
while(<TMP>) { push @list, "$_"; }
\@list;
}
sub notb { !$_[0] }
sub mapf { my ($f, $xs) = @_; [ map { &$f($_) } @{$xs} ] }
sub plural { my ($e) = @_; if ($e > 1) { "s" } else { "" } }
sub check_config { my ($command, $expect, $msggood, $msgbad) = @_;
my $error = 0;
my $full = cat($command);
my $res = join(" ", @{$full});
# pr2 $res;
if(notb($res =~ $expect)) { $error++; pr2 "!!!! $msgbad !!!!"; }
else { pr2 $msggood }
return $error;
}
######################################################################
# Let's go
######################################################################
pr2 "Checking your configuration.\n";
my $error = 0;
#---------------------------------------------------------------------
# Compilers and runtimes
#---------------------------------------------------------------------
$error +=
check_config("echo \"1;;\\n\" | ocaml |",
# "Objective(.*) 3.0[9]",
"Objective(.*) 3.",
"OCaml (the wonderful language) is present.",
"The program ocaml is missing or is not a good version. We need at least 3.09",
);
#we have cached the result of menhir in the tgz we build.
#$error +=
# check_config("menhir --version |",
# "menhir, version 20071212",
## "menhir, version 2006.*",
# "Menhir (the parser generator) is present.",
# "The program menhir is missing or is not a good version.",
# );
#---------------------------------------------------------------
# Developers tools
#---------------------------------------------------------------
pr2 "";
$error += check_config(
"make -v 2>&1 |grep Make|",
"GNU Make 3\.[0-9]+", #version 3.81
"make (gnu version) is present.",
"The program gnu make is missing or is not a good version.
We need 3.XX",
);
#---------------------------------------------------------------------
# More developers tools
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Librairies
#---------------------------------------------------------------------
######################################################################
# Generate config files (platform/portability issues)
######################################################################
######################################################################
# Generate globals files (features issues)
######################################################################
######################################################################
# Diagnostic
######################################################################
if($error) {
pr2 "
----------------------------------------------------------------------
!!!! There seems to have problem, we have found $error missing package" .
plural($error) . ".
" . (($error > 1) ? "Some of those packages" : "This package") .
" may be installed by picking " . ($error > 1 ? "them" : "it") .
" in $project-dependencies.tgz available
on the $project website. !!!!
----------------------------------------------------------------------
";
} else {
pr2 "
----------------------------------------------------------------------
All seems fine for $project.
To compile $project type:
make depend; make
To install type:
make install
Then, to test $project simply type:
$projectcmdline
";
if($python) {
pr2
"To use the python SmPL feature you may have to set some environment variables.
For bash do:
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$prefix/lib
export PYTHONPATH=\$PYTHONPATH:$src/python
"
}
pr2 "
----------------------------------------------------------------------
";
}
######################################################################
# Generating the configuration
######################################################################
pr2 "$project target prefix: $prefix (you can use --prefix to override it)";
pr2 "Generating Makefile.config";
open(CONFIG, ">Makefile.config");
print CONFIG "# autogenerated by configure
# Where to install the binary
BINDIR=$prefix/bin
# Where to install the man pages
MANDIR=$prefix/man
# Where to install the lib
LIBDIR=$prefix/lib
# Where to install the configuration files
SHAREDIR=$src
# Features
FEATURE_PYTHON=$python
";
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;`;
`cd python; make depend`;
my $command = "perl -p -i -e 's#Not_found.\*#Not_found->\\\"$src\\\"#' globals/config.ml";
`$command`;
Jump to Line
Something went wrong with that request. Please try again.