xref: /freebsd/contrib/ntp/sntp/libopts/README (revision e0c4386e7e71d93b0edc0c8fa156263fc4a8b0b6)
1        THIS TARBALL IS NOT A FULL DISTRIBUTION.
2
3The contents of this tarball is designed to be incorporated into
4software packages that utilize the AutoOpts option automation package
5and are intended to be installed on systems that may not have libopts
6installed.  It is redistributable under the terms of either the LGPL
7(see COPYING.lgpl) or under the terms of the advertising clause free BSD
8license (see COPYING.mbsd).
9
10Usage Instructions for autoconf/automake/libtoolized projects:
11
121. Install the unrolled tarball into your package source tree,
13   copying ``libopts.m4'' to your autoconf macro directory.
14
15   In your bootstrap (pre-configure) script, you can do this:
16
17      rm -rf libopts libopts-*
18      gunzip -c `autoopts-config libsrc` | tar -xvf -
19      mv -f libopts-*.*.* libopts
20      cp -fp libopts/m4/*.m4 m4/.
21
22   I tend to put my configure auxiliary files in "m4".
23   Whatever directory you choose, if it is not ".", then
24   be sure to tell autoconf about it with:
25
26      AC_CONFIG_AUX_DIR(m4)
27
28   This is one macro where you *MUST* remember to *NOT* quote
29   the argument.  If you do, automake will get lost.
30
312. Add an invocation of either LIBOPTS_CHECK or LIBOPTS_CHECK_NOBUILD
32   to your configure.ac file.  See LIBOPTS_CHECK: below for details.
33
343. Add the following to your top level ``Makefile.am'' file:
35
36      if NEED_LIBOPTS
37         SUBDIRS += $(LIBOPTS_DIR)
38      endif
39
40   where ``<...>'' can be whatever other files or directories you may
41   need.  The SUBDIRS must be properly ordered.  *PLEASE NOTE* it is
42   crucial that the SUBDIRS be set under the control of an automake
43   conditional.  To work correctly, automake has to know the range of
44   possible values of SUBDIRS.  It's a magical name with magical
45   properties.  ``NEED_LIBOPTS'' will be correctly set by the
46   ``LIBOPTS_CHECK'' macro, above.
47
484. Add ``$(LIBOPTS_CFLAGS)'' to relevant compiler flags and
49   ``$(LIBOPTS_LDADD)'' to relevant link options whereever
50   you need them in your build tree.
51
525. Make sure your object files explicitly depend upon the
53   generated options header file.  e.g.:
54
55     $(prog_OBJECTS) : prog-opts.h
56     prog-opts.h : prog-opts.c
57     prog-opts.c : prog-opts.def
58         autogen prog-opts.def
59
606. *OPTIONAL* --
61   If you are creating man pages and texi documentation from
62   the program options, you will need these rules somewhere, too:
63
64     man_MANS = prog.1
65     prog.1 : prog-opts.def
66         autogen -Tagman-cmd.tpl -bprog prog-opts.def
67
68     invoke-prog.texi : prog-opts.def
69         autogen -Tagtexi-cmd.tpl prog-opts.def
70
71If your package does not utilize the auto* tools, then you
72will need to hand craft the rules for building the library.
73
74LIBOPTS_CHECK:
75
76The arguments to both macro are a relative path to the directory with
77the libopts source code.  It is optional and defaults to "libopts".
78These macros work as follows:
79
801.  LIBOPTS_CHECK([libopts/rel/path/optional])
81
82    Adds two command-line options to the generated configure script,
83    --enable-local-libopts and --disable-libopts-install.  AC_SUBST's
84    LIBOPTS_CFLAGS, LIBOPTS_LDADD, and LIBOPTS_DIR for use in
85    Makefile.am files.  Adds Automake conditional NEED_LIBOPTS which
86    will be true when the local copy of libopts should be built.  Uses
87    AC_CONFIG_FILES([$libopts-dir/Makefile]) to cause the local libopts
88    into the package build.  If the optional relative path to libopts is
89    not provided, it defaults to simply "libopts".
90
912.  LIBOPTS_CHECK_NOBUILD([libopts/rel/path/optional])
92
93    This variant of LIBOPTS_CHECK is useful when multiple configure.ac
94    files in a package make use of a single libopts tearoff.  In that
95    case, only one of the configure.ac files should build libopts and
96    others should simply use it.  Consider this package arrangment:
97
98    all-tools/
99      configure.ac
100      common-tools/
101        configure.ac
102        libopts/
103
104    The parent package all-tools contains a subpackage common-tools
105    which can be torn off and used independently.  Programs configured
106    by both configure.ac files link against the common-tools/libopts
107    tearoff, when not using the system's libopts.  The top-level
108    configure.ac uses LIBOPTS_CHECK_NOBUILD([common-tools/libopts]),
109    while common-tools/configure.ac uses LIBOPTS_CHECK.  The difference
110    is LIBOPTS_CHECK_NOBUILD will never build the libopts tearoff,
111    leaving that to the subpackage configure.ac's LIBOPTS_CHECK.
112    Specifically, LIBOPTS_CHECK_NOBUILD always results in the
113    NEED_LIBOPTS Automake conditional being false, and does not invoke
114    AC_CONFIG_FILES(path-to-libopts/Makefile).
115
116LICENSING:
117
118This material is Copyright (C) 1992-2018 by Bruce Korb.  You are
119licensed to use this under the terms of either the GNU Lesser General
120Public License (see: COPYING.lgpl), or, at your option, the modified
121Berkeley Software Distribution License (see: COPYING.mbsd).  Both of
122these files should be included with this tarball.
123