Date: Wed, 24 Sep 2008 22:20:03 GMT From: "Jeremy Messenger" <mezz7@cox.net> To: gnome@FreeBSD.org Subject: Re: ports/127297: Redefinition warnings in print/freetype2 Message-ID: <200809242220.m8OMK3G3061662@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/127297; it has been noted by GNATS. From: "Jeremy Messenger" <mezz7@cox.net> To: "Jeremy Chadwick" <koitsu@freebsd.org> Cc: bug-followup@freebsd.org Subject: Re: ports/127297: Redefinition warnings in print/freetype2 Date: Wed, 24 Sep 2008 17:18:14 -0500 On Wed, 24 Sep 2008 17:07:20 -0500, Jeremy Chadwick <koitsu@freebsd.org> wrote: > On Wed, Sep 24, 2008 at 11:58:26AM -0500, Jeremy Messenger wrote: >>> The pre-patch section comments out #define >>> TT_CONFIG_OPTION_BYTECODE_INTERPRETER in >>> include/freetype/config/ftoption.h (when WITHOUT_TTF_BYTECODE_ENABLED >>> is >>> not defined by the user), but then earlier in the Makefile, it >>> re-enables it: >> >> I am not seeing any bug. When the WITHOUT_TTF_BYTECODE_ENABLED is not >> defined then the TT_CONFIG_OPTION_BYTECODE_INTERPRETER will be enable, >> which is a correct behavior. Unless I am blind? >> >> {snip} >> >> There is no problem. As for the redefine warning, I think it's harmless >> since it's still enable with no change as it's merely enable again. > > The bug is in the port Makefile as I described. The CFLAGS addition of > -DTT_CONFIG_OPTION_BYTECODE_INTERPRETER is 100% worthless, and induces > the warnings. > > Let's step through each piece of the build process. > > Someone ultimately does "make" in ports/print/freetype2. They do not > have WITHOUT_TTF_BYTECODE_ENABLED defined. > > In the port Makefile: > > .if !defined(WITHOUT_TTF_BYTECODE_ENABLED) > CFLAGS+= -DTT_CONFIG_OPTION_BYTECODE_INTERPRETER > .endif > > At this point TT_CONFIG_OPTION_BYTECODE_INTERPRETER will be defined > during the build of the actual program. You can even see it being > defined forcefully in "cc". > > Then later, in the port Makefile, we find this: > > .if !defined(WITHOUT_TTF_BYTECODE_ENABLED) > @${REINPLACE_CMD} -e '/#define > TT_CONFIG_OPTION_BYTECODE_INTERPRETER/s,/\* \(.*\) \*/,\1,; /#define > TT_CONFIG_OPTION_UNPATENTED_HINTING/s,^\(.*\),/* \1 \*/,' \ > ${WRKSRC}/include/freetype/config/ftoption.h > .endif > > The $REINPLACE_CMD code never gets executed, which makes sense because > WITHOUT_TTF_BYTECODE_ENABLED is not defined. Incorrect. See that '!', so the REINPLACE_CMD does get executed. It's why I have shown you my example. > So let's see what include/freetype/config/ftoption.h contains shall we? > > $ egrep '(#define|#undef) TT_CONFIG_OPTION_BYTECODE_INTERPRETER' > work/freetype-2.3.7/include/freetype/config/ftoption.h > #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER > > Oh look, it's being #define'd in the .h file already! > > So what's the purpose of the CFLAGS part? To induce warnings? :-) > Seeing this per *every C file* for no good reason is absurd: > > In file included from ./builds/unix/ftconfig.h:42, from > /usr/ports/print/freetype2/work/freetype-2.3.7/include/freetype/freetype.h:41, > from > /usr/ports/print/freetype2/work/freetype-2.3.7/include/freetype/ftmodapi.h:24, > from > /usr/ports/print/freetype2/work/freetype-2.3.7/include/freetype/ftrender.h:24, > from > /usr/ports/print/freetype2/work/freetype-2.3.7/include/freetype/internal/ftobjs.h:30, > from > /usr/ports/print/freetype2/work/freetype-2.3.7/src/smooth/ftgrays.c:141, > from > /usr/ports/print/freetype2/work/freetype-2.3.7/src/smooth/smooth.c:22: > /usr/ports/print/freetype2/work/freetype-2.3.7/include/freetype/config/ftoption.h:462:1: > warning: "TT_CONFIG_OPTION_BYTECODE_INTERPRETER" redefined > <command-line>: warning: this is the location of the previous definition > > I'm begging you to try it for yourself. Remove the CFLAGS modifier > portion of the Makefile and then: > > # cd /usr/ports/print/freetype2 > # make clean > # make > > You won't see any warnings. > > And try it with WITHOUT_TTF_BYTECODE_ENABLED=true too: > > # cd /usr/ports/print/freetype2 > # make clean > # make WITHOUT_TTF_BYTECODE_ENABLED=true > > No warnings, and TT_CONFIG_OPTION_BYTECODE_INTERPRETER will be > commented out in the .h file (as expected), because the $REINPLACE_CMD > code will take care of it. > > Please reconsider your "there is no bug here" comment. There is most > definitely a bug -- the FreeBSD port Makefile is causing tons of > unnecessary warnings for *no good reason*. The warnings don't mean it's bug. Cheers, Mezz -- mezz7@cox.net - mezz@FreeBSD.org FreeBSD GNOME Team http://www.FreeBSD.org/gnome/ - gnome@FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200809242220.m8OMK3G3061662>