I'm preparing a new release of Audio::Taglib, which is an interface to 
Taglib (as one might suspect!) I'm comfortable with the Linux aspects 
of Makefile.PL, but I have no facility to test for the other targets, 
and I'd rather not use the CPAN testing process for that purpose. 
Here's the file; suggestions/comments for freebad, darwin and windows 
ould be appreciated.  Thanks.

use 5.008001;
use ExtUtils::MakeMaker;
use Config;

sub bail($) {
    my $reason = shift;
    warn $reason;
    exit(0);
}

# Check TagLib (taglib.so) is installed and that the version is 
correct.
# Note that this depends on the search path -- 
# If the one you want is down-path, then modify your
# PATH environment variable, or edit for a fixed path

bail('Please install the taglib C++ library first')
  unless system('taglib-config --version >& /dev/null') == 0;
  
chomp(my $libver = qx{taglib-config --version});

bail( "This module supports ONLY TagLib version 1.5.*\n" .
      "You have $libver. Please install taglib ver 1.5.*")
  unless $libver =~ m/^1\.5/;

chomp(my $libs   = qx{taglib-config --libs});

# Configure compile flags
chomp(my $cflags = qx{taglib-config --cflags});

# Configure include files. 
# ./include has a needed .h
my $inc  = "  -I./include $cflags";

# Configure various os-es
my ($define, $ldd);
if ( $Config{'osname'} eq 'darwin' ) {
    $inc = ' -I/opt/local/include ' . $inc;
    $libs = "-L/opt/local/lib  -L/System/Library/Perl/lib $libs" . 
        ' -lperl -liconv';
    $ldd = "-bundle -undefined dynamic_lookup -dynamiclib $libs";
    $define = '-D_BSD_ICONV -DNO_DOXYGEN';
}
elsif ( $Config{'osname'} eq 'freebsd' ) {
    $ldd = " -shared $libs";
    $define = '-D_BSD_ICONV -DNO_DOXYGEN';
}
else {
    # Windows??
    $ldd = " -shared $libs";
    $define = '-DNO_DOXYGEN';
}
$Verbose = 2;
WriteMakefile(
    NAME              => 'Audio::TagLib',
    MIN_PERL_VERSION  => '5.008001',
    VERSION_FROM      => 'lib/Audio/TagLib.pm', 
    LICENSE           => 'perl',
    (
        $Config{'version'} >= 5.005        
        ?                                                     
          (
            ABSTRACT_FROM => 'lib/Audio/TagLib.pm',
            AUTHOR        => 'Geoffrey Leach <gle...@cpan.org>'
          )
        : ()
    ),
    CC                => 'g++',
    LD                => 'g++',
    LDDLFLAGS         => $ldd,
    XSOPT             => '-C++ -hiertype',
    LIBS              => $libs, 
    DEFINE            => $define,
    INC               => $inc,
);

package MY;

sub xs_c {
        my $cmd = shift->SUPER::xs_c(@_);
    $cmd .= sprintf(<<'END', $^X);
    %1$s -pi -e 's/newXSproto_portable\("TagLib/newXSproto_portable
("Audio::TagLib/g' $*.c

        %1$s -pi -e 's/XS\(boot_TagLib\)/XS(boot_Audio__TagLib)/g' $*.c
END
        return $cmd;
}


Reply via email to