#!/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() { 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`;