Add configure script and remove more pfff artifacts

This commit is contained in:
Joey Yakimowich-Payne 2018-06-04 13:15:36 +09:00
commit a4a44a3779
5 changed files with 322 additions and 20 deletions

View file

@ -10,14 +10,7 @@ MANDIR=/usr/local/man
LIBDIR=/usr/local/lib
# Where to install the configuration files
SHAREDIR=/usr/local/share/pfff
# Features
FEATURE_VISUAL=1
FEATURE_FACEBOOK=0
FEATURE_BYTECODE=1
FEATURE_CMT=0
SHAREDIR=/usr/local/share/flitter
OPTBIN=.opt
OCAMLCFLAGS_EXTRA=-bin-annot -absname

309
configure vendored Executable file
View file

@ -0,0 +1,309 @@
#!/usr/bin/perl
use strict;
# this is not available in some distro :(
use Getopt::Long;
use Pod::Usage;
######################################################################
# Prelude
######################################################################
# Yes I know about autoconf ... and autoconf sucks.
# We do not check for the following programs; we assume they are standard:
# - binutils, gcc, as, ld (the GNU toolchain)
# - make, perl, bash
# - diffutils, fileutils, findutils, grep, patchutils, sh-utils
#
#todo:
# - findutils? we need a good GNU find, not the macos find
# which adds some extra '//' in paths which bothers flitter
# - sharutils still?, for obrowser/ocsigen use of uuencode
#
# If you want to run the tests you will also need:
# - swipl
# - javac
my $project =
"flitter";
my $projectcmdline =
"./flitter -generate-nim <c_file>";
######################################################################
# Options
######################################################################
my $prefix="/usr/local";
# adjusted automatically based on local ocaml configuration
my $opt= ""; # ocamlc.opt?
my $ocamlc_flags = ""; #ocamlc -bin-annot?
my $ocaml_version = 3112;
my $man = 0;
my $help = 0;
# See http://perldoc.perl.org/Getopt/Long.html
# coupling: if add options here, add an explanation at the bottom of this file
# too. Later you may also add something in the documentation latex file
# (or use LP).
GetOptions (
"prefix=s" => \$prefix,
'help|?' => \$help,
'man' => \$man
) or pod2usage(2);
#or die "$0: GetOptions: $!";
pod2usage(1) if $help;
pod2usage(-exitstatus => 0, -verbose => 2) if $man;
my $src="$prefix/share/$project";
######################################################################
# 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;
}
sub show_error_msg_and_exit_if_error {
my ($error) = @_;
if($error) {
pr2 "
----------------------------------------------------------------------
!!!! There seems to have a problem, we have found a missing program.
Have a look at install.txt and the install_xxx.txt corresponding to your
OS.!!!!
----------------------------------------------------------------------
";
exit 1;
}
#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. !!!!
}
sub show_missing_package_error_msg {
my ($error2) = @_;
pr2 "
----------------------------------------------------------------------
!!!! You can try to compile and test $project,
but some features or plugins may be missing. !!!!\n
We have found $error2 missing package" . plural($error2) . ". " .
#(($error2 > 1) ? "Some of those packages" : "This package") .
#" may be installed
#by picking " . ($error2 > 1 ? "them" : "it") .
#" in $project-dependencies.tgz available on the $project website.
#";
"
Have a look at the install_xxx.txt corresponding to your OS.
";
}
######################################################################
# Let's go
######################################################################
pr2 "Checking your configuration.\n";
# hard error, missing programs
my $error = 0;
# soft error, missing libraries, can not probably compile every flitter components
my $error2 = 0;
my $arch = `uname`;
#---------------------------------------------------------------------
# Compilers and runtimes
#---------------------------------------------------------------------
# We need at least 3.12 because I use the forall 'a. new typing feature
# as well as the '_' pattern in records (in my code but also in lib-sexp/)
$error +=
check_config("echo \"1;;\\n\" | ocaml |",
"(Objective|OCaml)(.*) ([34]\.*.*)",
"OCaml (the wonderful language) is present.",
"The program ocaml is missing or is not a good version. We need at least 3.12",
);
show_error_msg_and_exit_if_error($error);
my $command = "echo \"1;;\\n\" | ocaml |";
my $full = cat($command);
my $res = join(" ", @{$full});
if ($res =~ /(Objective|OCaml)(.*) ([34])\.([0-9]+).([0-9]+)/) {
my $major = $3;
my $minor = $4;
my $other = $5;
$ocaml_version = $major * 1000 + $minor * 10 + $other;
} else {
die "wrong version of ocaml";
}
# allow to use ocamlc.opt instead of ocamlc, which speeds up compilation
if (`which ocamlc.opt` && `which ocamlopt.opt`) {
$opt = ".opt";
}
# -bin-annot is for codegraph, it needs ocaml 4.00,
# -absname is for tuareg mode under my mac, it also needs ocaml 4.00
if($ocaml_version >= 4000) {
$ocamlc_flags="-bin-annot -absname";
}
#---------------------------------------------------------------
# Developers tools
#---------------------------------------------------------------
my $MAKE_PROGRAM = "make";
if( ($arch =~ /FreeBSD/) || ($arch =~ /OpenBSD/) ) {
$MAKE_PROGRAM = "gmake";
}
my $BREW_PROGRAM = "";
if($arch =~ /Darwin/) {
$BREW_PROGRAM = `which brew`;
}
#---------------------------------------------------------------------
# More developers tools
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Libraries
#---------------------------------------------------------------------
# if darwin or cygwin then could just modify this variable ? enough ?
my $prefix_distrib = "/usr";
if( ($arch =~ /FreeBSD/) || (($arch =~ /Darwin/) && ($BREW_PROGRAM)) ) {
$prefix_distrib = "/usr/local";
} elsif ($arch =~ /Darwin/) {
$prefix_distrib = "/opt/local";
}
######################################################################
# Generating the configuration
######################################################################
pr2 "";
pr2 "$project target prefix: $prefix (you can use --prefix to override it)";
pr2 "Generating Makefile.config (see also configure --help)";
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
OPTBIN=$opt
OCAMLCFLAGS_EXTRA=$ocamlc_flags
OCAMLVERSION=$ocaml_version
";
pr2 "Generating globals/config_flitter.ml";
`perl -p -e 's#Not_found1.\*#Not_found->\\\"$src\\\"#' globals/config_flitter.ml.in > globals/config_flitter.ml`;
`perl -p -i -e 's#Not_found[0-9]#Not_found#' globals/config_flitter.ml`;
if($error || $error2) {
pr2 "!!Problems during ./configure!!";
}
######################################################################
# Diagnostic
######################################################################
if($error2) {
show_missing_package_error_msg($error2);
} else {
pr2 "All seems fine for $project.";
}
pr2 "
To compile $project type:
\$ $MAKE_PROGRAM depend
\$ $MAKE_PROGRAM
Then, to test $project simply type:
\$ $projectcmdline
and to run tests:
\$ make test
";
######################################################################
# Documentation
######################################################################
__END__
=head1 NAME
configure - setting compilation options for flitter
=head1 SYNOPSIS
configure [options] [--prefix=/path/to/install]
Options are:
--prefix
--with-all
=head1 OPTIONS
=over 8
=item B<-help>
Print a brief help message and exits.
=item B<-man>
Prints the manual page and exits.
=back
=head1 DESCRIPTION
B<This program> will read command line options and generate
a B<Makefile.config> and other files to set the compilation
environment for flitter.
=cut

View file

@ -2,7 +2,7 @@ let version = "0.29"
let path =
try (Sys.getenv "FLITTER_HOME")
with Not_found->"./"
with Not_found->"/usr/local/share/flitter"
let std_xxx = ref (Filename.concat path "xxx.yyy")

View file

@ -0,0 +1,11 @@
let version = "0.29"
let path =
try (Sys.getenv "FLITTER_HOME")
with Not_found1->"./"
let std_xxx = ref (Filename.concat path "xxx.yyy")
let logger =
try Some (Sys.getenv "FLITTER_LOGGER")
with Not_found2-> None

View file

@ -1,11 +0,0 @@
let version = "0.29"
let path =
try (Sys.getenv "PFFF_HOME")
with Not_found1->"/usr/local/share/pfff"
let std_xxx = ref (Filename.concat path "xxx.yyy")
let logger =
try Some (Sys.getenv "PFFF_LOGGER")
with Not_found2-> None