]> jfr.im git - irc/quakenet/newserv.git/blame - chanserv/mkcommandlist.pl
Redo BUILDID stuff for pmake.
[irc/quakenet/newserv.git] / chanserv / mkcommandlist.pl
CommitLineData
1dd6d55d 1#!/usr/bin/perl -w
2
3use strict;
4
5my @cmdnames;
6my @cmdlevels;
7my @cmdargs;
8my @cmddesc;
9my @cmdfunc;
10my @protos;
11my @files;
35227ed4 12my @help;
1dd6d55d 13
14my @filelist = <*.c>;
15
16my $modname;
17
18unless (@ARGV) {
19 print "Usage: $0 <module name>\n";
20 exit(0);
21} else {
22 $modname=$ARGV[0];
23}
24
b3565978
CP
25my $smallname;
26$smallname=$modname;
27$smallname=~s/^chanserv_//;
28$smallname=~s/\.so$//;
29
1dd6d55d 30for (@filelist) {
31 next if (/commandlist.c/);
b3565978 32 next if (/init.c/);
1dd6d55d 33
34 my $fname = $_;
35227ed4 35 my ($cn, $cl, $ca, $cd, $cf, $cp, $ch);
36 $ch="";
1dd6d55d 37
38 open INFILE,"<$fname";
39
40 while(<INFILE>) {
41 chomp;
42
43 if (/CMDNAME: (.*)/) {
44 $cn=$1;
45 }
46
47 if (/CMDLEVEL: (.*)/) {
48 $cl=$1;
49 }
50
51 if (/CMDARGS: (.*)/) {
52 $ca=$1;
53 }
54
55 if (/CMDDESC: (.*)/) {
56 $cd=$1;
57 }
58
59 if (/CMDFUNC: (.*)/) {
60 $cf=$1;
61 }
62
63 if (/CMDPROTO: (.*)/) {
64 $cp=$1;
65 }
35227ed4 66
67 if (/CMDHELP: (.*)/) {
68 $ch.=$1."\\n";
69 }
1dd6d55d 70 }
71
72 if (defined $cn and defined $cl and defined $ca and defined $cd and defined $cf and defined $cp) {
73 # valid command found
74 push @files, $fname;
75 push @cmdnames, $cn;
76 push @cmdlevels, $cl;
77 push @cmdargs, $ca;
78 push @cmddesc, $cd;
79 push @cmdfunc, $cf;
80 push @protos, $cp;
35227ed4 81 push @help, $ch;
1dd6d55d 82 } else {
83 print "Warning: found source file $fname without complete tags, skipping...\n";
84 }
85}
86
87if (@files < 1) {
88 print "No commands found - are you in the right directory?\n";
89 print "Exiting before I destroy something important.\n";
90 exit(0);
91}
92
93
94open CL, ">commandlist.c";
95
96print CL "/* Automatically generated by mkcommandlist.pl, do not edit. */\n\n";
97print CL "#include \"../chanserv.h\"\n\n";
98
99# Print prototypes
100print CL "/* Prototypes */\n";
101foreach (@protos) {
102 print CL "$_\n";
103}
104
105my @names2 = @cmdnames;
106my @func2 = @cmdfunc;
107
b3565978
CP
108print CL "void ".$smallname."_init(void);\n";
109print CL "void ".$smallname."_fini(void);\n\n";
110
1dd6d55d 111print CL "\nvoid _init() {\n";
b3565978 112print CL " ".$smallname."_init();\n";
1dd6d55d 113
114while (my $cn = shift @cmdnames) {
115 print CL " chanservaddcommand(\"".$cn."\", ".(shift @cmdlevels).", ".(shift @cmdargs).", ";
35227ed4 116 print CL (shift @cmdfunc).", \"".(shift @cmddesc)."\", \"".(shift @help),"\");\n";
1dd6d55d 117}
118
119print CL "}\n\nvoid _fini() {\n";
b3565978 120print CL " ".$smallname."_fini();\n";
1dd6d55d 121
122while (my $cn = shift @names2) {
123 print CL " chanservremovecommand(\"".$cn."\", ".(shift @func2).");\n";
124}
125
126print CL "}\n";
127
128close CL;
129
130open MF,">Makefile";
131
132print MF "# Automatically generated Makefile, do not edit.\n\n";
133
134print MF ".PHONY: all Makefile\n";
135
136print MF "all: Makefile $modname\n\n";
137
138print MF "Makefile:\n";
139print MF "\t../mkcommandlist.pl $modname\n";
140
141print MF "\n$modname: ";
142
143push @files,"commandlist.c";
b3565978 144push @files,"init.c";
1dd6d55d 145
146foreach (@files) {
147 s/.c$/.o/;
148 print MF "$_ ";
149}
150
151print MF "\n";
152print MF "\t ld -shared -Bdynamic -o \$\@ \$\^ \n";
153
154close MF;