On Sat Dec 23, 2023 at 12:27:05AM +0100, Theo Buehler wrote:
> emulators/citra was broken with the update to boost 1.84. net/nheko
> broke with the llvm 16 update (in fact it broke with llvm 15 when kn
> updated mtxclient and nheko in February). Most recently, libquotient
> broke on aarch64. The symptom is always the same cryptic message:
> 
> /usr/include/c++/v1/__bsd_locale_fallbacks.h:110:5: error: non-const lvalue 
> reference to type '__builtin_va_list' cannot bind to a value of unrelated 
> type 'va_list' (aka 'std::__va_list')
>     va_start(__va, __format);
>     ^~~~~~~~~~~~~~~~~~~~~~~~
> /usr/include/stdarg.h:34:47: note: expanded from macro 'va_start'
> #define va_start(ap, last)      __builtin_va_start((ap), last)
> 
> http://build-failures.rhaalovely.net/aarch64/2023-12-20/x11/libquotient.log
> 
> In all three ports, a line such as
> 
> -Xclang -include-pch -Xclang 
> /usr/ports/pobj/nheko-0.11.3/build-amd64/CMakeFiles/nheko.dir/cmake_pch.hxx.pch
> 
> appears. And indeed, the diff below (which is a workaround at best)
> makes all three ports build.
> 
> There are a few questions that should probably be answered:
> 
> - why did citra break with the boost update?
> - is this a cmake bug or a clang bug?

I don't think it's a cmake bug. IMO It's an pre compiled header issue.

> 
> But maybe it gives someone a clue what the right fix might be.
> 
> Index: emulators/citra/Makefile
> ===================================================================
> RCS file: /cvs/ports/emulators/citra/Makefile,v
> diff -u -p -r1.29 Makefile
> --- emulators/citra/Makefile  19 Dec 2023 06:18:03 -0000      1.29
> +++ emulators/citra/Makefile  22 Dec 2023 23:15:14 -0000
> @@ -1,6 +1,3 @@
> -# broken with boost 1.84
> -BROKEN=              cannot initialize '__va_list_tag *' with 'va_list'
> -
>  # ships a dynarmic copy, and dynarmic only supports x86-64 and AArch64
>  ONLY_FOR_ARCHS =     amd64 arm64
>  
> @@ -56,7 +53,8 @@ CONFIGURE_ARGS =    -DENABLE_CUBEB=OFF \
>                       -DUSE_SYSTEM_SDL2=ON \
>                       -DENABLE_FFMPEG_AUDIO_DECODER=ON \
>                       -DENABLE_FFMPEG_VIDEO_DUMPER=ON \
> -                     -DCITRA_USE_PRECOMPILED_HEADERS=OFF

This was not complete . There is a second option:
DYNARMIC_USE_PRECOMPILED_HEADERS.

I think CMAKE_DISABLE_PRECOMPILE_HEADERS is the big hummer to disabled
all pre complied header even if there are hand-made options.

https://cmake.org/cmake/help/latest/variable/CMAKE_DISABLE_PRECOMPILE_HEADERS.html

The following diff compiles without issues:

Index: Makefile
===================================================================
RCS file: /cvs/ports/emulators/citra/Makefile,v
diff -u -p -u -p -r1.29 Makefile
--- Makefile    19 Dec 2023 06:18:03 -0000      1.29
+++ Makefile    23 Dec 2023 02:42:23 -0000
@@ -1,6 +1,3 @@
-# broken with boost 1.84
-BROKEN=                cannot initialize '__va_list_tag *' with 'va_list'
-
 # ships a dynarmic copy, and dynarmic only supports x86-64 and AArch64
 ONLY_FOR_ARCHS =       amd64 arm64
 
@@ -56,7 +53,9 @@ CONFIGURE_ARGS =      -DENABLE_CUBEB=OFF \
                        -DUSE_SYSTEM_SDL2=ON \
                        -DENABLE_FFMPEG_AUDIO_DECODER=ON \
                        -DENABLE_FFMPEG_VIDEO_DUMPER=ON \
-                       -DCITRA_USE_PRECOMPILED_HEADERS=OFF
+                       -DCITRA_USE_PRECOMPILED_HEADERS=OFF \
+                       -DDYNARMIC_USE_PRECOMPILED_HEADERS=OFF
+
 MODCMAKE_LDFLAGS =     -L${LOCALBASE}/lib
 
 WRKDIST =              ${WRKDIR}/${DISTNAME}
> +                     -DCITRA_USE_PRECOMPILED_HEADERS=OFF \
> +                     -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON
>  MODCMAKE_LDFLAGS =   -L${LOCALBASE}/lib
>  
>  WRKDIST =            ${WRKDIR}/${DISTNAME}
> Index: net/nheko/Makefile
> ===================================================================
> RCS file: /cvs/ports/net/nheko/Makefile,v
> diff -u -p -r1.10 Makefile
> --- net/nheko/Makefile        3 Dec 2023 20:57:40 -0000       1.10
> +++ net/nheko/Makefile        22 Dec 2023 22:51:02 -0000
> @@ -1,9 +1,3 @@
> -# broken with LLVM 16
> -.include <bsd.port.arch.mk>
> -.if ${PROPERTIES:Mclang}
> -BROKEN=              cannot initialize '__va_list_tag *' with 'va_list'
> -.endif
> -
>  COMMENT =    desktop client for Matrix using Qt and C++20
>  
>  GH_ACCOUNT = Nheko-Reborn
> @@ -54,5 +48,6 @@ LIB_DEPENDS =       databases/lmdb \
>  
>  # -DCMAKE_DISABLE_FIND_PACKAGE_GIT=ON (or _Git or _git) do not work
>  CONFIGURE_ARGS +=    -DGIT=OFF
> +CONFIGURE_ARGS +=    -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON
>  
>  .include <bsd.port.mk>
> Index: x11/libquotient/Makefile
> ===================================================================
> RCS file: /cvs/ports/x11/libquotient/Makefile,v
> diff -u -p -r1.6 Makefile
> --- x11/libquotient/Makefile  11 Oct 2023 18:40:14 -0000      1.6
> +++ x11/libquotient/Makefile  22 Dec 2023 23:02:46 -0000
> @@ -27,7 +27,8 @@ LIB_DEPENDS =       devel/olm \
>  CONFIGURE_ARGS =     -DBUILD_SHARED_LIBS=ON \
>                       -DCMAKE_DISABLE_FIND_PACKAGE_Git=ON \
>                       -DQuotient_ENABLE_E2EE=ON \
> -                     -DQuotient_INSTALL_TESTS=OFF
> +                     -DQuotient_INSTALL_TESTS=OFF \
> +                     -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON
>  
>  # XXX C++20 vs. libstd++ in quotest.cpp
>  CONFIGURE_ARGS +=    -DBUILD_TESTING=OFF

Which brings me to a more common questions. Does PCH make sense in the
ports? I don't think so! Does it make sense to enable the big (cmake)
hummer by default?

Reply via email to