/usr/local/CPAN/Math-ematica/Makefile.PL
# -*- Mode: Perl -*-
# $Basename: Makefile.PL $
# $Revision: 1.8 $
# Author : Ulrich Pfeifer
# Created On : Sat Dec 20 14:42:50 1997
# Last Modified By: Ulrich Pfeifer
# Last Modified On: Sun Apr 17 18:17:55 2005
# Language : CPerl
# Update Count : 52
# Status : Unknown, Use with caution!
#
# (C) Copyright 1997, Ulrich Pfeifer, all rights reserved.
#
#
use ExtUtils::MakeMaker;
my (%conf, $LIBDIR, $INCDIR);
%conf = find_math_installation();
unless ($conf{bindir}) {
print
"Using hardcoded paths! You probably will have to edit line ",
(__LINE__+ 3), " to line ", (__LINE__+ 5), "\nin $0\n";
my $MLINKDIR = '/usr/local/mathematica/AddOns/MathLink/DevelopersKits';
my $SYS = 'Linux';
my $ADDONSDIR = "${MLINKDIR}/${SYS}/CompilerAdditions";
$INCDIR = $ADDONSDIR;
$LIBDIR = $ADDONSDIR;
} else {
if ($conf{bindir} =~ s:/Executables$::) {
# This seems to work with Mathematica 5.0
$INCDIR = "$conf{bindir}/AddOns/MathLink/DeveloperKit/Linux/CompilerAdditions";
$LIBDIR = "$conf{bindir}/AddOns/MathLink/DeveloperKit/Linux/CompilerAdditions";
} else {
# this used to work with Mathematica 2.0
$INCDIR = $conf{bindir};
$LIBDIR = $conf{bindir};
}
}
WriteMakefile
(
'NAME' => 'Math::ematica',
'VERSION_FROM' => 'ematica.pm',
'dist' => {COMPRESS => 'gzip -9f'},
'LIBS' => ["-L$LIBDIR -lML", '-lm'],
'DEFINE' => '',
'INC' => "-I$INCDIR",
'OBJECT' => 'ematica.o constants.o',
'MAN3PODS' => { 'ematica.pm' => 'blib/man3/Math::ematica.3'},
'XSPROTOARG' => '-prototypes',
'dist' => {
COMPRESS => 'gzip -9f',
PREOP => 'pod2text ematica.pm > README',
},
);
sub find_math_installation {
my $mcc;
my %var;
# look for mcc
for (split /:/, $ENV{PATH}) {
if (-x "$_/mcc") {
$mcc = "$_/mcc";
}
}
unless ($mcc) {
warn "Could not find mcc in your \$PATH\n";
return;
}
# set a reasonable default, as the stuff does not seem to work with
# newer Mathematica versions
my $mccdir = -l $mcc ? readlink $mcc : $mcc;
$mccdir =~ s:/[^/]+$::;
$var{bindir} = $mccdir;
# Read mcc script and exract path information
open(MCC, "< $mcc") or die "Could not open '$mcc' for reading\n";
while (<MCC>) {
if (m{^ \s* (\w+) \s* = \s* (\S+)}x) {
my ($var_name, $value) = ($1, $2);
$value =~ s/\$(\w+)/$var{$1}/eg;
$var{$var_name} = $value;
}
}
close MCC;
%var;
}