Erik de Castro Lopo
2011-Mar-25 09:32 UTC
[Flac-dev] pkg-config output and <FLAC/assert.h>
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? Erik -- ---------------------------------------------------------------------- Erik de Castro Lopo http://www.mega-nerd.com/
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.
Erik de Castro Lopo
2011-Mar-25 21:36 UTC
[Flac-dev] pkg-config output and <FLAC/assert.h>
I'm subscribed to this list. No need to CC me. Paul Davis wrote:> 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've now taken to doing the following in my configure.ac file: PKG_CHECK_MOD_VERSION(FLAC, flac >= 1.2.1, ac_cv_flac=yes, ac_cv_flac=no) # Make sure the FLAC_CFLAGS value is sane, strip trailing '/FLAC'. FLAC_CFLAGS=`echo $FLAC_CLFAGS | $SED "s/FLAC$//"` Solve the problem for me and will still work when the flac.pc file is fixed. Erik -- ---------------------------------------------------------------------- Erik de Castro Lopo http://www.mega-nerd.com/
Josh Coalson
2012-Apr-26 00:19 UTC
[flac-dev] [Flac-dev] pkg-config output and <FLAC/assert.h>
> 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>