Building vlc-2.0.5 with poudriere in FreeBSD kept failing for our i386 build.
I had numerous errors such as:
[...] misc/cpu.c:129:1: error: unknown type name 'VLC_MMX_is_not_implemented_on_this_compiler' VLC_MMX static void ThreeD_Now_test (void) ^ ../include/vlc_cpu.h:46:19: note: expanded from macro 'VLC_MMX' # define VLC_MMX VLC_MMX_is_not_implemented_on_this_compiler ^ misc/cpu.c:129:9: error: expected identifier or '(' VLC_MMX static void ThreeD_Now_test (void) ^ misc/cpu.c:230:35: error: use of undeclared identifier 'SSE_test' if (vlc_CPU_check ("SSE", SSE_test)) ^ misc/cpu.c:239:56: error: use of undeclared identifier 'SSE2_test' if ((i_edx & 0x04000000) && vlc_CPU_check ("SSE2", SSE2_test)) ^ misc/cpu.c:246:56: error: use of undeclared identifier 'SSE3_test' if ((i_ecx & 0x00000001) && vlc_CPU_check ("SSE3", SSE3_test)) [...]
in the build log.
Looking at the ports Makefile I noticed that:
# prefer clang on 9.1+ .if (${OSVERSION} >= 901000) && exists(${DESTDIR}/usr/bin/clang) CC= clang CXX= clang++ CPP= clang-cpp .else .if ${ARCH} == "i386" USE_GCC?= 4.6+ # sse/3dnow detection on i386 needs newer gcc .endif .endif
I’m only building packages for 9.1-RELEASE så according to the above the build would use clang instead of gcc. clang is a pretty new compiler, it worked fine for the amd64 build so I just hacked that so that for any i386 build gcc 4.6+ would be used instead
.if ${ARCH} == "i386" USE_GCC?= 4.6+ # sse/3dnow detection on i386 needs newer gcc .else .if (${OSVERSION} >= 901000) && exists(${DESTDIR}/usr/bin/clang) CC= clang CXX= clang++ CPP= clang-cpp .endif .endif
And the build went through.
I suspect the ports maintainer has fixed this in a recent ports tree, but since I’ve frozen our ports tree from ‘sometime in january this year’ and I can’t / won’t update that yet, building with gcc is fine by me anyway.