[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#884798: lintian could complain about pkg-config uses that fail to use $ac_tool_prefix



Package: lintian
Severity: wishlist
User: helmutg@debian.org
Usertags: rebootstrap

Hi lintian developers,

I would like to discuss a potentially new tag. If this makes sense, I'd
hope that someone can turn it into code. If not, please close as
wontfix.

After sending like 1000 cross build patches, I can tell that wrong use
of pkg-config in autotools projects is common and poses a significant
fraction of said patches. The common theme is some upstream is using

    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)

or some variant of it in its configure.ac or configure.in. This causes
PKG_CONFIG to be initialized to pkg-config. A later PKG_CHECK_MODULES
will pick up this value rather than ${ac_tool_prefix}pkg-config. Using
the wrong pkg-config typically results in cross builds failing to find
.pc files. This is common.

A slightly better way would be using AC_PATH_TOOL (with the same
arguments) and the only difference here is considering $ac_tool_prefix.
The recommended way is using the PKG_PROG_PKG_CONFIG macro from
pkg-config tough. This macro will result in an empty PKG_CONFIG variable
if pkg-config happens to not be found rather than the "no" value
depicted above.

Some configure.ac and configure.in use plain pkg-config directly and
this tends to be broken as well. The immediate fix often is inserting
soe PKG_PROG_PKG_CONFIG and then using $PKG_CONFIG rather than
pkg-config.

Of course this is an upstream-only tag, and
https://codesearch.debian.net/search?q=AC_PATH_PROG.*pkg-config
shows just how common it is. Would this be suitable for a lintian tag?

If yes, what would be a good check? Should it just check the toplevel
configure.ac and configure.in or any file found on any directory level?
Should it just complain about the typical

    AC_PATH_PROG\s*\(\s*\[?\s*\S*\s*\]?\s*[A-Z_]+\s*\[?\s*pkg-config\s*[,)]

or rather simply flag any use of pkg-config? The latter would cover the
correct but not very idiomatic

    AC_PATH_TOOL(PKG_CONFIG, pkg-config, no)

as well. Potentially flagging

    (\$\(|`)pkg-config

may help to catch the hard coded variants. I haven't performed a whole
archive-analysis yet, so I cannot tell about the amount of fpos to be
expected.

Let me also help draft a tag description:

    The package uses AC_PATH_PROG to discover pkg-config. This macro
    fails to select the correct pkg-config for cross compilation. A
    better macro for discovering pkg-config is PKG_PROG_PKG_CONFIG from
    pkg.m4.

And for the other case maybe:

    The package directly invokes pkg-config without considering an
    architecture prefix ($ac_tool_prefix) for cross compilation. A
    better way would be discovering the correct pkg-config using
    PKG_PROG_PKG_CONFIG from pkg.m4 and then using the shell variable
    $PKG_CONFIG.

These are up for your improvements of course.

Looking forward to your feedback.

Helmut


Reply to: