diff --git a/.gitattributes b/.gitattributes index 976a0281..a0aba219 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,6 +6,7 @@ /packages/appimage/01-in-docker.sh eol=lf # text files to be packed +/packages/appimage/AppRun.sh eol=lf /platform/linux/install.sh eol=lf /platform/linux/redpandaide.desktop.in eol=lf /platform/linux/redpandaide.svg eol=lf diff --git a/BUILD.md b/BUILD.md index db4ebf40..83f3e46b 100644 --- a/BUILD.md +++ b/BUILD.md @@ -13,12 +13,14 @@ # Linux - Install gcc and qt5 + - Optionally install fcitx5-qt for building with static version of Qt - Open `Red_Panda_CPP.pro` with Qt Creator qmake variables: - `PREFIX`: default to `/usr/local`. It should be set to `/usr` or `/opt/redpanda-cpp` when packaging. - `LIBEXECDIR`: directory for auxiliary executables, default to `$PREFIX/libexec`. Arch Linux uses `/usr/lib`. - `XDG_ADAPTIVE_ICON=ON`: install the icon file following [freedesktop.org Icon Theme Specification](https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html) for adaptiveness to themes and sizes. Required by AppImage; recommended for Linux packaging if `PREFIX` set to `/usr`. +- `LINUX_STATIC_IME_PLUGIN=ON` (make phase): link to static ime plugin. Recommended for building with static version of Qt; **DO NOT** set for dynamic version of Qt. ## Ubuntu diff --git a/BUILD_cn.md b/BUILD_cn.md index 420a49c1..5bfe2a2c 100644 --- a/BUILD_cn.md +++ b/BUILD_cn.md @@ -16,12 +16,14 @@ 步骤: - 安装 gcc 和 qt5开发相关包 + - 如果使用静态版本的 Qt 编译,还要安装 fcitx5-qt - 使用qtcreator打开Red_Panda_CPP.pro文件 qmake 变量: - `PREFIX`:默认值是 `/usr/local`。打包时应该定义为 `/usr` 或 `/opt/redpanda-cpp`。 - `LIBEXECDIR`:辅助程序的路径,默认值是 `$PREFIX/libexec`。Arch Linux 使用 `/usr/lib`。 - `XDG_ADAPTIVE_ICON=ON`:遵循 [freedesktop.org 图标主题规范](https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html)安装图标,以适应不同的主题和尺寸。AppImage 需要启用此项;Linux 打包 `PREFIX=/usr` 时推荐启用此项。 +- `LINUX_STATIC_IME_PLUGIN=ON`(make 阶段):静态链接输入法插件。推荐在使用静态版本的 Qt 编译时启用;**不要**在使用动态版本的 Qt 编译时启用。 ## Ubuntu diff --git a/RedPandaIDE/RedPandaIDE.pro b/RedPandaIDE/RedPandaIDE.pro index e76bb30e..004ff25c 100644 --- a/RedPandaIDE/RedPandaIDE.pro +++ b/RedPandaIDE/RedPandaIDE.pro @@ -454,6 +454,17 @@ unix: { linux: { LIBS+= \ -lrt + + _LINUX_STATIC_IME_PLUGIN = $$(LINUX_STATIC_IME_PLUGIN) + equals(_LINUX_STATIC_IME_PLUGIN, "ON") { + SOURCES += \ + resources/linux_static_ime_plugin.cpp + QTPLUGIN.platforminputcontexts += \ + composeplatforminputcontextplugin \ + fcitx5platforminputcontextplugin \ + ibusplatforminputcontextplugin + LIBS += -L$$[QT_INSTALL_PLUGINS]/platforminputcontexts + } } TRANSLATIONS += \ diff --git a/RedPandaIDE/resources/linux_static_ime_plugin.cpp b/RedPandaIDE/resources/linux_static_ime_plugin.cpp new file mode 100644 index 00000000..b135ceee --- /dev/null +++ b/RedPandaIDE/resources/linux_static_ime_plugin.cpp @@ -0,0 +1,8 @@ +#include + +// explicitily reference the symbols for the plugins +// so the linker will pull them in during static linking + +Q_IMPORT_PLUGIN(QComposePlatformInputContextPlugin) +Q_IMPORT_PLUGIN(QFcitx5PlatformInputContextPlugin) +Q_IMPORT_PLUGIN(QIbusPlatformInputContextPlugin) diff --git a/packages/appimage/01-in-docker.sh b/packages/appimage/01-in-docker.sh index 6d2ce65c..83f2b36c 100755 --- a/packages/appimage/01-in-docker.sh +++ b/packages/appimage/01-in-docker.sh @@ -9,7 +9,7 @@ APPIMAGE_FILE=RedPandaIDE-$VERSION-$CARCH.AppImage mkdir -p /build/redpanda-build cd /build/redpanda-build qmake PREFIX='/usr' XDG_ADAPTIVE_ICON=ON /build/RedPanda-CPP/Red_Panda_CPP.pro -make -j$(nproc) +make LINUX_STATIC_IME_PLUGIN=ON -j$(nproc) # install RedPanda C++ to AppDir make install INSTALL_ROOT=/build/RedPandaIDE.AppDir diff --git a/packages/appimage/dockerfile-aarch64/Dockerfile b/packages/appimage/dockerfile-aarch64/Dockerfile index 004ee074..338b5aa1 100644 --- a/packages/appimage/dockerfile-aarch64/Dockerfile +++ b/packages/appimage/dockerfile-aarch64/Dockerfile @@ -7,7 +7,7 @@ RUN sed -i 's|ports.ubuntu.com|mirrors.ustc.edu.cn|g' /etc/apt/sources.list && \ export DEBIAN_FRONTEND=noninteractive && \ apt update && \ apt upgrade -y && \ - apt install --no-install-recommends -y ca-certificates cargo curl cmake file gcc g++ make \ + apt install --no-install-recommends -y ca-certificates cargo curl cmake extra-cmake-modules file gcc g++ make \ libatspi2.0-dev libdbus-1-dev libfontconfig1-dev libfreetype6-dev libgl1-mesa-dev libxkbcommon-x11-dev # AppImageKit @@ -17,7 +17,9 @@ RUN curl -L -o /usr/local/bin/appimagetool 'https://github.com/AppImage/AppImage # Qt 5 RUN mkdir -p /build/qt5 && \ cd /build/qt5 && \ - curl -O 'https://mirrors.ustc.edu.cn/qtproject/archive/qt/5.12/5.12.12/submodules/qt{base,svg,tools}-everywhere-src-5.12.12.tar.xz' && \ + curl -O 'https://download.qt.io/archive/qt/5.12/5.12.12/submodules/qt{base,svg,tools}-everywhere-src-5.12.12.tar.xz' && \ + # fcitx5-qt 5.0.6 is the last version compatible with ubuntu 18.04’s cmake 3.10 + curl -L -o fcitx5-qt-5.0.6.tar.gz 'https://github.com/fcitx/fcitx5-qt/archive/refs/tags/5.0.6.tar.gz' && \ tar xf qtbase-everywhere-src-5.12.12.tar.xz && \ cd qtbase-everywhere-src-5.12.12 && \ ./configure \ @@ -42,6 +44,14 @@ RUN mkdir -p /build/qt5 && \ qmake . && \ make -j$(nproc) && \ make install && \ + # fcitx5 package + cd /build/qt5 && \ + tar xf fcitx5-qt-5.0.6.tar.gz && \ + cd fcitx5-qt-5.0.6 && \ + cmake . -Bbuild -DCMAKE_MODULE_PATH=/usr/local/lib/cmake -DCMAKE_PREFIX_PATH=/usr/local -DCMAKE_BUILD_TYPE=Release -DENABLE_QT4=Off -DENABLE_QT5=On -DENABLE_QT6=Off -DBUILD_ONLY_PLUGIN=On -DBUILD_STATIC_PLUGIN=On && \ + # cmake 3.10 is too old to build with `--parallel` option + cmake --build build -- -j$(nproc) && \ + cmake --install build && \ # cleanup cd / && \ rm -r /build/qt5 diff --git a/packages/appimage/dockerfile-x86_64/Dockerfile b/packages/appimage/dockerfile-x86_64/Dockerfile index bc32e175..cd233afb 100644 --- a/packages/appimage/dockerfile-x86_64/Dockerfile +++ b/packages/appimage/dockerfile-x86_64/Dockerfile @@ -8,7 +8,7 @@ RUN sed -i 's|^mirrorlist=|#mirrorlist=|g; s|^#baseurl=http://mirror.centos.org/ sed -i 's|^mirrorlist=|#mirrorlist=|g; s|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo && \ sed -i 's|^metalink=|#metalink=|g; s|^#baseurl=https\?://download.fedoraproject.org/pub/epel/|baseurl=https://mirrors.ustc.edu.cn/epel/|g' /etc/yum.repos.d/epel.repo && \ yum upgrade -y && \ - yum install -y cargo cmake3 file make which \ + yum install -y cargo cmake3 extra-cmake-modules file make which \ at-spi2-core-devel dbus-devel fontconfig-devel freetype-devel glib2-devel libXrender-devel libxcb-devel libxkbcommon-devel libxkbcommon-x11-devel mesa-libGL-devel xcb-util-devel \ devtoolset-7-gcc devtoolset-7-gcc-c++ @@ -23,7 +23,8 @@ RUN curl -L -o /usr/local/bin/appimagetool 'https://github.com/AppImage/AppImage # Qt 5 RUN mkdir -p /build/qt5 && \ cd /build/qt5 && \ - curl -O 'https://mirrors.ustc.edu.cn/qtproject/archive/qt/5.12/5.12.12/submodules/qt{base,svg,tools}-everywhere-src-5.12.12.tar.xz' && \ + curl -O 'https://download.qt.io/archive/qt/5.12/5.12.12/submodules/qt{base,svg,tools}-everywhere-src-5.12.12.tar.xz' && \ + curl -L -o fcitx5-qt-5.0.17.tar.gz 'https://github.com/fcitx/fcitx5-qt/archive/refs/tags/5.0.17.tar.gz' && \ tar xf qtbase-everywhere-src-5.12.12.tar.xz && \ cd qtbase-everywhere-src-5.12.12 && \ ./configure \ @@ -48,6 +49,13 @@ RUN mkdir -p /build/qt5 && \ qmake . && \ make -j$(nproc) && \ make install && \ + # fcitx5 package + cd /build/qt5 && \ + tar xf fcitx5-qt-5.0.17.tar.gz && \ + cd fcitx5-qt-5.0.17 && \ + cmake3 . -Bbuild -DCMAKE_MODULE_PATH=/usr/local/lib/cmake -DCMAKE_PREFIX_PATH=/usr/local -DCMAKE_BUILD_TYPE=Release -DENABLE_QT4=Off -DENABLE_QT5=On -DENABLE_QT6=Off -DBUILD_ONLY_PLUGIN=On -DBUILD_STATIC_PLUGIN=On && \ + cmake3 --build build --parallel && \ + cmake3 --install build && \ # cleanup cd / && \ rm -r /build/qt5