[exim-cvs] Add compile-time checks for various tables being …

トップ ページ
このメッセージを削除
このメッセージに返信
著者: Exim Git Commits Mailing List
日付:  
To: exim-cvs
題目: [exim-cvs] Add compile-time checks for various tables being in alphabetical order.
Gitweb: http://git.exim.org/exim.git/commitdiff/f9d04f08f7ca18e099843180edea967dd831df91
Commit:     f9d04f08f7ca18e099843180edea967dd831df91
Parent:     83712b3900eb045eb14df258fd092ad54314e990
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Sun May 12 22:31:36 2013 +0100
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Sun May 12 22:34:48 2013 +0100


    Add compile-time checks for various tables being in alphabetical order.


    This is gross hackery and somewhat fragile.  A better method would
    actuallyt compile the 'C' involved and check programmatically.
---
 src/Makefile              |    5 +++-
 src/scripts/source_checks |   50 +++++++++++++++++++++++++++++++++++++++++++++
 src/src/acl.c             |    9 ++++++-
 3 files changed, 61 insertions(+), 3 deletions(-)


diff --git a/src/Makefile b/src/Makefile
index a18c3d7..ec573b5 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -45,12 +45,15 @@ build-directory:
     $(SHELL) -c "test -d $$builddir -a -r $$builddir/version.c || \
       (mkdir $$builddir; cd $$builddir; $(SHELL) ../scripts/MakeLinks)";


+checks:
+    $(SHELL) scripts/source_checks
+
 # The "configure" target ensures that the build directory exists, then arranges
 # to build the main makefile from inside the build directory, by calling the
 # Configure-Makefile script. This does its own dependency checking because of
 # the optional files.


-configure: build-directory
+configure: checks build-directory
     @cd build-$(buildname); \
       build=$(build) $(SHELL) ../scripts/Configure-Makefile


diff --git a/src/scripts/source_checks b/src/scripts/source_checks
new file mode 100644
index 0000000..79f9c35
--- /dev/null
+++ b/src/scripts/source_checks
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+cd src;
+
+# Tables with struct items
+while read file table
+do
+  : $file $table
+  < $file \
+  perl -e '$/= undef; while (<>) { print $1 if /(?<='$table'\[\])\s*=\s*{\n(([^}].*\n)+)/m }' \
+  | awk '/{ (US)?"/ {print $2}' \
+  | awk -F\" '{print $2}' \
+  | LANG=C sort -c \
+  || exit 1
+done <<-END
+    readconf.c    optionlist_config
+    globals.c    optionlist_auths
+    globals.c    debug_options
+    globals.c    header_names
+    globals.c    log_options
+    expand.c    item_table
+    transport.c    optionlist_transports
+    route.c        optionlist_routers
+    transports/appendfile.c    appendfile_transport_options
+    transports/autoreply.c    autoreply_transport_options
+    transports/lmtp.c    lmtp_transport_options
+    transports/pipe.c    pipe_transport_options
+    transports/smtp.c    smtp_transport_options
+    expand.c    var_table
+END
+
+# Tables with just string items
+while read file table
+do
+  : $file $table
+  < $file \
+  perl -e '$/= undef; while (<>) { print $1 if /(?<='$table'\[\])\s*=\s*{\s?(([^}]*)+)}/m }' \
+  | awk -F\" '/"/ {print $2}' \
+  | LANG=C sort -c \
+  || exit 1
+
+done <<-END
+    expand.c    item_table
+    expand.c    op_table_underscore
+    expand.c    op_table_main
+    expand.c    cond_table
+    acl.c        verbs
+    acl.c        conditions
+END
+
diff --git a/src/src/acl.c b/src/src/acl.c
index 1d5e059..4f64e0a 100644
--- a/src/src/acl.c
+++ b/src/src/acl.c
@@ -21,8 +21,13 @@ enum { ACL_ACCEPT, ACL_DEFER, ACL_DENY, ACL_DISCARD, ACL_DROP, ACL_REQUIRE,


/* ACL verbs */

-static uschar *verbs[] =
-  { US"accept", US"defer", US"deny", US"discard", US"drop", US"require",
+static uschar *verbs[] = {
+    US"accept",
+    US"defer",
+    US"deny",
+    US"discard",
+    US"drop",
+    US"require",
     US"warn" };


/* For each verb, the conditions for which "message" or "log_message" are used