Alien-Iconv

 view release on metacpan or  search on metacpan

Makefile.PL  view on Meta::CPAN

# Get the version 
my $DIST_VERSION  = do {
    require ExtUtils::MM_Unix;
    ExtUtils::MM_Unix->parse_version($SPEC_FILE);
};

# Actual iconv version. This is the number up to the second fractional digit
# of the dist version
my $ICONV_VERSION    = substr($DIST_VERSION, 0, 4);

# Filenames 
my $ICONV_SOURCE_DIR = File::Spec->catfile("src", "libiconv-$ICONV_VERSION");
my $ICONV_BASENAME   = "libiconv-$ICONV_VERSION.tar.gz";
my $ICONV_SOURCE     = File::Spec->catfile("src", $ICONV_BASENAME);

# Absolut-ize all paths
$ICONV_SOURCE_DIR    = File::Spec->rel2abs($ICONV_SOURCE_DIR);
$ICONV_SOURCE        = File::Spec->rel2abs($ICONV_SOURCE);

# Construct the necessary flags
my $CCFLAGS = $ENV{CCFLAGS};
my $LDFLAGS = $ENV{LDFLAGS};
if (! $RUNNING_IN_HELL) {
    $CCFLAGS ||= '-I/usr/local/include';
    $LDFLAGS ||= '-L/usr/local/lib';
}

eval {
    Devel::CheckLib::assert_lib(lib => "iconv", LIBS => $LDFLAGS )
};
if (! $@) {
    print <<EOM;

*** Whoa!  We've detected a previous installtion of libiconv ***

Because Alien::Iconv may have been called to be installed from a dependency
of another module, we want to make sure that you *really* want to install
this version of Alien::Iconv (and therefore libiconv).

If you answer "y", then We're going to install
    libiconv: $ICONV_VERSION

This operation may OVERWRITE your previous installation
EOM
    my $yn = prompt("Really install?", "n");
    if ($yn !~ /^y(?:es)?$/) {
        exit 0;
    }
}

# Ask if we want to download the source.
my $sourcefile = $ICONV_SOURCE;
if (! -f $sourcefile) {
    my $yn = prompt("iconv source file $sourcefile does not exist. Download it now?", "y");
    if ($yn =~ /^y(?:es)?$/i) {
        my @cmd = ($^X, File::Spec->catfile("src", "fetchsrc.pl"), "--version", $ICONV_VERSION);
        system(@cmd);
    }
}

# If the source hasn't been expanded, then unpack it

if (! -d $ICONV_SOURCE_DIR) {
    my $yn = prompt("Mecab source directory has not been unpacked yet. Unpack it now?", "y");
    if ($yn =~ /^y(?:es)?$/i) {
        eval {
            require Archive::Tar;
            Archive::Tar->can_handle_compressed_files or die "No compression support :(";
        };
        if ($@) {
            print STDERR "Archive extraction requires Archive::Tar (with IO::Zlib)\n";
            exit 0;
        }

        eval {
            chdir File::Spec->catfile($CURDIR, 'src');

            print "Unpacking... (please be patient)\n";
            Archive::Tar->extract_archive( $ICONV_BASENAME, 1 );
        };
        if ($@) {
            print STDERR "Failed to gunzip file $ICONV_SOURCE $IO::Compress::Gunzip::GunzipError\n";
            chdir $CURDIR;
            exit 0;
        }
        chdir $CURDIR;
    }
}

{
    print "\n";
    my $run_configure;
    if( -e File::Spec->catfile($ICONV_SOURCE_DIR, 'config.status')) {
        $run_configure = prompt(
            "Looks like Iconv has already been configured.\n".
            "Do you want to re-run configure?",
            "n"
        );
    } else {
        $run_configure = prompt(
            "No config.status found. Run Iconv's configure now?", 'y'
        );
    }

    if( $run_configure =~ /^y/i ) {
        print "\nWe're going to run configure for iconv.\n",
            "First, we'll ask you a few questions about common options\n\n";

        my $prefix = prompt( "Where would you like to install libiconv?", "/usr/local" );
        my $configure_args = '';
        $configure_args .= "--prefix=$prefix " if $prefix;

        $configure_args .= prompt("Are there any other arguments you would like to pass to configure?" );

        print "\nIconv will be configured with the following arguments:\n",
            "  $configure_args\n";

        chdir $ICONV_SOURCE_DIR;

        local $ENV{CFLAGS}  = $CCFLAGS;
        local $ENV{LDFLAGS} = $LDFLAGS;



( run in 2.826 seconds using v1.01-cache-2.11-cpan-5b529ec07f3 )