http://lists.gnu.org/archive/html/bug-cssc/2014-09/msg00003.html http://git.savannah.gnu.org/cgit/cssc.git/commit/?id=9737f41b5d2a49e61061e9f896b5a9ae19e3a3ac --- auxfiles/Makefile.in 2014-07-11 07:32:58.000000000 -0500 +++ auxfiles/Makefile.in 2014-10-05 02:24:06.000000000 -0500 @@ -799,7 +799,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -EXTRA_DIST = check-testfiles.sh +EXTRA_DIST = check-testfiles.sh firstinclude.sed all: all-am .SUFFIXES: --- dev/null +++ auxfiles/firstinclude.sed @@ -0,0 +1,19 @@ +/^ *# *include ["<].*[">]/ { +s/^ *# *include ["<]\(.*\)[">]/\1/ +t YESREALLY +i\ +Internal error - regexes are inconsistent +q +: YESREALLY +#s/^\(config\|cssc\).h$// +s/^config\.h$// +t OK += +i\ +config.h should be #included first +: OK +# q with an exit code is a GNU extension, don't use it. +q +} + + --- src/Makefile.in 2014-07-11 07:33:00.000000000 -0500 +++ src/Makefile.in 2014-10-05 02:24:06.000000000 -0500 @@ -1615,6 +1615,20 @@ sccsdiff: sccsdiff.sh sed -e 's:__csscutildir__:$(csscutildir):g' < sccsdiff.sh > $@ && chmod a+x $@ || { rm -f $@; false; } +check-include-order: + rv=0; \ + for f in $(srcdir)/*.cc; \ + do \ + msg="`sed -n -f $(top_srcdir)/auxfiles/firstinclude.sed < $$f`"; \ + if test -n "$${msg}"; \ + then \ + set -- $${msg} ; line=$${1} ; shift; errmsg="$${*}"; \ + echo "$${f}:$${line}:$${errmsg}" >&2; \ + rv=1; \ + fi \ + done; \ + exit $${rv} + testsplit$(EXEEXT): fnsplit.cc mystring.$(OBJEXT) quit.$(OBJEXT) $(CXXCOMPILE) -DTEST_FNSPLIT -o testsplit$(EXEEXT) \ $(srcdir)/fnsplit.cc mystring.$(OBJEXT) quit.$(OBJEXT) --- src/admin.cc +++ src/admin.cc @@ -23,6 +23,8 @@ * Administer and create SCCS files. * */ +#include <config.h> + #include <errno.h> #include "cssc.h" --- src/bodyio.cc +++ src/bodyio.cc @@ -23,6 +23,12 @@ * */ +#include <config.h> + +#include <cstdio> +#include <cstring> + +#include "cssc.h" #include "bodyio.h" #include "quit.h" #include "cssc-assert.h" @@ -32,9 +38,6 @@ #include "ioerr.h" #include "file.h" -#include <cstdio> -#include <cstring> - /* Check if we have exceeded the maximum line length. */ static bool check_line_len(const char *iname, --- src/cap.cc +++ src/cap.cc @@ -23,6 +23,8 @@ * Utilities for limiting output to the constraints of the file format. */ +#include <config.h> + #include "cssc.h" --- src/cdc.cc +++ src/cdc.cc @@ -23,6 +23,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "my-getopt.h" #include "fileiter.h" --- src/delta-iterator.cc +++ src/delta-iterator.cc @@ -25,6 +25,9 @@ * */ +#include <config.h> + +#include "cssc.h" #include "delta-iterator.h" #include "delta-table.h" #include "cssc-assert.h" --- src/delta-table.cc +++ src/delta-table.cc @@ -22,6 +22,9 @@ * */ +#include <config.h> + +#include "cssc.h" #include "delta-table.h" #include "delta-iterator.h" --- src/delta.cc +++ src/delta.cc @@ -24,6 +24,10 @@ * */ + +#include <config.h> + +#include "cssc.h" #include "delta.h" #include "cleanup.h" #include "my-getopt.h" --- src/dtbl-prepend.cc +++ src/dtbl-prepend.cc @@ -24,6 +24,9 @@ * */ +#include <config.h> + +#include "cssc.h" #include "delta-table.h" --- src/encoding.cc +++ src/encoding.cc @@ -25,6 +25,9 @@ * Compile on its own, defining TEST_CODE, to compile a test program. */ +#include <config.h> + +#include "cssc.h" #include "bodyio.h" #include "cssc-assert.h" --- src/environment.cc +++ src/environment.cc @@ -22,15 +22,15 @@ * sections "Environment" and "Interoperability" in the CSSC manual. * */ +#include "config.h" + +#include <cerrno> +#include <cstdio> #include <cstdlib> #include <cstring> -#include <cstdio> -#include <cerrno> - -#include "cssc.h" - #include <limits.h> +#include "cssc.h" bool binary_file_creation_allowed (void) { --- src/fatalsig.cc +++ src/fatalsig.cc @@ -22,14 +22,15 @@ * Handle fatal signals... * */ +#include "config.h" + #include <cstdlib> +#include <signal.h> /* TODO: consider using sigaction(). */ +#include "cssc-assert.h" #include "cssc.h" -#include "version.h" #include "quit.h" - -#include <signal.h> /* TODO: consider using sigaction(). */ -#include "cssc-assert.h" +#include "version.h" /* The expansion of RETSIGTYPE is automatically decided by the configure --- src/fdclosed.cc +++ src/fdclosed.cc @@ -31,13 +31,14 @@ * the file pointer on our file too). */ -#include "cssc.h" -#include "sysdep.h" -#include "defaults.h" // CONFIG_NULL_FILENAME +#include <config.h> #include <unistd.h> #include <stdio.h> /* perror() */ +#include "cssc.h" +#include "sysdep.h" +#include "defaults.h" // CONFIG_NULL_FILENAME class SafeFdCheck { --- src/file.cc +++ src/file.cc @@ -23,19 +23,22 @@ * System dependent routines for accessing files. * */ +#include "config.h" + #include <errno.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> -#include "cssc.h" +#include "cssc.h" /* for CONFIG_CAN_HARD_LINK_AN_OPEN_FILE */ #include "cssc-assert.h" #include "sysdep.h" #include "file.h" #include "quit.h" #include "ioerr.h" #include "defaults.h" - -#include <unistd.h> -#include <sys/stat.h> -#include <stdio.h> #include "dirent-safer.h" /* Redirects stdout to a "null" file (eg. /dev/null). */ @@ -152,14 +155,14 @@ +static int unprivileged = 0; + #ifdef CONFIG_UIDS /* A flag to indicate whether or not the programme is an privileged (effective UID != real UID) or unprivileged (effective UID == real UID). */ -static int unprivileged = 0; - #ifdef SAVED_IDS_OK static uid_t old_euid; --- src/file.h +++ src/file.h @@ -33,6 +33,7 @@ #include <sys/types.h> #include "filelock.h" +#include "mystring.h" enum create_mode { CREATE_EXCLUSIVE = 001, --- src/filelock.h +++ src/filelock.h @@ -28,6 +28,7 @@ #define CSSC__FILELOCK_H__ #include "cleanup.h" +#include "mystring.h" class file_lock : private cleanup { int locked; --- src/fnsplit.cc +++ src/fnsplit.cc @@ -20,6 +20,8 @@ * Functions for canonifying filenames. */ +#include <config.h> + #include "cssc.h" #include "mystring.h" #include "file.h" // declaration of split_filename. --- src/get.cc +++ src/get.cc @@ -23,6 +23,8 @@ * Extract a requested delta from a SCCS file. * */ +#include "config.h" + #include <errno.h> #include "cssc.h" --- src/l-split.cc +++ src/l-split.cc @@ -24,6 +24,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "mylist.h" #include "sccsfile.h" // declares these functions. --- src/linebuf.cc +++ src/linebuf.cc @@ -23,6 +23,8 @@ * Members of the class cssc_linebuf. * */ +#include "config.h" + #include <cstdio> #include <cstring> #include <climits> --- src/pf-add.cc +++ src/pf-add.cc @@ -23,6 +23,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "pfile.h" #include "except.h" --- src/pf-del.cc +++ src/pf-del.cc @@ -24,6 +24,8 @@ * a p-file. * */ +#include "config.h" + #include <utility> #include "cssc.h" --- src/pfile.cc +++ src/pfile.cc @@ -23,6 +23,8 @@ * Common members of the class sccs_pfile. * */ +#include "config.h" + #include <errno.h> #include "cssc.h" --- src/prompt.cc +++ src/prompt.cc @@ -24,6 +24,8 @@ * */ +#include "config.h" + #include <cstdio> #include <cstring> #include <cstdio> --- src/prs.cc +++ src/prs.cc @@ -24,6 +24,7 @@ * */ +#include <config.h> #include "cssc.h" #include "fileiter.h" #include "sccsfile.h" --- src/prt.cc +++ src/prt.cc @@ -26,6 +26,7 @@ */ +#include <config.h> #include "cssc.h" #include "fileiter.h" #include "sccsfile.h" --- src/quit.cc +++ src/quit.cc @@ -23,6 +23,8 @@ * Functions for cleaning up and quitting. * */ +#include "config.h" + #include <cstdio> #include <cstring> #include <cerrno> --- src/rel_list.cc +++ src/rel_list.cc @@ -20,6 +20,7 @@ * placed in the Public Domain. * */ +#include "config.h" #include <cstdlib> #include "cssc.h" --- src/rl-merge.cc +++ src/rl-merge.cc @@ -22,6 +22,7 @@ * */ +#include <config.h> #include "cssc.h" #include "rel_list.h" --- src/rmdel.cc +++ src/rmdel.cc @@ -25,6 +25,7 @@ * */ +#include <config.h> #include "cssc.h" #include "fileiter.h" #include "sccsfile.h" --- src/run.cc +++ src/run.cc @@ -24,6 +24,8 @@ * Routines for running programmes. * */ +#include "config.h" + #include <cstdio> #include <errno.h> --- src/sact.cc +++ src/sact.cc @@ -25,6 +25,7 @@ * */ +#include <config.h> #include "cssc.h" #include "fileiter.h" #include "pfile.h" --- src/sccs-delta.cc +++ src/sccs-delta.cc @@ -25,6 +25,7 @@ * */ +#include <config.h> #include "cssc.h" #include "sccsfile.h" #include "delta.h" --- src/sccsdate.cc +++ src/sccsdate.cc @@ -24,6 +24,7 @@ * Members of the class sccs_date. * */ +#include <config.h> #include <cstring> #include "cssc.h" --- src/sccsfile.cc +++ src/sccsfile.cc @@ -25,6 +25,7 @@ * the members in this file are used to read from the SCCS file. * */ +#include <config.h> #include <errno.h> #include "cssc.h" --- src/sccsname.cc +++ src/sccsname.cc @@ -25,6 +25,7 @@ * */ +#include <config.h> #include "cssc.h" #include "sccsname.h" #include "cssc-assert.h" --- src/seqstate.cc +++ src/seqstate.cc @@ -21,6 +21,7 @@ * */ +#include <config.h> #include "cssc.h" #include "seqstate.h" --- src/sf-add.cc +++ src/sf-add.cc @@ -26,6 +26,7 @@ * */ +#include <config.h> #include "cssc.h" #include "sccsfile.h" #include "delta.h" --- src/sf-admin.cc +++ src/sf-admin.cc @@ -26,6 +26,7 @@ * */ +#include <config.h> #include "cssc.h" #include "sccsfile.h" #include "sl-merge.h" --- src/sf-cdc.cc +++ src/sf-cdc.cc @@ -26,6 +26,7 @@ * */ +#include <config.h> #include "cssc.h" #include "sccsfile.h" #include "delta.h" --- src/sf-chkid.cc +++ src/sf-chkid.cc @@ -23,13 +23,15 @@ * */ +#include <config.h> + +#include <string.h> + #include "cssc.h" #include "sccsfile.h" #include "linebuf.h" #include "bodyio.h" -#include <string.h> - bool is_id_keyword_letter(char ch) { --- src/sf-delta.cc +++ src/sf-delta.cc @@ -25,7 +25,10 @@ * Members of sccs_file for adding a delta to the SCCS file. * */ +#include <config.h> + #include <errno.h> +#include <unistd.h> #include "cssc.h" #include "sccsfile.h" @@ -43,9 +46,6 @@ #undef JAY_DEBUG -#include <unistd.h> - - class diff_state { --- src/sf-get.cc +++ src/sf-get.cc @@ -26,6 +26,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "sccsfile.h" #include "pfile.h" --- src/sf-get2.cc +++ src/sf-get2.cc @@ -25,6 +25,10 @@ * */ +#include <config.h> + +#include <ctype.h> + #include "cssc.h" #include "sccsfile.h" #include "pfile.h" @@ -33,8 +37,6 @@ #include "delta-table.h" -#include <ctype.h> - bool sccs_file::sid_matches(const sid& requested, const sid& found, bool get_top_delta) const --- src/sf-get3.cc +++ src/sf-get3.cc @@ -25,6 +25,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "sccsfile.h" #include "seqstate.h" --- src/sf-kw.cc +++ src/sf-kw.cc @@ -21,6 +21,8 @@ * sccs_file::no_id_keywords() */ +#include <config.h> + #include "cssc.h" #include "sccsfile.h" #include "except.h" --- src/sf-prs.cc +++ src/sf-prs.cc @@ -27,6 +27,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "sccsfile.h" #include "seqstate.h" --- src/sf-prt.cc +++ src/sf-prt.cc @@ -24,6 +24,8 @@ */ +#include <config.h> + #include "cssc.h" #include "sccsfile.h" #include "seqstate.h" --- src/sf-rmdel.cc +++ src/sf-rmdel.cc @@ -26,6 +26,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "sccsfile.h" #include "delta.h" --- src/sf-val.cc +++ src/sf-val.cc @@ -22,7 +22,10 @@ * Members of class sccs_file used by "val". * */ +#include <config.h> + #include <vector> + #include "cssc.h" #include "sccsfile.h" #include "delta.h" --- src/sf-write.cc +++ src/sf-write.cc @@ -26,6 +26,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "sccsfile.h" #include "delta.h" --- src/sid.cc +++ src/sid.cc @@ -25,12 +25,14 @@ * */ +#include <config.h> + +#include <ctype.h> + #include "cssc.h" #include "sid.h" #include "ioerr.h" -#include <ctype.h> - mystring sid::as_string() const { char buf[32]; --- src/unget.cc +++ src/unget.cc @@ -25,6 +25,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "fileiter.h" #include "pfile.h" --- src/val.cc +++ src/val.cc @@ -21,6 +21,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "fileiter.h" #include "sccsfile.h" --- src/writesubst.cc +++ src/writesubst.cc @@ -22,6 +22,8 @@ * */ +#include <config.h> + #include "cssc.h" #include "sccsfile.h" #include "delta.h"