JDim icon indicating copy to clipboard operation
JDim copied to clipboard

Unity buildを有効にしてビルドするとコンパイルエラーが発生する

Open ma8ma opened this issue 4 months ago • 1 comments

Unity buildを有効にしてビルドするとコンパイルエラーが発生する

バグの説明

Unity buildを有効にしてビルドすると、コンパイルエラーが発生するとの報告がありました。

https://mao.5ch.net/test/read.cgi/linux/1722942440/233-243n

再現の方法

  1. 端末エミュレーター(コンソール)を立ち上げます。
  2. 作業ディレクトリに移動します。
  3. JDimリポジトリをgit cloneします。
  4. ソースディレクトリに移動してビルドのセットアップを行います。 コマンド: meson setup unitybuild -Dunity=on
  5. ninjaコマンドを使用し、コンパイルエラーが発生しても続行できるオプションを指定してビルドを行います。 コマンド: ninja -C unitybuild -k0
  6. コンパイルエラーが発生し、ビルドが失敗します。

やりたかったこと・期待する結果

Unity buildを有効にしてビルドできること。

スクリーンショット

なし

動作環境

[バージョン] JDim 0.13.0-alpha20240928(git:128642f6e4:M)
[ディストリ ] Debian GNU/Linux 12 (bookworm) (x86_64)
[パッケージ] ソース( github.com/JDimproved/JDim )
[ DE/WM ] XFCE (X11)
[ gtkmm  ] 3.24.7
[ glibmm  ] 2.66.5
[ TLS lib ] GnuTLS 3.7.9
[オプション ] '--with-alsa''--with-native'
[ そ の 他 ] メニューキー小改造
1. しおりを設定/解除 の左クリックメニューキーを(_B)→(_D)に変更
src/article/articleviewbase.cpp:176 行目
2. [履歴(S)]-[スレ履歴(T)] を [スレ履歴(A)] にする
src/history/historymanager.cpp:86 行目

https://mao.5ch.net/test/read.cgi/linux/1722942440/232 から引用

追加の情報

コンパイルエラーのログ:

ninja: Entering directory `unitybuild'
[1/127] Generating src/buildinfo.h with a custom command
INFO: GIT Hash = "128642f6e4"
INFO: GIT Date = "20240928"
INFO: src/buildinfo.h is created.
[98/127] Compiling C++ object src/jdim.p/meson-generated_jdim-unity3.cpp.o
FAILED: src/jdim.p/meson-generated_jdim-unity3.cpp.o
ccache c++ -Isrc/jdim.p -Isrc -I../src -I/usr/include/gtkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gtkmm-3.0/include -I/usr/include/giomm-2.4 -I/usr/lib/x86_64-linux-gnu/giomm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glibmm-2.4 -I/usr/lib/x86_64-linux-gnu/glibmm-2.4/include -I/usr/include/sigc++-2.0 -I/usr/lib/x86_64-linux-gnu/sigc++-2.0/include -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/x86_64-linux-gnu -I/usr/include/webp -I/usr/include/gio-unix-2.0 -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/cairomm-1.0 -I/usr/lib/x86_64-linux-gnu/cairomm-1.0/include -I/usr/include/pangomm-1.4 -I/usr/lib/x86_64-linux-gnu/pangomm-1.4/include -I/usr/include/atkmm-1.6 -I/usr/lib/x86_64-linux-gnu/atkmm-1.6/include -I/usr/include/gtk-3.0/unix-print -I/usr/include/gdkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gdkmm-3.0/include -I/usr/include/p11-kit-1 -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Wpedantic -std=c++17 -O0 -g -Wno-unused-parameter -pthread '-DGTK_DOMAIN="gtk30"' -DHAVE_CONFIG_H=1 -MD -MQ src/jdim.p/meson-generated_jdim-unity3.cpp.o -MF src/jdim.p/meson-generated_jdim-unity3.cpp.o.d -o src/jdim.p/meson-generated_jdim-unity3.cpp.o -c src/jdim.p/jdim-unity3.cpp
In file included from /usr/include/X11/Xlib.h:44,
                 from /usr/include/gtk-3.0/gdk/gdkx.h:30,
                 from /home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/environment.cpp:19,
                 from src/jdim.p/jdim-unity3.cpp:2:
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:319:9: error: expected identifier before numeric constant
  319 |         None,
      |         ^~~~
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:319:9: error: expected ‘}’ before numeric constant
In file included from /home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/fontcolorpref.cpp:13,
                 from src/jdim.p/jdim-unity3.cpp:3:
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:39:5: note: to match this ‘{’
   39 |     {
      |     ^
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:319:9: error: expected unqualified-id before numeric constant
  319 |         None,
      |         ^~~~
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:323:1: error: expected declaration before ‘}’ token
  323 | }
      | ^
[112/127] Compiling C++ object test/gtest_jdim.p/meson-generated_gtest_jdim-unity3.cpp.o
FAILED: test/gtest_jdim.p/meson-generated_gtest_jdim-unity3.cpp.o
ccache c++ -Itest/gtest_jdim.p -Itest -I../test -Isrc -I../src -I/usr/include/gtkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gtkmm-3.0/include -I/usr/include/giomm-2.4 -I/usr/lib/x86_64-linux-gnu/giomm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glibmm-2.4 -I/usr/lib/x86_64-linux-gnu/glibmm-2.4/include -I/usr/include/sigc++-2.0 -I/usr/lib/x86_64-linux-gnu/sigc++-2.0/include -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/x86_64-linux-gnu -I/usr/include/webp -I/usr/include/gio-unix-2.0 -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/cairomm-1.0 -I/usr/lib/x86_64-linux-gnu/cairomm-1.0/include -I/usr/include/pangomm-1.4 -I/usr/lib/x86_64-linux-gnu/pangomm-1.4/include -I/usr/include/atkmm-1.6 -I/usr/lib/x86_64-linux-gnu/atkmm-1.6/include -I/usr/include/gtk-3.0/unix-print -I/usr/include/gdkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gdkmm-3.0/include -I/usr/include/p11-kit-1 -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Wpedantic -std=c++17 -O0 -g -Wno-unused-parameter -pthread '-DGTK_DOMAIN="gtk30"' -DGTEST_HAS_PTHREAD=1 -DHAVE_CONFIG_H=1 -MD -MQ test/gtest_jdim.p/meson-generated_gtest_jdim-unity3.cpp.o -MF test/gtest_jdim.p/meson-generated_gtest_jdim-unity3.cpp.o.d -o test/gtest_jdim.p/meson-generated_gtest_jdim-unity3.cpp.o -c test/gtest_jdim.p/gtest_jdim-unity3.cpp
In file included from /usr/include/X11/Xlib.h:44,
                 from /usr/include/gtk-3.0/gdk/gdkx.h:30,
                 from /home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/environment.cpp:19,
                 from test/gtest_jdim.p/gtest_jdim-unity3.cpp:2:
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:319:9: error: expected identifier before numeric constant
  319 |         None,
      |         ^~~~
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:319:9: error: expected ‘}’ before numeric constant
In file included from /home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/fontcolorpref.cpp:13,
                 from test/gtest_jdim.p/gtest_jdim-unity3.cpp:3:
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:39:5: note: to match this ‘{’
   39 |     {
      |     ^
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:319:9: error: expected unqualified-id before numeric constant
  319 |         None,
      |         ^~~~
/home/ma8ma/var/repos/worktree/jdim-foxtrot/unitybuild/../src/control/controlid.h:323:1: error: expected declaration before ‘}’ token
  323 | }
      | ^
[125/127] Compiling C++ object test/gtest_jdim.p/meson-generated_gtest_jdim-unity13.cpp.o
ninja: build stopped: cannot make progress due to previous errors.

エラーの原因:

x11ライブラリのヘッダーファイル/usr/include/X11/X.hで定義されたNoneマクロ(0Lに展開される)が、 JDimのsrc/control/controlid.hで定義された列挙体Noneを上書きし、コンパイルエラーが発生しました。

原因のcommit:

  • cc2aa2d11d63c8ee1485c7df0b6637d62653744c

修正のアイデア:

いくつかアイデアがあります。

  • 列挙体Noneの名前を変更して上書きを回避する。 → 列挙体Noneが使用されているコードをすべて修正する必要があります。 (https://mao.5ch.net/test/read.cgi/linux/1722942440/233 の方法)

  • #undef Noneでマクロ定義を解除し、上書きを回避する。 → Unity buildではソースコードが連結されるため、#undefの後にNoneマクロが使用されているコードが存在すると、エラーが発生します。

  • Noneマクロの影響を受けないように実装を他のソースコードに移動する。 → もし修正後のコードでsrc/control/controlid.hをインクルードするようになると、再びエラーが発生する可能性があります。

ma8ma avatar Sep 29 '24 14:09 ma8ma