use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. my $pkg = 'Geo::CountryFlags'; $pkg =~ /[^:]+$/; my $module = $& .'.pm'; WriteMakefile( 'NAME' => $pkg, 'PREREQ_PM' => { 'LWP::Simple' => '0', 'File::SafeDO' => 0.11, }, 'VERSION_FROM' => $module, # finds $VERSION 'dist' => {COMPRESS=>'gzip', SUFFIX=>'gz'}, 'clean' => {FILES => "tmp* *~ ${lib}/*~"}, 'realclean' => {FILES => $checked}, ); (my $lib = $pkg) =~ s|::|/|g; $lib = 'lib/'. $lib; require $lib .'/Util.pm' or die "${lib}/Util missing from package or could not load\n"; my $pku = $pkg . '::Util'; # local files my $validurls = './Valid_Urls'; my $exceptions = './Map_Exceptions'; my $checked = './data_checked'; my $updatexref = 0; # check that url's are up to date if ($pku->is_obsolete($validurls,$lib .'/URLs.pm') && (my $gcu = $pku->url_fetch() or die "could not open $validurls\n")) { $gcu->mkmodule('URLs'); $updatexref = 1; } require $lib .'/URLs.pm' or die "${lib}/URLs.pm failed to load\n"; my $pkr = $pkg .'::URLs'; # check that exceptions are upd to date if ($pku->is_obsolete($exceptions,$lib .'/XCPs.pm') && (my $gcx = $pku->xcp_fetch() or die "could not open $exceptions\n")) { $gcx->mkmodule('XCPs'); $updatexref = 1; } # see if there is a forced check unless (-e $checked) { # skip forced check if (my $gcc = $pku->cia_fetch($pkr->CIA)) { $gcc->mkmodule('CIA'); $updatexref = 1; } else { print "WARNING: could not access\n", $pkr->CIA,"\n"; } if (my $gci = $pku->iso_fetch($pkr->ISO)) { $gci->mkmodule('ISO'); $updatexref = 1; } else { print "WARNING: could not access\n", $pkr->ISO,"\n"; } # update the 'checked' file local *CHKD; open (CHKD,'>'. $checked) or die "could not open $checked\n"; close CHKD; } unless (-e $lib .'/CIA.pm') { my $gcc = $pku->cia_fetch or die "could not access\n", $pkr->CIA,"\n"; $gcc->mkmodule('CIA'); $updatexref = 1; } unless (-e $lib .'/ISO.pm') { my $gci = $pku->iso_fetch or die "could not access\n", $pkr->ISO,"\n"; $gci->mkmodule('ISO'); $updatexref = 1; } my($excp,$flag,$real); sub formprt { my($rk,$k) = @_; foreach (sort keys %$rk) { $excp = $_; $flag = $rk->{$excp}; $real = $k->{$flag}; write; } } if ($updatexref || ! -e $lib .'/I2C.pm') { $updatexref = 1; require $lib .'/XCPs.pm' or die "${lib}/XCPs.pm failed to load\n"; require $lib .'/CIA.pm' or die "${lib}/CIA.pm failed to load\n"; require $lib .'/ISO.pm' or die "${lib}/ISO.pm failed to load\n"; my $pkx = $pkg .'::XCPs'; my $pkc = $pkg .'::CIA'; my $pki = $pkg .'::ISO'; my $xcp = $pkx->hashptr($pku); # get exceptions my $gci = $pki->hashptr($pku); # get ISO my $gcc = $pkc->hashptr($pku); # get CIA my $rgci = $gci->revcomp; # rev/compress ISO hash my $rgcc = $gcc->revcomp; # rev/compress CIA hash $rgci->mapexceptions($xcp); # map exceptions into ISO hash my $cr = $rgci->matcheq($rgcc); # match up all easy place names $rgci->parsBYword($rgcc,$cr); # match up similar place names $cr->mkmodule('I2C'); # make the cross reference module format STDOUT = @<<<<<<<<<<<<<<<<<<<<<<<<<< => @|| => @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $excp, $flag, $real . print "\nremaining ISO's\n"; formprt($rgci,$gci); print "\nremaining CIA's\n"; formprt($rgcc,$gcc); } if ($updatexref) { # update the flags and MANIFEST require './CountryFlags.pm' or die "$pkg is broken, comment out this line a debug\n"; print "\nplease wait... updating ./flags directory\n"; foreach(keys %$cr) { $pkg->get_flags($_); } if (-d 'flags') { local(*M,*MI,*D); opendir(D,'flags') or die "could not read ./flags directory\n"; my @flags = grep(!/^\./,readdir(D)); closedir D; if (@flags) { print "\nre-writing MANIFEST\n\n"; open(MI,'MANIFEST.in') or die "could not open MANIFEST.in\n"; unless (open(M,'>MANIFEST')) { close MI; die "could not open MANIFEST for write\n"; } { undef local $/; $_ = ; close MI; } print M $_; foreach(sort @flags) { print M 'flags/',$_,"\n"; } close M; } } } 1;