/usr/local/CPAN/Bio-Emboss/Makefile.PL
use 5.000;
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
#
# --- The following lines need to be adjusted !!!!!
#
# --- installation path of EMBOSS (--PREFIX during EMBOSS' configure)
# (if you did no "make install" of EMBOSS,
# put here the path to the source code)
$EMB_ROOT = "";
#$EMB_ROOT = "/usr/local";
# --- external libraries required by EMBOSS
# XLIB and LIBS from the EMBOSS Makefile
# (<emboss-build-dir>/emboss/Makefile)
$EMB_EXT_LIBS = "";
#$EMB_EXT_LIBS = "-L/usr/X11R6/lib -lX11 -lm -lgd -lpng -lz";
#$EMB_EXT_LIBS = "-L/usr/openwin/lib -lX11 -lsocket -lm -lnsl -lgd -lpng -lz";
# --- overwrite EMB_ROOT=xxx etc. from command-line if given
@ARGV = extract_global_params (\@ARGV, qw (EMB_ROOT EMB_EXT_LIBS EMB_SRC_ROOT));
#
# --- Look at these settings if building fails ....
#
# --- path to EMBOSS' sources (for the *.h files)
#$EMB_SRC_ROOT = "/usr/local/src/EMBOSS-2.7.1";
# --- DEFS from the EMBOSS Makefile; maybe not needed
$EMB_DEFS = "";
# $EMB_DEFS = " -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" .....";
# --- Change the following lines only, if EMBOSS libraries
# or EMBOSS includes weren't found.
#
# $EMB_LIBS: The nucleus, ajaxg, ajax and plplot libraries are taken
# from the lib/ subdirectory in $EMB_ROOT by default.
# $EMB_INC: The *.h files are taken from the subdirectories
# nucleus, ajax and plplot in $EMB_SRC_ROOT by default,
# or the include subdirectory in $EMB_ROOT.
#
@emb_libs = qw(nucleus ajax ajaxg eplplot);
@emb_lib_dirs = qw(plplot ajax nucleus);
if (-d "$EMB_ROOT/lib") {
@lib_search_dirs = qw(lib);
} elsif (-d "$EMB_ROOT/ajax/.libs") {
@lib_search_dirs = qw(plplot/.libs ajax/.libs nucleus/.libs);
} else {
@lib_search_dirs = qw(plplot ajax nucleus);
}
warn ("warning: **** \$EMB_ROOT not set\n") unless -d $EMB_ROOT;
if ($EMB_EXT_LIBS eq "" and $EMB_ROOT ne "") {
my $themakefile = $EMB_SRC_ROOT ? $EMB_SRC_ROOT : $EMB_ROOT;
$themakefile .= "/emboss/Makefile";
warn "\n\$EMB_EXT_LIBS not defined.\n".
"Usually this variable must be set to a combined value\n".
"of XLIB and LIBS from the EMBOSS Makefile:\n\n";
if (-f $themakefile) {
my $grepres = `$^X -ne 'print if /^(X_\\w+LIBS|LIBS|XLIB)\\b/' $themakefile`; warn $grepres . "\n";
} else {
warn "$themakefile (file not found)\n".
"Can not find EMBOSS source to guess XLIB and LIBS\n".
"Use parameter EMB_SRC_ROOT to set EMBOSS source location\n\n";
}
}
$EMB_LIBS = join (" ", map { "-L$EMB_ROOT/$_" } @lib_search_dirs) . " " .
join (" ", map { "-l$_" } @emb_libs) . " " .
$EMB_EXT_LIBS;
if ($ENV{OSTYPE} eq "solaris") {
$EMB_LIBS = join (" ", map { "-R$EMB_ROOT/$_" } @lib_search_dirs) .
" " . $EMB_LIBS;
}
if (-d "$EMB_ROOT/include") {
$EMB_INC = "-I$EMB_ROOT/include";
} else {
$EMB_INC = join " ", map { "-I$EMB_ROOT/$_" } grep { -d "$EMB_ROOT/$_"} @emb_lib_dirs;
}
print "Searching EMBOSS libraries in $EMB_LIBS\n";
print "Searching EMBOSS headers in $EMB_INC\n";
# --- look for EMBOSS in $EMB_ROOT and $EMB_SRC_ROOT
# (disable if you change $EMB_LIBS or $EMB_INC manually)
# ---- check function needs update
$check_installation = 0;
# --- trying to get the EMBOSS version from the application 'embossversion'
# (if this doesn't work, set $EMB_VERSION here to e.g. "2.5.1"
$embossversion = "$EMB_ROOT/bin/embossversion";
$embossversion = "$EMB_ROOT/emboss/embossversion" unless -x $embossversion;
$EMB_VERSION = `$embossversion -stdout -auto`; # e.g. 2.5.1
# --- solving name conflicts Perl <-> Emboss:
# --- some Perl defines need to be undefined for EMBOSS
@emboss_undefs = qw(ELSE WORD apply);
# --- some EMBOSS terms need to be redefined, because they are
# already used by Perl
@emboss_redefs = qw(regexp OP_NOT OP_REF OP_REVERSE);
# --- include functions that have been declared "deprecated"
$INCLUDE_DEPRECATED_FUNCTIONS = 1;
#
# --- END of adjustments
#
# --- list of modules in this package
@modules_lib = qw(
Emboss_acd
Emboss_align
Emboss_arr
Emboss_assert
Emboss_base
Emboss_call
Emboss_cod
Emboss_dan
Emboss_dmx
Emboss_domain
Emboss_feat
Emboss_file
Emboss_fmt
Emboss_graph
Emboss_hist
Emboss_index
Emboss_list
Emboss_math
Emboss_matrices
Emboss_mem
Emboss_mess
Emboss_nam
Emboss_nexus
Emboss_pdb
Emboss_pdbio
Emboss_phylo
Emboss_range
Emboss_reg
Emboss_report
Emboss_seq
Emboss_seqabi
Emboss_seqdb
Emboss_seqread
Emboss_seqtype
Emboss_seqwrite
Emboss_sort
Emboss_str
Emboss_sys
Emboss_table
Emboss_time
Emboss_translate
Emboss_tree
Emboss_util
Emboss_vector
Emboss_embcom
Emboss_embcons
Emboss_embdata
Emboss_embdbi
Emboss_embdmx
Emboss_embdomain
Emboss_embest
Emboss_embexit
Emboss_embgroup
Emboss_embiep
Emboss_embindex
Emboss_embinit
Emboss_embmat
Emboss_embmisc
Emboss_embmol
Emboss_embnmer
Emboss_embpatlist
Emboss_embpdb
Emboss_embprop
Emboss_embread
Emboss_embshow
Emboss_embword
);
@depre_modules_lib = qw(
deprecated_Emboss_acd
deprecated_Emboss_hist
deprecated_Emboss_list
deprecated_Emboss_seq
deprecated_Emboss_seqwrite
deprecated_Emboss_str
deprecated_Emboss_sys
deprecated_Emboss_table
deprecated_Emboss_time
deprecated_Emboss_util
);
push (@modules_lib, @depre_modules_lib) if $INCLUDE_DEPRECATED_FUNCTIONS;
@sub_modules_lib = qw(
);
# --- library modules plus main module
@modules = ("Emboss", @modules_lib);
# --- create %XS hash (input .xs files)
# create @OBJECTS (.o files for the library)
foreach $mod (@modules) {
$XS{"$mod.xs"} = "$mod.c";
push (@OBJECTS, $mod . '$(OBJ_EXT)');
}
$OBJECT = join (" ", @OBJECTS);
# --- list of .xs files in @modules_lib
$xs_modules = join(" \\\n ", map ("$_.xs", @modules_lib), @sub_modules_lib);
# --- output of scripts/get_boot_for_modules.pl
# included by Emboss.xs
$emboss_boot = "emboss-boot-xs.inc emboss-boot-c.inc";
# --- stripping unused boots
$strip = join "\n", map { "\tstrip -N boot_Bio__$_ $_\$(OBJ_EXT)"} @modules_lib;
# --- add -DEMBOSS_VERSION_1=... to $EMB_DEFS
# (major/minor/... version numbers)
chomp ($EMB_VERSION);
$config_header_file = "bio_emboss_config.h";
&write_config_h ($EMB_VERSION, $config_header_file);
if ($EMB_VERSION) {
print "Using EMBOSS version $EMB_VERSION\n";
} else {
warn ("warning: **** \$EMB_VERSION not set in $0\n");
}
# --- some Perl defines need to be undefined for EMBOSS
$emboss_undefs = join (" \\\n --undef ", "", @emboss_undefs);
# --- some EMBOSS termes need to be redefined, because they are
# already used by Perl
$emboss_redefs = join (" \\\n --redef ", "", @emboss_redefs);
WriteMakefile(
'NAME' => 'Bio::Emboss',
'VERSION_FROM' => 'Emboss.pm', # finds $VERSION
'PREREQ_PM' => {}, # e.g., Module::Name => 1.1
($] >= 5.005 ? ## Add these new keywords supported since 5.005
(
# ABSTRACT_FROM => 'Emboss.pm', # retrieve abstract from module
AUTHOR => 'Peter Ernst <pernst@cpan.org>') : ()),
'XS' => \%XS, # all the modules
'OBJECT' => $OBJECT, # all the modules
'LIBS' => [$EMB_LIBS], # e.g., '-lm'
'DEFINE' => $EMB_DEFS, # e.g., '-DHAVE_SOMETHING'
# -I- inhibits the use of the current file directory as the
# first search directory for "#include "file"" (search ./include
# always before $EMB_INC)
'INC' => "-I. $EMB_INC",
'clean' => { FILES => $config_header_file },
);
if (eval {require ExtUtils::Constant; 1}) {
# If you edit these definitions to change the constants used by this module,
# you will need to use the generated const-c.inc and const-xs.inc
# files to replace their "fallback" counterparts before distributing your
# changes.
my @names = ({name => EMBOSS_VERSION,
type => PV},
{name => AJM_E,
type => NV},
{name => AJM_PI,
type => NV},
);
ExtUtils::Constant::WriteConstants(
NAME => 'Bio::Emboss',
NAMES => \@names,
DEFAULT_TYPE => 'IV',
C_FILE => 'const-c.inc',
XS_FILE => 'const-xs.inc',
);
}
else {
if ((eval {require File::Copy; import File::Copy; 1}) and
(eval {require File::Spec; import File::Spec; 1}) ){
my $file;
foreach $file ('const-c.inc', 'const-xs.inc') {
my $fallback = File::Spec->catfile('fallback', $file);
copy ($fallback, $file) or die "Can't copy $fallback to $file: $!";
}
} else {
my $file;
foreach $file ('const-c.inc', 'const-xs.inc') {
my $fallback = "fallback/$file";
system ("cp", $fallback, $file) and die "Can't copy $fallback to $file: $!";
}
}
}
# --- check adjustments
# enable if you have problems while building
if ($check_installation) {
my ($lib, $dmsg);
foreach $lib (map { "$EMB_ROOT/lib/lib$_" } @emb_libs) {
next if -r "$lib.so" or -r "$lib.a";
$dmsg .= "couldn't find '$lib' in \$EMB_ROOT ($EMB_ROOT)\n";
}
my $incfile = $EMB_SRC_ROOT . "/nucleus/emboss.h";
my $incfile2 = $EMB_ROOT . "/include/emboss.h";
unless (-r $incfile or -r $incfile2 ) {
$dmsg .= "couldn't find '$incfile' or '$incfile2' in \$EMB_SRC_ROOT or \$EMB_ROOT\n";
}
if ($dmsg) {
warn ("\n" . $dmsg .
"\n***\n*** This module might not build properly\n" .
"*** Check $0\n***\n\n");
}
}
exit(0);
#
# --- end of main
#
# --- add to Makefile
# targets for:
# lib/Bio/Emboss/Methods.pm
# the bootstrap files included by Emboss.xs ($emboss_boot)
# Ajax docum. in POD format ( blib/Bio/Emboss/Ajax.pod)
sub MY::postamble {
my $ajax_dir = $EMB_SRC_ROOT ? $EMB_SRC_ROOT : $EMB_ROOT;
$ajax_dir .= "/ajax";
$ajax_dir = "" unless -d $ajax_dir;
my $postamble = <<"MAKE_FRAG";
# --- recreate Methods.pm if any of the .xs files has changed
lib/Bio/Emboss/Methods.pm: Emboss.xs \$(EMBOSS_XS_MODULES)
\t\$(PERL) scripts/get_methods.pl Emboss.xs \$(EMBOSS_XS_MODULES) > \$\@
EMBOSS_BOOT_FILES = $emboss_boot
EMBOSS_XS_MODULES = $xs_modules
# --- recompile if a boot include has changed
Emboss.c: \$(EMBOSS_BOOT_FILES)
# --- recreate the boot includes if any of the module .xs files has changed
\$(EMBOSS_BOOT_FILES): \$(EMBOSS_XS_MODULES)
\t\$(PERL) scripts/get_boot_for_modules.pl \$(EMBOSS_XS_MODULES)
# --- target to create additional POD format documentation
epods: \$(INST_LIB)/Bio/Emboss/Ajax.pod
# --- how to create Ajax POD
AJAX_DIR = $ajax_dir
\$(INST_LIB)/Bio/Emboss/Ajax.pod:
\tif test "\$(AJAX_DIR)" != "" ; then \\
\t if test -d "\$(AJAX_DIR)" ; then \\
\t \$(PERL) scripts/extract_doc_for_pod.pl \$(AJAX_DIR)/*.c > \$\@ ;\\
\t else \\
\t echo " *** AJAX_DIR=\$(AJAX_DIR) directory not found" ;\\
\t fi ;\\
\telse \\
\t echo "\\n *** AJAX_DIR not defined" ;\\
\t echo " *** You need to specify EMB_SRC_ROOT in Makefile.PL or AJAX_DIR in Makefile" ;\\
\tfi
#\ttest "$EMB_SRC_ROOT" != "" && \$(PERL) scripts/extract_doc_for_pod.pl $EMB_SRC_ROOT/ajax/*.c > \$\@
# --- wrapper for emboss.h with some undefs and redefs
# (solve name conflicts between PERL and EMBOSS)
emboss_perl.h:
\t\$(PERL) scripts/create_cpp_undefs_redefs.pl$emboss_undefs$emboss_redefs > \$\@
strip: \$(OBJECT)
$strip
MAKE_FRAG
return $postamble;
}
sub write_config_h {
my ($eversion, $outfile) = @_;
my $configh = "";
$configh .= <<EOB if length($eversion);
#ifndef EMBOSS_VERSION
#define EMBOSS_VERSION "$eversion"
#endif
EOB
my ($v);
foreach $v (qw(
4.1.0
4.0.0
2.10.0
2.9.0
2.8.0
2.7.0
2.6.0
2.5.1)) {
if (version_ge($eversion, $v)) {
my $label = $v;
$label =~ tr/./_/;
$configh .= "#define HAVE_EMBOSS_$label\n";
}
}
open (CONFIGH, ">$outfile");
print CONFIGH $configh;
close(CONFIGH);
}
# --- overwrite EMB_ROOT=xxx etc. from command-line if given
sub extract_global_params {
my ($argvref, @argv_params) = @_;
my @nargv = ();
ARGS:
foreach (@$argvref) {
foreach my $p (@argv_params) {
if (/^$p=(.*)/) {
eval "\$$p = \$1";
next ARGS;
}
}
push (@nargv, $_);
}
return @nargv;
}
sub version_ge {
my @a = split (/\./, $_[0], 3);
my @b = split (/\./, $_[1], 3);
my ($i);
for ($i = 0; $i < 3; $i++) {
return 0 if $a[$i] < $b[$i];
return 1 if $a[$i] > $b[$i];
}
return 1;
}