1#!/usr/bin/env perl 2 3# Copy C source files (i.e. *.[ch]) from $src to $dest, first 4# stripping out uses of the macro BGD_DECLARE(<type>). A line must 5# begin with 'BGD_DECLARE' for it to be considered a use. 6 7use strict; 8use warnings; 9 10use File::Basename; 11 12my ($src, $dest) = @ARGV; 13 14die "Invalid arguments: nobgd.pl <src-dir> <dest-dir>\n" 15 unless ($src && $dest && -d $src && -d $dest); 16 17for my $file (glob("$src/*.c"), glob("$src/*.h")) { 18 do {local $| = 1; print "."}; 19 fixup($file, $dest); 20} 21print "\n"; 22 23sub fixup { 24 my ($src, $destDir) = @_; 25 my $dest = $destDir . "/" . basename($src); 26 27 my $content = slurp($src); 28 $content =~ s{^ BGD_DECLARE \( ([^)]+) \)}{$1}gmx; 29 unslurp($dest, $content); 30} 31 32 33sub slurp { 34 my ($filename) = @_; 35 local $/; # no file separator 36 my $data; 37 38 open my $fh, "<", $filename 39 or die "Unable to read file '$filename'.\n"; 40 $data = <$fh>; 41 close($fh); 42 43 return $data; 44} 45 46 47sub unslurp { 48 my ($filename, $data) = @_; 49 50 die "Refusing to overwrite file '$filename'\n" if -f $filename; 51 52 open my $fh, ">", $filename 53 or die "Unable to open '$filename' for writing.\n"; 54 print {$fh} $data 55 or die "Error writing file '$filename'\n"; 56 close ($fh); 57} 58