# $Id: Makefile.PL,v 1.23 2007/11/10 18:38:39 dk Exp $ package MY; use ExtUtils::MakeMaker; use Config; my ( $gencls, $i, $d, $l, $co) = ('gencls', '','','',''); my $severe = grep { $_ eq '--severe' } @ARGV; @ARGV = grep { $_ ne '--severe' } @ARGV; eval { require Prima::Config; $d = $Prima::Config::Config{define}; $i = "$Prima::Config::Config{inc} -Iinclude -Iinclude/generic"; $l = $Prima::Config::Config{libs}; $co = $Prima::Config::Config{cobjflag}; $gencls = $Prima::Config::Config{gencls}; }; if ( $@) { warn "** Prima is required for build\n"; if ( $severe) { unlink 'Makefile'; exit 1; } $prima_failed = 1; } $prima_failed = 1 if @ARGV; my @files = map { s/\.c$//; m/([^\\\/]*)$/; { src => $_, name => $1 } } <*.c>, <*/*.c>; $_-> {is_class} = 1 for grep { -f $_-> {src} . '.cls' } @files; # non-class c files may require h/inc from gencls build @files = ( (grep { $_-> {is_class} } @files), (grep { not $_-> {is_class} } @files), ); my $o = $Config{obj_ext}; sub post_initialize { my $self = shift; my $t = $self->SUPER::post_initialize(@_); $t = <
SUPER::postamble(@_);
for ( @files) {
next unless $_-> {is_class};
my ( $n, $c) = ( $_-> {name}, $_-> {src});
$t .= < SUPER::c_o(@_);
unless ( $t =~ /.c\$\(OBJ_EXT\):\n\t.*\$\*\$\(OBJ_EXT\)/ ) {
$t =~ s/(\.c\$\(OBJ_EXT\):\n\t.*)/$1 $co\$*\$(OBJ_EXT)/;
}
return $t;
}
sub clean
{
my $self = shift;
my $t = $self->SUPER::clean(@_);
$t .= "\t\$(RM_F) " . join( ' ',
map { "include/generic/$_" }
map { $_-> {name} . '.h', $_-> {name} . '.inc' }
grep { $_-> {is_class} }
@files) .
"\n";
$t .= "\t\$(RM_F) " . join( ' ',
map { $_-> {src} . $o }
@files);
return $t;
}
WriteMakefile(
NAME => 'IPA',
VERSION_FROM => 'IPA.pm',
PREREQ_PM => {
'Prima' => 1.24,
},
ABSTRACT_FROM => 'IPA.pm',
AUTHOR => 'Dmitry Karasik ',
LIBS => [ $l ],
DEFINE => $d,
INC => $i,
OBJECT => join(' ', map { $_->{src} . '$(OBJ_EXT)' } @files),
PM => {
# PM
'IPA.pm' => '$(INST_LIBDIR)/IPA.pm',
'Global/Region.pm' => '$(INST_LIBDIR)/IPA/Region.pm',
( map { ( "$_->{src}.pm" => "\$(INST_LIBDIR)/IPA/$_->{name}.pm" ) }
grep { $_-> {is_class} }
@files),
# IPA HEADERS
'include/IPAsupp.h' => '$(INST_LIBDIR)/IPA/CORE/IPAsupp.h',
( map { ( "include/generic/$_->{name}.h" => "\$(INST_LIBDIR)/IPA/CORE/generic/$_->{name}.h" ) }
grep { $_-> {is_class} }
@files),
# CLASS HEADERS
( map { ( $_ => '$(INST_LIBDIR)/IPA/' . $_ ) }
map { glob "$_->{name}/*.h" }
grep { $_-> {is_class} }
@files),
},
EXE_FILES => ['bin/iterm'],
MAN3PODS => {
'IPA.pm' => '$(INST_MAN3DIR)/IPA.$(MAN3EXT)',
'Global/Region.pm' => '$(INST_MAN3DIR)/IPA::Region.$(MAN3EXT)',
# MANPAGES
( map { ( "$_->{src}.pm" => "\$(INST_MAN3DIR)/IPA::$_->{name}.\$(MAN3EXT)") }
grep { $_-> {is_class} }
@files),
},
);