use strict;
use Config;
use ExtUtils::MakeMaker;
use lib qw(./lib);
use ExtUtils::Embed;
(my $name = shift) =~ s/\.c$//;
my $makefile = shift || "Makefile";
my $libperl = shift || ""; #might be -lperlm, etc.
my $ldopts = ldopts "-std", $Config{static_exts}, [$libperl];
WriteMakefile(
NORECURS => 1,
NAME => $name,
MAKEFILE => $makefile,
macro => {
LDOPTS => "$ldopts",
},
OBJECT => '$(NAME).$(OBJ_EXT) perlxsi.$(OBJ_EXT)',
clean => { FILES => "$name $name.o perlxsi.c perlxsi.o" },
);
package MY;
#remove Makefile.PL dependency, since there isn't one!
sub MY::makefile {
my $self = shift;
my $string = $self->MM::makefile;
$string =~ s/(Makefile.*:\s+)Makefile.PL(.*)/$1$2/s;
return $string;
}
sub MY::top_targets {
my $self = shift;
my $ret = $self->MM::top_targets;
my $name = $self->{NAME};
$ret =~ s/(all\s+::\s+)(.*)/$1 \$(NAME)/g;
$ret .= <<'EOF';
perlxsi.c :
$(FULLPERL) -MExtUtils::Embed -e xsinit
EOF
if($^O eq "MSWin32") {
$ret .= <<'EOF';
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\
odbccp32.lib /nologo /subsystem:console /incremental:no\
/pdb:"$(NAME).pdb" /machine:I386 /out:"$(NAME).exe"
LINK32_OBJS= \
"$(NAME).obj" \
"perlxsi.obj" \
"$(PERL_ARCHLIB)\CORE\perl.lib"
$(NAME) : $(DEF_FILE) $(LINK32_OBJS)
$(LD) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
EOF
}
else {
$ret .= <<'EOF';
$(NAME) : perlxsi.o $(NAME).o
$(CC) -o $(NAME) $(NAME).o perlxsi.o $(CCFLAGS) $(LDOPTS)
EOF
# print $_;
}
return $ret;
}