[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: simple autoconf question
From: |
Eric Blake |
Subject: |
Re: simple autoconf question |
Date: |
Tue, 20 Dec 2011 13:22:45 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111115 Thunderbird/8.0 |
On 12/20/2011 12:28 PM, Eric Gorr wrote:
> I am just starting to experiment with build tools like autoconf, etc. and had
> what I am sure is a silly/stupid/easy question, but one that I still don't
> know the answer to.
>
> I am just trying to write a very simple, "hello, world" configure.ac script
> using a AC_DEFUN macro that I wrote to print "hello world". What I have is
> the following:
>
> AC_PREREQ(2.61)
> AC_INIT(autoconf_test, 1.0,address@hidden)
Not related, but you should get in the habit of proper quoting. This
should be:
AC_PREREQ([2.61])
AC_INIT([autoconf_test], [1.0], address@hidden)
>
> # EG_MY_MACRO
> # -----------------------------
> AC_DEFUN( [EG_MY_MACRO],
> m4_warn( [all], [hello world] )
> ) # EG_MY_MACRO
And here, the quoting actually bit you. Because you failed to quote the
m4_warn, it was expanded _prior_ to AC_DEFUN setting the definition of
EG_MY_MACRO, when in reality, it looks like you want the definition of
EG_MY_MACRO to be the quoted text so the m4_warn only triggers if you
expand EG_MY_MACRO later on.
Furthermore, 'all' is a special syntactic sugar for displaying all other
warning categories, but is not a warning category itself. m4_warn can
only be used with the following warning categories (at least, as of
2.61, which is what you are targeting as your minimum version): cross,
obsolete, syntax
Also, while leading whitespace before [ is stripped, trailing whitespace
after ] is _not_ stripped (you can use dnl to strip trailing newlines,
but in general you should get used to putting the ] next to the ) with
no intervening space).
That is, you wanted something more like:
AC_DEFUN([EG_MY_MACRO],
[m4_warn([syntax], [hello world])]dnl
) # EG_MY_MACRO
> However, when I execute autoconf, I get the following error message:
>
> ~/depot/autoconf_test $autoconf
> unknown channel all at /usr/bin/../share/autoconf/Autom4te/Channels.pm
> line 546
> Autom4te::Channels::msg('all', 'configure.ac:8', 'warning: hello world
> ') called at /usr/bin/autom4te line 1012
Yes, this is a result of passing an invalid argument as the first
parameter to m4_warn.
> and there is no configure script generated.
Yes, this is a side-effect of your above mis-use being treated as a
parse error.
> I'm sure this is a fairly simple problem. I have a very simple configure.ac
> file which I am using to just learn how autoconf & pkg-config work together.
> The confgure.ac file looks like:
>
> AC_PREREQ(2.61)
> AC_INIT(autoconf_test, 1.0,address@hidden)
>
> PKG_CHECK_MODULES(libusbmuxd, libusbmuxd >= 0.1.4)
Again, underquoted:
PKG_CHECK_MODULES([libusbmuxd], [libusbmuxd >= 0.1.4])
>
> I can then execute autoconf from the command line and it does produce a
> configure script. However, when I run the configure script, I get the
> following error:
>
> ./configure: line 1618: syntax error near unexpected token `libusbmuxd,'
> ./configure: line 1618: `PKG_CHECK_MODULES(libusbmuxd, libusbmuxd >=
> 0.1.4)'
This means you didn't define PKG_CHECK_MODULES as a macro; if you are
using automake, then you didn't point aclocal to look in the right
directories for pkg.m4; if you are not using automake, then you need to
manually inline the contents of pkg.m4 into your acinclude.m4. Either
way, you're not the first to hit this problem:
https://lists.gnu.org/archive/html/autoconf/2011-12/msg00034.html
--
Eric Blake address@hidden +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature