#!/usr/bin/perl

system("grep 'define NETSNMP_DS_' ../../include/net-snmp/library/default_store.h > default_store.h");
#gcc -E ../../include/net-snmp/library/default_store.h | grep -v default_store.h >> default_store.h
system("h2xs -b 5.5.0 -n NetSNMP::default_store -O default_store.h");

open(ORIG,"default_store.xs");
open(NEW1,"NetSNMP-default_store/fallback/const-c.inc");
open(NEW2,"NetSNMP-default_store/fallback/const-xs.inc");
open(OUT,">default_store_new.xs");

# get up to the include from the original file
while(<ORIG>) {
    print OUT;
    last if (/include <net-snmp\/library\/default_store.h/);
}

# include the entire new file
print OUT "\n\n/* autogenerated by \"gen\" from const-c.inc */\n\n";
print OUT <NEW1>;
print OUT "\n\n/* autogenerated by \"gen\" from const-xs.inc */\n\n";
print OUT "MODULE = NetSNMP::default_store         PACKAGE = NetSNMP::default_store\n\n";

print OUT <NEW2>;

#print OUT "\n\n/* autogenerated by \"gen\" from tail of old .xs file */\n\n";
print OUT "\n\n\n";

# skip past the constant portion of the old file
while (<ORIG>) {
    last if (/netsnmp_ds_get_bool/);
    $last = $_;
}

# We need the last two lines
print OUT $last;
print OUT $_;

# and the rest
print OUT <ORIG>;

close(OUT);

#
# generate test
#
open(H,"default_store.h");
open(ORIG,"test.pl");
open(OUT,">test.pl.new");

while(<ORIG>) {
    print OUT;
    last if (/\%tests =/);
}

while(<H>) {
    if (/define\s+(\w+)\s+(\d+)/) {
	printf OUT ("                  %-40s => %d,\n", "\"$1\"", $2);
	$tokenlist .= "				   $1\n";
    }
}

while(<ORIG>) {
    last if (/\);/);
}
print OUT;
print OUT <ORIG>;
close(OUT);

#
# modify the perl module itself
#
open(H,"default_store.h");
open(ORIG,"default_store.pm");
open(OUT,">default_store_new.pm");

# first list
while(<ORIG>) {
    print OUT;
    last if (/\%EXPORT_TAGS =/);
}
print OUT $tokenlist;
while(<ORIG>) {
    last if (/netsnmp_ds_get_boolean/);
}
print OUT;

# second list
while(<ORIG>) {
    print OUT;
    last if (/\@EXPORT =/);
}
print OUT $tokenlist;
while(<ORIG>) {
    last if (/\);/);
}
print OUT;

# last section
while(<ORIG>) {
    print OUT;
    last if (/head2 Exportable constants/);
}
print OUT "\n";
print OUT $tokenlist;
while(<ORIG>) {
    last if (/head2 Exportable functions/);
}
print OUT "\n";
print OUT;

# tail end
print OUT <ORIG>;
close(OUT);

#
# install new files
#
print "updated test.pl\n";
rename("test.pl.new","test.pl");
rename("default_store_new.pm", "default_store.pm");
print "updated default_store.pm\n";
rename("default_store_new.xs", "default_store.xs");
print "updated default_store.xs\n";

#
# remove the temp files.
#
system("rm -rf NetSNMP-default_store");
unlink("default_store.h");

