2017年1月6日 星期五

gcin-2.8.4 -- 對 QT5 的支援

在 Gentoo 的 overlay,只有 gcin-2.8.3 的 ebuild,還沒有 gcin-2.8.4 的 ebuild。就自行下載 2.8.3 的版本,直接改成 2.8.4 的版本。在上一篇,已處理了在 gtk 應用程式,輸入框一直黏在左上角的問題。

PS. 目前,已升級至 gcin-2.8.5,所以,此處的資訊,對於 gcin-2.8.4  可能都是沒用的了。

在 USE flag 包含 qt4 時,會編譯失敗,只要將 ebuild 中的 DEPEND,qt4 的部分改成
 qt4? ( dev-qt/qtcore:4 dev-qt/qtgui:4 )

另外,在 DEPEND,加上 qt5? ( dev-qt/qtcore:5 dev-qt/qtgui:5 ),以及在 IUSE 加上 qt5,即會多了 qt5 的 USE flag。
再來,要將 qt5-im/Makefile 中的 Qt5PlatformSupport 移除,以及將 qt5-im/gcin-qt5.h 中的 IID 版本,改成 org.qt-project.Qt.QPlatformInputContextFactoryInterface.5.1

Qt5PlatformSupport 移除後,在有 qt5 的 USE flag 之下,可以順利編譯,但仍無法在 QT5 應用程式中,如 kate,輸入中文。

在未修正 IID 時,使用 「qtplugininfo /usr/lib64/qt5/plugins/platforminputcontexts/libgcinplatforminputcontextplugin.so」 的指令,顯示下列結果
IID "org.qt-project.Qt.QPlatformInputContextFactoryInterface" Qt 5.6.2 (debug)
User Data: {
    "Keys": [
        "gcin"
    ]
}


依上述所講的,修正 IID 之後,使用 「qtplugininfo /usr/lib64/qt5/plugins/platforminputcontexts/libgcinplatforminputcontextplugin.so」 的指令,顯示下列結果

IID "org.qt-project.Qt.QPlatformInputContextFactoryInterface.5.1" Qt 5.6.2 (debug)
User Data: {
    "Keys": [
        "gcin"
    ]
}


安裝之後,重新登入,在 kate 下,即可切換中文和輸入中文了。

ebuild 測試步驟摘要
  • 修改後,執行 ebuild gcin-2.8.5.ebuild digest,重新建立 Manifest
  • ebuild gcin-2.8.5.ebuild clean,清除暫存檔
  • ebuild gcin-2.8.5.ebuild prepare,執行 src_prepare() 的部分
  • ebuild gcin-2.8.5.ebuild configure,執行 src_configure() 的部分
  • ebuild gcin-2.8.5.ebuild compile,執行 src_compile() 的部分
  • ebuild gcin-2.8.5.ebuild install,執行 src_install() 的部分
  • ebuild gcin-2.8.5.ebuild qmerge,移除舊版本,安裝新的版本
參考連結
http://hyperrate.com/thread.php?tid=32359 
http://hyperrate.com/thread.php?tid=32406

http://hyperrate.com/thread.php?tid=32772#32772

2017 年 10 月

噢,gcc 升級後,gcin 在加上 qt5 的支援,又不行編譯了,出現
/usr/include/qt5/QtCore/qcompilerdetection.h:562:6: 錯誤:#error Qt requires a C++11 compiler and yours does not seem to be that.
 #    error Qt requires a C++11 compiler and yours does not seem to be that.
/usr/include/qt5/QtCore/qbasicatomic.h:61:4: 錯誤:#error "Qt requires C++11 support"
 #  error "Qt requires C++11 support"

這裡有一篇關於 C++11 support 的討論,只能有空再看了

現在只好在 kde 的應用程式下,不要用中文輸入啦
其他參考
https://forums.gentoo.org/viewtopic-t-1065532-start-0.html

2017-11-09 補記

QT 5 要求 C++11 support,而 gcc 預設是 C++98,因而在加上 qt5 的 use flag 時,gcin 無法成功安裝。因此,KDE 的應用程式,如 kate 也就無法輸入中文。找了一陣子的解答,忍受到今天,終於修改安裝成功。 
在發生編譯錯誤後,指令測試
# cd /var/tmp/portage/app-i18n/gcin-2.8.5/work/gcin-2.8.5/qt5-im

加上 --std=c++11 的選項,可以成功編譯
gcc -g  --std=c++11 -O -I../im-client -I/usr/include/X11 `pkg-config Qt5Core Qt5Gui  QtDBus --cflags` -I`pkg-config --variable=includedir Qt5Gui`/QtGui/`pkg-config --modversion Qt5Gui`/QtGui -Wall -D_REENTRANT -DUNIX=1 -fPIC  -DQT5 -DQT_SHARED -DQT_IMMODULE -DPIC -DDEBUG="00" -MM *.cpp > .depend

改成 --std=c++98,出現 "Qt requires C++11 support" 的錯誤
gcc -g  --std=c++98 -O -I../im-client -I/usr/include/X11 `pkg-config Qt5Core Qt5Gui  QtDBus --cflags` -I`pkg-config --variable=includedir Qt5Gui`/QtGui/`pkg-config --modversion Qt5Gui`/QtGui -Wall -D_REENTRANT -DUNIX=1 -fPIC  -DQT5 -DQT_SHARED -DQT_IMMODULE -DPIC -DDEBUG="00" -MM *.cpp > .depend

修改  gcin-2.8.5.ebuild,在 src_prepare() 段落中,加入  append-cxxflags -std=c++11 並沒有用。只好直接用 sed 在 qt5-im/Makefile 的 CXXFLAGS 加上 --std=c++11 的選項。程式片段如下
    # Qt5 requires C++11 support
    if use qt5 ; then
        sed -i 's/CXXFLAGS=/&-std=c++11 /' \
                "${S}"/qt5-im/Makefile \
                || die 'sed failed'
    fi

升級 Qt 5.9.4 問題處理 (2018-03-24)

升級至 Qt 5.9.4 之後,gcin 又不能用了。重新安裝,在 compile 時,會出現找不到 qtguiglobal_p.h 和 qglobal_p.h 的錯誤。

compile 時,是用 pkg-config Qt5Core Qt5Gui  QtDBus --cflags 取得 include 的資訊,其取得的結果如下
-DQT_SHARED -I/usr/include/qt5/QtGui -I/usr/include/qt5 -I/usr/include/qt5/QtCore -I/usr/include/qt5 -I/usr/include/qt4 -I/usr/include/qt4/QtDBus -I/usr/include/qt4 -I/usr/include/qt4/QtXml -I/usr/include/qt4 -I/usr/include/qt4/QtCore

但實際上,這兩個檔是在這目錄下
$ find /usr/include -name qglobal_p.h
/usr/include/qt5/QtCore/5.9.4/QtCore/private/qglobal_p.h
$ find /usr/include -name qtguiglobal_p.h
/usr/include/qt5/QtGui/5.9.4/QtGui/private/qtguiglobal_p.h

因此,按上述手動執行各階段動作,在 compile 之前,修改 /gcin-2.8.5/qt5-im/Makefile,加上兩個 include 的目錄,成功安裝。
INCS=-I../im-client -I/usr/include/X11 `pkg-config Qt5Core Qt5Gui  QtDBus --cflags` -I/usr/include/qt5/QtGui/5.9.4 -I/usr/include/qt5/QtCore/5.9.4

不想改 ebuild 檔,也許,那天上游會作出修正。

沒有留言: