diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2019-02-20 17:02:27 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2019-02-22 12:23:15 +0200 |
commit | 4da4ddea3a40049f90c6d2bfb27bc3de564160c8 (patch) | |
tree | 839a49d9a3d1cb75aae16acf0348825c0c760715 | |
parent | c8a6eb71afdf2c9572fcdc7b617b1356b2f75daa (diff) | |
download | dico-4da4ddea3a40049f90c6d2bfb27bc3de564160c8.tar.gz dico-4da4ddea3a40049f90c6d2bfb27bc3de564160c8.tar.bz2 |
Avoid introducing gnulib dependencies to libdico
After pulling updates from gnulib, it was discovered that it had added
an unwanted dependency to the libdico. The dependency was added b
redefining fseek to rpl_fseek in the config.h. Of course, that's quite
OK for user programs and in fact that's one of the purposes of gnulib,
so it's doing its job all right. However, this kind of depedencies is
not acceptable in installable libraries, such as libdico.
There are two ways of fixing this: (1) by including libgnu to the
libdico, or (2) by creating pristine (i.e. stripped of any gnulib
stuff) version of config.h and using it in the library sources.
The first approach was used in mailutils for the libmu_aux convenience
library. However, in dico I wouldn't like to introduce additional
dependencies to the installable libraries and modules, therefore
second approach has been chosen.
Two separare configuration headers are introduced:
include/prog/config.h
Configuration header with gnulib dependencies. It is used by
libxdico, and user-space programs: dico, dicod, idxgcide and
some test programs.
include/lib/config.h
Pristine header, free from any gnulib additions. It is used by all
installable libraries, including dicod modules.
In order to create pristine header, bootstrap uses specially prepared
temporary edition of configure.ac, which is stripped off any gl_.*
statements.
This approach introduces additional difficulties. The two header files
are of course listed in the AC_CONFIG_HEADERS statement in
configure.ac. Autotools give precedence to the first one. It is the
only file for which autoheader creates the .h.in template. Further,
automake creates in each Makefile.am the DEFAULT_INCLUDES statement,
which lists the directory part of the first header, and this value is
used in the compiler command line. This means that to include the
pristine header, its path prefix needs to be specified.
To avoid this, the nostdinc option is passed to AM_INIT_AUTOMAKE.
As a side effect, it makes it impossible to build libltdl in the
recursive mode (although its Makefile.am pretends otherwise). Thus,
libltdl is built in nonrecursive mode from the main Makefile.am.
Similar problem occurs with the gnulib itself, although in this case
its bootstrapping tool provides sufficient mechanisms to help overcome
it. Gnulib is built as a sub-library of libxdico. As a side effect,
the libextra library is no longer needed.
Another side effect is that the rewritten bootstrap script made it
possible to use gnulib-tool directly, instead of using
gnulib/build-aux/bootstrap wrapper.
Following bugs are fixed by this change:
https://puszcza.gnu.org.ua/bugs/?416
https://puszcza.gnu.org.ua/bugs/?417
https://puszcza.gnu.org.ua/bugs/?418
Almost all files in the project are affected by this change. However,
some changes are pure bugfixes. These are:
* lib/mergesort.c (mergesort): Rename to dico_mergesort to avoid name
clash on Free and OpenBSD.
* lib/stream.c (dico_stream_getdelim): Fix memory reallocation
algorithm.
* lib/utf8.c (utf8_wc_strstr): Reset errno to 0.
* lib/libi18n.c: Don't depend on gnu/configmake.h
* modules/wordnet/module.ac: Move definition of WORDNET_COND out of
conditional context. This fixes the functionality of the
configure --without-wordnet option.
Some obsolete and unused files have been removed. These are:
* include/gjdict.xbm
* lib/bushu.dat
* lib/bushu.h
* lib/cursor.xbm
* lib/jiscvt.c
* makedict/
Main set of changes is:
* bootstrap: Mostly rewritten as described above.
* GNUmakefile: New file for the ease of maintenance.
* maint/bootstrap.mk: New file.
* gnulib.modules: Moved to maint/
* maint/printflike: New file. Lists printf-like functions for gettext.
* configure.boot: Use AC_CONFIG_HEADERS with two header files.
Use nostdinc option to AM_INIT_AUTOMAKE.
(LTDL_INIT): Use nonrecursive option.
(DICO_PROG_CONFIG,DICO_LIB_CONFIG)
(DICO_PROG_INCLUDES,DICO_MODULE_INCLUDES): New substitution variables.
(GRECS_HOST_PROJECT_INCLUDES): Fix value.
(COND_LIBDICOSASL): New conditional.
* Makefile.am: Build libltdl.
* lib/Makefile.am: Move convenience libraries to another
directory. Build only libdico.
* dico/Makefile.am: Fix LDADD and includes.
* dicod/Makefile.am: Likewise.
* dicod/tests/Makefile.am: Likewise.
* lib/tests/Makefile.am: Likewise.
* modules/*/Makefile.am: Likewise.
The directory struture is reorganized and the sources of convenience
libraries moved to a separate directory:
* xdico/Makefile.am: New file
* xdico/appi18n.c
* xdico/gsaslstr.c
* xdico/iputil.c
* xdico/timer.c
* xdico/userprivs.c
* xdico/xalloc-die.c
* xdico/xhostname.c
* xdico/xscript.c
* xdico/xstream.c
* xdico/xtkn.c
* xdico/xutil.c: All moved from lib
* xdico/gnu/Makefile.am: New file.
* xdico/gnu: Gnulib sources imported to this directory.