#!/usr/bin/perl

system("grep 'define NETSNMP_DS_' ../../../include/net-snmp/agent/ds_agent.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::agent::default_store -O default_store.h");

open(ORIG,"default_store.xs");
open(NEW1,"NetSNMP-agent-default_store/fallback/const-c.inc") || die "can't open inc file 1";
open(NEW2,"NetSNMP-agent-default_store/fallback/const-xs.inc") || die "can't open inc file 2";
open(OUT,">default_store_new.xs");

# get up to the include from the original file
while(<ORIG>) {
    print OUT;
    last if (/include <net-snmp\/agent\/ds_agent.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::agent::default_store         PACKAGE = NetSNMP::agent::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";

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 (/\) \] \);/);
}
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 (/^\s*$/);
}
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-agent-default_store");
unlink("default_store.h");

