سؤال

A bunch of projects foo-A-B, foo-B-C, foo-A-C etc. each depend on foo-A, foo-B, foo-C etc.

Each of foo-X installs a pkg-config file (foo-X.pc.in) which contains a variable srcdir=@datarootdir@/foo/foo-B. A foo-X-Y project needs to refer to files in Xsrcdir and Ysrcdir.

Currently we do it like this in configure.ac:

PKG_CHECK_MODULES([foo_X], [foo-X])
AC_ARG_VAR(XSRC, "Source directory for foo-X")
AS_IF([test -z "$XSRC"], [XSRC=`pkg-config --variable=srcdir foo-X`])

(so Makefile.am gets to have rules like compile "$XSRC"/file.bar $@). This also lets developers override XSRC on running ./configure.

My question: is there a more canonical way to use non-standard pkg-config variables in autotools configury/makefiles? For e.g. libdir, I see pkg-config sets the variables itself so no configure.ac line is needed apart from PKG_CHECK_MODULES; are there other m4 macros we should be using?

هل كانت مفيدة؟

المحلول

I know this is fairly late, but since somebody was asking me about this recently, I thought it might be worth answering this too.

What you're looking for is PKG_CHECK_VAR, indeed most of that code can be replaced by a single line:

PKG_CHECK_VAR([XSRC], [foo-X], [srcdir], ,
  AC_MSG_FAILURE([Unable to find value for XSRC]))

The error message is a bit less clear than the one triggered by PKG_CHECK_MODULES, but it also triggers in case the srcdir variable is not defined.

I wrote some more details as part of my Autotools Mythbuster.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top