From: Thomas Klausner <wiz%NetBSD.org@localhost> Subject: Re: CVS commit: pkgsrc/multimedia/libmatroska Date: Tue, 10 Feb 2015 14:58:57 +0100 >> > On Thu, Jan 22, 2015 at 12:57:27PM +0000, Masatake Daimon wrote: >> >> Module Name: pkgsrc >> >> Committed By: pho >> >> Date: Thu Jan 22 12:57:27 UTC 2015 >> >> >> >> Modified Files: >> >> pkgsrc/multimedia/libmatroska: Makefile >> >> >> >> Log Message: >> >> Add 'c' to USE_LANGUAGES >> >> >> >> Otherwise the configure script fails with: >> >> PKGSRC-WARNING: Something is trying to run the c compiler, >> >> PKGSRC-WARNING: but it is not added to USE_LANGUAGES in the package Makefile. >> > >> > This is not a failure, but just a warning. If the source code contains >> > no c code, you should not add 'c' to USE_LANGUAGES; and since this >> > builds on lots of platforms, I expect the it was ok before adding 'c'. >> >> Sorry for my late reply. Since removing 'c' from USE_LANGUAGES >> actually results in a configuration failure on Darwin, I investigated >> the problem further. This is an excerpt from config.log: >> >> configure:7833: checking how to run the C preprocessor >> configure:7903: result: gcc -E -isystem /usr/include >> configure:7923: gcc -E -isystem /usr/include -isystem /usr/include -I/usr/pkg/include conftest.c >> PKGSRC-WARNING: Something is trying to run the c compiler, >> PKGSRC-WARNING: but it is not added to USE_LANGUAGES in the package Makefile. >> configure:7923: $? = 1 >> configure:7953: error: in `/usr/pkgsrc/multimedia/libmatroska/work/libmatroska-1.4.2': >> configure:7955: error: C preprocessor "gcc -E -isystem /usr/include" fails sanity check >> See `config.log' for more details >> >> It turned out that ${CPP} was defined as "${CC} -E -isystem >> /usr/include" on this platform (see mk/platform/Darwin.mk). Because of >> this, ${CPP} always fails unless USE_LANGUAGES contains 'c'. >> >> So what should we do in this case? > > Thanks for taking another look at this. Since Darwin is the only > platform where cpp is defined this way, you'll probably have to fix > lots of packages. Is there some cpp wrapper installed on Darwin that > we could use, to make it more similar to the other platforms in > pkgsrc? Darwin actually comes with /usr/bin/cpp but it's a weird shell script that runs "/usr/bin/gcc -E" with arguments heavily modified for some unknown reasons, e.g. % cpp -isystem /usr/include test.c is translated to this, which is of course not what we want: % /usr/bin/gcc -E -traditional '-system' -x -c /usr/include -o test.c The reason why we need "-isystem /usr/include" is, as described in mk/platform/Darwin.mk, Darwin's native gcc is weirdly configured so that /usr/local/include takes precedence over /usr/include. So if ${WRKDIR}/.gcc/bin/cpp were the following shell script, everything would work as expected. Note that "-isystem /usr/include" is passed through ${CPPFLAGS} so there's no need to repeat it here: #!/bin/sh exec /usr/bin/gcc -E "$@" I attached a patch to get the effect described above. Could you review it? Thanks, _______________________________________________________ - PHO - http://cielonegro.org/ OpenPGP public key: 1024D/1A86EF72 Fpr: 5F3E 5B5F 535C CE27 8254 4D1A 14E7 9CA7 1A86 EF72
Index: compiler/gcc.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/compiler/gcc.mk,v retrieving revision 1.155 diff -u -r1.155 gcc.mk --- compiler/gcc.mk 4 Feb 2015 14:11:50 -0000 1.155 +++ compiler/gcc.mk 10 Feb 2015 19:54:26 -0000 @@ -786,6 +786,13 @@ IMAKEOPTS+= -DHasGcc2=YES -DHasGcc2ForCplusplus=YES .endif +.if ${OPSYS} == "Darwin" && !empty(_USE_PKGSRC_GCC:M[nN][oO]) +# The native cpp on this platform is a weird shell script that chokes +# on "-isystem" flag. See also ../../mk/platform/Darwin.mk +_GCC_CPP_CMD= ${CCPATH} -E +_DEF_VARS.gcc+= _GCC_CPP_CMD +.endif + .if ${OPSYS} == "Darwin" || ${OPSYS} == "Linux" || ${OPSYS} == "SunOS" _COMPILER_ABI_FLAG.32= -m32 _COMPILER_ABI_FLAG.64= -m64 @@ -845,7 +852,13 @@ override-tools: ${_GCC_${_var_}} ${_GCC_${_var_}}: ${RUN}${MKDIR} ${.TARGET:H} -. if !empty(COMPILER_USE_SYMLINKS:M[Yy][Ee][Ss]) +. if defined(_GCC_${_var_}_CMD) + ${RUN} \ + (${ECHO} '#!${TOOLS_SHELL}'; \ + ${ECHO} 'exec ${_GCC_${_var_}_CMD} "$$@"'; \ + ) > ${.TARGET} + ${RUN}${CHMOD} +x ${.TARGET} +. elif !empty(COMPILER_USE_SYMLINKS:M[Yy][Ee][Ss]) ${RUN}${RM} -f ${.TARGET} ${RUN}${LN} -s ${_GCCBINDIR}/${.TARGET:T} ${.TARGET} . else Index: platform/Darwin.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/platform/Darwin.mk,v retrieving revision 1.66 diff -u -r1.66 Darwin.mk --- platform/Darwin.mk 3 Jan 2015 21:30:52 -0000 1.66 +++ platform/Darwin.mk 10 Feb 2015 19:54:26 -0000 @@ -26,9 +26,6 @@ X11_TYPE?= native .endif -.if !defined(CPP) || ${CPP} == "cpp" -CPP= ${CC} -E ${CPP_PRECOMP_FLAGS} -.endif .if empty(MACHINE_PLATFORM:MDarwin-[0-8].*-*) ECHO_N?= /bin/echo -n .else
Attachment:
pgpIqivnkMg3M.pgp
Description: PGP signature