update from main archive 960807
[kopensolaris-gnu/glibc.git] / INSTALL
1 Library Maintenance
2 *******************
3
4 How to Install the GNU C Library
5 ================================
6
7    Installation of the GNU C library is relatively simple, but usually
8 requires several GNU tools to be installed already.
9
10    To configure the GNU C library for your system, run the shell script
11 `configure' with `sh'.  Use an argument which is the conventional GNU
12 name for your system configuration--for example, `sparc-sun-sunos4.1',
13 for a Sun 4 running SunOS 4.1.  *Note Installation:
14 (gcc.info)Installation, for a full description of standard GNU
15 configuration names.  If you omit the configuration name, `configure'
16 will try to guess one for you by inspecting the system it is running
17 on.  It may or may not be able to come up with a guess, and the its
18 guess might be wrong.  `configure' will tell you the canonical name of
19 the chosen configuration before proceeding.
20
21    Here are some options that you should specify (if appropriate) when
22 you run `configure':
23
24 `--with-gnu-ld'
25      Use this option if you plan to use GNU `ld' to link programs with
26      the GNU C Library.  (We strongly recommend that you do.)  This
27      option enables use of features that exist only in GNU `ld'; so if
28      you configure for GNU `ld' you must use GNU `ld' *every time* you
29      link with the GNU C Library, and when building it.
30
31 `--with-gnu-as'
32      Use this option if you plan to use the GNU assembler, `gas', when
33      building the GNU C Library.  On some systems, the library may not
34      build properly if you do *not* use `gas'.
35
36 `--with-gnu-binutils'
37      This option implies both `--with-gnu-ld' and `--with-gnu-as'.  On
38      systems where GNU tools are the system tools, there is no need to
39      specify this option.  These include GNU, GNU/Linux, and free BSD
40      systems.
41
42 `--without-fp'
43 `--nfp'
44      Use this option if your computer lacks hardware floating-point
45      support.
46
47 `--prefix=DIRECTORY'
48      Install machine-independent data files in subdirectories of
49      `DIRECTORY'.  (You can also set this in `configparms'; see below.)
50
51 `--exec-prefix=DIRECTORY'
52      Install the library and other machine-dependent files in
53      subdirectories of `DIRECTORY'.  (You can also set this in
54      `configparms'; see below.)
55
56 `--enable-shared'
57 `--disable-shared'
58      Enable or disable building of an ELF shared library on systems that
59      support it.  The default is to build the shared library on systems
60      using ELF when the GNU `binutils' are available.
61
62 `--enable-profile'
63 `--disable-profile'
64      Enable or disable building of the profiled C library, `-lc_p'.  The
65      default is to build the profiled library.  You may wish to disable
66      it if you don't plan to do profiling, because it doubles the build
67      time of compiling just the unprofiled static library.
68
69 `--enable-omitfp'
70      Enable building a highly-optimized but possibly undebuggable
71      static C library.  This causes the normal static and shared (if
72      enabled) C libraries to be compiled with maximal optimization,
73      including the `-fomit-frame-pointer' switch that makes debugging
74      impossible on many machines, and without debugging information
75      (which makes the binaries substantially smaller).  An additional
76      static library is compiled with no optimization and full debugging
77      information, and installed as `-lc_g'.
78
79    The simplest way to run `configure' is to do it in the directory
80 that contains the library sources.  This prepares to build the library
81 in that very directory.
82
83    You can prepare to build the library in some other directory by going
84 to that other directory to run `configure'.  In order to run configure,
85 you will have to specify a directory for it, like this:
86
87      mkdir sun4
88      cd sun4
89      ../configure sparc-sun-sunos4.1
90
91 `configure' looks for the sources in whatever directory you specified
92 for finding `configure' itself.  It does not matter where in the file
93 system the source and build directories are--as long as you specify the
94 source directory when you run `configure', you will get the proper
95 results.
96
97    This feature lets you keep sources and binaries in different
98 directories, and that makes it easy to build the library for several
99 different machines from the same set of sources.  Simply create a build
100 directory for each target machine, and run `configure' in that
101 directory specifying the target machine's configuration name.
102
103    The library has a number of special-purpose configuration parameters.
104 These are defined in the file `Makeconfig'; see the comments in that
105 file for the details.
106
107    But don't edit the file `Makeconfig' yourself--instead, create a
108 file `configparms' in the directory where you are building the library,
109 and define in that file the parameters you want to specify.
110 `configparms' should *not* be an edited copy of `Makeconfig'; specify
111 only the parameters that you want to override.  To see how to set these
112 parameters, find the section of `Makeconfig' that says "These are the
113 configuration variables." Then for each parameter that you want to
114 change, copy the definition from `Makeconfig' to your new `configparms'
115 file, and change the value as appropriate for your system.
116
117    It is easy to configure the GNU C library for cross-compilation by
118 setting a few variables in `configparms'.  Set `CC' to the
119 cross-compiler for the target you configured the library for; it is
120 important to use this same `CC' value when running `configure', like
121 this: `CC=TARGET-gcc configure TARGET'.  Set `BUILD_CC' to the compiler
122 to use for for programs run on the build system as part of compiling
123 the library.  You may need to set `AR' and `RANLIB' to cross-compiling
124 versions of `ar' and `ranlib' if the native tools are not configured to
125 work with object files for the target you configured for.
126
127    Some of the machine-dependent code for some machines uses extensions
128 in the GNU C compiler, so you may need to compile the library with GCC.
129 (In fact, all of the existing complete ports require GCC.)
130
131    To build the library and related programs, type `make'.  This will
132 produce a lot of output, some of which may look like errors from `make'
133 (but isn't).  Look for error messages from `make' containing `***'.
134 Those indicate that something is really wrong.
135
136    To build and run some test programs which exercise some of the
137 library facilities, type `make check'.  This will produce several files
138 with names like `PROGRAM.out'.
139
140    To format the `GNU C Library Reference Manual' for printing, type
141 `make dvi'.
142
143    To install the library and its header files, and the Info files of
144 the manual, type `make install'.  This will build things if necessary,
145 before installing them.
146
147 Recommended Tools to Install the GNU C Library
148 ----------------------------------------------
149
150    We recommend installing the following GNU tools before attempting to
151 build the GNU C library:
152
153    * `make' 3.75
154
155      You need the latest version of GNU `make'.  Modifying the GNU C
156      Library to work with other `make' programs would be so hard that we
157      recommend you port GNU `make' instead.  *Really.* We recommend
158      version GNU `make' version 3.75 or later.
159
160    * GCC 2.7.2
161
162      On most platforms, the GNU C library can only be compiled with the
163      GNU C compiler.  We recommend GCC version 2.7.2 or later; earlier
164      versions may have problems.
165
166    * `binutils' 2.6
167
168      Using the GNU `binutils' (assembler, linker, and related tools) is
169      preferable when possible, and they are required to build an ELF
170      shared C library.  We recommend `binutils' version 2.6 or later;
171      earlier versions are known to have problems.
172
173 Supported Configurations
174 ------------------------
175
176    The GNU C Library currently supports configurations that match the
177 following patterns:
178
179      alpha-dec-osf1
180      alpha-ANYTHING-linux
181      alpha-ANYTHING-linuxecoff
182      iX86-ANYTHING-bsd4.3
183      iX86-ANYTHING-gnu
184      iX86-ANYTHING-isc2.2
185      iX86-ANYTHING-isc3.N
186      iX86-ANYTHING-linux
187      iX86-ANYTHING-sco3.2
188      iX86-ANYTHING-sco3.2v4
189      iX86-ANYTHING-sysv
190      iX86-ANYTHING-sysv4
191      iX86-force_cpu386-none
192      iX86-sequent-bsd
193      i960-nindy960-none
194      m68k-hp-bsd4.3
195      m68k-mvme135-none
196      m68k-mvme136-none
197      m68k-sony-newsos3
198      m68k-sony-newsos4
199      m68k-sun-sunos4.N
200      mips-dec-ultrix4.N
201      mips-sgi-irix4.N
202      sparc-sun-solaris2.N
203      sparc-sun-sunos4.N
204
205    Each case of `iX86' can be `i386', `i486', `i586', or `i686'..  All
206 of those configurations produce a library that can run on any of these
207 processors.  The library will be optimized for the specified processor,
208 but will not use instructions not available on all of them.
209
210    While no other configurations are supported, there are handy aliases
211 for these few.  (These aliases work in other GNU software as well.)
212
213      decstation
214      hp320-bsd4.3 hp300bsd
215      i486-gnu
216      i586-linux
217      i386-sco
218      i386-sco3.2v4
219      i386-sequent-dynix
220      i386-svr4
221      news
222      sun3-sunos4.N sun3
223      sun4-solaris2.N sun4-sunos5.N
224      sun4-sunos4.N sun4
225
226 Reporting Bugs
227 ==============
228
229    There are probably bugs in the GNU C library.  There are certainly
230 errors and omissions in this manual.  If you report them, they will get
231 fixed.  If you don't, no one will ever know about them and they will
232 remain unfixed for all eternity, if not longer.
233
234    To report a bug, first you must find it.  Hopefully, this will be the
235 hard part.  Once you've found a bug, make sure it's really a bug.  A
236 good way to do this is to see if the GNU C library behaves the same way
237 some other C library does.  If so, probably you are wrong and the
238 libraries are right (but not necessarily).  If not, one of the libraries
239 is probably wrong.
240
241    Once you're sure you've found a bug, try to narrow it down to the
242 smallest test case that reproduces the problem.  In the case of a C
243 library, you really only need to narrow it down to one library function
244 call, if possible.  This should not be too difficult.
245
246    The final step when you have a simple test case is to report the bug.
247 When reporting a bug, send your test case, the results you got, the
248 results you expected, what you think the problem might be (if you've
249 thought of anything), your system type, and the version of the GNU C
250 library which you are using.  Also include the files `config.status'
251 and `config.make' which are created by running `configure'; they will
252 be in whatever directory was current when you ran `configure'.
253
254    If you think you have found some way in which the GNU C library does
255 not conform to the ANSI and POSIX standards (*note Standards and
256 Portability::.), that is definitely a bug.  Report it!
257
258    Send bug reports to the Internet address `bug-glibc@prep.ai.mit.edu'
259 or the UUCP path `mit-eddie!prep.ai.mit.edu!bug-glibc'.  If you have
260 other problems with installation or use, please report those as well.
261
262    If you are not sure how a function should behave, and this manual
263 doesn't tell you, that's a bug in the manual.  Report that too!  If the
264 function's behavior disagrees with the manual, then either the library
265 or the manual has a bug, so report the disagreement.  If you find any
266 errors or omissions in this manual, please report them to the Internet
267 address `bug-glibc-manual@prep.ai.mit.edu' or the UUCP path
268 `mit-eddie!prep.ai.mit.edu!bug-glibc-manual'.
269
270 Adding New Functions
271 ====================
272
273    The process of building the library is driven by the makefiles, which
274 make heavy use of special features of GNU `make'.  The makefiles are
275 very complex, and you probably don't want to try to understand them.
276 But what they do is fairly straightforward, and only requires that you
277 define a few variables in the right places.
278
279    The library sources are divided into subdirectories, grouped by
280 topic.
281
282    The `string' subdirectory has all the string-manipulation functions,
283 `math' has all the mathematical functions, etc.
284
285    Each subdirectory contains a simple makefile, called `Makefile',
286 which defines a few `make' variables and then includes the global
287 makefile `Rules' with a line like:
288
289      include ../Rules
290
291 The basic variables that a subdirectory makefile defines are:
292
293 `subdir'
294      The name of the subdirectory, for example `stdio'.  This variable
295      *must* be defined.
296
297 `headers'
298      The names of the header files in this section of the library, such
299      as `stdio.h'.
300
301 `routines'
302 `aux'
303      The names of the modules (source files) in this section of the
304      library.  These should be simple names, such as `strlen' (rather
305      than complete file names, such as `strlen.c').  Use `routines' for
306      modules that define functions in the library, and `aux' for
307      auxiliary modules containing things like data definitions.  But the
308      values of `routines' and `aux' are just concatenated, so there
309      really is no practical difference.
310
311 `tests'
312      The names of test programs for this section of the library.  These
313      should be simple names, such as `tester' (rather than complete file
314      names, such as `tester.c').  `make tests' will build and run all
315      the test programs.  If a test program needs input, put the test
316      data in a file called `TEST-PROGRAM.input'; it will be given to
317      the test program on its standard input.  If a test program wants
318      to be run with arguments, put the arguments (all on a single line)
319      in a file called `TEST-PROGRAM.args'.  Test programs should exit
320      with zero status when the test passes, and nonzero status when the
321      test indicates a bug in the library or error in building.
322
323 `others'
324      The names of "other" programs associated with this section of the
325      library.  These are programs which are not tests per se, but are
326      other small programs included with the library.  They are built by
327      `make others'.
328
329 `install-lib'
330 `install-data'
331 `install'
332      Files to be installed by `make install'.  Files listed in
333      `install-lib' are installed in the directory specified by `libdir'
334      in `configparms' or `Makeconfig' (*note Installation::.).  Files
335      listed in `install-data' are installed in the directory specified
336      by `datadir' in `configparms' or `Makeconfig'.  Files listed in
337      `install' are installed in the directory specified by `bindir' in
338      `configparms' or `Makeconfig'.
339
340 `distribute'
341      Other files from this subdirectory which should be put into a
342      distribution tar file.  You need not list here the makefile itself
343      or the source and header files listed in the other standard
344      variables.  Only define `distribute' if there are files used in an
345      unusual way that should go into the distribution.
346
347 `generated'
348      Files which are generated by `Makefile' in this subdirectory.
349      These files will be removed by `make clean', and they will never
350      go into a distribution.
351
352 `extra-objs'
353      Extra object files which are built by `Makefile' in this
354      subdirectory.  This should be a list of file names like `foo.o';
355      the files will actually be found in whatever directory object
356      files are being built in.  These files will be removed by
357      `make clean'.  This variable is used for secondary object files
358      needed to build `others' or `tests'.
359
360 Porting the GNU C Library
361 =========================
362
363    The GNU C library is written to be easily portable to a variety of
364 machines and operating systems.  Machine- and operating system-dependent
365 functions are well separated to make it easy to add implementations for
366 new machines or operating systems.  This section describes the layout of
367 the library source tree and explains the mechanisms used to select
368 machine-dependent code to use.
369
370    All the machine-dependent and operating system-dependent files in the
371 library are in the subdirectory `sysdeps' under the top-level library
372 source directory.  This directory contains a hierarchy of
373 subdirectories (*note Hierarchy Conventions::.).
374
375    Each subdirectory of `sysdeps' contains source files for a
376 particular machine or operating system, or for a class of machine or
377 operating system (for example, systems by a particular vendor, or all
378 machines that use IEEE 754 floating-point format).  A configuration
379 specifies an ordered list of these subdirectories.  Each subdirectory
380 implicitly appends its parent directory to the list.  For example,
381 specifying the list `unix/bsd/vax' is equivalent to specifying the list
382 `unix/bsd/vax unix/bsd unix'.  A subdirectory can also specify that it
383 implies other subdirectories which are not directly above it in the
384 directory hierarchy.  If the file `Implies' exists in a subdirectory,
385 it lists other subdirectories of `sysdeps' which are appended to the
386 list, appearing after the subdirectory containing the `Implies' file.
387 Lines in an `Implies' file that begin with a `#' character are ignored
388 as comments.  For example, `unix/bsd/Implies' contains:
389      # BSD has Internet-related things.
390      unix/inet
391
392 and `unix/Implies' contains:
393      posix
394
395 So the final list is `unix/bsd/vax unix/bsd unix/inet unix posix'.
396
397    `sysdeps' has two "special" subdirectories, called `generic' and
398 `stub'.  These two are always implicitly appended to the list of
399 subdirectories (in that order), so you needn't put them in an `Implies'
400 file, and you should not create any subdirectories under them intended
401 to be new specific categories.  `generic' is for things that can be
402 implemented in machine-independent C, using only other
403 machine-independent functions in the C library.  `stub' is for "stub"
404 versions of functions which cannot be implemented on a particular
405 machine or operating system.  The stub functions always return an
406 error, and set `errno' to `ENOSYS' (Function not implemented).  *Note
407 Error Reporting::.
408
409    A source file is known to be system-dependent by its having a
410 version in `generic' or `stub'; every generally-available function whose
411 implementation is system-dependent in should have either a generic or
412 stub implementation (there is no point in having both).  Some rare
413 functions are only useful on specific systems and aren't defined at all
414 on others; these do not appear anywhere in the system-independent
415 source code or makefiles (including the `generic' and `stub'
416 directories), only in the system-dependent `Makefile' in the specific
417 system's subdirectory.
418
419    If you come across a file that is in one of the main source
420 directories (`string', `stdio', etc.), and you want to write a machine-
421 or operating system-dependent version of it, move the file into
422 `sysdeps/generic' and write your new implementation in the appropriate
423 system-specific subdirectory.  Note that if a file is to be
424 system-dependent, it *must not* appear in one of the main source
425 directories.
426
427    There are a few special files that may exist in each subdirectory of
428 `sysdeps':
429
430 `Makefile'
431      A makefile for this machine or operating system, or class of
432      machine or operating system.  This file is included by the library
433      makefile `Makerules', which is used by the top-level makefile and
434      the subdirectory makefiles.  It can change the variables set in the
435      including makefile or add new rules.  It can use GNU `make'
436      conditional directives based on the variable `subdir' (see above)
437      to select different sets of variables and rules for different
438      sections of the library.  It can also set the `make' variable
439      `sysdep-routines', to specify extra modules to be included in the
440      library.  You should use `sysdep-routines' rather than adding
441      modules to `routines' because the latter is used in determining
442      what to distribute for each subdirectory of the main source tree.
443
444      Each makefile in a subdirectory in the ordered list of
445      subdirectories to be searched is included in order.  Since several
446      system-dependent makefiles may be included, each should append to
447      `sysdep-routines' rather than simply setting it:
448
449           sysdep-routines := $(sysdep-routines) foo bar
450
451 `Subdirs'
452      This file contains the names of new whole subdirectories under the
453      top-level library source tree that should be included for this
454      system.  These subdirectories are treated just like the
455      system-independent subdirectories in the library source tree, such
456      as `stdio' and `math'.
457
458      Use this when there are completely new sets of functions and header
459      files that should go into the library for the system this
460      subdirectory of `sysdeps' implements.  For example,
461      `sysdeps/unix/inet/Subdirs' contains `inet'; the `inet' directory
462      contains various network-oriented operations which only make sense
463      to put in the library on systems that support the Internet.
464
465 `Dist'
466      This file contains the names of files (relative to the
467      subdirectory of `sysdeps' in which it appears) which should be
468      included in the distribution.  List any new files used by rules in
469      the `Makefile' in the same directory, or header files used by the
470      source files in that directory.  You don't need to list files that
471      are implementations (either C or assembly source) of routines
472      whose names are given in the machine-independent makefiles in the
473      main source tree.
474
475 `configure'
476      This file is a shell script fragment to be run at configuration
477      time.  The top-level `configure' script uses the shell `.' command
478      to read the `configure' file in each system-dependent directory
479      chosen, in order.  The `configure' files are often generated from
480      `configure.in' files using Autoconf.
481
482      A system-dependent `configure' script will usually add things to
483      the shell variables `DEFS' and `config_vars'; see the top-level
484      `configure' script for details.  The script can check for
485      `--with-PACKAGE' options that were passed to the top-level
486      `configure'.  For an option `--with-PACKAGE=VALUE' `configure'
487      sets the shell variable `with_PACKAGE' (with any dashes in PACKAGE
488      converted to underscores) to VALUE; if the option is just
489      `--with-PACKAGE' (no argument), then it sets `with_PACKAGE' to
490      `yes'.
491
492 `configure.in'
493      This file is an Autoconf input fragment to be processed into the
494      file `configure' in this subdirectory.  *Note Introduction:
495      (autoconf.info)Introduction, for a description of Autoconf.  You
496      should write either `configure' or `configure.in', but not both.
497      The first line of `configure.in' should invoke the `m4' macro
498      `GLIBC_PROVIDES'.  This macro does several `AC_PROVIDE' calls for
499      Autoconf macros which are used by the top-level `configure'
500      script; without this, those macros might be invoked again
501      unnecessarily by Autoconf.
502
503    That is the general system for how system-dependencies are isolated.
504
505 Layout of the `sysdeps' Directory Hierarchy
506 -------------------------------------------
507
508    A GNU configuration name has three parts: the CPU type, the
509 manufacturer's name, and the operating system.  `configure' uses these
510 to pick the list of system-dependent directories to look for.  If the
511 `--nfp' option is *not* passed to `configure', the directory
512 `MACHINE/fpu' is also used.  The operating system often has a "base
513 operating system"; for example, if the operating system is `sunos4.1',
514 the base operating system is `unix/bsd'.  The algorithm used to pick
515 the list of directories is simple: `configure' makes a list of the base
516 operating system, manufacturer, CPU type, and operating system, in that
517 order.  It then concatenates all these together with slashes in
518 between, to produce a directory name; for example, the configuration
519 `sparc-sun-sunos4.1' results in `unix/bsd/sun/sparc/sunos4.1'.
520 `configure' then tries removing each element of the list in turn, so
521 `unix/bsd/sparc' and `sun/sparc' are also tried, among others.  Since
522 the precise version number of the operating system is often not
523 important, and it would be very inconvenient, for example, to have
524 identical `sunos4.1.1' and `sunos4.1.2' directories, `configure' tries
525 successively less specific operating system names by removing trailing
526 suffixes starting with a period.
527
528    As an example, here is the complete list of directories that would be
529 tried for the configuration `sparc-sun-sunos4.1' (without the `--nfp'
530 option):
531
532      sparc/fpu
533      unix/bsd/sun/sunos4.1/sparc
534      unix/bsd/sun/sunos4.1
535      unix/bsd/sun/sunos4/sparc
536      unix/bsd/sun/sunos4
537      unix/bsd/sun/sunos/sparc
538      unix/bsd/sun/sunos
539      unix/bsd/sun/sparc
540      unix/bsd/sun
541      unix/bsd/sunos4.1/sparc
542      unix/bsd/sunos4.1
543      unix/bsd/sunos4/sparc
544      unix/bsd/sunos4
545      unix/bsd/sunos/sparc
546      unix/bsd/sunos
547      unix/bsd/sparc
548      unix/bsd
549      unix/sun/sunos4.1/sparc
550      unix/sun/sunos4.1
551      unix/sun/sunos4/sparc
552      unix/sun/sunos4
553      unix/sun/sunos/sparc
554      unix/sun/sunos
555      unix/sun/sparc
556      unix/sun
557      unix/sunos4.1/sparc
558      unix/sunos4.1
559      unix/sunos4/sparc
560      unix/sunos4
561      unix/sunos/sparc
562      unix/sunos
563      unix/sparc
564      unix
565      sun/sunos4.1/sparc
566      sun/sunos4.1
567      sun/sunos4/sparc
568      sun/sunos4
569      sun/sunos/sparc
570      sun/sunos
571      sun/sparc
572      sun
573      sunos4.1/sparc
574      sunos4.1
575      sunos4/sparc
576      sunos4
577      sunos/sparc
578      sunos
579      sparc
580
581    Different machine architectures are conventionally subdirectories at
582 the top level of the `sysdeps' directory tree.  For example,
583 `sysdeps/sparc' and `sysdeps/m68k'.  These contain files specific to
584 those machine architectures, but not specific to any particular
585 operating system.  There might be subdirectories for specializations of
586 those architectures, such as `sysdeps/m68k/68020'. Code which is
587 specific to the floating-point coprocessor used with a particular
588 machine should go in `sysdeps/MACHINE/fpu'.
589
590    There are a few directories at the top level of the `sysdeps'
591 hierarchy that are not for particular machine architectures.
592
593 `generic'
594 `stub'
595      As described above (*note Porting::.), these are the two
596      subdirectories that every configuration implicitly uses after all
597      others.
598
599 `ieee754'
600      This directory is for code using the IEEE 754 floating-point
601      format, where the C type `float' is IEEE 754 single-precision
602      format, and `double' is IEEE 754 double-precision format.  Usually
603      this directory is referred to in the `Implies' file in a machine
604      architecture-specific directory, such as `m68k/Implies'.
605
606 `posix'
607      This directory contains implementations of things in the library in
608      terms of POSIX.1 functions.  This includes some of the POSIX.1
609      functions themselves.  Of course, POSIX.1 cannot be completely
610      implemented in terms of itself, so a configuration using just
611      `posix' cannot be complete.
612
613 `unix'
614      This is the directory for Unix-like things.  *Note Porting to
615      Unix::.  `unix' implies `posix'.  There are some special-purpose
616      subdirectories of `unix':
617
618     `unix/common'
619           This directory is for things common to both BSD and System V
620           release 4.  Both `unix/bsd' and `unix/sysv/sysv4' imply
621           `unix/common'.
622
623     `unix/inet'
624           This directory is for `socket' and related functions on Unix
625           systems.  The `inet' top-level subdirectory is enabled by
626           `unix/inet/Subdirs'.  `unix/common' implies `unix/inet'.
627
628 `mach'
629      This is the directory for things based on the Mach microkernel
630      from CMU (including the GNU operating system).  Other basic
631      operating systems (VMS, for example) would have their own
632      directories at the top level of the `sysdeps' hierarchy, parallel
633      to `unix' and `mach'.
634
635 Porting the GNU C Library to Unix Systems
636 -----------------------------------------
637
638    Most Unix systems are fundamentally very similar.  There are
639 variations between different machines, and variations in what
640 facilities are provided by the kernel.  But the interface to the
641 operating system facilities is, for the most part, pretty uniform and
642 simple.
643
644    The code for Unix systems is in the directory `unix', at the top
645 level of the `sysdeps' hierarchy.  This directory contains
646 subdirectories (and subdirectory trees) for various Unix variants.
647
648    The functions which are system calls in most Unix systems are
649 implemented in assembly code in files in `sysdeps/unix'.  These files
650 are named with a suffix of `.S'; for example, `__open.S'.  Files ending
651 in `.S' are run through the C preprocessor before being fed to the
652 assembler.
653
654    These files all use a set of macros that should be defined in
655 `sysdep.h'.  The `sysdep.h' file in `sysdeps/unix' partially defines
656 them; a `sysdep.h' file in another directory must finish defining them
657 for the particular machine and operating system variant.  See
658 `sysdeps/unix/sysdep.h' and the machine-specific `sysdep.h'
659 implementations to see what these macros are and what they should do.
660
661    The system-specific makefile for the `unix' directory (that is, the
662 file `sysdeps/unix/Makefile') gives rules to generate several files
663 from the Unix system you are building the library on (which is assumed
664 to be the target system you are building the library *for*).  All the
665 generated files are put in the directory where the object files are
666 kept; they should not affect the source tree itself.  The files
667 generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c'
668 (for the `stdio' section of the library).
669
670 Contributors to the GNU C Library
671 =================================
672
673    The GNU C library was written originally by Roland McGrath.  Some
674 parts of the library were contributed or worked on by other people.
675
676    * The `getopt' function and related code were written by Richard
677      Stallman, David J. MacKenzie, and Roland McGrath.
678
679    * The merge sort function `qsort' was written by Michael J. Haertel.
680
681    * The quick sort function used as a fallback by `qsort' was written
682      by Douglas C. Schmidt.
683
684    * The memory allocation functions `malloc', `realloc' and `free' and
685      related code were written by Michael J. Haertel.
686
687    * Fast implementations of many of the string functions (`memcpy',
688      `strlen', etc.) were written by Torbjorn Granlund.
689
690    * The `tar.h' header file was written by David J. MacKenzie.
691
692    * The port to the MIPS DECStation running Ultrix 4
693      (`mips-dec-ultrix4') was contributed by Brendan Kehoe and Ian
694      Lance Taylor.
695
696    * The DES encryption function `crypt' and related functions were
697      contributed by Michael Glad.
698
699    * The `ftw' function was contributed by Ian Lance Taylor.
700
701    * The startup code to support SunOS shared libraries was contributed
702      by Tom Quinn.
703
704    * The `mktime' function was contributed by Paul Eggert.
705
706    * The port to the Sequent Symmetry running Dynix version 3
707      (`i386-sequent-bsd') was contributed by Jason Merrill.
708
709    * The timezone support code is derived from the public-domain
710      timezone package by Arthur David Olson and his many contributors.
711
712    * The port to the DEC Alpha running OSF/1 (`alpha-dec-osf1') was
713      contributed by Brendan Kehoe, using some code written by Roland
714      McGrath.
715
716    * The port to SGI machines running Irix 4 (`mips-sgi-irix4') was
717      contributed by Tom Quinn.
718
719    * The port of the Mach and Hurd code to the MIPS architecture
720      (`mips-ANYTHING-gnu') was contributed by Kazumoto Kojima.
721
722    * The floating-point printing function used by `printf' and friends
723      and the floating-point reading function used by `scanf', `strtod'
724      and friends were written by Ulrich Drepper.  The multi-precision
725      integer functions used in those functions are taken from GNU MP,
726      which was contributed by Torbjorn Granlund.
727
728    * The internationalization support in the library, and the support
729      programs `locale' and `localedef', were written by Ulrich Drepper.
730      Ulrich Drepper adapted the support code for message catalogs
731      (`libintl.h', etc.) from the GNU `gettext' package, which he also
732      wrote.  He also contributed the `catgets' support and the entire
733      suite of multi-byte and wide-character support functions
734      (`wctype.h', `wchar.h', etc.).
735
736    * The implementations of the `nsswitch.conf' mechanism and the files
737      and DNS backends for it were designed and written by Ulrich
738      Drepper and Roland McGrath, based on a backend interface defined
739      by Peter Eriksson.
740
741    * The port to Linux i386/ELF (`i386-ANYTHING-linux') was contributed
742      by Ulrich Drepper, based in large part on work done in Hongjiu
743      Lu's Linux version of the GNU C Library.
744
745    * The port to Linux/m68k (`m68k-ANYTHING-linux') was contributed by
746      Andreas Schwab.
747
748    * Richard Henderson contributed the ELF dynamic linking code and
749      other support for the Alpha processor.
750
751    * David Mosberger-Tang contributed the port to Linux/Alpha
752      (`alpha-ANYTHING-linux').
753
754    * Stephen R. van den Berg contributed a highly-optimized `strstr'
755      function.
756
757    * Ulrich Drepper contributed the `hsearch' and `drand48' families of
758      functions; reentrant `...`_r'' versions of the `random' family;
759      System V shared memory and IPC support code; and several
760      highly-optimized string functions for iX86 processors.
761
762    * The math functions are taken from `fdlibm-5.1' by Sun
763      Microsystems, as modified by J.T. Conklin, Ian Lance Taylor,
764      Ulrich Drepper, Andreas Schwab, and Roland McGrath.
765
766    * The `libio' library used to implement `stdio' functions on some
767      platforms was written by Per Bothner and modified by Ulrich
768      Drepper.
769
770    * The Internet-related code (most of the `inet' subdirectory) and
771      several other miscellaneous functions and header files have been
772      included from 4.4 BSD with little or no modification.
773
774      All code incorporated from 4.4 BSD is under the following
775      copyright:
776
777                Copyright (C) 1991 Regents of the University of California.
778                All rights reserved.
779
780           Redistribution and use in source and binary forms, with or
781           without modification, are permitted provided that the
782           following conditions are met:
783
784             1. Redistributions of source code must retain the above
785                copyright notice, this list of conditions and the
786                following disclaimer.
787
788             2. Redistributions in binary form must reproduce the above
789                copyright notice, this list of conditions and the
790                following disclaimer in the documentation and/or other
791                materials provided with the distribution.
792
793             3. All advertising materials mentioning features or use of
794                this software must display the following acknowledgement:
795                     This product includes software developed by the
796                     University of California, Berkeley and its
797                     contributors.
798
799             4. Neither the name of the University nor the names of its
800                contributors may be used to endorse or promote products
801                derived from this software without specific prior
802                written permission.
803
804           THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS
805           IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
806           LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
807           FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT
808           SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
809           INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
810           DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
811           SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
812           OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
813           LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
814           (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
815           THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
816           OF SUCH DAMAGE.
817
818    * The random number generation functions `random', `srandom',
819      `setstate' and `initstate', which are also the basis for the
820      `rand' and `srand' functions, were written by Earl T. Cohen for
821      the University of California at Berkeley and are copyrighted by the
822      Regents of the University of California.  They have undergone minor
823      changes to fit into the GNU C library and to fit the ANSI C
824      standard, but the functional code is Berkeley's.
825
826    * The Internet resolver code is taken directly from BIND 4.9.4,
827      which is under both the Berkeley copyright above and also:
828
829           Portions Copyright (C) 1993 by Digital Equipment Corporation.
830
831           Permission to use, copy, modify, and distribute this software
832           for any purpose with or without fee is hereby granted,
833           provided that the above copyright notice and this permission
834           notice appear in all copies, and that the name of Digital
835           Equipment Corporation not be used in advertising or publicity
836           pertaining to distribution of the document or software
837           without specific, written prior permission.
838
839           THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP.
840           DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
841           INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
842           FITNESS.  IN NO EVENT SHALL DIGITAL EQUIPMENT CORPORATION BE
843           LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
844           DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
845           DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
846           OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
847           WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
848
849    * The code to support Sun RPC is taken verbatim from Sun's
850      RPCSRC-4.0 distribution, and is covered by this copyright:
851
852                Copyright (C) 1984, Sun Microsystems, Inc.
853
854           Sun RPC is a product of Sun Microsystems, Inc. and is
855           provided for unrestricted use provided that this legend is
856           included on all tape media and as a part of the software
857           program in whole or part.  Users may copy or modify Sun RPC
858           without charge, but are not authorized to license or
859           distribute it to anyone else except as part of a product or
860           program developed by the user.
861
862           SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND
863           INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND
864           FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF
865           DEALING, USAGE OR TRADE PRACTICE.
866
867           Sun RPC is provided with no support and without any
868           obligation on the part of Sun Microsystems, Inc. to assist in
869           its use, correction, modification or enhancement.
870
871           SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT
872           TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY
873           PATENTS BY SUN RPC OR ANY PART THEREOF.
874
875           In no event will Sun Microsystems, Inc. be liable for any
876           lost revenue or profits or other special, indirect and
877           consequential damages, even if Sun has been advised of the
878           possibility of such damages.
879
880                Sun Microsystems, Inc.
881                2550 Garcia Avenue
882                Mountain View, California  94043
883
884    * Some of the support code for Mach is taken from Mach 3.0 by CMU,
885      and is under the following copyright terms:
886
887                Mach Operating System
888                Copyright (C) 1991,1990,1989 Carnegie Mellon University
889                All Rights Reserved.
890
891           Permission to use, copy, modify and distribute this software
892           and its documentation is hereby granted, provided that both
893           the copyright notice and this permission notice appear in all
894           copies of the software, derivative works or modified
895           versions, and any portions thereof, and that both notices
896           appear in supporting documentation.
897
898           CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS
899           IS" CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF
900           ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
901           THIS SOFTWARE.
902
903           Carnegie Mellon requests users of this software to return to
904
905                 Software Distribution Coordinator
906                 School of Computer Science
907                 Carnegie Mellon University
908                 Pittsburgh PA 15213-3890
909
910           or `Software.Distribution@CS.CMU.EDU' any improvements or
911           extensions that they make and grant Carnegie Mellon the
912           rights to redistribute these changes.
913