This replaces the build dependency on perl with one on awk which is already used in the build system and is much more ubiquitous than perl --- Makefile.in | 2 +- mkproto.awk | 39 +++++++++++++++++++++++++++++++++++++++ mkproto.pl | 48 ------------------------------------------------ 3 files changed, 40 insertions(+), 49 deletions(-) create mode 100644 mkproto.awk delete mode 100644 mkproto.pl
diff --git a/Makefile.in b/Makefile.in index f912f312..d7ddbc41 100644 --- a/Makefile.in +++ b/Makefile.in @@ -210,7 +210,7 @@ proto.h: proto.h-tstamp @if test -f proto.h; then :; else cp -p $(srcdir)/proto.h .; fi proto.h-tstamp: $(srcdir)/*.c $(srcdir)/lib/compat.c config.h - perl $(srcdir)/mkproto.pl $(srcdir)/*.c $(srcdir)/lib/compat.c + awk -f $(srcdir)/mkproto.awk $(srcdir)/*.c $(srcdir)/lib/compat.c man: rsync.1 rsyncd.conf.5 man-copy diff --git a/mkproto.awk b/mkproto.awk new file mode 100644 index 00000000..0c6fcdd1 --- /dev/null +++ b/mkproto.awk @@ -0,0 +1,39 @@ +#!/usr/bin/awk -f + +BEGIN { + while (getline i <"proto.h") old_protos = old_protos ? old_protos "\n" i : i + protos = "/* This file is automatically generated with \"make proto\". DO NOT EDIT */\n" +} + +inheader { + protos = protos "\n" ((inheader = /\)[ \t]*$/ ? 0 : 1) ? $0 : $0 ";") + next +} + +/^FN_(LOCAL|GLOBAL)_[^(]+\([^,()]+/ { + local = /^FN_LOCAL/ + gsub(/^FN_(LOC|GLOB)AL_|,.*$/, "") + sub(/^BOOL\(/, "BOOL ") + sub(/^CHAR\(/, "char ") + sub(/^INTEGER\(/, "int ") + sub(/^STRING\(/, "char *") + protos = protos "\n" $0 (local ? "(int module_id);" : "(void);") + next +} + +/^static|^extern|;/||!/^[A-Za-z][A-Za-z0-9_]* / { next } + +/\(.*\)[ \t]*$/ { + protos = protos "\n" $0 ";" + next +} + +/\(/ { + inheader = 1 + protos = protos "\n" $0 +} + +END { + if (old_protos != protos) print protos > "proto.h" + print "" > "proto.h-tstamp" +} diff --git a/mkproto.pl b/mkproto.pl deleted file mode 100644 index cdeb2ea3..00000000 --- a/mkproto.pl +++ /dev/null @@ -1,48 +0,0 @@ -# generate prototypes for rsync - -$old_protos = ''; -if (open(IN, 'proto.h')) { - $old_protos = join('', <IN>); - close IN; -} - -%FN_MAP = ( - BOOL => 'BOOL ', - CHAR => 'char ', - INTEGER => 'int ', - STRING => 'char *', -); - -$inheader = 0; -$protos = qq|/* This file is automatically generated with "make proto". DO NOT EDIT */\n\n|; - -while (<>) { - if ($inheader) { - if (/[)][ \t]*$/) { - $inheader = 0; - s/$/;/; - } - $protos .= $_; - } elsif (/^FN_(LOCAL|GLOBAL)_([^(]+)\(([^,()]+)/) { - $ret = $FN_MAP{$2}; - $func = $3; - $arg = $1 eq 'LOCAL' ? 'int module_id' : 'void'; - $protos .= "$ret$func($arg);\n"; - } elsif (/^static|^extern/ || /[;]/ || !/^[A-Za-z][A-Za-z0-9_]* /) { - ; - } elsif (/[(].*[)][ \t]*$/) { - s/$/;/; - $protos .= $_; - } elsif (/[(]/) { - $inheader = 1; - $protos .= $_; - } -} - -if ($old_protos ne $protos) { - open(OUT, '>proto.h') or die $!; - print OUT $protos; - close OUT; -} - -open(OUT, '>proto.h-tstamp') and close OUT; -- 2.23.0 -- Please use reply-all for most replies to avoid omitting the mailing list. To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html