/usr/local/CPAN/MPEG-MP3Play/Makefile.PL
use strict;
use ExtUtils::MakeMaker;
use Config;
use File::Copy;
# $Id: Makefile.PL,v 1.12 2008/03/30 10:30:30 joern Exp $
my $SDK_DIR = '/usr/local/xaudiosdk';
$| = 1;
main: {
# determine X-Audio SDK directory
my $sdk_dir = get_sdk_directory(@ARGV);
my @sdk_version = get_sdk_version($sdk_dir);
my $xaudio_version;
if ( $sdk_version[0] == 2 ) {
$xaudio_version = "mp3play_xaudio_version_2_2";
} else {
$xaudio_version = "mp3play_xaudio_version_0_0";
}
configure_xaudio_version (@sdk_version);
write_runsample();
# determine additional libs for this platform
my $add_libs = get_add_libs();
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
'NAME' => 'MPEG::MP3Play',
'ABSTRACT' => 'Module for playing MPEG audio files, needs Xaudio',
'VERSION_FROM' => 'MP3Play.pm',
'LIBS' => ["-L$sdk_dir/lib -lxaudio $add_libs"],
'DEFINE' => "-D$xaudio_version",
'INC' => "-I$sdk_dir/include",
'MYEXTLIB' => 'conv_msg.o',
'depend' => { 'src/MP3Play.xs' => 'src/constants.h' },
'dist' => {
'PREOP' => 'perl tools/genreadme > README'
}
);
}
sub write_runsample {
my $perlpath = $Config{perlpath};
open (OUT, "> runsample");
print OUT <<__EOF;
#!/bin/sh
$perlpath -w -Iblib/arch -Iblib/lib samples/\$1
__EOF
close OUT;
chmod 0755, "runsample";
}
sub configure_xaudio_version {
my ($major, $minor, $revision) = @_;
my $version_dir = "./version/$major.$minor";
print "Copying $version_dir/constants.h to ./constants.h ...\n";
copy ("$version_dir/constants.h", ".")
or die "can't copy $version_dir/constants.h: $!";
print "Copying $version_dir/conv_msg.c to ./conv_msg.c ...\n";
copy ("$version_dir/conv_msg.c", ".")
or die "can't copy $version_dir/conv_msg.c: $!";
open (FH, "> lib/MPEG/MP3Play/XA_Version.pm")
or die "can't write lib/MPEG/MP3Play/XA_Version.pm";
print FH <<__EOF;
package MPEG::MP3Play::XA_Version;
\$VERSION = "$major.$minor.$revision";
\@VERSION = ($major,$minor,$revision);
1;
__EOF
close FH;
1;
}
sub get_sdk_directory {
my @ARGV = @_;
my $sdk_dir = shift @ARGV;
$sdk_dir =~ s!/$!!;
return $sdk_dir if $sdk_dir;
my $ok;
$sdk_dir = $SDK_DIR;
my $input = prompt("Xaudio SDK directory [$sdk_dir] :");
$sdk_dir = $input if $input;
$ok = -d "$sdk_dir/include" and -d "$sdk_dir/lib";
exit 0 if !$input && !$ok;
if ( not $ok ) {
print "\nThe directory must contain include and lib subdirectories.\n";
print "Restart Makefile.PL and correct this.\n\n";
exit 0;
}
return $sdk_dir;
}
sub get_sdk_version {
my ($sdk_dir) = @_;
my ($major, $minor, $revision);
open (FH, "$sdk_dir/include/xaudio.h")
or die "can't read $sdk_dir/include/xaudio.h";
while (<FH>) {
next if not /#define XA_IMPLEMENTATION_([^\s]+)/;
my $what = $1;
/(\d+)/;
$major = $1 if $what eq 'MAJOR';
$minor = $1 if $what eq 'MINOR';
$revision = $1 if $what eq 'REVISION';
}
close (FH);
$major ||= '0';
$minor ||= '0';
$revision ||= '0';
print "Detected Xaudio SDK Implementation [$sdk_dir/include/xaudio.h]: $major.$minor.$revision\n";
return ($major, $minor, $revision);
}
sub get_add_libs {
# on Irix -laudio is needed due to a bug in the Xaudio SDK
if ( $Config{osname} =~ /irix/i ) {
print "Irix detected! Adding '-laudio'.\n";
return '-laudio';
}
}