# $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),
	},
);