[efi] Tidy up output of EFI header import script
authorMichael Brown <mcb30@ipxe.org>
Sat, 29 May 2010 22:47:30 +0000 (23:47 +0100)
committerStefan Hajnoczi <stefanha@gmail.com>
Wed, 7 Jul 2010 19:22:19 +0000 (20:22 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
src/include/gpxe/efi/ProcessorBind.h
src/include/gpxe/efi/efi.h
src/include/gpxe/efi/import.pl

index 3dbaf1b..91e3821 100644 (file)
@@ -1,3 +1,6 @@
+#ifndef _GPXE_EFI_PROCESSOR_BIND_H
+#define _GPXE_EFI_PROCESSOR_BIND_H
+
 /*
  * EFI header files rely on having the CPU architecture directory
  * present in the search path in order to pick up ProcessorBind.h.  We
@@ -12,3 +15,5 @@
 #if __x86_64__
 #include <gpxe/efi/X64/ProcessorBind.h>
 #endif
+
+#endif /* _GPXE_EFI_PROCESSOR_BIND_H */
index 19cefd5..043cd83 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef _EFI_H
-#define _EFI_H
+#ifndef _GPXE_EFI_H
+#define _GPXE_EFI_H
 
 /** @file
  *
@@ -144,4 +144,4 @@ extern EFI_STATUS efi_init ( EFI_HANDLE image_handle,
                             EFI_SYSTEM_TABLE *systab );
 extern int efi_snp_install ( void );
 
-#endif /* _EFI_H */
+#endif /* _GPXE_EFI_H */
index 06d4ecb..6d900be 100755 (executable)
@@ -1,27 +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 $gpxedir = shift;
+  my $edktop = shift;
   my $edkdirs = shift;
   my $filename = shift;
 
   # Skip everything except headers
   return unless $filename =~ /\.h$/;
-  print "$filename...";
 
+  # Skip files that are gPXE native headers
   my $outfile = catfile ( $gpxedir, $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+_GPXE_\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 );
@@ -60,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 ( $gpxedir, $dependency ) ) {
-         print "...following dependency on $dependency\n";
-         try_import_file ( $gpxedir, $edkdirs, $dependency );
+         print "...following dependency on $dependency\n" if $verbosity >= 1;
+         try_import_file ( $gpxedir, $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 gPXE EFI includes directory
 my $gpxedir = $FindBin::Bin;
 die "Directory \"$gpxedir\" does not appear to contain the gPXE EFI includes\n"
     unless -e catfile ( $gpxedir, "../../../include/gpxe/efi" );
 
-print "Importing EFI headers into $gpxedir\nfrom ";
-print join ( "\n and ", @$edkdirs )."\n";
+if ( $verbosity >= 1 ) {
+  print "Importing EFI headers into $gpxedir\nfrom ";
+  print join ( "\n and ", map { catdir ( $edktop, $_ ) } @$edkdirs )."\n";
+}
 
 # Import headers
 find ( { wanted => sub {
-  try_import_file ( $gpxedir, $edkdirs, abs2rel ( $_, $gpxedir ) );
+  try_import_file ( $gpxedir, $edktop, $edkdirs, abs2rel ( $_, $gpxedir ) );
 }, no_chdir => 1 }, $gpxedir );