summaryrefslogtreecommitdiff
path: root/doc/STYLE
diff options
context:
space:
mode:
Diffstat (limited to 'doc/STYLE')
-rw-r--r--doc/STYLE100
1 files changed, 0 insertions, 100 deletions
diff --git a/doc/STYLE b/doc/STYLE
deleted file mode 100644
index 6b106446..00000000
--- a/doc/STYLE
+++ /dev/null
@@ -1,100 +0,0 @@
-GNU m4 STYLE - The way this code should look. -*- outline -*-
-
-Before all else this code follows the GNU coding standards and
-indentation style described in standards.info. Additionally the
-following restrictions on coding style apply:
-
-* SPACING
-
- + Avoid TABs in .h and .c files. See HACKING for details.
-
-* C STANDARD
-
- + All of this code is ANSI-C, GNU C extensions are conditional so that
- the code will compile cleanly on non GLIBC/GCC systems.
-
-* SYMBOL NAMES
-
- + All non-static symbols have a prefix either `M4' or `m4'.
-
- + All exported symbols which are part of the library api have the
- prefix `m4_'.
-
- + Symbols which are exported from the library (for efficiency perhaps)
- but are not part of the supported library api have the prefix
- `m4__',
-
- + Function names should be verb phrases; m4_module_get_field.
-
- + Functions which exist to be used as callbacks from API functions, and
- hence which likely have strange looking parameters are named with the
- suffix `_CB', to make it obvious why they look a little odd.
-
- + Macros which implement fast versions of functions share the
- same name as the function they replace, and may not evaluate
- parameters more than once.
-
- + Otherwise macros are in uppercase, prefixed `M4' if they are visible
- to the user after installation, to help the user know when to be
- careful about multiple evaluations of parameters.
-
- + Function names should contain the name of the module they belong to,
- usually immediately after the namespace prefix: m4_module_load.
-
- + Variables should not be exported (not true, but I'm working on it),
- but accessor functions used instead. Note the `get'/`set' part of
- the symbol name comes before the module part: m4_get_module_macros.
-
- + Structures come with accessor macros named <struct name>_<field
- name> (in upper case), to make refactoring of nested structures much
- easier: SYMBOL_FLAGS.
-
- + Structures are typedeffed separately, and the structure itself
- generally not exported unless in the `m4__' namespace to support
- fast accessor macros.
-
- + An opaque abstract data type (ADT) can have public and private fields:
- By convention public fields will have exported accessor functions (and
- maybe also fast macro versions of the same), and private fields will
- not export accessors at all. However, there should be non-exported
- (or at least in the `m4__' namespace) accessor functions for even the
- private fields of an ADT to aid possible later refactoring.
-
-* ARCHITECTURE
-
- + There are four groups of sources in subdirectories: `gnu' contains
- the files maintained outside of m4, as a portability layer when building
- the souce for non-glibc2 machines; `m4' contains the functionality for
- libm4 and enables the user to write modules; `modules' implements the
- builtin macros for the m4 binary; `src' is a small wrapper program
- which links libm4 and loads initial modules to implement the m4 engine.
-
- + The headers in gnu need to be managed carefully: gnulib headers
- can be included by other files in the same directory using `#include
- "file.h"', and from files in other directories with `#include
- <m4/file.h>'. The include path to invocations of the compiler from
- various Makefile.am are set to prevent the possibility of picking up
- an m4/file.h when the system file.h (e.g stdbool.h) is present. This,
- in turn means the replacement headers can live in gnulib/m4 without
- suffering a renaming scheme at configure time. Don't break with the
- `#include' convention, or the compile will go wrong in hard to debug
- ways on some platforms.
-
- + Low coupling. Classes (and in C, by this I mean files of functions)
- should not rely on a web of other classes to be useful, they should
- communicate with as few other classes as possible.
-
- + High cohesion. The api and caller boundaries should be well defined
- and adhered to; a class should do one thing only.
-
-========================================================================
-
-Copyright (C) 2003, 2006, 2010, 2013-2014, 2017 Free Software
-Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
-Texts. A copy of the license is included in the ``GNU Free
-Documentation License'' file as part of this distribution.