Look for comma before - in POD pages
[oweals/openssl.git] / Configurations / README
1 Intro
2 =====
3
4 This directory contains a few sets of files that are used for
5 configuration in diverse ways:
6
7     *.conf      Target platform configurations, please read
8                 'Configurations of OpenSSL target platforms' for more
9                 information.
10     *.tmpl      Build file templates, please read 'Build-file
11                 programming with the "unified" build system' as well
12                 as 'Build info files' for more information.
13     *.pm        Helper scripts / modules for the main `Configure`
14                 script.  See 'Configure helper scripts for more
15                 information.
16
17
18 Configurations of OpenSSL target platforms
19 ==========================================
20
21 Target configurations are a collection of facts that we know about
22 different platforms and their capabilities.  We organise them in a
23 hash table, where each entry represent a specific target.
24
25 In each table entry, the following keys are significant:
26
27         inherit_from    => Other targets to inherit values from.
28                            Explained further below. [1]
29         template        => Set to 1 if this isn't really a platform
30                            target.  Instead, this target is a template
31                            upon which other targets can be built.
32                            Explained further below.  [1]
33
34         sys_id          => System identity for systems where that
35                            is difficult to determine automatically.
36
37         cc              => The compiler command, usually one of "cc",
38                            "gcc" or "clang".  This command is normally
39                            also used to link object files and
40                            libraries into the final program.
41         cflags          => Flags that are used at all times when
42                            compiling.
43         defines         => As an alternative, macro definitions may be
44                            present here instead of in `cflags'.  If
45                            given here, they MUST be as an array of the
46                            string such as "MACRO=value", or just
47                            "MACRO" for definitions without value.
48         shared_cflag    => Extra compilation flags used when
49                            compiling for shared libraries, typically
50                            something like "-fPIC".
51
52         (linking is a complex thing, see [3] below)
53         ld              => Linker command, usually not defined
54                            (meaning the compiler command is used
55                            instead).
56                            (NOTE: this is here for future use, it's
57                            not implemented yet)
58         lflags          => Flags that are used when linking apps.
59         shared_ldflag   => Flags that are used when linking shared
60                            or dynamic libraries.
61         plib_lflags     => Extra linking flags to appear just before
62                            the libraries on the command line.
63         ex_libs         => Extra libraries that are needed when
64                            linking.
65
66         ar              => The library archive command, the default is
67                            "ar".
68                            (NOTE: this is here for future use, it's
69                            not implemented yet)
70         arflags         => Flags to be used with the library archive
71                            command.
72
73         ranlib          => The library archive indexing command, the
74                            default is 'ranlib' it it exists.
75
76         unistd          => An alternative header to the typical
77                            '<unistd.h>'.  This is very rarely needed.
78
79         shared_extension => File name extension used for shared
80                             libraries. 
81         obj_extension   => File name extension used for object files.
82                            On unix, this defaults to ".o" (NOTE: this
83                            is here for future use, it's not
84                            implemented yet)
85         exe_extension   => File name extension used for executable
86                            files.  On unix, this defaults to "" (NOTE:
87                            this is here for future use, it's not
88                            implemented yet)
89
90         thread_scheme   => The type of threads is used on the
91                            configured platform.  Currently known
92                            values are "(unknown)", "pthreads",
93                            "uithreads" (a.k.a solaris threads) and
94                            "winthreads".  Except for "(unknown)", the
95                            actual value is currently ignored but may
96                            be used in the future.  See further notes
97                            below [2].
98         dso_scheme      => The type of dynamic shared objects to build
99                            for.  This mostly comes into play with
100                            engines, but can be used for other purposes
101                            as well.  Valid values are "DLFCN"
102                            (dlopen() et al), "DLFCN_NO_H" (for systems
103                            that use dlopen() et al but do not have
104                            fcntl.h), "DL" (shl_load() et al), "WIN32"
105                            and "VMS".
106         perlasm_scheme  => The perlasm method used to created the
107                            assembler files used when compiling with
108                            assembler implementations.
109         shared_target   => The shared library building method used.
110                            This is a target found in Makefile.shared.
111         build_scheme    => The scheme used to build up a Makefile.
112                            In its simplest form, the value is a string
113                            with the name of the build scheme.
114                            The value may also take the form of a list
115                            of strings, if the build_scheme is to have
116                            some options.  In this case, the first
117                            string in the list is the name of the build
118                            scheme.
119                            Currently recognised build scheme is "unified".
120                            For the "unified" build scheme, this item
121                            *must* be an array with the first being the
122                            word "unified" and the second being a word
123                            to identify the platform family.
124
125         multilib        => On systems that support having multiple
126                            implementations of a library (typically a
127                            32-bit and a 64-bit variant), this is used
128                            to have the different variants in different
129                            directories.
130
131         bn_ops          => Building options (was just bignum options
132                            in the earlier history of this option,
133                            hence the name).  This a string of words
134                            that describe properties on the designated
135                            target platform, such as the type of
136                            integers used to build up the bitnum,
137                            different ways to implement certain ciphers
138                            and so on.  To fully comprehend the
139                            meaning, the best is to read the affected
140                            source.
141                            The valid words are:
142
143                            BN_LLONG     use 'unsigned long long' in
144                                         some bignum calculations.
145                                         This has no value when
146                                         SIXTY_FOUR_BIT or
147                                         SIXTY_FOUR_BIT_LONG is given.
148                            RC4_CHAR     makes the basic RC4 unit of
149                                         calculation an unsigned char.
150                            SIXTY_FOUR_BIT       processor registers
151                                                 are 64 bits, long is
152                                                 32 bits, long long is
153                                                 64 bits.
154                            SIXTY_FOUR_BIT_LONG  processor registers
155                                                 are 64 bits, long is
156                                                 64 bits.
157                            THIRTY_TWO_BIT       processor registers
158                                                 are 32 bits.
159                            EXPORT_VAR_AS_FN     for shared libraries,
160                                                 export vars as
161                                                 accessor functions.
162
163         apps_extra_src  => Extra source to build apps/openssl, as
164                            needed by the target.
165         cpuid_asm_src   => assembler implementation of cpuid code as
166                            well as OPENSSL_cleanse().
167                            Default to mem_clr.c
168         bn_asm_src      => Assembler implementation of core bignum
169                            functions.
170                            Defaults to bn_asm.c
171         ec_asm_src      => Assembler implementation of core EC
172                            functions.
173         des_asm_src     => Assembler implementation of core DES
174                            encryption functions.
175                            Defaults to 'des_enc.c fcrypt_b.c'
176         aes_asm_src     => Assembler implementation of core AES
177                            functions.
178                            Defaults to 'aes_core.c aes_cbc.c'
179         bf_asm_src      => Assembler implementation of core BlowFish
180                            functions.
181                            Defaults to 'bf_enc.c'
182         md5_asm_src     => Assembler implementation of core MD5
183                            functions.
184         sha1_asm_src    => Assembler implementation of core SHA1,
185                            functions, and also possibly SHA256 and
186                            SHA512 ones.
187         cast_asm_src    => Assembler implementation of core CAST
188                            functions.
189                            Defaults to 'c_enc.c'
190         rc4_asm_src     => Assembler implementation of core RC4
191                            functions.
192                            Defaults to 'rc4_enc.c rc4_skey.c'
193         rmd160_asm_src  => Assembler implementation of core RMD160
194                            functions.
195         rc5_asm_src     => Assembler implementation of core RC5
196                            functions.
197                            Defaults to 'rc5_enc.c'
198         wp_asm_src      => Assembler implementation of core WHIRLPOOL
199                            functions.
200         cmll_asm_src    => Assembler implementation of core CAMELLIA
201                            functions.
202                            Defaults to 'camellia.c cmll_misc.c cmll_cbc.c'
203         modes_asm_src   => Assembler implementation of cipher modes,
204                            currently the functions gcm_gmult_4bit and
205                            gcm_ghash_4bit.
206         padlock_asm_src => Assembler implementation of core parts of
207                            the padlock engine.  This is mandatory on
208                            any platform where the padlock engine might
209                            actually be built.
210
211
212 [1] as part of the target configuration, one can have a key called
213     'inherit_from' that indicate what other configurations to inherit
214     data from.  These are resolved recursively.
215
216     Inheritance works as a set of default values that can be overridden
217     by corresponding key values in the inheriting configuration.
218
219     Note 1: any configuration table can be used as a template.
220     Note 2: pure templates have the attribute 'template => 1' and
221             cannot be used as build targets.
222
223     If several configurations are given in the 'inherit_from' array,
224     the values of same attribute are concatenated with space
225     separation.  With this, it's possible to have several smaller
226     templates for different configuration aspects that can be combined
227     into a complete configuration.
228
229     instead of a scalar value or an array, a value can be a code block
230     of the form 'sub { /* your code here */ }'.  This code block will
231     be called with the list of inherited values for that key as
232     arguments.  In fact, the concatenation of strings is really done
233     by using 'sub { join(" ",@_) }' on the list of inherited values.
234
235     An example:
236
237         "foo" => {
238                 template => 1,
239                 haha => "ha ha",
240                 hoho => "ho",
241                 ignored => "This should not appear in the end result",
242         },
243         "bar" => {
244                 template => 1,
245                 haha => "ah",
246                 hoho => "haho",
247                 hehe => "hehe"
248         },
249         "laughter" => {
250                 inherit_from => [ "foo", "bar" ],
251                 hehe => sub { join(" ",(@_,"!!!")) },
252                 ignored => "",
253         }
254
255         The entry for "laughter" will become as follows after processing:
256
257         "laughter" => {
258                 haha => "ha ha ah",
259                 hoho => "ho haho",
260                 hehe => "hehe !!!",
261                 ignored => ""
262         }
263
264 [2] OpenSSL is built with threading capabilities unless the user
265     specifies 'no-threads'.  The value of the key 'thread_scheme' may
266     be "(unknown)", in which case the user MUST give some compilation
267     flags to Configure.
268
269 [3] OpenSSL has three types of things to link from object files or
270     static libraries:
271
272     - shared libraries; that would be libcrypto and libssl.
273     - shared objects (sometimes called dynamic libraries);  that would
274       be the engines.
275     - applications; those are apps/openssl and all the test apps.
276
277     Very roughly speaking, linking is done like this (words in braces
278     represent the configuration settings documented at the beginning
279     of this file):
280
281     shared libraries:
282         {ld} $(CFLAGS) {shared_ldflag} -shared -o libfoo.so \
283             -Wl,--whole-archive libfoo.a -Wl,--no-whole-archive \
284             {plib_lflags} -lcrypto {ex_libs}
285
286     shared objects:
287         {ld} $(CFLAGS) {shared_ldflag} -shared -o libeng.so \
288             blah1.o blah2.o {plib_lflags} -lcrypto {ex_libs}
289
290     applications:
291         {ld} $(CFLAGS) {lflags} -o app \
292             app1.o utils.o {plib_lflags} -lssl -lcrypto {ex_libs}
293
294
295 Historically, the target configurations came in form of a string with
296 values separated by colons.  This use is deprecated.  The string form
297 looked like this:
298
299    "target" => "{cc}:{cflags}:{unistd}:{thread_cflag}:{sys_id}:{lflags}:{bn_ops}:{cpuid_obj}:{bn_obj}:{ec_obj}:{des_obj}:{aes_obj}:{bf_obj}:{md5_obj}:{sha1_obj}:{cast_obj}:{rc4_obj}:{rmd160_obj}:{rc5_obj}:{wp_obj}:{cmll_obj}:{modes_obj}:{padlock_obj}:{perlasm_scheme}:{dso_scheme}:{shared_target}:{shared_cflag}:{shared_ldflag}:{shared_extension}:{ranlib}:{arflags}:{multilib}"
300
301
302 Build info files
303 ================
304
305 The build.info files that are spread over the source tree contain the
306 minimum information needed to build and distribute OpenSSL.  It uses a
307 simple and yet fairly powerful language to determine what needs to be
308 built, from what sources, and other relationships between files.
309
310 For every build.info file, all file references are relative to the
311 directory of the build.info file for source files, and the
312 corresponding build directory for built files if the build tree
313 differs from the source tree.
314
315 When processed, every line is processed with the perl module
316 Text::Template, using the delimiters "{-" and "-}".  The hashes
317 %config and %target are passed to the perl fragments, along with
318 $sourcedir and $builddir, which are the locations of the source
319 directory for the current build.info file and the corresponding build
320 directory, all relative to the top of the build tree.
321
322 To begin with, things to be built are declared by setting specific
323 variables:
324
325     PROGRAMS=foo bar
326     LIBS=libsomething
327     ENGINES=libeng
328     SCRIPTS=myhack
329     EXTRA=file1 file2
330
331 Note that the files mentioned for PROGRAMS, LIBS and ENGINES *must* be
332 without extensions.  The build file templates will figure them out.
333
334 For each thing to be built, it is then possible to say what sources
335 they are built from:
336
337     PROGRAMS=foo bar
338     SOURCE[foo]=foo.c common.c
339     SOURCE[bar]=bar.c extra.c common.c
340
341 It's also possible to tell some other dependencies:
342
343     DEPEND[foo]=libsomething
344     DEPEND[libbar]=libsomethingelse
345
346 (it could be argued that 'libsomething' and 'libsomethingelse' are
347 source as well.  However, the files given through SOURCE are expected
348 to be located in the source tree while files given through DEPEND are
349 expected to be located in the build tree)
350
351 For some libraries, we maintain files with public symbols and their
352 slot in a transfer vector (important on some platforms).  It can be
353 declared like this:
354
355     ORDINALS[libcrypto]=crypto
356
357 The value is not the name of the file in question, but rather the
358 argument to util/mkdef.pl that indicates which file to use.
359
360 One some platforms, shared libraries come with a name that's different
361 from their static counterpart.  That's declared as follows:
362
363     SHARED_NAME[libfoo]=cygfoo-{- $config{shlibver} -}
364
365 The example is from Cygwin, which has a required naming convention.
366
367 Sometimes, it makes sense to rename an output file, for example a
368 library:
369
370     RENAME[libfoo]=libbar
371
372 That lines has "libfoo" get renamed to "libbar".  While it makes no
373 sense at all to just have a rename like that (why not just use
374 "libbar" everywhere?), it does make sense when it can be used
375 conditionally.  See a little further below for an example.
376
377 In some cases, it's desirable to include some source files in the
378 shared form of a library only:
379
380     SHARED_SOURCE[libfoo]=dllmain.c
381
382 For any file to be built, it's also possible to tell what extra
383 include paths the build of their source files should use:
384
385     INCLUDE[foo]=include
386
387 In some cases, one might want to generate some source files from
388 others, that's done as follows:
389
390     GENERATE[foo.s]=asm/something.pl $(CFLAGS)
391     GENERATE[bar.s]=asm/bar.S
392
393 The value of each GENERATE line is a command line or part of it.
394 Configure places no rules on the command line, except the the first
395 item muct be the generator file.  It is, however, entirely up to the
396 build file template to define exactly how those command lines should
397 be handled, how the output is captured and so on.
398
399 Sometimes, the generator file itself depends on other files, for
400 example if it is a perl script that depends on other perl modules.
401 This can be expressed using DEPEND like this:
402
403     DEPEND[asm/something.pl]=../perlasm/Foo.pm
404
405 There may also be cases where the exact file isn't easily specified,
406 but an inclusion directory still needs to be specified.  INCLUDE can
407 be used in that case:
408
409     INCLUDE[asm/something.pl]=../perlasm
410
411 NOTE: GENERATE lines are limited to one command only per GENERATE.
412
413 As a last resort, it's possible to have raw build file lines, between
414 BEGINRAW and ENDRAW lines as follows:
415
416     BEGINRAW[Makefile(unix)]
417     haha.h: {- $builddir -}/Makefile
418         echo "/* haha */" > haha.h
419     ENDRAW[Makefile(unix)]
420
421 The word within square brackets is the build_file configuration item
422 or the build_file configuration item followed by the second word in the
423 build_scheme configuration item for the configured target within
424 parenthesis as shown above.  For example, with the following relevant
425 configuration items:
426
427    build_file   => "build.ninja"
428    build_scheme => [ "unified", "unix" ]
429
430 ... these lines will be considered:
431
432    BEGINRAW[build.ninja]
433    build haha.h: echo "/* haha */" > haha.h
434    ENDRAW[build.ninja]
435
436    BEGINRAW[build.ninja(unix)]
437    build hoho.h: echo "/* hoho */" > hoho.h
438    ENDRAW[build.ninja(unix)]
439
440 Should it be needed because the recipes within a RAW section might
441 clash with those generated by Configure, it's possible to tell it
442 not to generate them with the use of OVERRIDES, for example:
443
444     SOURCE[libfoo]=foo.c bar.c
445     
446     OVERRIDES=bar.o
447     BEGINRAW[Makefile(unix)]
448     bar.o: bar.c
449         $(CC) $(CFLAGS) -DSPECIAL -c -o $@ $<
450     ENDRAW[Makefile(unix)]
451
452 See the documentation further up for more information on configuration
453 items.
454
455 Finally, you can have some simple conditional use of the build.info
456 information, looking like this:
457
458     IF[1]
459      something
460     ELSIF[2]
461      something other
462     ELSE
463      something else
464     ENDIF
465
466 The expression in square brackets is interpreted as a string in perl,
467 and will be seen as true if perl thinks it is, otherwise false.  For
468 example, the above would have "something" used, since 1 is true.
469
470 Together with the use of Text::Template, this can be used as
471 conditions based on something in the passed variables, for example:
472
473     IF[{- $disabled{shared} -}]
474       LIBS=libcrypto
475       SOURCE[libcrypto]=...
476     ELSE
477       LIBS=libfoo
478       SOURCE[libfoo]=...
479     ENDIF
480
481 or:
482
483     # VMS has a cultural standard where all libraries are prefixed.
484     # For OpenSSL, the choice is 'ossl_'
485     IF[{- $config{target} =~ /^vms/ -}]
486      RENAME[libcrypto]=ossl_libcrypto
487      RENAME[libssl]=ossl_libssl
488     ENDIF
489
490
491 Build-file programming with the "unified" build system
492 ======================================================
493
494 "Build files" are called "Makefile" on Unix-like operating systems,
495 "descrip.mms" for MMS on VMS, "makefile" for nmake on Windows, etc.
496
497 To use the "unified" build system, the target configuration needs to
498 set the three items 'build_scheme', 'build_file' and 'build_command'.
499 In the rest of this section, we will assume that 'build_scheme' is set
500 to "unified" (see the configurations documentation above for the
501 details).
502
503 For any name given by 'build_file', the "unified" system expects a
504 template file in Configurations/ named like the build file, with
505 ".tmpl" appended, or in case of possible ambiguity, a combination of
506 the second 'build_scheme' list item and the 'build_file' name.  For
507 example, if 'build_file' is set to "Makefile", the template could be
508 Configurations/Makefile.tmpl or Configurations/unix-Makefile.tmpl.
509 In case both Configurations/unix-Makefile.tmpl and
510 Configurations/Makefile.tmpl are present, the former takes
511 precedence.
512
513 The build-file template is processed with the perl module
514 Text::Template, using "{-" and "-}" as delimiters that enclose the
515 perl code fragments that generate configuration-dependent content.
516 Those perl fragments have access to all the hash variables from
517 configdata.pem.
518
519 The build-file template is expected to define at least the following
520 perl functions in a perl code fragment enclosed with "{-" and "-}".
521 They are all expected to return a string with the lines they produce.
522
523     generatesrc - function that produces build file lines to generate
524                   a source file from some input.
525
526                   It's called like this:
527
528                         generatesrc(src => "PATH/TO/tobegenerated",
529                                     generator => [ "generatingfile", ... ]
530                                     generator_incs => [ "INCL/PATH", ... ]
531                                     generator_deps => [ "dep1", ... ]
532                                     generator => [ "generatingfile", ... ]
533                                     incs => [ "INCL/PATH", ... ],
534                                     deps => [ "dep1", ... ],
535                                     intent => one of "libs", "dso", "bin" );
536
537                   'src' has the name of the file to be generated.
538                   'generator' is the command or part of command to
539                   generate the file, of which the first item is
540                   expected to be the file to generate from.
541                   generatesrc() is expected to analyse and figure out
542                   exactly how to apply that file and how to capture
543                   the result.  'generator_incs' and 'generator_deps'
544                   are include directories and files that the generator
545                   file itself depends on.  'incs' and 'deps' are
546                   include directories and files that are used if $(CC)
547                   is used as an intermediary step when generating the
548                   end product (the file indicated by 'src').  'intent'
549                   indicates what the generated file is going to be
550                   used for.
551
552     src2obj     - function that produces build file lines to build an
553                   object file from source files and associated data.
554
555                   It's called like this:
556
557                         src2obj(obj => "PATH/TO/objectfile",
558                                 srcs => [ "PATH/TO/sourcefile", ... ],
559                                 deps => [ "dep1", ... ],
560                                 incs => [ "INCL/PATH", ... ]
561                                 intent => one of "lib", "dso", "bin" );
562
563                   'obj' has the intended object file *without*
564                   extension, src2obj() is expected to add that.
565                   'srcs' has the list of source files to build the
566                   object file, with the first item being the source
567                   file that directly corresponds to the object file.
568                   'deps' is a list of explicit dependencies.  'incs'
569                   is a list of include file directories.  Finally,
570                   'intent' indicates what this object file is going
571                   to be used for.
572
573     obj2lib     - function that produces build file lines to build a
574                   static library file ("libfoo.a" in Unix terms) from
575                   object files.
576
577                   called like this:
578
579                         obj2lib(lib => "PATH/TO/libfile",
580                                 objs => [ "PATH/TO/objectfile", ... ]);
581
582                   'lib' has the intended library file name *without*
583                   extension, obj2lib is expected to add that.  'objs'
584                   has the list of object files (also *without*
585                   extension) to build this library.
586
587     libobj2shlib - function that produces build file lines to build a
588                   shareable object library file ("libfoo.so" in Unix
589                   terms) from the corresponding static library file
590                   or object files.
591
592                   called like this:
593
594                         libobj2shlib(shlib => "PATH/TO/shlibfile",
595                                      lib => "PATH/TO/libfile",
596                                      objs => [ "PATH/TO/objectfile", ... ],
597                                      deps => [ "PATH/TO/otherlibfile", ... ],
598                                      ordinals => [ "word", "/PATH/TO/ordfile" ]);
599
600                   'lib' has the intended library file name *without*
601                   extension, libobj2shlib is expected to add that.
602                   'shlib' has the corresponding shared library name
603                   *without* extension.  'deps' has the list of other
604                   libraries (also *without* extension) this library
605                   needs to be linked with.  'objs' has the list of
606                   object files (also *without* extension) to build
607                   this library.  'ordinals' MAY be present, and when
608                   it is, its value is an array where the word is
609                   "crypto" or "ssl" and the file is one of the ordinal
610                   files util/libeay.num or util/ssleay.num in the
611                   source directory.
612
613                   This function has a choice; it can use the
614                   corresponding static library as input to make the
615                   shared library, or the list of object files.
616
617     obj2dso     - function that produces build file lines to build a
618                   dynamic shared object file from object files.
619
620                   called like this:
621
622                         obj2dso(lib => "PATH/TO/libfile",
623                                 objs => [ "PATH/TO/objectfile", ... ],
624                                 deps => [ "PATH/TO/otherlibfile",
625                                 ... ]);
626
627                   This is almost the same as libobj2shlib, but the
628                   intent is to build a shareable library that can be
629                   loaded in runtime (a "plugin"...).  The differences
630                   are subtle, one of the most visible ones is that the
631                   resulting shareable library is produced from object
632                   files only.
633
634     obj2bin     - function that produces build file lines to build an
635                   executable file from object files.
636
637                   called like this:
638
639                         obj2bin(bin => "PATH/TO/binfile",
640                                 objs => [ "PATH/TO/objectfile", ... ],
641                                 deps => [ "PATH/TO/libfile", ... ]);
642
643                   'bin' has the intended executable file name
644                   *without* extension, obj2bin is expected to add
645                   that.  'objs' has the list of object files (also
646                   *without* extension) to build this library.  'deps'
647                   has the list of library files (also *without*
648                   extension) that the programs needs to be linked
649                   with.
650
651     in2script   - function that produces build file lines to build a
652                   script file from some input.
653
654                   called like this:
655
656                         in2script(script => "PATH/TO/scriptfile",
657                                   sources => [ "PATH/TO/infile", ... ]);
658
659                   'script' has the intended script file name.
660                   'sources' has the list of source files to build the
661                   resulting script from.
662
663 In all cases, file file paths are relative to the build tree top, and
664 the build file actions run with the build tree top as current working
665 directory.
666
667 Make sure to end the section with these functions with a string that
668 you thing is appropriate for the resulting build file.  If nothing
669 else, end it like this:
670
671       "";       # Make sure no lingering values end up in the Makefile
672     -}
673
674
675 Configure helper scripts
676 ========================
677
678 Configure uses helper scripts in this directory:
679
680 Checker scripts
681 ---------------
682
683 These scripts are per platform family, to check the integrity of the
684 tools used for configuration and building.  The checker script used is
685 either {build_platform}-{build_file}-checker.pm or
686 {build_platform}-checker.pm, where {build_platform} is the second
687 'build_scheme' list element from the configuration target data, and
688 {build_file} is 'build_file' from the same target data.
689
690 If the check succeeds, the script is expected to end with a non-zero
691 expression.  If the check fails, the script can end with a zero, or
692 with a `die`.