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
+
#include
#include "cssc.h"
--- src/bodyio.cc
+++ src/bodyio.cc
@@ -23,6 +23,12 @@
*
*/
+#include
+
+#include
+#include
+
+#include "cssc.h"
#include "bodyio.h"
#include "quit.h"
#include "cssc-assert.h"
@@ -32,9 +38,6 @@
#include "ioerr.h"
#include "file.h"
-#include
-#include
-
/* 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
+
#include "cssc.h"
--- src/cdc.cc
+++ src/cdc.cc
@@ -23,6 +23,8 @@
*
*/
+#include
+
#include "cssc.h"
#include "my-getopt.h"
#include "fileiter.h"
--- src/delta-iterator.cc
+++ src/delta-iterator.cc
@@ -25,6 +25,9 @@
*
*/
+#include
+
+#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
+
+#include "cssc.h"
#include "delta-table.h"
#include "delta-iterator.h"
--- src/delta.cc
+++ src/delta.cc
@@ -24,6 +24,10 @@
*
*/
+
+#include
+
+#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
+
+#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
+
+#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
+#include
#include
#include
-#include
-#include
-
-#include "cssc.h"
-
#include
+#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
+#include /* TODO: consider using sigaction(). */
+#include "cssc-assert.h"
#include "cssc.h"
-#include "version.h"
#include "quit.h"
-
-#include /* 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
#include
#include /* 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
+#include
+#include
+#include
+#include
+#include
-#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
-#include
-#include
#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
#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
+
#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
#include "cssc.h"
--- src/l-split.cc
+++ src/l-split.cc
@@ -24,6 +24,8 @@
*
*/
+#include
+
#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
#include
#include
--- src/pf-add.cc
+++ src/pf-add.cc
@@ -23,6 +23,8 @@
*
*/
+#include
+
#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
#include "cssc.h"
--- src/pfile.cc
+++ src/pfile.cc
@@ -23,6 +23,8 @@
* Common members of the class sccs_pfile.
*
*/
+#include "config.h"
+
#include
#include "cssc.h"
--- src/prompt.cc
+++ src/prompt.cc
@@ -24,6 +24,8 @@
*
*/
+#include "config.h"
+
#include
#include
#include
--- src/prs.cc
+++ src/prs.cc
@@ -24,6 +24,7 @@
*
*/
+#include
#include "cssc.h"
#include "fileiter.h"
#include "sccsfile.h"
--- src/prt.cc
+++ src/prt.cc
@@ -26,6 +26,7 @@
*/
+#include
#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
#include
#include
--- src/rel_list.cc
+++ src/rel_list.cc
@@ -20,6 +20,7 @@
* placed in the Public Domain.
*
*/
+#include "config.h"
#include
#include "cssc.h"
--- src/rl-merge.cc
+++ src/rl-merge.cc
@@ -22,6 +22,7 @@
*
*/
+#include
#include "cssc.h"
#include "rel_list.h"
--- src/rmdel.cc
+++ src/rmdel.cc
@@ -25,6 +25,7 @@
*
*/
+#include
#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
#include
--- src/sact.cc
+++ src/sact.cc
@@ -25,6 +25,7 @@
*
*/
+#include
#include "cssc.h"
#include "fileiter.h"
#include "pfile.h"
--- src/sccs-delta.cc
+++ src/sccs-delta.cc
@@ -25,6 +25,7 @@
*
*/
+#include
#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
#include
#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
#include
#include "cssc.h"
--- src/sccsname.cc
+++ src/sccsname.cc
@@ -25,6 +25,7 @@
*
*/
+#include
#include "cssc.h"
#include "sccsname.h"
#include "cssc-assert.h"
--- src/seqstate.cc
+++ src/seqstate.cc
@@ -21,6 +21,7 @@
*
*/
+#include
#include "cssc.h"
#include "seqstate.h"
--- src/sf-add.cc
+++ src/sf-add.cc
@@ -26,6 +26,7 @@
*
*/
+#include
#include "cssc.h"
#include "sccsfile.h"
#include "delta.h"
--- src/sf-admin.cc
+++ src/sf-admin.cc
@@ -26,6 +26,7 @@
*
*/
+#include
#include "cssc.h"
#include "sccsfile.h"
#include "sl-merge.h"
--- src/sf-cdc.cc
+++ src/sf-cdc.cc
@@ -26,6 +26,7 @@
*
*/
+#include
#include "cssc.h"
#include "sccsfile.h"
#include "delta.h"
--- src/sf-chkid.cc
+++ src/sf-chkid.cc
@@ -23,13 +23,15 @@
*
*/
+#include
+
+#include
+
#include "cssc.h"
#include "sccsfile.h"
#include "linebuf.h"
#include "bodyio.h"
-#include
-
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
+
#include
+#include
#include "cssc.h"
#include "sccsfile.h"
@@ -43,9 +46,6 @@
#undef JAY_DEBUG
-#include
-
-
class diff_state
{
--- src/sf-get.cc
+++ src/sf-get.cc
@@ -26,6 +26,8 @@
*
*/
+#include
+
#include "cssc.h"
#include "sccsfile.h"
#include "pfile.h"
--- src/sf-get2.cc
+++ src/sf-get2.cc
@@ -25,6 +25,10 @@
*
*/
+#include
+
+#include
+
#include "cssc.h"
#include "sccsfile.h"
#include "pfile.h"
@@ -33,8 +37,6 @@
#include "delta-table.h"
-#include
-
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
+
#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
+
#include "cssc.h"
#include "sccsfile.h"
#include "except.h"
--- src/sf-prs.cc
+++ src/sf-prs.cc
@@ -27,6 +27,8 @@
*
*/
+#include
+
#include "cssc.h"
#include "sccsfile.h"
#include "seqstate.h"
--- src/sf-prt.cc
+++ src/sf-prt.cc
@@ -24,6 +24,8 @@
*/
+#include
+
#include "cssc.h"
#include "sccsfile.h"
#include "seqstate.h"
--- src/sf-rmdel.cc
+++ src/sf-rmdel.cc
@@ -26,6 +26,8 @@
*
*/
+#include
+
#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
+
#include
+
#include "cssc.h"
#include "sccsfile.h"
#include "delta.h"
--- src/sf-write.cc
+++ src/sf-write.cc
@@ -26,6 +26,8 @@
*
*/
+#include
+
#include "cssc.h"
#include "sccsfile.h"
#include "delta.h"
--- src/sid.cc
+++ src/sid.cc
@@ -25,12 +25,14 @@
*
*/
+#include
+
+#include
+
#include "cssc.h"
#include "sid.h"
#include "ioerr.h"
-#include
-
mystring sid::as_string() const
{
char buf[32];
--- src/unget.cc
+++ src/unget.cc
@@ -25,6 +25,8 @@
*
*/
+#include
+
#include "cssc.h"
#include "fileiter.h"
#include "pfile.h"
--- src/val.cc
+++ src/val.cc
@@ -21,6 +21,8 @@
*
*/
+#include
+
#include "cssc.h"
#include "fileiter.h"
#include "sccsfile.h"
--- src/writesubst.cc
+++ src/writesubst.cc
@@ -22,6 +22,8 @@
*
*/
+#include
+
#include "cssc.h"
#include "sccsfile.h"
#include "delta.h"