Re: generating pc files

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

 



Vincent Torri <vtorri@xxxxxxxxxxxx> writes:

> But it seems that several projects use sed in their Makefile.am to use
> the value of $libdir, $includedir, etc.. to generate their pc files. So
> they have in foo.pc

> libdir=${libdir}

> So I would like to know the opinion of the autoconf dev about what the
> correct way to generate pc file is.

Well, I'm not an Autoconf developer, so feel free to ignore this, but I've
been very happy with the following recipe.  A *.pc.in file that looks
like:

    prefix=@prefix@
    exec_prefix=@exec_prefix@
    includedir=@includedir@
    libdir=@libdir@

    Name: <name>
    Description: <description>
    URL: <url>
    Version: @PACKAGE_VERSION@
    Cflags: -I${includedir}
    Libs: -L${libdir} -l<library>
    Libs.private: <other-libs>

with the <...> bits replaced with whatever is appropriate for your
library, and then the following in Makefile.am (adjusting file paths
accordingly, of course:

client/libremctl.pc: $(srcdir)/client/libremctl.pc.in
        sed -e 's![@]prefix[@]!$(prefix)!g'                     \
            -e 's![@]exec_prefix[@]!$(exec_prefix)!g'           \
            -e 's![@]includedir[@]!$(includedir)!g'             \
            -e 's![@]libdir[@]!$(libdir)!g'                     \
            -e 's![@]PACKAGE_VERSION[@]!$(PACKAGE_VERSION)!g'   \
            -e 's![@]GSSAPI_LDFLAGS[@]!$(GSSAPI_LDFLAGS)!g'     \
            -e 's![@]GSSAPI_LIBS[@]!$(GSSAPI_LIBS)!g'           \
            $(srcdir)/client/libremctl.pc.in > $@

Note the last two sed expressions, which show how to handle additional
flags for linking with other libraries.  @GSSAPI_LDFLAGS@ @GSSAPI_LIBS@ is
in the Libs.private part of my *.pc.in file in this case.

This has make expand all the variables for you, so you can safely omit
exec_prefix if you want; nothing else will refer to it, since the
variables will be fully collapsed.  I include it just for the hell of it.

The result, for this particular package as installed on Debian (so with a
multiarch libdir) looks like:

    prefix=/usr
    exec_prefix=/usr
    includedir=/usr/include
    libdir=/usr/lib/i386-linux-gnu

    Name: remctl
    Description: Remote authenticated command execution with ACLs
    URL: http://www.eyrie.org/~eagle/software/remctl/
    Version: 3.2
    Cflags: -I${includedir}
    Libs: -L${libdir} -lremctl
    Libs.private:  -lgssapi_krb5

-- 
Russ Allbery (rra@xxxxxxxxxxxx)             <http://www.eyrie.org/~eagle/>

_______________________________________________
Autoconf mailing list
Autoconf@xxxxxxx
https://lists.gnu.org/mailman/listinfo/autoconf


[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux