163 lines
3.6 KiB
Perl
163 lines
3.6 KiB
Perl
# @(#) $Id: Makefile.PL,v 1.9 2007/10/17 14:06:22 mxp Exp $
|
|
|
|
use 5.006;
|
|
use ExtUtils::MakeMaker;
|
|
use Config;
|
|
use File::Spec;
|
|
|
|
my %config;
|
|
my $ok;
|
|
my $devnull = File::Spec->devnull();
|
|
|
|
###############################################################################
|
|
# Read settings from the commandline
|
|
# We must delete the options we're handling ourselves to keep
|
|
# MakeMaker from processing them, but the rest should be preserved so
|
|
# that we get the default MakeMaker behavior.
|
|
|
|
my $i = 0;
|
|
|
|
while ($i <= $#ARGV)
|
|
{
|
|
my ($key, $val) = split(/=/, $ARGV[$i], 2);
|
|
$config{$key} = $val;
|
|
|
|
if ($key eq 'LIBS' || $key eq 'INC')
|
|
{
|
|
delete $ARGV[$i];
|
|
}
|
|
|
|
$i++;
|
|
}
|
|
|
|
###############################################################################
|
|
# Check for iconv.
|
|
|
|
if ($config{LIBS} or $config{INC})
|
|
{
|
|
print "Your settings:\n",
|
|
" LIBS: ", $config{LIBS}, "\n", " INC: ", $config{INC}, "\n";
|
|
}
|
|
|
|
print 'Checking for iconv ... ';
|
|
|
|
if (linktest($config{LIBS}, $config{INC}))
|
|
{
|
|
$ok = 1;
|
|
print "ok (iconv apparently in libc)\n";
|
|
}
|
|
elsif ($config{LIBS} !~ /-liconv/)
|
|
{
|
|
$config{LIBS} .= ' -liconv';
|
|
|
|
if (linktest($config{LIBS}, $config{INC}))
|
|
{
|
|
$ok = 1;
|
|
print "ok (added -liconv)\n";
|
|
}
|
|
}
|
|
|
|
if ($ok)
|
|
{
|
|
print <<EOT;
|
|
|
|
NOTE: If you have multiple iconv implementations installed, you might
|
|
want to make sure that I've found the one you want to use.
|
|
If necessary, you can explicitly specify paths like this:
|
|
|
|
$^X Makefile.PL LIBS='-L/path/to/lib' INC='-I/path/to/include'
|
|
|
|
EOT
|
|
}
|
|
else
|
|
{
|
|
print "fail\n";
|
|
|
|
print "Failed to find iconv, please check your settings and re-run as:\n";
|
|
print "$^X Makefile.PL LIBS='-L/path/to/lib' INC='-I/path/to/include'\n";
|
|
exit 1;
|
|
}
|
|
|
|
###############################################################################
|
|
# Write the makefile
|
|
|
|
WriteMakefile(
|
|
'NAME' => 'Text::Iconv',
|
|
'VERSION_FROM' => 'Iconv.pm', # finds $VERSION
|
|
'PREREQ_PM' => {}, # e.g., Module::Name => 1.1
|
|
($] >= 5.005 ? ## Add these new keywords supported since 5.005
|
|
(ABSTRACT_FROM => 'Iconv.pm', # retrieve abstract from module
|
|
AUTHOR => 'Michael Piotrowski <mxp@dynalabs.de>') : ()),
|
|
'LIBS' => $config{LIBS},
|
|
'DEFINE' => "@DEFINE",
|
|
'INC' => $config{INC},
|
|
'dist' => {COMPRESS => 'gzip', SUFFIX => 'gz'},
|
|
);
|
|
|
|
###############################################################################
|
|
|
|
sub linktest
|
|
{
|
|
my $libs = shift;
|
|
my $incs = shift;
|
|
|
|
my $file = 'linktest';
|
|
my $obj_ext = $Config{_o};
|
|
|
|
my $prog = <<EOT;
|
|
#include <iconv.h>
|
|
|
|
int main(void)
|
|
{
|
|
(void) iconv_open("", "");
|
|
}
|
|
EOT
|
|
|
|
my $compile;
|
|
|
|
unless ($^O eq 'VMS')
|
|
{
|
|
# It is admittedly a bit simplistic to simply concatenate all
|
|
# flags, but it seems to work in most cases.
|
|
$compile = join ' ', $Config{cc}, $incs, $Config{ccflags},
|
|
$Config{ldflags}, $libs;
|
|
}
|
|
else
|
|
{
|
|
$compile = join ' ', $Config{cc}, $incs, $Config{ccflags}, $libs;
|
|
}
|
|
|
|
if (exists $config{verbose})
|
|
{
|
|
print "\nCompiler: '$compile'\n";
|
|
}
|
|
|
|
open LINKTEST, '>', "$file.c" or die "Can't create test file '$file.c'.";
|
|
print LINKTEST $prog;
|
|
close LINKTEST;
|
|
|
|
my $compile_line = "$compile -o $file $file.c $libs 2> $devnull";
|
|
|
|
if ($^O eq 'VMS')
|
|
{
|
|
$compile_line = "pipe $compile $file.c $libs 2> NL:";
|
|
}
|
|
|
|
if (exists $config{verbose})
|
|
{
|
|
print "\nCompiler command line: '$compile_line'\n";
|
|
}
|
|
|
|
my $result = system($compile_line) / 256;
|
|
unlink $file, "$file.c", "$file$obj_ext";
|
|
|
|
if ($result == 0)
|
|
{
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|