| #!/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"); |
| |