aboutsummaryrefslogtreecommitdiff
path: root/src/include/ipxe/efi/import.pl
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2010-05-29 23:47:30 +0100
committerMichael Brown <mcb30@ipxe.org>2010-05-29 23:49:47 +0100
commitbf2b1c8e47bbd822e8785399b458d0e953ed64b5 (patch)
treefb040a43770d5f325d878c22cfd67c7910d56af7 /src/include/ipxe/efi/import.pl
parent03b1020acc76047294d7b38abab3207426147dd8 (diff)
downloadipxe-bf2b1c8e47bbd822e8785399b458d0e953ed64b5.zip
ipxe-bf2b1c8e47bbd822e8785399b458d0e953ed64b5.tar.gz
ipxe-bf2b1c8e47bbd822e8785399b458d0e953ed64b5.tar.bz2
[efi] Tidy up output of EFI header import script
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/efi/import.pl')
-rwxr-xr-xsrc/include/ipxe/efi/import.pl73
1 files changed, 57 insertions, 16 deletions
diff --git a/src/include/ipxe/efi/import.pl b/src/include/ipxe/efi/import.pl
index 629624c..0dc5854 100755
--- a/src/include/ipxe/efi/import.pl
+++ b/src/include/ipxe/efi/import.pl
@@ -1,28 +1,58 @@
#!/usr/bin/perl -w
+=head1 NAME
+
+import.pl
+
+=head1 SYNOPSIS
+
+import.pl [options] /path/to/edk2/edk2
+
+Options:
+
+ -h,--help Display brief help message
+ -v,--verbose Increase verbosity
+ -q,--quiet Decrease verbosity
+
+=cut
+
use File::Spec::Functions qw ( :ALL );
use File::Find;
use File::Path;
+use Getopt::Long;
+use Pod::Usage;
use FindBin;
use strict;
use warnings;
+my $verbosity = 0;
+
sub try_import_file {
my $ipxedir = shift;
+ my $edktop = shift;
my $edkdirs = shift;
my $filename = shift;
# Skip everything except headers
return unless $filename =~ /\.h$/;
- print "$filename...";
- ( undef, undef, my $basename ) = splitpath ( $filename );
+ # Skip files that are iPXE native headers
my $outfile = catfile ( $ipxedir, $filename );
+ if ( -s $outfile ) {
+ open my $outfh, "<$outfile" or die "Could not open $outfile: $!\n";
+ my $line = <$outfh>;
+ close $outfh;
+ chomp $line;
+ return if $line =~ /^\#ifndef\s+_IPXE_\S+_H$/;
+ }
+
+ # Search for importable header
foreach my $edkdir ( @$edkdirs ) {
- my $infile = catfile ( $edkdir, $filename );
+ my $infile = catfile ( $edktop, $edkdir, $filename );
if ( -e $infile ) {
# We have found a matching source file - import it
- print "$infile\n";
+ print "$filename <- ".catfile ( $edkdir, $filename )."\n"
+ if $verbosity >= 1;
open my $infh, "<$infile" or die "Could not open $infile: $!\n";
( undef, my $outdir, undef ) = splitpath ( $outfile );
mkpath ( $outdir );
@@ -61,33 +91,44 @@ sub try_import_file {
# Recurse to handle any included files that we don't already have
foreach my $dependency ( @dependencies ) {
if ( ! -e catfile ( $ipxedir, $dependency ) ) {
- print "...following dependency on $dependency\n";
- try_import_file ( $ipxedir, $edkdirs, $dependency );
+ print "...following dependency on $dependency\n" if $verbosity >= 1;
+ try_import_file ( $ipxedir, $edktop, $edkdirs, $dependency );
}
}
return;
}
}
- print "no equivalent found\n";
+ die "$filename has no equivalent in $edktop\n";
}
-# Identify edk import directories
-die "Syntax $0 /path/to/edk2/edk2\n" unless @ARGV == 1;
+# Parse command-line options
+Getopt::Long::Configure ( 'bundling', 'auto_abbrev' );
+GetOptions (
+ 'verbose|v+' => sub { $verbosity++; },
+ 'quiet|q+' => sub { $verbosity--; },
+ 'help|h' => sub { pod2usage ( 1 ); },
+) or die "Could not parse command-line options\n";
+pod2usage ( 1 ) unless @ARGV == 1;
my $edktop = shift;
-die "Directory \"$edktop\" does not appear to contain the EFI EDK2\n"
- unless -e catfile ( $edktop, "MdePkg" );
-my $edkdirs = [ catfile ( $edktop, "MdePkg/Include" ),
- catfile ( $edktop, "IntelFrameworkPkg/Include" ) ];
+
+# Identify edk import directories
+my $edkdirs = [ "MdePkg/Include", "IntelFrameworkPkg/Include" ];
+foreach my $edkdir ( @$edkdirs ) {
+ die "Directory \"$edktop\" does not appear to contain the EFI EDK2 "
+ ."(missing \"$edkdir\")\n" unless -d catdir ( $edktop, $edkdir );
+}
# Identify iPXE EFI includes directory
my $ipxedir = $FindBin::Bin;
die "Directory \"$ipxedir\" does not appear to contain the iPXE EFI includes\n"
unless -e catfile ( $ipxedir, "../../../include/ipxe/efi" );
-print "Importing EFI headers into $ipxedir\nfrom ";
-print join ( "\n and ", @$edkdirs )."\n";
+if ( $verbosity >= 1 ) {
+ print "Importing EFI headers into $ipxedir\nfrom ";
+ print join ( "\n and ", map { catdir ( $edktop, $_ ) } @$edkdirs )."\n";
+}
# Import headers
find ( { wanted => sub {
- try_import_file ( $ipxedir, $edkdirs, abs2rel ( $_, $ipxedir ) );
+ try_import_file ( $ipxedir, $edktop, $edkdirs, abs2rel ( $_, $ipxedir ) );
}, no_chdir => 1 }, $ipxedir );