Re: [PATCH] Replace mkproto.pl with mkproto.awk

2019-11-16 Thread Ethan Sommer via rsync
> Me? I think, the rsync maintainers, or?
> I just added my 2 cents and would stick with .pl, it has proven to be
> stable :) (Yes, I'm a Perl user.)
Meant to direct that towards the rsync maintainers sorry. Are you
suggesting that something that works with all popular awk
implementations and entirely conforms to the POSIX standard now would
somehow not be stable, or would eventually stop working, as if awk is a
moving target?

-- 
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


Re: [PATCH] Replace mkproto.pl with mkproto.awk

2019-11-16 Thread Ethan Sommer via rsync
ping?

-- 
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


[PATCH v2] Replace mkproto.pl with mkproto.awk

2019-10-31 Thread Ethan Sommer via rsync
This replaces the build dependency on perl with one on awk which is
already used throughout 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 ..d3802f95
--- /dev/null
+++ b/mkproto.awk
@@ -0,0 +1,39 @@
+#!/usr/bin/awk -f
+
+BEGIN {
+while ((getline i < "proto.h") > 0) 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..
--- a/mkproto.pl
+++ /dev/null
@@ -1,48 +0,0 @@
-# generate prototypes for rsync
-
-$old_protos = '';
-if (open(IN, 'proto.h')) {
-$old_protos = join('', );
-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


Re: [PATCH] Replace mkproto.pl with mkproto.awk

2019-10-31 Thread Ethan Sommer via rsync
> I can't speak for rsync, but nowadays Perl isn't that rare, that a
> dependeny on it for build purpose would matter. IMHO.
It might not be rare, but it's certainly less universally available than
awk, which is preinstalled on pretty much every unix-like OS out there.

> There are many flavours of AWK. Are you sure, that your AWK replacement
> runs everwhere?
I tested every common implementation I know of, and found that it didn't
work with busybox, awk, I'll be sending the updated patch that works
with at least gawk, mawk, nawk, busybox awk, and openbsd awk right after
this.

-- 
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


[PATCH] Replace mkproto.pl with mkproto.awk

2019-10-31 Thread Ethan Sommer via rsync
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 ..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..
--- a/mkproto.pl
+++ /dev/null
@@ -1,48 +0,0 @@
-# generate prototypes for rsync
-
-$old_protos = '';
-if (open(IN, 'proto.h')) {
-$old_protos = join('', );
-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