JDim
JDim copied to clipboard
Unity buildを有効にしてビルドするとコンパイルエラーが発生する
Unity buildを有効にしてビルドするとコンパイルエラーが発生する
バグの説明
Unity buildを有効にしてビルドすると、コンパイルエラーが発生するとの報告がありました。
https://mao.5ch.net/test/read.cgi/linux/1722942440/233-243n
再現の方法
- 端末エミュレーター(コンソール)を立ち上げます。
- 作業ディレクトリに移動します。
- JDimリポジトリをgit cloneします。
- ソースディレクトリに移動してビルドのセットアップを行います。
コマンド:
meson setup unitybuild -Dunity=on
- ninjaコマンドを使用し、コンパイルエラーが発生しても続行できるオプションを指定してビルドを行います。
コマンド:
ninja -C unitybuild -k0
- コンパイルエラーが発生し、ビルドが失敗します。
やりたかったこと・期待する結果
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
をインクルードするようになると、再びエラーが発生する可能性があります。