diff options
Diffstat (limited to 'perl/agent/default_store/gen')
-rwxr-xr-x | perl/agent/default_store/gen | 118 |
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"); + |