summaryrefslogtreecommitdiff
path: root/perl/agent/default_store/gen
diff options
context:
space:
mode:
Diffstat (limited to 'perl/agent/default_store/gen')
-rwxr-xr-xperl/agent/default_store/gen118
1 files changed, 118 insertions, 0 deletions
diff --git a/perl/agent/default_store/gen b/perl/agent/default_store/gen
new file mode 100755
index 0000000..55823d6
--- /dev/null
+++ b/perl/agent/default_store/gen
@@ -0,0 +1,118 @@
+#!/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");
+