2016-07-11 10:37:33 +00:00
|
|
|
#!/usr/bin/env perl
|
|
|
|
use Data::Dumper;
|
|
|
|
|
|
|
|
$|=1;
|
|
|
|
my $debug = 0;
|
|
|
|
|
|
|
|
if (scalar @ARGV < 2) {
|
|
|
|
&usage;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Open grib_api.h and extract all macros of the form
|
|
|
|
# #define GRIB.* number
|
|
|
|
#
|
|
|
|
my $grib_header_file = $ARGV[0];
|
|
|
|
my $ecco_header_file = $ARGV[1];
|
|
|
|
|
|
|
|
open GRIB_HEADER_FILE, $grib_header_file or die $!;
|
|
|
|
my @grib_lines = <GRIB_HEADER_FILE>;
|
|
|
|
close GRIB_HEADER_FILE;
|
|
|
|
|
|
|
|
# Store each GRIB_ macro and its value
|
|
|
|
foreach (@grib_lines) {
|
|
|
|
if (/^\s*#define\s+(GRIB[_A-z0-9]+)\s+(.+)/) {
|
|
|
|
my $grib_macro = $1;
|
|
|
|
my $grib_value = $2;
|
|
|
|
#print "m=|$grib_macro| \t\t v=|$grib_value|\n";
|
|
|
|
$macro_map{$grib_macro} = $grib_value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#print Data::Dumper->Dump([\%macro_map], ["macro_map"]), $/ if ($debug);
|
|
|
|
|
|
|
|
open ECCO_HEADER_FILE, $ecco_header_file or die $!;
|
|
|
|
my @ecco_lines = <ECCO_HEADER_FILE>;
|
|
|
|
close ECCO_HEADER_FILE;
|
|
|
|
# Apply the value from our map to the equivalent CODES_ macros
|
|
|
|
foreach (@ecco_lines) {
|
|
|
|
if (/^\s*#define\s+(CODES[_A-z0-9]+)\s+(GRIB.+)/) {
|
2016-07-13 16:21:28 +00:00
|
|
|
# Replace macro lines like:
|
|
|
|
# #define CODES_OUT_OF_RANGE GRIB_OUT_OF_RANGE
|
|
|
|
# with
|
|
|
|
# #define CODES_OUT_OF_RANGE -65
|
2016-07-11 10:37:33 +00:00
|
|
|
my $ecco_macro = $1;
|
|
|
|
my $grib_macro = $2;
|
|
|
|
print "#define $ecco_macro $macro_map{$grib_macro}\n";
|
|
|
|
}
|
2016-07-13 16:21:28 +00:00
|
|
|
elsif (/^\s*typedef\s+struct\s+(grib_.*)\s+(codes_.*) *;/) {
|
|
|
|
# The struct documentation is placed before declarations like:
|
|
|
|
# typedef struct grib_iterator codes_iterator;
|
|
|
|
# This is not useful for users so instead we add just the struct
|
|
|
|
# declaration beforehand e.g.
|
|
|
|
# struct codes_iterator;
|
|
|
|
my $grib_struct = $1;
|
|
|
|
my $ecco_struct = $2;
|
|
|
|
print "struct $ecco_struct;\n$&\n"; # Note: $& references the matched string
|
|
|
|
}
|
2016-07-11 10:37:33 +00:00
|
|
|
else {
|
|
|
|
print;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
###################################################
|
|
|
|
sub usage {
|
|
|
|
print "$0 grib_api.h eccodes.h\n";
|
|
|
|
exit 1
|
|
|
|
}
|