Add compile-time checks for various tables being in alphabetical order.
[exim.git] / src / scripts / source_checks
diff --git a/src/scripts/source_checks b/src/scripts/source_checks
new file mode 100644 (file)
index 0000000..79f9c35
--- /dev/null
@@ -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
+