Previous: , Up: Invoking gnulib-tool   [Contents][Index]

3.15 Avoiding unnecessary checks and compilations

In some cases, a module is needed by another module only on specific platforms. But when a module is present, its Autoconf checks are always executed, and its additions are always enabled. So it can happen that some Autoconf checks are executed and some source files are compiled, although no other module needs them on this particular platform, just in case some other module would need them.

The option ‘--conditional-dependencies’ enables an optimization of configure checks and snippets that avoids this. With this option, whether a module is considered “present” is no longer decided when gnulib-tool is invoked, but later, when configure is run. This applies to modules that were added as dependencies while gnulib-tool was run; modules that were passed on the command line explicitly are always “present”.

For example, the timegm module needs, on platforms where the system’s timegm function is missing or buggy, a replacement that is based on a function mktime_internal. The module mktime-internal that provides this function provides it on all platforms. So, by default, the file mktime-internal.c will be compiled on all platforms, even on glibc and BSD systems which have a working timegm function. When the option ‘--conditional-dependencies’ is given, on the other hand, and if mktime-internal was not explicitly required on the command line, the file mktime-internal.c will only be compiled on the platforms where the timegm needs them.

Conditional dependencies are specified in the module description by putting the condition on the same line as the dependent module, enclosed in brackets. The condition is a boolean shell expression that can assume that the snippet from the module description has already been executed. In the example above, the dependency from timegm to mktime-internal is written like this:

mktime-internal [test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1]

Note: The option ‘--conditional-dependencies’ cannot be used together with the option ‘--with-tests’. It also cannot be used when a package uses gnulib-tool for several subdirectories, with different values of ‘--source-base’, in the scope of a single file.

Previous: Bundling the unit tests of the Gnulib modules, Up: Invoking gnulib-tool   [Contents][Index]