1 \input texinfo @c -*-texinfo-*-
3 @setfilename autodist.info
12 This manual is for SILC Autodist (version @value{VERSION},
13 @value{UPDATED}), a program which is used to manage and create source
16 Copyright @copyright{} 2004 - 2005 Pekka Riikonen, SILC Project
19 Permission is granted to copy, distribute and/or modify this document
20 under the terms of the @acronym{GNU} Free Documentation License,
21 Version 1.2 or any later version published by the Free Software
22 Foundation; with no Invariant Sections, with the Front-Cover texts
23 being ``A @acronym{GNU} Manual,'' and with the Back-Cover Texts as in
24 (a) below. A copy of the license is included in the section entitled
25 ``@acronym{GNU} Free Documentation License.''
27 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and
28 modify this @acronym{GNU} Manual, like @acronym{GNU} software. Copies
29 published by the Free Software Foundation raise funds for
30 @acronym{GNU} development.''
34 @dircategory Software development
36 * autodist: (autodist). Managing and creating source distributions.
39 @dircategory Individual utilities
41 * makedist: (autodist)Invoking makedist. Creating distribution
46 @subtitle For version @value{VERSION}, @value{UPDATED}
47 @author Pekka Riikonen
49 @vskip 0pt plus 1filll
55 @comment node-name, next, previous, up
61 * Introduction:: Purpose of Autodist
62 * Integrating Autodist:: Integrating Autodist into your project
63 * Invoking Autodist:: Running Autodist
64 * Examples:: Examples using Autodist
67 --- The Detailed Node Listing ---
71 * Motivation:: Reasons for using Autodist
75 * Creating distdir:: Creating distributions directory
76 * autodist.conf:: Configuring Autodist
77 * Creating new distribution:: Adding new distribution
78 * Distribution file format:: Detailed document for distfile format
79 * configure.ad files:: configure script for creating configure.ac
80 * Makefile.ad files:: Makefile.ad for creating Makefile.am
81 * Other .ad files:: Other files with .ad suffix
82 * Distdefines:: Using distdefs in files
86 * Preparing source tree:: Preparing source tree with Autodist
87 * Creating distribution:: Creating distribution with Autodist
91 * Single distribution tree:: Single distribution example
92 * Multiple distribution tree:: Multiple distributions example
101 @chapter Introduction
103 The Autodist is a source distribution management system that allows
104 powerful mechanisms to define what is included in and excluded from a
105 distribution, and what license the distribution is released under. It is
106 also used to create the actual distribution source packages. Autodist
107 allows distribution management in file, directory and file content level.
108 Different distributions may include different portions of files, for
109 example, excluding certain features from certain distributions. It is
110 always guaranteed that anything not defined for the distribution, is
111 removed automatically (files, file content, directories), thus ensuring
112 that nothing is accidentally included in the distribution.
114 The Autodist creates 'Makefile.am' files from 'Makefile.ad' files and
115 'configure.ac' file from one or more 'configure.ad' files. Any other file
116 ending with '.ad' suffix will also be processed. The processed file will
117 have the '.ad' suffix removed (@pxref{Preparing source tree, , , , }).
118 Autodist also creates and packages the distribution using common GNU
119 distribution creation process, specificly `make dist'. Autodist, however,
120 controls this process and during packaging phase the Autodist processes
121 all files in the distribution (other than '*.ad' files, which has already
122 been processed earlier by Autodist). The resulted package is a processed
123 source distribution package, processed according to the rules specified
124 in the distribution file(s) (@pxref{Creating distribution, , , , }).
126 Any file in the source tree may use distdefs (distribution defines (@pxref{Distdefines, , , , })) which are defined in the distributions. When distribution
127 is packaged only the files, directories and file content that is either
128 outside of any distdef, or inside the defined distdefs will be included
129 in the distribution. Any other file, directory or content in the file
130 will be removed. It is guaranteed, if a file, a directory or a piece of
131 file content is not inside a defined distdef it will not be delivered to
134 Any file, 'Makefile.am', 'configure.ac', or source file processed with
135 Autodist is always compliant with the tools needed to process them. All
136 files can also be processed with the corresponding tools even before
137 processing them with Autodist. This makes it possible, for example, to
138 compile sources before they have been processed, and undefined lines
139 are removed. The distdefs are respected in source files by the
142 Autodist is not a binary packaging system. It is specificly used to
143 create source distributions. A binary packaging system, however can be
144 hooked to the distribution creation process, if needed.
147 * Motivation:: Reasons for using Autodist
152 @section Reasons for using Autodist
154 Autodist is closely related to the Autoconf and Automake tools, and
155 complements the features Autoconf and Automake provides. It is especially
156 targeted into circumstances where multiple distributions are created from
157 one source tree. The Autoconf and Automake environment is mainly designed
158 for one distribution (one application) per one source tree situations.
159 Autodist provides mechanisms to create all kinds of distributions that can
160 be created from one source tree. To be able to use Autodist, the Autoconf
161 and Automake must be installed into the system (@pxref{Integrating Autodist, , , , }).
162 Autoconf version must be at least 2.52g.
164 Small software projects usually do very well with Autoconf and Automake
165 and their distribution management features. Often these projects do not
166 need Autodist, though they can benefit from it. However, if your software
167 project is large, you need to create multiple distributions from one source
168 tree, you have complex licensing terms for different distributions, you
169 have different target users or customers that may require different
170 feature set or licenses in different distributions, you have need to
171 continue concurrent development in the main source tree and still be able
172 to create stable distributions, and/or you have need to control file
173 content in different distributions (to avoid distributing code or features
174 that aren't supposed to be distributed, or to avoid leaking information
175 to your competitors on what new features you are working on), then Autodist
176 is a tool you may find usefull.
178 The motivation behind Autodist stems from need to be able to create
179 multiple distributions from one large source tree in a precise and
180 controllable manner, and guarantee that anything that is not part of the
181 distribution is removed from the distribution. The Autoconf and Automake
182 provides mere basic control what is included in and excluded from
183 distributions and how the distributions are created. They also do not
184 provide mechanism to define different licensing conditions for different
185 distributions, or changing the license automatically for different user
186 or customer purposes. Many large software projects, companies and
187 corporations have commonly been using Autoconf and Automake tools, but
188 have had the need to create their own ad-hoc mechanisms to control
189 distribution creation. The Autodist attempts to provide a tool that any
190 size software project can effectively use to manage their distributions.
192 Without a tool like Autodist, large software projects usually has to be
193 split into separate source trees, which may not always be possible because
194 they may share large portions of common code (which may further make
195 concurrent development of the applications hard), or multiple Autoconf and
196 Automake environments (multiple configure scripts) needs to be created
197 in one source tree. In this case the source tree usually gets very
198 complicated and controlling what is compiled and what is included in
199 distributions becomes harder, especially when different parts code is shared
200 between applications and libraries.
203 @node Integrating Autodist
204 @chapter Integrating Autodist
206 Integrating Autodist into existing software project can be a very simple
207 task or a fairly complicated task. It depends on the size and complexity
208 of the software project. Generally speaking, integrating Autodist into
209 software project is fairly straightforward process:
211 1. The distributions directory and 'default' distribution are created
213 2. The 'configure.ad' is created
215 3. If needed, 'Makefile.ad' file(s) are created
217 After this the Autodist can already be used to prepare the source tree
218 for configuration and compilation (@pxref{Preparing source tree, , , , }).
219 Adding a new distribution would then allow the actual distribution
222 If the software project has had own ad-hoc distribution system already in
223 place, it may take some work to move from that system into the Autodist.
224 If there are multiple applications and distributions created from the
225 source tree, the distributions and distribution defines for them need to
226 be created. While this may be unthankful job, it only needs to be done
229 Integrating Autodist into a new software project is a very simple task as
230 renaming 'configure.ac' and possibly 'Makefile.am' files are not required,
231 as they may not exist yet.
235 * Creating distdir:: Creating distributions directory
236 * autodist.conf:: Configuring Autodist
237 * Creating new distribution:: Adding new distribution
238 * Distribution file format:: Detailed document for distfile format
239 * configure.ad files:: configure script for creating configure.ac
240 * Makefile.ad files:: Makefile.ad for creating Makefile.am
241 * Other .ad files:: Other files with .ad suffix
242 * Distdefines:: Using distdefs in files
246 @node Creating distdir
247 @section Creating distributions directory
249 The distributions directory is 'distdir', which is expected to be
250 located in the root of the source tree. This directory will hold all
251 the distribution files, and the Autodist configuration file 'autodist.conf' (@pxref{autodist.conf, , , , }).
252 If this directory does not exist it can be created with the Autodist.
258 This will create the 'distdir' and copy the default 'autodist.conf'
259 configuration file and the 'default' distribution into the directory.
260 The 'default' distribution will be used by default by the Autodist
261 unless other distribution is specified.
263 After this the Autodist has effectively been integrated into the
264 software project. However, usually after this, one would create new
265 distributions, the 'configure.ad' and possibly 'Makefile.ad' file(s).
266 Without 'configure.ad' file a distribution package cannot be created.
267 However, even without 'configure.ad' file the source tree can be
268 prepared for configuration and compilation (@pxref{Preparing source tree, , , , }).
271 * autodist.conf:: Configuring Autodist
276 @section Configuring Autodist
278 After the Autodist has been integrated into the software by creating
279 the 'distdir', the 'autodist.conf' configuration file was added to the
280 'distdir' also. Usually software projects will want to modify some of
281 the 'autodist.conf' options, mainly specifying the distdef prefix.
283 The 'autodist.conf' is a text file. The following options are available
291 By default the distdef prefix is '_DIST_'. To add own software package
292 specific prefix the 'DISTPREFIX' can be defined.
299 Will set the distdef prefix as 'SILC_DIST_'.
303 DISTDEFS="distdefs.h"
306 The 'DISTDEFS' option specifies the file name of the distdef header file
307 which Autodist will create. The software project should '#include' the
308 header file in order for the preprocessor to respect the distdef
309 conditionals (@pxref{Distdefines, , , , }). By default the file name
310 is 'distdefs.h' and is created at the root of source tree. Other location
311 may be specified if needed.
315 DISTDEFS="include/distdefs.h"
323 The 'ACLOCAL' specifies the location of the 'aclocal' tool. If Autodist
324 should not run 'aclocal' this option may be removed or set to empty value.
325 User need to then run it manually.
329 AUTOHEADER="autoheader"
332 The 'AUTOHEADER' specifies the location of the 'autoheader' tool. If
333 Autodist should not run 'autoheader' this option may be removed or set
334 to empty value. User need to then run it manually.
340 The 'AUTOCONF' specifies the location of the 'autoconf' tool. If
341 Autodist should not run 'autoconf' this option may be removed or set
342 to empty value. User need to then run it manually.
346 AUTOMAKE="automake -a -c"
349 The 'AUTOMAKE' specifies the location of the 'automake' tool. If
350 Autodist should not run 'automake' this option may be removed or set
351 to empty value. User need to then run it manually. By default, the
352 '-a' and '-c' options are given to 'automake' to add any missing required
357 LIBTOOLIZE="libtoolize --automake -c"
360 The 'LIBTOOLIZE' specifies the location of the 'libtoolize' tool.
361 This option should be removed or ste to empty value if 'libtool' is not
362 used in the source tree.
369 The 'MAKE' specifies the location of the 'make' program. This option must
370 be set to valid value in order to create distributions.
374 * Creating new distribution:: Adding new distribution
378 @node Creating new distribution
379 @section Creating new distribution
381 After the Autodist has been integrated into the software project by
382 creating the 'distdir' and 'default' distribution, the source tree
383 can be prepared for configuration and compilation (@pxref{Preparing source tree, , , , }). However, the 'default' distribution should be used only as
384 a development distribution. Usually it is used to prepare the raw source
385 tree (such as a tree just checkout
386 from CVS) for configuration and compilation. By default, the 'default'
387 distribution cannot be packaged. However, if the software project is
388 small (one distribution), it may be convenient to edit the 'default'
389 distribution to be as the distribution that is packaged from the source
390 tree. In software project where multiple distributions are created using
391 the 'default' only as a development distribution is recommended. The
392 real distributions should be defined as separate distributions.
394 Creating a new distribution is a simple process. Each distribution
395 is placed in the 'distdir' and the file name of the distribution file is
396 used to reference to it. By default, the distribution name is the
397 file name of the distribution file. The actual distribution file is
398 a simple text file with various directives that define the distribution.
400 If the 'default' distribution is used as a development distribution it
401 might be desired to inherit some or all of the created distributions in
402 it, so that development becomes possible with the 'default' distribution.
403 Adding 'inherit' directive into the 'distdir/default' will inherit the
404 specified distribution.
408 * Distribution file format:: Detailed document for distfile format
412 @node Distribution file format
413 @section Distribution file format in detail
415 The distribution file, or distfile from now on, defines your distribution,
416 distribution defines, options, included and excluded files and
417 directories, license, and additional processing. Each distribution is
418 defined in a separate file and the distributions are referenced by
421 The distfile is a text file that contains various directives that define
422 the actual distribution. Lines starting with '#' are considered comments
426 @section Directive: name <name>
428 The 'name' directive defines the name of the distribution. It is optional
429 directive, and if omitted the distribution name will be the name of the
430 distfile. The 'PACKAGE_NAME' define delivered by Autoconf will contain
438 Will set your distribution name as 'Foo Application'.
441 @section Directive: package <package>
443 The 'package' directive defines the name of the distribution package. It is
444 optional directive, and if omitted the distribution package name will
445 be the name of the distribution, if defined, or if omitted, then the name
446 of the distfile. If this directive is omitted then normal GNU convention
447 is used to decide the package name, derived from the distribution name.
448 The 'PACKAGE_TARNAME' define delivered by Autoconf will contain this
456 Will create distribution packages named, for example, as
457 'foo-client-1.0.tar.gz'.
460 @section Directive: bug-report <email address>
462 The 'bug-report' directive can be used to define the email address where
463 the bug-reports for the distribution should be sent. The directive is
464 optional. The 'PACKAGE_BUGREPORT' define delivered by Autoconf will
465 contain this bug report string.
468 @section Directive: license <filename>
470 The 'license' directive can be used to define the license file for the
471 distribution. This directive is optional. The license file will be
472 copied into the distribution in the name 'COPYING'. If the 'COPYING'
473 file already exist it will be replaced.
480 Will include the file 'license/GPL' into the distribution in the file
484 @section Directive: license-header <current-license> <new-license>
486 The 'license-header' can be used to re-license your files into a new
487 license. This directive is optional. There may be zero or more
488 'license-header' directives in distribution. The 'license-header'
489 directive will compare the license header that usually appear at the
490 start of a file to the <current-license>. If it matches it will
491 be replaced with the <new-license>. The license header in the file
492 will be replaced and the file will have effectively been re-licensed.
496 license-header license/BSD-header license/GPL-header
499 Will replace all appearances of the license header in 'license/BSD-header'
500 file to the license header in 'license/GPL-header' in any file in the
501 distribution. Note that, the header change will be performed when
502 the distribution is packaged (@pxref{Creating distribution, , , , }).
504 With 'license-header' directive you may initially set your files in the
505 source tree into what ever license you prefer. However, if you need to
506 re-license parts of the source tree in certain distributions the
507 'license-header' will achieve this automatically. For example, suppose
508 one wants to create two different versions of a library distribution, with
509 different feature sets, in two different licenses.
511 There are several limitations in the current implementation of Autodist
512 with the 'license-header' directive:
514 First limitation is that the header files must have equal amount of lines.
515 If the new header file has fewer lines that the current header file, all
516 of the lines from the current header will not be replaced. If the new header
517 has fewer lines, empty lines must be added to it. If the new header file
518 has more lines than the current header file, the extra lines will not appear
519 in the replaced header. Basic rule is to always make sure the header
520 files have equal amount of lines in them.
522 Second limitation is in indentation of the header files. It is suggested,
523 though not mandatory, that the header files have the same indentation as
524 is commonly used in the source tree; if the license header text in a file
525 starts at the second character instead of at the start of the line, then
526 the header file should start the license text at the second character also.
527 If same indentation is not used the appearance of the replaced header
528 may not be perfect. While this is a cosmetic issue, one still to remember.
530 Third limitation is that the distribution cannot be partially re-licensed.
531 If the 'license-header' directive is used then all files that have the
532 specified header will be replaced with the new header. There are
533 currently two ways to not re-license a file; use different license header
534 in the file than one specified in 'license-header', or specify the file or
535 directory in 'noprocess' directive. Using 'noprocess' is not possible if
536 the file needs to be otherwise processed for the distribution. Future
537 versions of Autodist may provide a mechanism to re-license only part of
540 Example current header:
543 This program is free software; you can redistribute it and/or modify
544 it under the terms of the GNU General Public License as published by
545 the Free Software Foundation; version 2 of the License.
547 This program is distributed in the hope that it will be useful,
548 but WITHOUT ANY WARRANTY; without even the implied warranty of
549 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
550 GNU General Public License for more details.
559 Redistribution and use in source and binary forms, with or without
560 modification, are permitted provided that the conditions listed in the
561 COPYING file are met.
568 In this example, if the text in the current header file is found in any
569 file in the distribution it will be replaced with the new header file.
570 Notice that, both header files has same amount of lines (8 lines).
572 Note that, the current header must match exactly the header used in
573 files. Otherwise the replacement will not be complete.
576 @section Directive: inherit <distfile>
578 The Autodist provides inheritance of distributions. The 'inherit'
579 directive is used to define the distribution which will be inherited
580 into the distribution. The <distfile> specifies the name of the
581 inherited distribution. If the distribution cannot be inherited Autodist
584 The 'inherit' will inherit the following information from the distribution:
585 distdefs, undefines, includes, excludes and noprocess. Other information
586 will not be inherited. If the inherited distribution inherits other
587 distributions, they will also be inherited automatically. User should be
588 careful when inheriting distributions as it may be possible to create an
589 infinite recursion. The Autodist would allow for this and not detect this
590 error. Zero or more 'inherit' directives may be set for distribution.
599 Will inherit distributions 'common', 'client' and 'toolkit' into this
600 distribution. All distdefs, undefines, includes, excludes and noprocesses
601 from these distributions are now also part this distribution.
604 @section Directive: define <symbol>
606 The 'define' directive is used to define the distdef symbols for the
607 distribution. This directive is optional, however, all distributions
608 should define at least one distdef so that the distribution may be
609 controlled with the distdef conditionals in files in the source tree (@pxref{Distdefines, , , , }). By default, the distdef prefix is '_DIST_'. Many
610 software projects will want to set their own prefix for the distdefs
611 for consistency. The prefix may be defined in the 'autodist.conf' file
612 (@pxref{autodist.conf, , , , }).
617 define _DIST_FEATURE_X
618 define _DIST_LIBRARY_Y
621 Will define the following distdefs for the distribution: '_DIST_FOO',
622 '_DIST_FEATURE_X' and '_DIST_LIBRARY_Y'. These distdefs may then be
623 used in the source tree and source code to control what is included in
624 or excluded from this distribution.
627 @section Directive: undef <symbol>
629 The 'undef' directive may be used to explicitly undefine a distdef.
630 When inheriting distributions it may be desired to be able undefine
631 certain distdefs. This directive is optional.
635 undef _DIST_FEATURE_Y
638 Will undefine '_DIST_FEATURE_Y' distdef. This distdef will not be part
639 of this distribution anymore, even if it is defined in some inherited
643 @section Directive: option <option> [...]
645 The 'option' directive is used to define various options for the
646 distribution. The options can change the behavior of the distribution.
647 This directive is optional. One or more options may be defined in one
648 'option' directive. Zero or more 'option' directives may be set for
649 distribution. The following options are available.
655 When set, the distribution is a template distribution. Templates are
656 special distributions which cannot be prepared or packaged with Autodist.
657 Templates can only be inherited. Usually, templates are used to define a
658 common template distribution for other distributions. Templates may set
659 distdefs, undefines, includes, excludes and noprocesses. A large software
660 project could have several distributions that share a common base. In
661 this case defining the common base as a template distribution and then
662 inheriting that distribution makes it easier to manage the distfiles.
668 Distributions with the 'no-dist' option are similar to templates, except
669 that they can be prepared with Autodist, but they cannot be packaged.
670 These are usually used as a common development distribution, such as the
671 'default' distribution created with 'autodist -i'.
677 If this option is set to normal distributions or distributions with
678 'no-dist' option, the distribution cannot be inherited. For template
679 this option has no effect. If distribution with this option is inherited
680 the Autodist will give an error.
683 @section Directive: include <source> [<destination>]
685 The 'include' directive can be used to include files or directories into
686 the distribution. Sometimes it may be desired to specify included
687 files and directories in distribution instead of Makefile.am and
688 EXTRA_DIST, especially if there are many distributions that need to
689 include specific files and directories. While it would be possible
690 to define them in Makefile.ad and use distdef conditionals to define
691 which will be included in which distribution, if there are many different
692 distributions it may pollute the Makefile.ad unnecessarily.
694 This directive is optional. The <source> may be a single file, a single
695 directory or a regular expression which will match several files and/or
696 directories. The <destination> is optional. If it is omitted then
697 the <source> will be copied into the same location in the distribution.
698 If the <destination> is provided the <source> will be copied into the
703 include apps/foobar/README README
705 include lib/libfoobar lib/foobarlib
707 include scripts/foobar.sh foo.sh
710 Will include the file 'apps/foobar/README' into the top distribution
711 directory in the name 'README', the directory 'lib/libfoo' into same
712 location in distribution, the directory 'lib/libfoobar' into
713 'lib/foobarlib' changing the name of the directory into 'foobarlib',
714 the files and directories that match 'doc/foo*' into the same locations
715 in distribution, and finally the 'scripts/foobar.sh' into the top
716 distribution directory changing the name of the file into 'foo.sh'.
718 Note that, the 'include' directives will be processed by the Autodist
719 only when the distribution is packaged (@pxref{Creating distribution, , , , }). When preparing the source
720 tree for configuration and compilation (@pxref{Preparing source tree, , , , })
721 the 'include' directives are ignored. This is same behavior as with
722 Makefile.am's EXTRA_DIST.
724 If the included file or directory does not exist the Autodist will
725 give an error and stop the distribution creation. If the destination
726 file exist, it will be replaced with the included file. If the
727 destination directory already exists, the contents of the source
728 directory will be copied into the directory. Note that, the directory
729 will not be copied into the directory; if the <destination> is specified,
730 also the name of the <source> file or directory must be specified,
731 otherwise the 'include' will change the name into the one specified.
735 include lib/libfoo lib
738 In this example the 'lib/libfoo' will be included as 'lib'. If the 'lib'
739 already exists, this effectively copies the contents of the 'lib/libfoo'
740 into 'lib'. In order to include the directory with same name, the
741 name must be specified.
745 include lib/libfoo lib/libfoo
746 include lib/foobar new_lib/foobar
749 This will include the 'lib/libfoo' into 'lib/libfoo' in distribution,
750 and 'lib/foobar' into 'new_lib/foobar' in distribution.
753 @section Directive: exclude <filename> [...]
755 The 'exclude' directive can be used to exclude files and directories from
756 the distribution. This directive is optional. This directive is
757 processed before processing the 'include' directive. The <filename>
758 can be a single file, a single directory or a regular expression that
759 will match several files and/or directories.
767 This will exclude the file 'README' and anything that match 'doc/client*'.
770 @section Directive: noprocess <filename> [...]
772 The 'noprocess' directive can be used to tell Autodist specificly not to
773 process a file. The Autodist will not process the file during
774 preparation or during distribution packaging. This directive is optional.
775 One or more file can be specified in the 'noprocess' directive. Zero or
776 more 'noprocess' directives can be used in distribution. The <filename>
777 can be a single file or a regular expression that will match several files.
778 Note that, in current Autodist version 'noprocess' cannot be used to
783 noprocess autodist.texi
787 Autodist will not process 'autodist.texi' file, and any file that match
788 'apps/foo/*'. Note that, any subdirectory under 'apps/foo/' will not
789 match, and will be processed.
791 Also note that, 'noprocess' directive cannot be used to disallow
792 processing of any file with '.ad' suffix.
795 @section Directive: pre-hook <filename> [...]
797 The 'pre-hook' directive can be used define additional scripts that
798 will be run before the source tree is prepared. This directive is
799 optional. One or more scripts may be defined in one 'pre-hook' directive.
800 Zero or more 'pre-hook' directives may be set for distribution. The
801 'pre-hook' hook will be run immediately after invoking Autodist to start
802 preparing the source tree for configuration and compilation (@pxref{Preparing source tree, , , , }).
804 The scripts will get three (3) command line arguments when Autodist
805 executes the script: distribution name, distribution version and package
806 name of distribution. The script may use these arguments if it needs them.
809 @section Directive: post-hook <filename> [...]
811 The 'post-hook' directive can be used define additional scripts that
812 will be run after the source tree is prepared. This directive is
813 optional. One or more scripts may be defined in one 'post-hook' directive.
814 Zero or more 'post-hook' directives may be set for distribution. The
815 'post-hook' hook will be run immediately after the Autodist has finished
816 preparing the source three for configuration and compilation (@pxref{Preparing source tree, , , , }). The Autodist will exit after it has run the
819 The scripts will get three (3) command line arguments when Autodist
820 executes the script: distribution name, distribution version and package
821 name of distribution. The script may use these arguments if it needs them.
824 @section Directive: pre-process-dist-hook <filename> [...]
826 The 'pre-process-dist-hook' directive can be used define additional
827 scripts that will be run when Autodist has started distribution creation.
828 This directive is optional. One or more scripts may be defined in one
829 'pre-process-dist-hook' directive. Zero or more 'pre-process-dist-hook'
830 directives may be set for distribution. The 'pre-process-dist-hook' hook
831 will be run immediately after the Autodist has created the distribution
832 directory but has not yet started any distribution processing.
834 The scripts will get four (4) command line arguments when Autodist
835 executes the script: distribution name, distribution version, package
836 name of distribution and destination distribution directory name. The
837 script may use these arguments if it needs them.
840 @section Directive: post-process-dist-hook <filename> [...]
842 The 'post-process-dist-hook' directive can be used define additional
843 scripts that will be run when Autodist has finished distribution
844 processing. This directive is optional. One or more scripts may be
845 defined in one 'post-process-dist-hook' directive. Zero or more
846 'post-process-dist-hook' directives may be set for distribution. The
847 'post-process-dist-hook' hook will be run immediately after the Autodist
848 has finished processing the destination distribution directory but has not
849 yet created the distribution package.
851 The scripts will get four (4) command line arguments when Autodist
852 executes the script: distribution name, distribution version, package
853 name of distribution and destination distribution directory name. The
854 script may use these arguments if it needs them.
857 @section Directive: pre-dist-hook <filename> [...]
859 The 'pre-dist-hook' directive can be used define additional scripts that
860 will be run when Autodist has started distribution creation. This directive
861 is optional. One or more scripts may be defined in one 'pre-dist-hook'
862 directive. Zero or more 'pre-dist-hook' directives may be set for
863 distribution. The 'pre-dist-hook' hook will be run immediately after
864 the Autodist has started distribution creation, but has not yet created
865 the distribution directory. This hook is run before 'pre-process-dist-hook'.
867 The scripts will get four (4) command line arguments when Autodist
868 executes the script: distribution name, distribution version, package
869 name of distribution and destination distribution directory name. The
870 script may use these arguments if it needs them.
873 @section Directive: post-dist-hook <filename> [...]
875 The 'post-dist-hook' directive can be used define additional scripts that
876 will be run when Autodist has finished distribution creation. This
877 directive is optional. One or more scripts may be defined in one
878 'post-dist-hook' directive. Zero or more 'post-dist-hook' directives may
879 be set for distribution. The 'post-dist-hook' hook will be run
880 immediately after the Autodist has finished creating the distribution
881 package. This is the last hook Autodist runs.
883 The scripts will get four (4) command line arguments when Autodist
884 executes the script: distribution name, distribution version, package
885 name of distribution and destination distribution directory name. The
886 script may use these arguments if it needs them.
889 @section Running hooks
891 The Autodist runs the hooks in the following order:
893 Preparing source tree for configuration and compilation:
896 <...Autodist started...>
900 <...Autodist exits...>
903 Creating distribution:
906 <...Autodist started...>
908 <...distribution directory created...>
909 pre-process-dist-hook
910 <...processing all files, processing excludes and includes...>
911 post-process-dist-hook
912 <...creating distribution package...>
914 <...Autodist exits...>
917 When creating distribution the 'pre-hook' and 'post-hook' are not run.
920 @section Example distfile
922 The following is a simple distfile example. The example assumes that the
923 distdefs prefix is 'SILC'.
926 # SILC Client distribution
929 bug-report silc-client-bugs@@silcnet.org
931 inherit platform-unix
932 inherit platform-win32
933 define SILC_DIST_CLIENT
934 define SILC_DIST_CLIENTLIB
935 define SILC_DIST_IRSSI
938 pre-hook scripts/client-pre-run
939 post-process-dist-hook scripts/client-post-process
940 post-dist-hook scripts/client-post-dist-bin
944 * configure.ad files:: configure script for creating configure.ac
948 @node configure.ad files
949 @section configure.ad files
951 Autodist creates 'configure.ac' file from the 'configure.ad' file. The
952 'configure.ad' file is a rather normal 'configure.ac' except that it accepts
953 also Autodist macros. Autodist also supports configure script fragments,
954 also named as 'configure.ad'. Any 'configure.ad' file in the source tree
955 can be incorporated into the the top 'configure.ad' file. Sometimes it may
956 be useful to split a large configure script into smaller fragments.
957 Especially in multi distribution system where certain libraries or features
958 can be excluded from certain distributions it may be useful to handle
959 their configuration from a configure fragment. If the library is
960 excluded then also its configuration can be excluded.
962 If the software project already has a 'configure.ac' or 'configure.in'
963 file, the 'configure.ad' can be created by simply renaming the current
964 file to 'configure.ad'. In this case the current configure script
965 must be edited to support Autodist. This is done by replacing the
966 'AC_INIT' to 'AD_INIT'. After specifying the 'AD_INIT' as the first
967 macro in the 'configure.ad', the Autodist support has been fully
968 integrated into the software project.
970 If your software project is going to use configure fragments, then
971 also Autodist macro 'AD_INCLUDE_CONFIGURE' must be used. Autodist will
972 automatically combine the fragments with the top 'configure.ac' script.
973 To exclude a 'configure.ad' fragment from a distribution use the distdef
974 conditionals inside the 'configure.ad' fragment file. If the distdef is
975 not defined the fragment will be excluded automatically.
977 The following macros are available in current Autodist version.
981 The 'AD_INIT' macro is used in place of Autoconf macro 'AC_INIT'. The
982 'AD_INIT' must be the first macro in the 'configure.ad', just like the
983 'AC_INIT' macro in 'configure.ac'. The AD_INIT macro is used to deliver
984 the distribution names, distribution version, package name and bug-report
985 email address to the 'configure.ac' file that Autodist will create.
986 The 'AC_INIT' macro must not be used in 'configure.ad' file.
988 This macro is mandatory and Autodist will exit with error if it is not
989 specified in 'configure.ad'. This macro has no arguments.
993 @defmac AD_INCLUDE_CONFIGURE
995 This macro is used to tell Autodist that it should include any other
996 'configure.ad' fragment that is found from the source tree into the
997 top 'configure.ad' file. Note that, the 'configure.ad' fragments will
998 be incorporated at the location where this macro is used in the
999 'configure.ad'. Usually this macro is placed just before the Autoconf
1000 macro 'AC_OUTPUT'. This macro has no arguments.
1002 Note that, the 'configure.ad' fragments are not real full featured
1003 configure scripts. They must not use 'AD_INIT', 'AD_INCLUDE_CONFIGURE',
1004 'AC_INIT' or any other initialization macros.
1009 * Makefile.ad files:: Makefile.ad for creating Makefile.am
1013 @node Makefile.ad files
1014 @section Makefile.ad files
1016 Autodist creates 'Makefile.am' files from 'Makefile.ad' files. A software
1017 project do not need to use 'Makefile.ad' files if there is no need to
1018 use distdef conditionals inside makefiles. Usually a multi distribution
1019 software project, however will need to define certain things to different
1020 distributions. In these cases 'Makefile.ad' file needs to be created.
1022 Even though it would be possible to use distdef conditionals also inside
1023 'Makefile.am' files, Autodist does not process 'Makefile.am' files when
1024 preparing the source tree for configuration and compilation (@pxref{Preparing source tree, , , , }). Thus, the prepared environment would not be
1025 identical to the created distribution package (when the 'Makefile.am'
1026 will be processed), and configuration and compilation would be inconsistent.
1027 Basic rule is, if you need distdefs (@pxref{Distdefines, , , , }) inside
1028 makefiles, put them inside 'Makefile.ad' file.
1032 * Other .ad files:: Other files with .ad suffix
1036 @node Other .ad files
1037 @section Other .ad files
1039 Any file in the source tree can have the '.ad' suffix appended. Autodist
1040 will process any file that has the suffix when the source tree is
1041 prepared for configuration and compilation (@pxref{Preparing source tree, , , , }). If the files have distdef conditionals the Autodist will process them.
1042 The files will have the '.ad' suffix removed.
1044 Basic rule is, if you need to process some file when preparing the
1045 source tree for configuration and compilation, add '.ad' suffix to it.
1046 Distdefs (@pxref{Distdefines, , , , }) can be used in any file in source
1047 tree but without '.ad' suffix Autodist will not process those files during
1048 preparation. They will be processed when creating the distribution package.
1049 If you need processed files during configuration or compilation then they
1050 need to have '.ad' suffix.
1052 Note that, the distdef format used in these files must be the non-source
1056 * Distdefines:: Using distdefs in files
1061 @section Using distribution defines (distdefs)
1063 Distribution defines, or distdefs from now on, are used to define inside
1064 a file what will be included in the distribution. Distribution may define
1065 many different distdefs, for example, based on feature sets, platforms, or
1066 for other similar reasons. If distdef is not defined for the distribution
1067 but is used in a file, anything inside the distdef in that file will be
1068 removed when the distribution is packaged (@pxref{Creating distribution, , , , }). This guarantees that only the files, directories and file content
1069 (such as source code) that is supposed to be delivered with the distribution
1070 are delivered. Delivering files or code accidentally in the distribution
1073 All other files, except files ending with '.ad' suffix are processed for
1074 distdefs only when the distribution is packaged. Files ending with '.ad'
1075 suffix are processed for distdefs when preparing the source tree for
1076 configuration and compilation (@pxref{Preparing source tree, , , , }).
1078 By default the distdefs are named '_DIST_XXX', where 'XXX' is the name of
1079 distdef. However, many projects will want to define their own prefix
1080 for distdefs in the 'autodist.conf' configuration file (@pxref{autodist.conf, , , , }).
1081 In the following examples a prefix 'SILC' is used, hence the prefix for
1082 the distdefs are 'SILC_DIST_'.
1084 The basic format for the distdefs are as follows:
1087 #ifdef SILC_DIST_DEFINE
1088 #endif SILC_DIST_DEFINE
1090 #ifndef SILC_DIST_DEFINE
1091 #endif SILC_DIST_DEFINE
1093 #ifdef SILC_DIST_DEFINE
1094 #else !SILC_DIST_DEFINE
1095 #endif SILC_DIST_DEFINE
1097 #ifndef SILC_DIST_DEFINE
1098 #else SILC_DIST_DEFINE
1099 #endif SILC_DIST_DEFINE
1102 This format should be used only in non-source files, as for example C and
1103 C++ compilers will not like this format inside a file. In source files
1104 a compiler friendly format, defined below, should be used.
1107 #ifdef SILC_DIST_DEFINE
1108 #endif /* SILC_DIST_DEFINE */
1110 #ifndef SILC_DIST_DEFINE
1111 #endif /* SILC_DIST_DEFINE */
1113 #ifdef SILC_DIST_DEFINE
1114 #else /* !SILC_DIST_DEFINE */
1115 #endif /* SILC_DIST_DEFINE */
1117 #ifndef SILC_DIST_DEFINE
1118 #else /* SILC_DIST_DEFINE */
1119 #endif /* SILC_DIST_DEFINE */
1122 Note that, only the format defined above is supported. Other more complex
1123 use of the preprocessor directives such as using '&&' and '||' in the
1124 '#ifdef' or '#ifndef' are not supported, and neither is '#elif'. Also
1125 note, that the name of the distdef in '#else' and '#endif' directives in
1126 non-source format and in source format inside C comments (/* */), and the
1127 use of '!' character in the '#else' branch of '#ifdef'" are mandatory.
1128 Also note, that the distdef conditionals must be placed at the start of
1129 the line, they must not be indented.
1131 The following example shows the use of non-source format:
1135 #ifdef SILC_DIST_SERVER
1138 #endif SILC_DIST_SERVER
1139 #ifndef SILC_DIST_CLIENT
1141 #endif SILC_DIST_CLIENT
1142 #ifdef SILC_DIST_TOOLKIT
1145 #else !SILC_DIST_TOOLKIT
1148 #ifdef SILC_DIST_CLIENT
1150 #endif SILC_DIST_CLIENT
1151 #endif SILC_DIST_TOOLKIT
1154 Say, in this example, your distribution has the SILC_DIST_CLIENT and
1155 SILC_DIST_SERVER defined, but not the SILC_DIST_TOOLKIT, the end result
1167 The lines defined specificly for the SILC_DIST_TOOLKIT, which in our
1168 example was not defined, were removed. Also lines that specificly
1169 expected certain distdefs not to be defined ('#ifndef') were removed.
1170 (Note the last remaining '\' in example above would be removed by the
1171 Autodist automatically to avoid errors with Automake.)
1173 The following example shows the use of source code format:
1177 #ifdef SILC_DIST_MPI
1180 #else /* !SILC_DIST_MPI */
1182 #endif /* SILC_DIST_MPI */
1184 #ifndef SILC_DIST_FOOBAR
1185 foobar_replacement();
1188 #else /* SILC_DIST_FOOBAR */
1190 #endif /* SILC_DIST_FOOBAR */
1193 Say, you have both SILC_DIST_MPI and SILC_DIST_FOOBAR defined, the end result
1204 Even before processing the source files with Autodist, the preprocessor
1205 will respect the preprocessor directives if the code use '#include' to
1206 include the distdef header file created by the Autodist (see
1207 'autodist.conf' (@pxref{autodist.conf, , , , })). When the distribution
1208 is packaged (@pxref{Creating distribution, , , , }) the Autodist will
1209 process the files, and will remove any line not defined to be included.
1210 The preprocessor directives will also be removed.
1212 Because the software project includes the header file with '#include' the
1213 distdef header file needs to be present in the distribution, unless it is
1214 placed inside some other '#ifdef' conditional. If the distribution is
1215 prepared but not compiled (it is packaged after preparation without
1216 compilation) then including the distdef header in the source is not
1217 necessary. Including it then in the distribution is not necessary either.
1219 The software project should not use the same name space that distdef
1220 conditionals use for other than distribution usage. The Autodist will
1221 process any line that uses the formats above and has the specified prefix
1222 (eg. 'SILC_DIST_') in those lines. Using same prefix for other purposes
1223 will produce unexpected results and invalid distributions.
1225 The following suffixes will be considered as source files by the Autodist:
1243 Using distdefs in any other file must follow the non-source format.
1246 @node Invoking Autodist
1247 @chapter Invoking Autodist
1249 The Autodist has two basic functions:
1251 1. Preparing source tree for configuration and compilation (@pxref{Preparing source tree, , , , })
1253 2. Creating distribution packages (@pxref{Creating distribution, , , , })
1255 The 'autodist' accepts the following options:
1261 Prints the help for the Autodist and exits.
1265 Prints version number and exits.
1269 Verbosely report processing.
1272 @itemx --distdir <dir>
1273 Search distributions from <dir> instead of default 'distdir'.
1276 @itemx --distdefs [<dist>]
1277 Prints distribution defines of <dist> and exits.
1281 Initializes Autodist environment. Creates the default distribution
1282 directory 'distdir', 'autodist.conf' configuration file and the
1283 default distribution 'default', then exits.
1287 Creates and packages distribution
1290 Create package compressed with gzip (default)
1293 Create also package compressed with bzip2
1296 Create also package compressed with compress
1299 Create also package compressed with zip
1305 * Preparing source tree:: Preparing source tree with Autodist
1306 * Creating distribution:: Creating distribution with Autodist
1310 @node Preparing source tree
1311 @section Preparing source tree for configuration and compilation
1313 Before distribution can be created from the source tree, the source tree
1314 must be prepared for configuration and compilation. If your project is
1315 not using Autodist, then you would do this by running perhaps 'aclocal',
1316 'autoconf', 'autoheader' and 'automake' tools manually, or you would run an
1317 'autogen.sh' script that prepares your raw source tree. With Autodist
1318 this process is performed by Autodist, and running these tools manually
1319 or using 'autogen.sh' script is not necessary.
1321 By default the 'autodist.conf' (@pxref{autodist.conf, , , , }) has defined
1322 the tools that will be run by the Autodist when preparing the source tree.
1323 These are 'aclocal', 'autoheader', 'autoconf', 'automake' and
1324 'libtoolize'. If you do not wish that Autodist runs some or any of these
1325 tools automatically, do not set them in the 'autodist.conf'. You would
1326 then need to run them manually. However, this is not recommended. If you
1327 need to run additional preparation scripts you may set your scripts either
1328 in the 'pre-hook' and/or 'post-hook' where you can run what ever
1329 additional processing you may need to prepare your source tree.
1331 By default the Autodist creates a 'default' distribution when you
1332 initialize your project by running 'autodist -i'. The 'default'
1333 distribution should be used when you are developing in your source
1334 tree. By default, the 'default' distribution cannot be packaged,
1335 however, if your project creates only one distribution you may find
1336 it more convenient to define your distribution inside the 'default'
1337 distribution and allow it to be packaged also. If your source tree
1338 will create multiple distributions, the 'default' should be used only
1339 as development distribution. You would use it when you, for example,
1340 checkout your source tree from CVS and prepare it for configuration
1341 and compilation. To prepare your source tree with the 'default'
1342 distribution run Autodist without any arguments.
1348 The Autodist will prepare your source tree. After that you may run
1349 './configure' and continue to compile with 'make'.
1351 If you do not wish to use the 'default' distribution, or you wish
1352 to do the development in a tree specificly prepared for some specific
1353 distribution, or you are preparing to create a new distribution package,
1354 you will need to run the Autodist with the distribution you wish to
1358 autodist example-distribution 1.0.3
1361 This prepares your source tree for 'example-distribution' of version
1362 '1.0.3'. After that you may run './configure' and continue to compile
1363 with 'make'. If the version is omitted the version will be '0.0'.
1364 The 'PACKAGE_VERSION' define delivered by Autoconf will contain this
1367 Note that, running Autodist for preparation merely prepares your source
1368 tree for the distribution, it does not create an actual distribution
1369 package. When preparing source tree for configuration and compilation
1370 the Autodist will process any file that ends with '.ad' suffix. It will
1371 process all 'configure.ad' and 'Makefile.ad' files for that distribution.
1372 When you run './configure' your tree will be configured for that
1373 distribution, and when you compile with 'make' it will compile for that
1376 However, the source files, or any other file (except files ending with
1377 '.ad' suffix) are not processed by the Autodist. When compiling
1378 your sources the preprocessor, however, will respect your distdef
1379 conditionals inside your source files if you '#include' the distdef header
1380 file. This way, even the compiled binaries will be compiled for that
1381 distribution, even though the source files has not yet been processed
1382 by the Autodist. Rest of the files in the distribution will be processed
1383 when you create the actual distribution package. It is guaranteed that
1384 the distribution you have prepared will behave in your source tree exactly
1385 the same way as if it was already packaged with Autodist (providing that
1386 you remember to include the distdef header file in your code).
1388 When preparing the source tree Autodist will create a file 'autodist.dist'
1389 which will contain information on the prepared distribution. When
1390 Creating the distribution that file will be read by the Autodist
1391 automatically. That file should not be removed or the distribution
1395 * Creating distribution:: Creating distribution with Autodist
1399 @node Creating distribution
1400 @section Creating distribution package(s)
1402 Before creating a new distribution package, you will need to prepare
1403 the source tree for the distribution you want to create. After preparing
1404 your source tree you will be ready to create a new distribution. The
1405 Autodist package provides a simple helper script 'makedist' that may
1406 be used to create the distribution. However, if you wish, you may
1407 run the Autodist yourself, as the 'makedist' will call Autodist anyway.
1409 To create a new distribution for the distribution you have prepared for,
1410 run first './configure' and then 'makedist'.
1416 This will run the Autodist and create a new distribution package that
1417 is archived with 'tar' and compressed with 'gzip'. If you wish to
1418 create packages also compressed with 'bzip2', 'compress' and/or 'zip'
1419 you may give one or all of the following options:
1422 makedist --bzip2 --compress --zip
1425 This example would create, in addition of 'tar.gz' package, also a
1426 'tar.bz2', 'tar.Z' and '.zip' packages. Current version of Autodist does
1427 not support archiving with 'shar'.
1429 If you wish to run additional processing for your distributions when they
1430 are being packaged you may set 'pre-process-dist-hook',
1431 'post-process-dist-hook, 'pre-dist-hook' and/or 'post-dist-hook' in your
1432 distribution file. Also note that any hooks provided by Automake in
1433 Makefiles will be run in normal manner.
1440 * Single distribution tree:: Single distribution example
1441 * Multiple distribution tree:: Multiple distributions example
1444 @node Single distribution tree
1445 @section Single distribution tree example, start to finish
1447 Lets suppose you have a simple source tree with one application,
1448 called 'foozbar' you wish to release. While you would probably suffice
1449 using Autoconf and Automake features you may still use Autodist.
1451 First, you create the default 'distdir' into your software package:
1457 Then, you create the 'configure.ad' file from your existing 'configure.ac'
1458 or 'configure.in' file. If you don't have configure script written yet,
1459 please refer to the Autoconf manual. In the 'configure.ad' you add as
1460 first macro in the file:
1466 Then, you create distribution file for your application:
1469 # Foozbar distribution
1472 bug-report foozbar-bugs@@foo.z.bar
1473 define _DIST_FOOZBAR
1476 This distribution file go into 'distdir/foozbar'.
1478 And there you go. You have succesfully integrated Autodist into your
1479 source tree. If you need to do development and you wish to use the
1480 'default' distribution for that, you should inherit the new 'foozbar'
1481 distribution in it. Add the following line in 'distdir/default':
1487 After that, you can prepare the source tree for configuration and
1488 compilation by giving:
1494 After this command you can give './configure' and 'make'.
1496 If you want to do development directly in a tree prepared for the
1497 'foozbar' distribution, or you are ready to start creating a new
1498 distribution package, you give:
1501 autodist foozbar 1.0
1504 After this command you can give './configure' and 'make'.
1506 To create the distribution package, you will give:
1512 The end result will be a 'foozbar-1.0.tar.gz' package.
1515 @node Multiple distribution tree
1516 @section Multiple distribution tree example, start to finish
1518 Lets suppose you have a source tree from which you create multiple
1519 distributions, say three. If you really have a such source tree you
1520 must have by now noticed the difficulty of maintaining such a source tree
1521 and problems with controlling the distributions. Maybe you have sufficed
1522 with Autoconf and Automake, or perhaps you have created your own scripts
1523 that carry out the kludges. No more, for Autodist is here.
1525 First, you integrate Autodist into your tree by creating the distributions
1526 directory 'distdir':
1532 Then, you create the 'configure.ad' file from your existing 'configure.ac'
1533 or 'configure.in' file. If you don't have configure script written yet,
1534 please refer to the Autoconf manual. In the 'configure.ad' you add as
1535 first macro in the file:
1541 You then continue with creating the distribution files for your three
1542 distributions. Let's name them 'foozbar', 'libfoozbar' and 'nomad'.
1543 We will also create a common template that all distributions inherit.
1546 # Foozbar distribution
1549 bug-report foozbar-bugs@@foo.z.bar
1551 define _DIST_FOOZBAR
1555 # libfoozbar distribution
1557 bug-report libfoozbar-bugs@@foo.z.bar
1559 define _DIST_LIBFOOZBAR
1563 # Nomad distribution
1565 package nomad-the-server
1566 bug-report nomad-bugs@@foo.z.bar
1570 define _DIST_NOMAD_LIB
1586 You put the distribution files in the 'distdir' directory. In addition
1587 you will be doing development in the source tree using the 'default'
1588 distribution, you will add the new distributions to the 'distdir/default':
1596 To prepare the source tree for configuration and compilation you would
1603 This will prepare your source tree for configuration and compilation. Since
1604 the 'default' distribution inherits all distributions your development
1605 source tree will have all of them included. If you do not want to do this
1606 then don't inherit them in the 'default', but run the autodist specificly
1607 for the distributions, for example:
1613 Since all the distributions inherit the 'common' distribution they get
1614 all the distdefs that the 'common' defines. In this example various distdefs
1615 has been defined. You would use them in your code and in your makefiles
1616 to control various things. For example, let's say the 'common' distdefs
1617 control what directories distributions have. An example 'Makefile.ad'
1630 Perhaps the 'Makefile.ad' in 'lib' subdirectory could define something
1642 #ifdef _DIST_NOMAD_LIB
1644 #endif _DIST_NOMAD_LIB
1645 #ifdef _DIST_LIBFOOZBAR
1647 #endif _DIST_LIBFOOZBAR
1650 Since the 'nomad' distribution undefined the '_DIST_CRYPTO' distdef it
1651 would not have the 'cryptolib' in its distribution. Clearly Nomad
1652 don't need it. In addition of using the distdefs just in the makefiles
1653 you may want to use them in the source code as well:
1659 /* Initialize math library */
1661 #endif /* _DIST_MATH */
1666 After an intensive development period you're ready to create new releases.
1667 Let's say you're going to release all distributions:
1669 First you release Foozbar 0.5.1:
1672 autodist foozbar 0.5.1
1676 The end result is two files: 'foozbar-0.5.1.tar.gz' and
1677 'foozbar-0.5.1.tar.bz2'.
1679 Then you continue with libfoozbar and Nomad:
1682 autodist libfoozbar 1.0.5
1689 The end results are: 'libfoozbar-1.0.5.tar.gz' and 'nomad-2.0.tar.gz'.