X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/1dd6d55d137d4c36261d33e717e4291728c61ff8..28aa186de14dc4fa7488866e70beb6ae933dde79:/chanserv/mkcommandlist.pl?ds=sidebyside diff --git a/chanserv/mkcommandlist.pl b/chanserv/mkcommandlist.pl index 180b4c0c..8ccd6d73 100755 --- a/chanserv/mkcommandlist.pl +++ b/chanserv/mkcommandlist.pl @@ -9,11 +9,15 @@ my @cmddesc; my @cmdfunc; my @protos; my @files; +my @help; +my @cmdaliases; my @filelist = <*.c>; my $modname; +my %cmdhash; + unless (@ARGV) { print "Usage: $0 \n"; exit(0); @@ -21,11 +25,23 @@ unless (@ARGV) { $modname=$ARGV[0]; } +my $smallname; +$smallname=$modname; +$smallname=~s/\.so$//; + +my $cname; +$cname=$smallname . ".c"; +$smallname=~s/^chanserv_//; + + for (@filelist) { next if (/commandlist.c/); + next if ($_ eq $cname); my $fname = $_; - my ($cn, $cl, $ca, $cd, $cf, $cp); + my ($cn, $cl, $ca, $cd, $cf, $cp, $ch, $cal); + $ch=""; + $cal=""; open INFILE,"<$fname"; @@ -55,10 +71,20 @@ for (@filelist) { if (/CMDPROTO: (.*)/) { $cp=$1; } + + if (/CMDHELP: (.*)/) { + $ch.=$1."\\n"; + } + + if (/CMDALIASES: (.*)/) { + $cal=$1; + } } if (defined $cn and defined $cl and defined $ca and defined $cd and defined $cf and defined $cp) { # valid command found + $cmdhash{$cn} = scalar @cmdnames; + push @files, $fname; push @cmdnames, $cn; push @cmdlevels, $cl; @@ -66,6 +92,8 @@ for (@filelist) { push @cmddesc, $cd; push @cmdfunc, $cf; push @protos, $cp; + push @help, $ch; + push @cmdaliases, $cal; } else { print "Warning: found source file $fname without complete tags, skipping...\n"; } @@ -89,47 +117,86 @@ foreach (@protos) { print CL "$_\n"; } -my @names2 = @cmdnames; -my @func2 = @cmdfunc; +print CL "void ".$smallname."_init(void);\n"; +print CL "void ".$smallname."_fini(void);\n\n"; print CL "\nvoid _init() {\n"; +print CL " ".$smallname."_init();\n"; + +sub generate_help_text { + my ($cn, $ch) = @_; + + my %SUBS; + + $SUBS{"COMMAND"} = $cn; + $SUBS{"UCOMMAND"} = uc($cn); -while (my $cn = shift @cmdnames) { - print CL " chanservaddcommand(\"".$cn."\", ".(shift @cmdlevels).", ".(shift @cmdargs).", "; - print CL (shift @cmdfunc).", \"".(shift @cmddesc)."\");\n"; + my %realsubs; + while(my ($key, $value) = each(%SUBS)) { + $key = '@'.quotemeta($key).'@'; + $value = quotemeta($value); + $ch =~ s/$key/$value/g; + } + + return $ch; } -print CL "}\n\nvoid _fini() {\n"; +sub writecmd { + my ($cn, $i, $isalias) = @_; -while (my $cn = shift @names2) { - print CL " chanservremovecommand(\"".$cn."\", ".(shift @func2).");\n"; + my $cl = $cmdlevels[$i]; + if ($isalias) { + $cl .= " | " if ($cl ne ""); + $cl .= "QCMD_ALIAS"; + } + + print CL " chanservaddcommand(\"".$cn."\", ".($cl).", ".($cmdargs[$i]).", "; + print CL ($cmdfunc[$i]).", \"".($cmddesc[$i])."\", \"".(generate_help_text($cn,$help[$i])),"\");\n"; } -print CL "}\n"; +for (my $i=0;$iMakefile"; +print CL "}\n\nvoid _fini() {\n"; +print CL " ".$smallname."_fini();\n"; -print MF "# Automatically generated Makefile, do not edit.\n\n"; +sub writercmd { + my ($cn, $i) = @_; + print CL " chanservremovecommand(\"".$cn."\", ".($cmdfunc[$i]).");\n"; +} -print MF ".PHONY: all Makefile\n"; +for (my $i=0;$i.autobuild.mk"; + +print MF "# Automatically generated Makefile, do not edit.\n"; print MF "\n$modname: "; push @files,"commandlist.c"; +push @files,$cname; + foreach (@files) { s/.c$/.o/; print MF "$_ "; } print MF "\n"; -print MF "\t ld -shared -Bdynamic -o \$\@ \$\^ \n"; close MF;