[flac-dev] [Flac-dev] pkg-config output and <FLAC/assert.h>

Erik de Castro Lopo mle+la at mega-nerd.com
Wed Apr 25 17:48:33 PDT 2012


Josh Coalson wrote:

> > From: Paul Davis <paul at linuxaudiosystems.com>
> > To: flac-dev at xiph.org
> > Cc: 
> > Sent: Friday, March 25, 2011 5:39 AM
> > Subject: Re: [Flac-dev] pkg-config output and <FLAC/assert.h>
> > 
> > On Fri, Mar 25, 2011 at 5:32 AM, Erik de Castro Lopo
> > <mle+la at mega-nerd.com> wrote:
> >>  Hi,
> >> 
> >>  FLAC helpfully provides a flac.pc file. Unfortunately there is a
> >>  nasty interaction between that file and system header files.
> >> 
> >>  If ones installs flac and relies on pkg-config to find the CFLAGS
> >>  one woulf get CFLAGS value of "-I${includedir}/FLAC" which 
> > suggests
> >>  that FLAC header files like <metadata.h> should be included as:
> >> 
> >>     #include <metadata.h>
> >> 
> >>  However, FLAC also ships an <assert.h> header file. If one writes
> >>  code that wants needs both the Standard C <assert.h> and the FLAC
> >>  header files, we run into a problem, the C compiler finds FLAC's
> >>  <assert.h> instead of the Standard C version.
> >> 
> >>  I believe the correct solution to this problem is the change the
> >>  Cflag value in flac.pc to "-I${includedir}" and then encourage
> >>  people to use:
> >> 
> >>     #include <FLAC/metadata.h>
> >>     #include <FLAC/assert.h>
> >>     #include <assert.h>
> >> 
> >>  which will no longer conflict.
> >> 
> >>  Opinions?
> > 
> > i recall raising this as an issue about 18 months ago. i certainly
> > feel that the include style that flac uses now is simply wrong, and
> > that your suggestion above (which matches the one i made) is
> > substantially preferable.
> 
> I didn't follow, which style is wrong?  I never liked lazy search paths like:
> 
> -I.../include/FLAC
> #include <metadata.h>
> 
> because of the potential for conflict with other headers.  The code
> should be using this style everywhere:
> 
> -I.../include
> #include <FLAC/metadata.h>
> 
> Then there is no problem with
> #include <FLAC/assert.h>

Correct.

The problem is that currently the pkg-config shipped with most distros
(ie from the last release) gives this:

    $ pkg-config --cflags flac
    -I/usr/include/FLAC 

This encourages people in client code to do:

    #include <all.h>

which obviously has the potential to cause problems.

Instead pkg-config should give:

    $ pkg-config --cflags flac
    -I/usr/include/FLAC 

so that client code can do:

    #include <FLAC/all.h>

I'll submit a patch to fix this.

Cheers,
Erik
-- 
----------------------------------------------------------------------
Erik de Castro Lopo
http://www.mega-nerd.com/


More information about the flac-dev mailing list