The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
#===============================================================================
#
# Makefile.PL
#
# DESCRIPTION
#   Makefile creation script.
#
# COPYRIGHT
#   Copyright (C) 2003-2008, 2012 Steve Hay.  All rights reserved.
#
# LICENCE
#   You may distribute under the terms of either the GNU General Public License
#   or the Artistic License, as specified in the LICENCE file.
#
#===============================================================================

use 5.006000;

use strict;
use warnings;

use inc::Module::Install;

use File::Copy qw(copy);
use File::Spec::Functions qw(catfile updir);

#===============================================================================
# INITIALIZATION
#===============================================================================

BEGIN {
    unless ($^O =~ /MSWin32/i) {
        die qq{OS unsupported: This module requires a "native" } .
            qq{(i.e. non-Cygwin) Microsoft Windows platform.\n};
    }
}

#===============================================================================
# MAIN PROGRAM
#===============================================================================

MAIN: {
    name               ('Win32-UTCFileTime');
    license            ('perl');
    all_from           ('lib/Win32/UTCFileTime.pm');
    configure_requires ('Carp');
    configure_requires ('Config');
    configure_requires ('Cwd');
    configure_requires ('ExtUtils::MakeMaker');
    configure_requires ('File::Basename');
    configure_requires ('File::Copy');
    configure_requires ('File::Find');
    configure_requires ('File::Path');
    configure_requires ('File::Spec');
    configure_requires ('File::Spec::Functions');
    configure_requires ('FindBin');
    configure_requires ('Getopt::Long');
    configure_requires ('Pod::Usage');
    configure_requires ('Text::Wrap');
    configure_requires ('parent');
    configure_requires ('strict');
    configure_requires ('vars');
    configure_requires ('warnings');
    test_requires      ('Test::More');
    requires           ('Exporter');
    requires           ('XSLoader');
    feature            ('POD testing' => [
                        -default    => 0,
                        'Test::Pod' => '1.00'
    ]);
    clean_files        ('const-c.inc const-xs.inc');

    my $obj = get_shay_private_obj();
    $obj->check_compiler(0);

    auto_install();

    WriteMakefile(
        dist => {
            DIST_CP  => 'cp',
            PREOP    => 'C:\\cygwin\\bin\\chmod -R a+w $(DISTVNAME) && ' .
                        'C:\\cygwin\\bin\\find $(DISTVNAME) -type f ' .
                        '-exec C:\\cygwin\\bin\\unix2dos {} ; && ' .
                        'C:\\cygwin\\bin\\chmod -R a-x+rwX,go-w $(DISTVNAME)',
            TAR      => 'C:\\cygwin\\bin\\tar',
            COMPRESS => 'C:\\cygwin\\bin\\gzip --best'
        }
    );

    if  (eval { require ExtUtils::Constant; 1 }) {
        ExtUtils::Constant::WriteConstants(
            NAME => 'Win32::UTCFileTime',

            NAMES => [ qw(
                SEM_FAILCRITICALERRORS
                SEM_NOGPFAULTERRORBOX
                SEM_NOALIGNMENTFAULTEXCEPT
                SEM_NOOPENFILEERRORBOX
            ) ],

            DEFAULT_TYPE => 'IV',

            C_FILE => 'const-c.inc',

            XS_FILE => 'const-xs.inc'
        );
    }
    else {
        foreach my $file ('const-c.inc', 'const-xs.inc') {
            my $fallback_file = catfile('fallback', $file);
            copy($fallback_file, $file) or
                die "Can't copy '$fallback_file' to '$file': $!.\n";
        }
    }
}

#===============================================================================