md5, sha1, sha256, sha512: add gl_SET_CRYPTO_CHECK_DEFAULT
[gnulib.git] / doc / gnulib-readme.texi
1 @c Gnulib README
2
3 @c Copyright 2001, 2003-2013 Free Software Foundation, Inc.
4
5 @c Permission is granted to copy, distribute and/or modify this document
6 @c under the terms of the GNU Free Documentation License, Version 1.3
7 @c or any later version published by the Free Software Foundation;
8 @c with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
9 @c Texts.  A copy of the license is included in the ``GNU Free
10 @c Documentation License'' file as part of this distribution.
11
12 @menu
13 * Gnulib Basics::
14 * Git Checkout::
15 * Keeping Up-to-date::
16 * Contributing to Gnulib::
17 * High Quality::
18 @end menu
19
20 @node Gnulib Basics
21 @section Gnulib Basics
22
23 While portability across operating systems is not one of GNU's primary
24 goals, it has helped introduce many people to the GNU system, and is
25 worthwhile when it can be achieved at a low cost.  This collection helps
26 lower that cost.
27
28 Gnulib is intended to be the canonical source for most of the important
29 ``portability'' and/or common files for GNU projects.  These are files
30 intended to be shared at the source level; Gnulib is not a typical
31 library meant to be installed and linked against.  Thus, unlike most
32 projects, Gnulib does not normally generate a source tarball
33 distribution; instead, developers grab modules directly from the
34 source repository.
35
36 The easiest, and recommended, way to do this is to use the
37 @command{gnulib-tool} script.  Since there is no installation
38 procedure for Gnulib, @command{gnulib-tool} needs to be run directly
39 in the directory that contains the Gnulib source code.  You can do
40 this either by specifying the absolute filename of
41 @command{gnulib-tool}, or by using a symbolic link from a place inside
42 your @env{PATH} to the @command{gnulib-tool} file of your preferred
43 Gnulib checkout.  For example:
44
45 @example
46 $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool
47 @end example
48
49 @node Git Checkout
50 @section Git Checkout
51
52 Gnulib is available for anonymous checkout.  In any Bourne-shell the
53 following should work:
54
55 @example
56 $ git clone git://git.sv.gnu.org/gnulib.git
57 @end example
58
59 For a read-write checkout you need to have a login on
60 @samp{savannah.gnu.org} and be a member of the Gnulib project at
61 @url{http://savannah.gnu.org/projects/gnulib}.  Then, instead of the
62 URL @url{git://git.sv.gnu.org/gnulib}, use the URL
63 @samp{ssh://@var{user}@@git.sv.gnu.org/srv/git/gnulib} where
64 @var{user} is your login name on savannah.gnu.org.
65
66 git resources:
67
68 @table @asis
69 @item Overview:
70 @url{http://en.wikipedia.org/wiki/Git_(software)}
71 @item Homepage:
72 @url{http://git-scm.com/}
73 @end table
74
75 When you use @code{git annotate} or @code{git blame} with Gnulib, it's
76 recommended that you use the @option{-w} option, in order to ignore
77 massive whitespace changes that happened in 2009.
78
79 @node Keeping Up-to-date
80 @section Keeping Up-to-date
81
82 The best way to work with Gnulib is to check it out of git.
83 To synchronize, you can use @code{git pull}.
84
85 Subscribing to the @email{bug-gnulib@@gnu.org} mailing list will help
86 you to plan when to update your local copy of Gnulib (which you use to
87 maintain your software) from git.  You can review the archives,
88 subscribe, etc., via
89 @url{https://lists.gnu.org/mailman/listinfo/bug-gnulib}.
90
91 Sometimes, using an updated version of Gnulib will require you to use
92 newer versions of GNU Automake or Autoconf.  You may find it helpful
93 to join the autotools-announce mailing list to be advised of such
94 changes.
95
96 @node Contributing to Gnulib
97 @section Contributing to Gnulib
98
99 All software here is copyrighted by the Free Software Foundation---you need
100 to have filled out an assignment form for a project that uses the
101 module for that contribution to be accepted here.
102
103 If you have a piece of code that you would like to contribute, please
104 email @email{bug-gnulib@@gnu.org}.
105
106 Generally we are looking for files that fulfill at least one of the
107 following requirements:
108
109 @itemize
110 @item
111 If your @file{.c} and @file{.h} files define functions that are broken or
112 missing on some other system, we should be able to include it.
113
114 @item
115 If your functions remove arbitrary limits from existing
116 functions (either under the same name, or as a slightly different
117 name), we should be able to include it.
118 @end itemize
119
120 If your functions define completely new but rarely used functionality,
121 you should probably consider packaging it as a separate library.
122
123 @menu
124 * Gnulib licensing::
125 * Indent with spaces not TABs::
126 * How to add a new module::
127 * Portability guidelines::
128 @end menu
129
130 @node Gnulib licensing
131 @subsection Gnulib licensing
132
133 Gnulib contains code both under GPL and LGPL@.  Because several packages
134 that use Gnulib are GPL, the files state they are licensed under GPL@.
135 However, to support LGPL projects as well, you may use some of the
136 files under LGPL@.  The ``License:'' information in the files under
137 modules/ clarifies the real license that applies to the module source.
138
139 Keep in mind that if you submit patches to files in Gnulib, you should
140 license them under a compatible license, which means that sometimes
141 the contribution will have to be LGPL, if the original file is
142 available under LGPL via a ``License: LGPL'' information in the
143 projects' modules/ file.
144
145 @node Indent with spaces not TABs
146 @subsection Indent with spaces not TABs
147
148 We use space-only indentation in nearly all files. This includes all
149 @file{*.h}, @file{*.c}, @file{*.y} files, except for the @code{regex}
150 module. Makefile and ChangeLog files are excluded, since TAB
151 characters are part of their format.
152
153 In order to tell your editor to produce space-only indentation, you
154 can use these instructions.
155
156 @itemize
157 @item
158 For Emacs: Add these lines to your Emacs initialization file
159 (@file{$HOME/.emacs} or similar):
160
161 @example
162 ;; In Gnulib, indent with spaces everywhere (not TABs).
163 ;; Exceptions: Makefile and ChangeLog modes.
164 (add-hook 'find-file-hook '(lambda ()
165   (if (and buffer-file-name
166            (string-match "/gnulib\\>" (buffer-file-name))
167            (not (string-equal mode-name "Change Log"))
168            (not (string-equal mode-name "Makefile")))
169       (setq indent-tabs-mode nil))))
170 @end example
171
172 @item
173 For vi (vim): Add these lines to your @file{$HOME/.vimrc} file:
174
175 @example
176 " Don't use tabs for indentation. Spaces are nicer to work with.
177 set expandtab
178 @end example
179
180 For Makefile and ChangeLog files, compensate for this by adding this
181 to your @file{$HOME/.vim/after/indent/make.vim} file, and similarly
182 for your @file{$HOME/.vim/after/indent/changelog.vim} file:
183
184 @example
185 " Use tabs for indentation, regardless of the global setting.
186 set noexpandtab
187 @end example
188
189 @item
190 For Eclipse: In the ``Window|Preferences'' dialog (or ``Eclipse|Preferences''
191 dialog on Mac OS),
192
193 @enumerate
194 @item
195 Under ``General|Editors|Text Editors'', select the ``Insert spaces for tabs''
196 checkbox.
197
198 @item
199 Under ``C/C++|Code Style'', select a code style profile that has the
200 ``Indentation|Tab policy'' combobox set to ``Spaces only'', such as the
201 ``GNU [built-in]'' policy.
202 @end enumerate
203
204 If you use the GNU indent program, pass it the option @option{--no-tabs}.
205 @end itemize
206
207 @node How to add a new module
208 @subsection How to add a new module
209
210 @itemize
211 @item
212 Add the header files and source files to @file{lib/}.
213
214 @item
215 If the module needs configure-time checks, write an Autoconf
216 macro for it in @file{m4/@var{module}.m4}. See @file{m4/README} for details.
217
218 @item
219 Write a module description @file{modules/@var{module}}, based on
220 @file{modules/TEMPLATE}.
221
222 @item
223 If the module contributes a section to the end-user documentation,
224 put this documentation in @file{doc/@var{module}.texi} and add it to the ``Files''
225 section of @file{modules/@var{module}}.  Most modules don't do this; they have only
226 documentation for the programmer (= Gnulib user).  Such documentation
227 usually goes into the @file{lib/} source files.  It may also go into @file{doc/};
228 but don't add it to the module description in this case.
229
230 @item
231 Add the module to the list in @file{MODULES.html.sh}.
232 @end itemize
233
234 @noindent
235 You can test that a module builds correctly with:
236
237 @example
238 $ ./gnulib-tool --create-testdir --dir=/tmp/testdir module1 ... moduleN
239 $ cd /tmp/testdir
240 $ ./configure && make
241 @end example
242
243 @noindent
244 Other things:
245
246 @itemize
247 @item
248 Check the license and copyright year of headers.
249
250 @item
251 Check that the source code follows the GNU coding standards;
252 see @url{http://www.gnu.org/prep/standards}.
253
254 @item
255 Add source files to @file{config/srclist*} if they are identical to upstream
256 and should be upgraded in Gnulib whenever the upstream source changes.
257
258 @item
259 Include header files in source files to verify the function prototypes.
260
261 @item
262 Make sure a replacement function doesn't cause warnings or clashes on
263 systems that have the function.
264
265 @item
266 Autoconf functions can use @samp{gl_*} prefix. The @samp{AC_*} prefix is for
267 autoconf internal functions.
268
269 @item
270 Build files only if they are needed on a platform.  Look at the
271 @code{alloca} and @code{fnmatch} modules for how to achieve this.  If
272 for some reason you cannot do this, and you have a @file{.c} file that
273 leads to an empty @file{.o} file on some platforms (through some big
274 @code{#if} around all the code), then ensure that the compilation unit
275 is not empty after preprocessing.  One way to do this is to
276 @code{#include <stddef.h>} or @code{<stdio.h>} before the big
277 @code{#if}.
278 @end itemize
279
280 @node Portability guidelines
281 @subsection Portability guidelines
282
283 Gnulib code is intended to be portable to a wide variety of platforms,
284 not just GNU platforms.  See the documentation section ``Target Platforms''
285 for details.
286
287 Many Gnulib modules exist so that applications need not worry about
288 undesirable variability in implementations.  For example, an
289 application that uses the @code{malloc} module need not worry about
290 @code{malloc@ (0)} returning @code{NULL} on some Standard C
291 platforms; and @code{time_r} users need not worry about
292 @code{localtime_r} returning @code{int} (not @code{char@ *}) on some
293 platforms that predate POSIX 1003.1-2001.
294
295 Currently we assume at least a freestanding C89 compiler, possibly
296 operating with a C library that predates C89.  The oldest environments
297 currently ported to are probably HP-UX 10.20 and IRIX 5.3, though we
298 are not testing these platforms very often.
299
300 Because we assume a freestanding C89 compiler, Gnulib code can include
301 @code{<float.h>}, @code{<limits.h>}, @code{<stdarg.h>}, and
302 @code{<stddef.h>} unconditionally.  It can also assume the existence
303 of @code{<ctype.h>}, @code{<errno.h>}, @code{<fcntl.h>},
304 @code{<locale.h>}, @code{<signal.h>}, @code{<stdio.h>},
305 @code{<stdlib.h>}, @code{<string.h>}, and @code{<time.h>}.  Similarly,
306 many modules include @code{<sys/types.h>} even though it's not even in
307 C99; that's OK since @code{<sys/types.h>} has been around nearly
308 forever.
309
310 Even if the include files exist, they may not conform to C89.
311 However, GCC has a @command{fixincludes} script that attempts to fix most
312 C89-conformance problems.  So Gnulib currently assumes include files
313 largely conform to C89 or better.  People still using ancient hosts
314 should use fixincludes or fix their include files manually.
315
316 Even if the include files conform to C89, the library itself may not.
317 For example, @code{strtod} and @code{mktime} have some bugs on some platforms.
318 You can work around some of these problems by requiring the relevant
319 modules, e.g., the Gnulib @code{mktime} module supplies a working and
320 conforming @code{mktime}.
321
322 The GNU coding standards allow one departure from strict C99: Gnulib
323 code can assume that standard internal types like @code{size_t} are no wider
324 than @code{long}.  POSIX 1003.1-2001 and the GNU coding standards both
325 require @code{int} to be at least 32 bits wide, so Gnulib code assumes this
326 as well.  Gnulib code makes the following additional assumptions:
327
328 @itemize
329 @item
330 Signed integer arithmetic is two's complement.
331
332 Previously, Gnulib code sometimes assumed that signed integer
333 arithmetic wraps around, but modern compiler optimizations
334 sometimes do not guarantee this, and Gnulib code with this
335 assumption is now considered to be questionable.
336 @xref{Integer Properties}.
337
338 Some Gnulib modules contain explicit support for the other signed
339 integer representations allowed by C99 (ones' complement and signed
340 magnitude), but these modules are the exception rather than the rule.
341 All practical Gnulib targets use two's complement.
342
343 @item
344 There are no ``holes'' in integer values: all the bits of an integer
345 contribute to its value in the usual way.
346
347 @item
348 Addresses and sizes behave as if objects reside in a flat address space.
349 In particular:
350
351 @itemize
352 @item
353 If two nonoverlapping objects have sizes @var{S} and @var{T} represented as
354 @code{size_t} values, then @code{@var{S} + @var{T}} cannot overflow.
355
356 @item
357 A pointer @var{P} points within an object @var{O} if and only if
358 @code{(char *) &@var{O} <= (char *) @var{P} && (char *) @var{P} <
359 (char *) (&@var{O} + 1)}.
360
361 @item
362 If an existing object has size @var{S}, and if @var{T} is sufficiently
363 small (e.g., 8 KiB), then @code{@var{S} + @var{T}} cannot overflow.
364 Overflow in this case would mean that the rest of your program fits
365 into @var{T} bytes, which can't happen in realistic flat-address-space
366 hosts.
367
368 @item
369 Objects with all bits zero are treated as 0 or NULL@.  For example,
370 @code{memset@ (A, 0, sizeof@ A)} initializes an array @code{A} of
371 pointers to NULL.
372
373 @item
374 Adding zero to a null pointer does not change the pointer.
375 For example, @code{0 + (char *) NULL == (char *) NULL}.
376 @end itemize
377 @end itemize
378
379 The above assumptions are not required by the C or POSIX standards but
380 hold on all practical porting targets that we're familiar with.  If
381 you have a porting target where these assumptions are not true, we'd
382 appreciate hearing of any fixes.  We need fixes that do not increase
383 runtime overhead on standard hosts and that are relatively easy to
384 maintain.
385
386 With the above caveats, Gnulib code should port without problem to new
387 hosts, e.g., hosts conforming to C99 or to recent POSIX standards.
388 Hence Gnulib code should avoid using constructs (e.g., undeclared
389 functions return @code{int}) that do not conform to C99.
390
391 @node High Quality
392 @section High Quality
393
394 We develop and maintain a testsuite for Gnulib.  The goal is to have a
395 100% firm interface so that maintainers can feel free to update to the
396 code in git at @emph{any} time and know that their application will not
397 break.  This means that before any change can be committed to the
398 repository, a test suite program must be produced that exposes the bug
399 for regression testing.  All experimental work should be done on
400 branches to help promote this.