PAR-Packer

 view release on metacpan or  search on metacpan

script/par.pl  view on Meta::CPAN


    require File::Path;

    File::Path::mkpath($path) unless(-e $path); # mkpath dies with error
}

sub require_modules {

    require lib;
    require DynaLoader;
    require integer;
    require strict;
    require warnings;
    require vars;
    require Carp;
    require Carp::Heavy;
    require Errno;
    require Exporter::Heavy;
    require Exporter;
    require Fcntl;
    require File::Temp;
    require File::Spec;
    require XSLoader;
    require Config;
    require IO::Handle;
    require IO::File;
    require Compress::Zlib;
    require Archive::Zip;
    require Digest::SHA;
    require PAR;
    require PAR::Heavy;
    require PAR::Dist;
    require PAR::Filter::PodStrip;
    require PAR::Filter::PatchContent;
    require attributes;
    eval { require Cwd };
    eval { require Win32 };
    eval { require Scalar::Util };
    eval { require Archive::Unzip::Burst };
    eval { require Tie::Hash::NamedCapture };
    eval { require PerlIO; require PerlIO::scalar };
    eval { require utf8 };
}

# The C version of this code appears in myldr/mktmpdir.c
# This code also lives in PAR::SetupTemp as set_par_temp_env!
sub _set_par_temp {
    if (defined $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/) {
        $par_temp = $1;
        return;
    }

    foreach my $path (
        (map $ENV{$_}, qw( PAR_TMPDIR TMPDIR TEMPDIR TEMP TMP )),
        qw( C:\\TEMP /tmp . )
    ) {
        next unless defined $path and -d $path and -w $path;
        my $username;
        my $pwuid;
        # does not work everywhere:
        eval {($pwuid) = getpwuid($>) if defined $>;};

        if ( defined(&Win32::LoginName) ) {
            $username = &Win32::LoginName;
        }
        elsif (defined $pwuid) {
            $username = $pwuid;
        }
        else {
            $username = $ENV{USERNAME} || $ENV{USER} || 'SYSTEM';
        }

        my $stmpdir = "$path$sys{_delim}par-".unpack("H*", $username);
        mkdir $stmpdir, 0755;

        my $cache_dir;
        if ($ENV{PAR_CLEAN}) {
            $cache_dir = "temp-$$";
        }
        else {
            open my $fh, "<:raw", $progname or die qq[Can't read "$progname": $!];
            if ((my $magic_pos = find_par_magic($fh)) >= 0) {
                seek $fh, $magic_pos 
                          - $FILE_offset_size 
                          - length("\0CACHE"), 0;
                my $buf;
                read $fh, $buf, length("\0CACHE");
                if ($buf eq "\0CACHE") {
                    seek $fh, $magic_pos 
                              - $FILE_offset_size 
                              - length("\0CACHE") 
                              - $cache_name_size, 0;
                    read $fh, $buf, $cache_name_size;
                    $buf =~ s/\0//g;
                    $cache_dir = "cache-$buf";
                }
            }
            close $fh;
        }
        if (!$cache_dir) {
            $cache_dir = "temp-$$";
            $ENV{PAR_CLEAN} = 1;
        }
        $stmpdir .= "$sys{_delim}$cache_dir";

        mkdir $stmpdir, 0755;
        $ENV{PAR_TEMP} = $stmpdir;
        last;
    }

    $par_temp = $1 if $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/;
}


# check if $name (relative to $par_temp) already exists;
# if not, create a file with a unique temporary name,
# fill it with $contents, set its file mode to $mode if present;
# finaly rename it to $name;
# in any case return the absolute filename
sub _save_as {
    my ($name, $contents, $mode) = @_;



( run in 0.818 second using v1.01-cache-2.11-cpan-2398b32b56e )