added missing dependencies to fix failing unistr/ tests
[gnulib.git] / README
1 Gnulib
2 ======
3
4 While portability across operating systems is not one of GNU's primary
5 goals, it has helped introduce many people to the GNU system, and is
6 worthwhile when it can be achieved at a low cost.  This collection helps
7 lower that cost.
8
9 Gnulib is intended to be the canonical source for most of the important
10 "portability" and/or common files for GNU projects.  These are files
11 intended to be shared at the source level; Gnulib is not a typical
12 library meant to be installed and linked against.  Thus, unlike most
13 projects, Gnulib does not normally generate a source tarball
14 distribution; instead, developers grab modules directly from the
15 source repository.
16
17 The easiest, and recommended, way to do this is to use the gnulib-tool
18 script.  Since there is no installation procedure for Gnulib,
19 gnulib-tool needs to be run directly in the directory that contains the
20 Gnulib source code.  You can do this either by specifying the absolute
21 filename of gnulib-tool, or by using a symbolic link from a
22 place inside your PATH to the gnulib-tool file of your preferred
23 Gnulib checkout.  For example:
24   $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool
25
26 The home page for Gnulib is http://www.gnu.org/software/gnulib.
27
28
29 git and CVS
30 ===========
31
32 Gnulib is available for anonymous checkout.  In any Bourne-shell the
33 following should work:
34   $ git clone git://git.sv.gnu.org/gnulib.git
35
36 For a read-write checkout you need to have a login on savannah.gnu.org and be
37 a member of the gnulib project at http://savannah.gnu.org/projects/gnulib .
38 Then, instead of the URL
39   git://git.sv.gnu.org/gnulib
40 use the URL
41   ssh://<user>@git.sv.gnu.org/srv/git/gnulib
42 where <user> is your login name on savannah.gnu.org.
43
44 git resources:
45   Overview: http://en.wikipedia.org/wiki/Git_(software)
46   Homepage: http://git.or.cz/
47   Download: http://www.kernel.org/pub/software/scm/git/
48   Tutorial: http://git.or.cz/course/
49             http://www.kernel.org/pub/software/scm/git/docs/tutorial.html
50   FAQ:      http://git.or.cz/gitwiki/GitFaq
51
52 When you use "git annotate" or "git blame" with gnulib, it's recommended that
53 you use the "-w" option, in order to ignore massive whitespace changes that
54 happened in 2009.
55
56 CVS checkouts are also supported:
57   $ cvs -d :pserver:anonymous@pserver.git.sv.gnu.org:/gnulib.git co -d gnulib HEAD
58
59 Gnulib is hosted on savannah.gnu.org.  The project page is
60 http://savannah.gnu.org/projects/gnulib.
61
62
63 Keeping Up-to-date
64 ==================
65
66 The best way to work with Gnulib is to check it out of git.
67 Subscribing to the bug-gnulib@gnu.org mailing list will help you to
68 plan when to update your local copy of Gnulib (which you use to
69 maintain your software) from git.  To synchronize, you can use "git pull",
70 or "cvs update -dP" if you are still using CVS.
71
72 Sometimes, using an updated version of Gnulib will require you to use
73 newer versions of GNU Automake or Autoconf.  You may find it helpful
74 to join the autotools-announce mailing list to be advised of such
75 changes.
76
77
78 Contributing to Gnulib
79 ======================
80 All software here is copyrighted by the Free Software Foundation - you need
81 to have filled out an assignment form for a project that uses the
82 module for that contribution to be accepted here.
83
84 If you have a piece of code that you would like to contribute, please
85 email bug-gnulib@gnu.org.  You can review the archives, subscribe, etc.,
86 via http://lists.gnu.org/mailman/listinfo/bug-gnulib.
87
88 Generally we are looking for files that fulfill at least one of the
89 following requirements:
90
91     * If your .c and .h files define functions that are broken or
92 missing on some other system, we should be able to include it.
93
94     * If your functions remove arbitrary limits from existing
95 functions (either under the same name, or as a slightly different
96 name), we should be able to include it.
97
98 If your functions define completely new but rarely used functionality,
99 you should probably consider packaging it as a separate library.
100
101
102 License
103 -------
104 Gnulib contains code both under GPL and LGPL.  Because several packages
105 that use Gnulib are GPL, the files state they are licensed under GPL.
106 However, to support LGPL projects as well, you may use some of the
107 files under LGPL.  The "License:" information in the files under
108 modules/ clarifies the real license that applies to the module source.
109
110 Keep in mind that if you submit patches to files in Gnulib, you should
111 license them under a compatible license, which means that sometimes
112 the contribution will have to be LGPL, if the original file is
113 available under LGPL via a "License: LGPL" information in the
114 projects' modules/ file.
115
116
117 Indent with spaces, not TABs
118 ----------------------------
119 We use space-only indentation in nearly all files. This includes all
120 *.h, *.c, *.y files, except for the regex module. Makefile and ChangeLog
121 files are excluded, since TAB characters are part of their format.
122
123 In order to tell your editor to produce space-only indentation, you
124 can use these instructions.
125
126   * For Emacs: Add these lines to your Emacs initialization file
127     ($HOME/.emacs or similar):
128
129       ;; In gnulib, indent with spaces everywhere (not TABs).
130       ;; Exceptions: Makefile and ChangeLog modes.
131       (add-hook 'find-file-hook '(lambda ()
132         (if (and buffer-file-name
133                  (string-match "/gnulib\\>" (buffer-file-name))
134                  (not (string-equal mode-name "Change Log"))
135                  (not (string-equal mode-name "Makefile")))
136             (setq indent-tabs-mode nil))))
137
138   * For vi (vim): Add these lines to your $HOME/.vimrc file:
139
140       " Don't use tabs for indentation. Spaces are nicer to work with.
141       set expandtab
142
143     For Makefile and ChangeLog files, compensate this by adding this to
144     your $HOME/.vim/after/indent/make.vim and
145     $HOME/.vim/after/indent/changelog.vim files:
146
147       " Use tabs for indentation, regardless of the global setting.
148       set noexpandtab
149
150   * For Eclipse: In the "Window|Preferences" dialog (or "Eclipse|Preferences"
151     dialog on MacOS),
152     1. Under "General|Editors|Text Editors", select the "Insert spaces for tabs"
153        checkbox.
154     2. Under "C/C++|Code Style", select a code style profile that has the
155        "Indentation|Tab policy" combobox set to "Spaces only", such as the
156        "GNU [built-in]" policy.
157
158 If you use the GNU indent program, pass it the option '--no-tabs'.
159
160
161 How to add a new module
162 -----------------------
163 * Add the header files and source files to lib/.
164 * If the module needs configure-time checks, write an autoconf
165   macro for it in m4/<module>.m4. See m4/README for details.
166 * Write a module description modules/<module>, based on modules/TEMPLATE.
167 * If the module contributes a section to the end-user documentation,
168   put this documentation in doc/<module>.texi and add it to the "Files"
169   section of modules/<module>.  Most modules don't do this; they have only
170   documentation for the programmer (= gnulib user).  Such documentation
171   usually goes into the lib/ source files.  It may also go into doc/;
172   but don't add it to the module description in this case.
173 * Add the module to the list in MODULES.html.sh.
174
175 You can test that a module builds correctly with:
176   $ ./gnulib-tool --create-testdir --dir=/tmp/testdir module1 ... moduleN
177   $ cd /tmp/testdir
178   $ ./configure && make
179
180 Other things:
181 * Check the license and copyright year of headers.
182 * Check that the source code follows the GNU coding standards;
183   see <http://www.gnu.org/prep/standards>.
184 * Add source files to config/srclist* if they are identical to upstream
185   and should be upgraded in gnulib whenever the upstream source changes.
186 * Include header files in source files to verify the function prototypes.
187 * Make sure a replacement function doesn't cause warnings or clashes on
188   systems that have the function.
189 * Autoconf functions can use gl_* prefix. The AC_* prefix is for
190   autoconf internal functions.
191 * Build files only if they are needed on a platform.  Look at the
192   alloca and fnmatch modules for how to achieve this.  If for some
193   reason you cannot do this, and you have a .c file that leads to an
194   empty .o file on some platforms (through some big #if around all the
195   code), then ensure that the compilation unit is not empty after
196   preprocessing.  One way to do this is to #include <stddef.h> or
197   <stdio.h> before the big #if.
198
199
200 Portability guidelines
201 ----------------------
202
203 Gnulib code is intended to be portable to a wide variety of platforms,
204 not just GNU platforms.
205
206 Many Gnulib modules exist so that applications need not worry about
207 undesirable variability in implementations.  For example, an
208 application that uses the 'malloc' module need not worry about (malloc
209 (0)) returning NULL on some Standard C platforms; and 'time_r' users
210 need not worry about localtime_r returning int (not char *) on some
211 platforms that predate POSIX 1003.1-2001.
212
213 Originally much of the Gnulib code was portable to ancient hosts like
214 4.2BSD, but it is a maintenance hassle to maintain compatibility with
215 unused hosts, so currently we assume at least a freestanding C89
216 compiler, possibly operating with a C library that predates C89.  The
217 oldest environment currently ported to is probably SunOS 4 + GCC 1.x,
218 though we haven't tested this exact combination.  SunOS 4 last shipped
219 on 1998-09-30, and Sun dropped support for it on 2003-10-01, so at
220 some point we may start assuming a C89 library as well.
221
222 Because we assume a freestanding C89 compiler, Gnulib code can include
223 <float.h>, <limits.h>, <stdarg.h>, and <stddef.h> unconditionally.  It
224 can also include hosted headers like <errno.h> that were present in
225 Unix Version 7 and are thus widely available.  Similarly, many modules
226 include <sys/types.h> even though it's not even in C99; that's OK
227 since <sys/types.h> has been around nearly forever.  <string.h> and
228 <stdlib.h> were not in Unix Version 7, so they weren't universally
229 available on ancient hosts, but they are both in SunOS 4 (the oldest
230 platform still in relatively-common use) so Gnulib assumes them now.
231
232 Even if the include files exist, they may not conform to C89.
233 However, GCC has a "fixincludes" script that attempts to fix most
234 C89-conformance problems.  So Gnulib currently assumes include files
235 largely conform to C89 or better.  People still using ancient hosts
236 should use fixincludes or fix their include files manually.
237
238 Even if the include files conform to C89, the library itself may not.
239 For example, SunOS 4's (free (NULL)) can dump core, so Gnulib code
240 must avoid freeing a null pointer, even though C89 allows it.
241 You can work around some of these problems by requiring the relevant
242 modules, e.g., the Gnulib 'free' module supplies a conforming 'free'.
243
244 The GNU coding standards allow one departure from strict C99: Gnulib
245 code can assume that standard internal types like size_t are no wider
246 than 'long'.  POSIX 1003.1-2001 and the GNU coding standards both
247 require 'int' to be at least 32 bits wide, so Gnulib code assumes this
248 as well.  Gnulib code makes the following additional assumptions:
249
250  * With one exception noted below, signed integer arithmetic is two's
251    complement, without runtime overflow checking.  This is the
252    traditional behavior, and is supported by C99 implementations that
253    conform to ISO/IEC 10967-1 (LIA-1) and that define signed integer
254    types as being modulo.
255
256    The exception is signed loop indexes.  Here, the behavior is
257    undefined if any signed expression derived from the loop index
258    overflows.  For example, the following code contains two such
259    overflows (the "i++" and the "i + 1") and therefore has undefined
260    behavior:
261
262      int i;
263      for (i = INT_MAX - 10; i <= INT_MAX; i++)
264        if (i + 1 < 0)
265          {
266            report_overflow ();
267            break;
268          }
269
270    This exception is a concession to modern optimizing compilers,
271    which can turn the above loop into code that executes the loop body
272    11 times, even though wraparound arithmetic would cause the loop to
273    iterate forever.
274
275  * There are no "holes" in integer values: all the bits of an integer
276    contribute to its value in the usual way.
277
278  * If two nonoverlapping objects have sizes S and T represented as
279    size_t values, then S + T cannot overflow.  This assumption is true
280    for all practical hosts with flat address spaces, but it is not
281    always true for hosts with segmented address spaces.
282
283  * If an existing object has size S, and if T is sufficiently small
284    (e.g., 8 KiB), then S + T cannot overflow.  Overflow in this case
285    would mean that the rest of your program fits into T bytes, which
286    can't happen in realistic flat-address-space hosts.
287
288  * Objects with all bits zero are treated as 0 or NULL.  For example,
289    memset (A, 0, sizeof A) initializes an array A of pointers to NULL.
290
291  * Adding zero to a null pointer does not change the pointer.
292    For example, 0 + (char *) NULL == (char *) NULL.
293
294 The above assumptions are not required by the C or POSIX standards but
295 hold on all practical porting targets that we're familiar with.  If
296 you have a porting target where these assumptions are not true, we'd
297 appreciate hearing of any fixes.  We need fixes that do not increase
298 runtime overhead on standard hosts and that are relatively easy to
299 maintain.
300
301 With the above caveats, Gnulib code should port without problem to new
302 hosts, e.g., hosts conforming to C99 or to recent POSIX standards.
303 Hence Gnulib code should avoid using constructs (e.g., undeclared
304 functions return 'int') that do not conform to C99.
305
306
307 High Quality
308 ============
309
310 We develop and maintain a testsuite for Gnulib.  The goal is to have a
311 100% firm interface so that maintainers can feel free to update to the
312 code in git at *any* time and know that their application will not
313 break.  This means that before any change can be committed to the
314 repository, a test suite program must be produced that exposes the bug
315 for regression testing.  All experimental work should be done on
316 branches to help promote this.
317
318
319 -----
320 Copyright 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
321 Foundation, Inc.
322
323 This program is free software: you can redistribute it and/or modify
324 it under the terms of the GNU General Public License as published by
325 the Free Software Foundation; either version 3 of the License, or
326 (at your option) any later version.
327
328 This program is distributed in the hope that it will be useful,
329 but WITHOUT ANY WARRANTY; without even the implied warranty of
330 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
331 GNU General Public License for more details.
332
333 You should have received a copy of the GNU General Public License
334 along with this program.  If not, see <http://www.gnu.org/licenses/>.