The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Config qw(%Config);
use ExtUtils::MakeMaker;

my @extra  = ();
my @define = ();
#@extra = (DEFINE => "@define") if @define = defines();

WriteMakefile(
    'NAME'	   => 'IO::Dirent',
    'VERSION_FROM' => 'Dirent.pm', # finds $VERSION
    @extra,
    'dist'         => {COMPRESS => 'gzip', SUFFIX => 'gz'},
);

sub defines {
    my %tests   = ();
    my @results = ();

    $| = 1;

    open TEST, ">t.c" or die "$!";
    print TEST <<_CODE_; close TEST;
#include <sys/dirent.h>
#include <stdio.h>
int main() 
{
  struct dirent *dent;
  DIR           *dir = opendir(".");
  if( !dir )
    return -1;

  while( dent = readdir(dir) ) {
      if( dent->d_name[0] == '.' && dent->d_name[1] == '.' && dent->d_name[2] == 0 ) {
          fprintf(stderr, "Type directory: %d\n", dent->d_type);
      }
      else {
	  continue;
      }
  }
  closedir (dir);
}
_CODE_

    push @results, ( compile_run() ? '-DHAS_D_TYPE' : () );

    return @results;
}

sub compile_run {
    my $cc_cmd = "$Config{cc} $Config{ccflags} -I$Config{archlibexp}/CORE";
    my $exe    = "_t_phony$Config{_exe}";

    if ($^O eq 'MSWin32') {
        $cc_cmd .= ' -DWIN32IO_IS_STDIO';
    } else {
        $cc_cmd .= " -o $exe";
    }

    my $rc = system("$cc_cmd $Config{ldflags} t.c $Config{libs} > /dev/null 2>&1");
    if ($rc) {
        unlink("t.c", $exe, "t$Config{_o}");
        return;
    }

    $rc = system("./$exe 2>&1 > /dev/null");
    unlink("t.c", $exe, "t$Config{_o}");

    return ( $rc ? 0 : 1 );
}