package Inline::MakeMaker; use strict; use base 'Exporter'; use ExtUtils::MakeMaker(); use Carp; use version; our @EXPORT = qw(WriteMakefile WriteInlineMakefile); our $VERSION = '0.86'; sub WriteInlineMakefile { carp <parse_version($args{VERSION_FROM}) or croak "Can't determine version for $name\n"; } croak "Invalid 'version.pm' version '$version' for '$name'.\n" unless version::is_lax($version); # Provide a convenience rule to clean up Inline's messes $args{clean} = { FILES => "_Inline *.inl " } unless defined $args{clean}; # Add Inline to the dependencies $args{PREREQ_PM}{Inline} = '0.44' unless defined $args{PREREQ_PM}{Inline}; my $mm = &ExtUtils::MakeMaker::WriteMakefile(%args); my (@objects, @obj_rules); if (@{$mm->{PMLIBDIRS}} && $mm->{PM}) { # Sort them longest first so we'll match subdirectories before their parents my @libdirs = sort { length($b) <=> length($a) } @{$mm->{PMLIBDIRS}}; for my $path (keys %{$mm->{PM}}) { for my $lib (@libdirs) { if (index($path,$lib) == 0) { my ($vol, $dirs, $file) = File::Spec->splitpath(substr($path, length($lib)+1)); my @dirs = File::Spec->splitdir($dirs); pop @dirs unless length($dirs[$#dirs]); next unless ($file =~ /.pm$/); $file =~ s/\.[^.]+$//; push @objects, join('::', @dirs, $file); push @obj_rules, join('-', @dirs, "$file.inl"); last; } croak "Failed to find module path for '$path'"; } } } else { # no modules found in PMLIBDIRS so assume we've just got $name to do @objects = $name; $name =~ s/::/-/g; @obj_rules = ("$name.inl"); } if (@objects) { open MAKEFILE, '>> Makefile' or croak "Inline::MakeMaker::WriteMakefile can't append to Makefile:\n$!"; print MAKEFILE < '$obj_rules[$_]', module => '$objects[$_]'); my %S = (API => \\%A); Inline::satisfy_makefile_dep(\\%S);" $version \$(INST_ARCHLIB) MAKEFILE } print MAKEFILE "\ndynamic :: ",join(' ',@obj_rules),"\n"; print MAKEFILE <