Replace paragraph that was explaining old way of handling LIBOBJS.
[gnulib.git] / doc / gnulib-tool.texi
index c2ea0a6..bd66478 100644 (file)
@@ -31,7 +31,7 @@ a real run without changing anything.
 * Initial import::              First import of Gnulib modules.
 * Modified imports::            Changing the import specification.
 * Simple update::               Tracking Gnulib development.
-* CVS Issues::                  Integration with CVS.
+* VCS Issues::                  Integration with Version Control Systems.
 @end menu
 
 
@@ -60,7 +60,7 @@ Module list with included dependencies:
 File list:
   lib/dummy.c
   lib/strdup.c
-  lib/string_.h
+  lib/string.in.h
   m4/absolute-header.m4
   m4/extensions.m4
   m4/gnulib-common.m4
@@ -70,7 +70,7 @@ Creating directory ./lib
 Creating directory ./m4
 Copying file lib/dummy.c
 Copying file lib/strdup.c
-Copying file lib/string_.h
+Copying file lib/string.in.h
 Copying file m4/absolute-header.m4
 Copying file m4/extensions.m4
 Copying file m4/gnulib-common.m4
@@ -218,7 +218,7 @@ as @file{top_srcdir/lib}.  For example:
 
 @example
 ...
-AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_builddir)/lib
+AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib
 ...
 LDADD = lib/libgnu.a
 ...
@@ -232,22 +232,21 @@ use of @code{strdup}.
 In the usual case where Autoconf is creating a @file{config.h} file,
 you should include @file{config.h} first, before any other include
 file.  That way, for example, if @file{config.h} defines
-@samp{restrict} to be the empty string on a pre-C99 host, the
-definition is consistent for all include files.
-
-You should include Gnulib-provided headers before system headers,
-so that Gnulib-provided headers can adjust how a system header
-behaves.
-
-A final word of warning: Gnulib currently assumes it will be
-responsible for @emph{all} functions that end up in the Autoconf
-@code{@@LIBOBJS@@} variables (and/or @code{@@LTLIBOBJS@@} if using
-Libtool), e.g., those specified in @code{AC_REPLACE_FUNCS} in your
-@file{configure.ac}.  Therefore, if you have any functions which are
-not covered by Gnulib which need that treatment, you have to
-essentially reimplement AC_REPLACE_FUNCS using different names; for an
-example, see the Findutils sources.  Perhaps this will be improved in
-the future.
+@samp{restrict} to be the empty string on a pre-C99 host, or a macro
+like @samp{_FILE_OFFSET_BITS} that affects the layout of data
+structures, the definition is consistent for all include files.
+Also, on some platforms macros like @samp{_FILE_OFFSET_BITS} and
+@samp{_GNU_SOURCE} may be ineffective, or may have only a limited
+effect, if defined after the first system header file is included.
+
+Finally, note that you can not use @code{AC_LIBOBJ} or
+@code{AC_REPLACE_FUNCS} in your @file{configure.ac} and expect the
+resulting object files to be automatically added to @file{lib/libgnu.a}.
+This is because your @code{AC_LIBOBJ} and @code{AC_REPLACE_FUNCS} invocations
+from @file{configure.ac} augment a variable @code{@@LIBOBJS@@} (and/or
+@code{@@LTLIBOBJS@@} if using Libtool), whereas @file{lib/libgnu.a}
+is build from the contents of a different variable, usually
+@code{@@gl_LIBOBJS@@} (or @code{@@gl_LTLIBOBJS@@} is using Libtool).
 
 
 @node Modified imports
@@ -336,21 +335,34 @@ $ gnulib-tool --import
 
 This will create, update or remove files, as needed.
 
-@node CVS Issues
-@section CVS Issues
+@node VCS Issues
+@section Issues with Version Control Systems
+
+If a project stores its source files in a version control system (VCS),
+such as CVS, SVN, or Git, one needs to decide which files to commit.
 
 All files created by @code{gnulib-tool}, except @file{gnulib-cache.m4},
 should be treated like generated source files, like for example a
 @file{parser.c} file is generated from @file{parser.y}.
 
+@itemize
+
+@item
 In projects which commit all source files, whether generated or not, into
-CVS, the @code{gnulib-tool} generated files should all be committed.
+their VCS, the @code{gnulib-tool} generated files should all be committed.
+
+Gnulib also contains files generated by @command{make} (and removed by
+@code{make clean}), using information determined by @command{configure}
+They should not be checked into the VCS, but instead added to
+@file{.cvsignore}.  When you have a Gnulib source file of the form
+@file{lib/foo_.h}, the corresponding @file{lib/foo.h} is such a file.
 
-In projects which customarily omit from the CVS all files that generated
+@item
+In projects which customarily omit from their VCS all files that are generated
 from other source files, all these files and directories would not be
-added into CVS.  The only file that must be added to CVS is
+added into the VCS.  The only file that must be added to the VCS is
 @file{gnulib-cache.m4} in the M4 macros directory.  Also, the script for
-restoring files not in CVS, customarily called @file{autogen.sh} or
+restoring files not in the VCS, customarily called @file{autogen.sh} or
 @file{bootstrap.sh}, will typically contain the statement for restoring
 the omitted files:
 
@@ -362,3 +374,5 @@ The @samp{--update} option operates much like the @samp{--import} option,
 but it does not offer the possibility to change the way Gnulib is used.
 Also it does not report in the ChangeLogs the files that it had to add
 because they were missing.
+
+@end itemize