diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a78234a1..086e1485 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -5,21 +5,67 @@ on: tags: - 'v*' +env: + DOCKER_BUILDKIT: 1 + jobs: - packaging: + build-arch: runs-on: ubuntu-20.04 - + + steps: + - uses: actions/checkout@v2 + - name: Run docker + run: | + docker build --file build-docker/arch/Dockerfile --tag riey/kime-build:arch . + docker run --name kime-arch riey/kime-build:arch + mkdir /tmp/out + docker cp kime-arch:/opt/kime-out/kime.tar.xz /tmp/out/ + + - name: Upload tar.xz + uses: actions/upload-artifact@v2 + with: + name: arch + path: /tmp/out/kime.tar.xz + + # ubuntu build is run on native + build-ubuntu: + runs-on: ubuntu-20.04 + steps: - uses: actions/checkout@v2 - - name: Set VER - id: version - run: echo "::set-output name=ver::$(grep '^version =' src/xtask/Cargo.toml|head -n1|cut -d\" -f2)" - - name: Make temp dir - run: mkdir /tmp/kime - - name: Build image - run: docker build --tag riey/kime --network=host . - - name: Run image - run: docker run -e "TERM=xterm-256color" -e "CARGO_TERM_COLOR=always" --network=host -v /tmp/kime:/opt/kime-out riey/kime release + - name: Build deb + run: | + sudo apt-get update + sudo apt-get install -y build-essential git gcc clang llvm cmake extra-cmake-modules cargo pkg-config + sudo apt-get install -y libpango1.0-dev libcairo2-dev libgtk2.0-dev libgtk-3-dev libglib2.0 libxcb1 libappindicator3-dev + sudo apt-get install -y qt5-default qtbase5-dev qtbase5-private-dev libqt5gui5 + mkdir -pv /opt/kime-out + ci/build_deb.sh + + - name: Upload deb + uses: actions/upload-artifact@v2 + with: + name: ubuntu + path: /opt/kime-out/kime_amd64.deb + + upload: + needs: + - build-arch + - build-ubuntu + + runs-on: ubuntu-20.04 + + steps: + - name: Checkout workdir + run: mkdir /tmp/work && cd /tmp/work + - name: Download arch artifact + uses: actions/download-artifact@v2 + with: + name: arch + - name: Download ubuntu artifact + uses: actions/download-artifact@v2 + with: + name: ubuntu - name: Create draft release id: create_release uses: actions/create-release@v1 @@ -37,8 +83,8 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: /tmp/kime/kime.tar.xz - asset_name: kime-${{ steps.version.outputs.ver }}.tar.xz + asset_path: ./kime.tar.xz + asset_name: kime-${{ github.ref }}.tar.xz asset_content_type: application/x-xz - name: Upload deb package @@ -47,6 +93,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: /tmp/kime/kime_${{ steps.version.outputs.ver }}_amd64.deb - asset_name: kime_${{ steps.version.outputs.ver }}_amd64.deb + asset_path: ./kime_amd64.deb + asset_name: kime_${{ github.ref }}_amd64.deb asset_content_type: application/x-xz diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 2dd4d9ad..00000000 --- a/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM riey/kime-build:latest - -WORKDIR /opt/kime - -RUN mkdir -pv /opt/kime-out - -COPY ci ./ci -COPY docs ./docs -COPY res ./res -COPY src ./src - -COPY Cargo.toml . -COPY Cargo.lock . -COPY LICENSE . - -ENTRYPOINT [ "ci/build_release.sh" ] diff --git a/build-docker/arch/Dockerfile b/build-docker/arch/Dockerfile new file mode 100644 index 00000000..065ef8b0 --- /dev/null +++ b/build-docker/arch/Dockerfile @@ -0,0 +1,33 @@ +FROM archlinux:base-devel + +WORKDIR /opt/kime + +# WORKAROUND for glibc 2.33 and old Docker +# See https://github.com/actions/virtual-environments/issues/2658 +# Thanks to https://github.com/lxqt/lxqt-panel/pull/1562 +RUN patched_glibc=glibc-linux4-2.33-4-x86_64.pkg.tar.zst && \ + curl -LO "https://repo.archlinuxcn.org/x86_64/$patched_glibc" && \ + bsdtar -C / -xvf "$patched_glibc" + +RUN pacman -Syu --noconfirm +RUN pacman -S --noconfirm --needed rust cmake clang llvm libxcb cairo +RUN pacman -S --noconfirm --needed gtk2 gtk3 gtk4 +RUN pacman -S --noconfirm --needed qt5-base qt6-base +RUN pacman -S --noconfirm --needed libappindicator-gtk3 +RUN pacman -S --noconfirm --needed git +RUN mkdir -pv /opt/kime-out + +COPY ci ./ci +COPY docs ./docs +COPY scripts ./scripts +COPY res ./res +COPY src ./src +COPY .git ./.git + +COPY Cargo.toml . +COPY Cargo.lock . +COPY LICENSE . + +RUN cargo fetch + +ENTRYPOINT [ "ci/build_xz.sh" ] diff --git a/build-docker/ubuntu-20.04/Dockerfile b/build-docker/ubuntu-20.04/Dockerfile new file mode 100644 index 00000000..1d67b3c4 --- /dev/null +++ b/build-docker/ubuntu-20.04/Dockerfile @@ -0,0 +1,26 @@ +FROM ubuntu:20.04 + +ENV DEBIAN_FRONTEND=noninteractive + +WORKDIR /opt/kime + +RUN apt-get update +RUN apt-get install -y build-essential git gcc clang llvm cmake extra-cmake-modules cargo pkg-config +RUN apt-get install -y libpango1.0-dev libcairo2-dev libgtk2.0-dev libgtk-3-dev libglib2.0 libxcb1 libappindicator3-dev +RUN apt-get install -y qt5-default qtbase5-dev qtbase5-private-dev libqt5gui5 +RUN mkdir -pv /opt/kime-out + +COPY ci ./ci +COPY docs ./docs +COPY scripts ./scripts +COPY res ./res +COPY src ./src +COPY .git ./.git + +COPY Cargo.toml . +COPY Cargo.lock . +COPY LICENSE . + +RUN cargo fetch + +ENTRYPOINT [ "ci/build_deb.sh" ] diff --git a/ci/build_deb.sh b/ci/build_deb.sh new file mode 100755 index 00000000..6cbdf577 --- /dev/null +++ b/ci/build_deb.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +scripts/build.sh -ar +scripts/release-deb.sh /opt/kime-out diff --git a/ci/build_release.sh b/ci/build_xz.sh similarity index 73% rename from ci/build_release.sh rename to ci/build_xz.sh index a64f17eb..984b20d9 100755 --- a/ci/build_release.sh +++ b/ci/build_xz.sh @@ -2,5 +2,3 @@ scripts/build.sh -ar tar cvf - -C ./build/out . | xz -9 -T0 -c - > /opt/kime-out/kime.tar.xz -scripts/release-deb.sh /opt/kime-out - diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 29e76a16..cc2b5694 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,6 +2,7 @@ ## Dev +* Fix debian packaging [#140](https://github.com/Riey/kime/issues/140) * Use shell script for Build [#231](https://github.com/Riey/kime/issues/231) * Using C++ header for engine cffi [#229](https://github.com/Riey/kime/issues/229) * Implement engine hotkeys [#223](https://github.com/Riey/kime/issues/223) diff --git a/scripts/im_kime.conf b/scripts/im_kime.conf new file mode 100644 index 00000000..c6a34696 --- /dev/null +++ b/scripts/im_kime.conf @@ -0,0 +1,11 @@ +IM_CONFIG_SHORT="activate Kime" +IM_CONFIG_LONG="Korean IME" + +package_auto () { + package_status kime +} + +package_menu () { + package_status kime +} + diff --git a/scripts/im_kime.rc b/scripts/im_kime.rc new file mode 100644 index 00000000..27e2312c --- /dev/null +++ b/scripts/im_kime.rc @@ -0,0 +1,11 @@ +if [ "$IM_CONFIG_PHASE" = 2 ]; then + kime-xim & +fi + +if [ "$IM_CONFIG_PHASE" = 1 ]; then + XMODIFIERS="@im=kime" + GTK_IM_MODULE=kime + QT4_IM_MODULE=xim + QT_IM_MODULE=kime + CLUTTER_IM_MODULE=xim +fi diff --git a/scripts/install.sh b/scripts/install.sh index 85e6d1d0..a90edfef 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -26,27 +26,32 @@ if [ -z "$KIME_LIB_DIR" ]; then fi if [ -z "$KIME_GTK2_DIR" ]; then - KIME_GTK2_DIR="usr/lib/gtk-2.0/2.10.0/immodules" + KIME_GTK2_DIR="$KIME_LIB_DIR/gtk-2.0/2.10.0/immodules" fi if [ -z "$KIME_GTK3_DIR" ]; then - KIME_GTK3_DIR="usr/lib/gtk-3.0/3.0.0/immodules" + KIME_GTK3_DIR="$KIME_LIB_DIR/gtk-3.0/3.0.0/immodules" fi if [ -z "$KIME_GTK4_DIR" ]; then - KIME_GTK4_DIR="usr/lib/gtk-4.0/4.0.0/immodules" + KIME_GTK4_DIR="$KIME_LIB_DIR/gtk-4.0/4.0.0/immodules" fi if [ -z "$KIME_QT5_DIR" ]; then - KIME_QT5_DIR="usr/lib/qt" + KIME_QT5_DIR="$KIME_LIB_DIR/qt" fi if [ -z "$KIME_QT6_DIR" ]; then - KIME_QT6_DIR="usr/lib/qt6" + KIME_QT6_DIR="$KIME_LIB_DIR/qt6" fi -install_bin() { - install -Dm755 $KIME_OUT/$1 -t "$PREFIX/$KIME_BIN_DIR" +install_if () { + test -f $KIME_OUT/$1 && + install -Dm$2 $KIME_OUT/$1 $3 "$PREFIX/$4" +} + +install_bin () { + install_if $1 755 -t "$KIME_BIN_DIR" } install_bin kime-indicator @@ -56,9 +61,9 @@ install_bin kime-wayland install -Dm644 $KIME_OUT/default_config.yaml -T "$PREFIX/etc/kime/config.yaml" install -Dm644 $KIME_OUT/icons/* -t "$PREFIX/$KIME_DATA_DIR/icons" install -Dm755 $KIME_OUT/libkime_engine.so -t "$PREFIX/$KIME_LIB_DIR" -install -Dm755 $KIME_OUT/libkime-gtk2.so -T "$PREFIX/$KIME_GTK2_DIR/im-kime.so" -install -Dm755 $KIME_OUT/libkime-gtk3.so -T "$PREFIX/$KIME_GTK3_DIR/im-kime.so" -install -Dm755 $KIME_OUT/libkime-gtk4.so -t "$PREFIX/$KIME_GTK4_DIR" -install -Dm755 $KIME_OUT/libkime-qt5.so -T "$PREFIX/$KIME_QT5_DIR/plugins/platforminputcontexts/libkimeplatforminputcontextplugin.so" -install -Dm755 $KIME_OUT/libkime-qt6.so -T "$PREFIX/$KIME_QT6_DIR/plugins/platforminputcontexts/libkimeplatforminputcontextplugin.so" +install_if libkime-gtk2.so 755 -T "$KIME_GTK2_DIR/im-kime.so" +install_if libkime-gtk3.so 755 -T "$KIME_GTK3_DIR/im-kime.so" +install_if libkime-gtk4.so 755 -t "$KIME_GTK4_DIR" +install_if libkime-qt5.so 755 -T "$KIME_QT5_DIR/plugins/platforminputcontexts/libkimeplatforminputcontextplugin.so" +install_if libkime-qt6.so 755 -T "$KIME_QT6_DIR/plugins/platforminputcontexts/libkimeplatforminputcontextplugin.so" diff --git a/scripts/release-deb.sh b/scripts/release-deb.sh index 27bb4723..163bac0b 100755 --- a/scripts/release-deb.sh +++ b/scripts/release-deb.sh @@ -1,5 +1,7 @@ #!/bin/bash +KIME_PREFIX=51_kime + source $(dirname $0)/tool.sh if [ -z "$1" ]; then @@ -12,10 +14,15 @@ TMP_PATH=$(mktemp -d) VER=$(git tag --sort=v:refname | tail -1 | cut -b2-) mkdir -pv $TMP_PATH/DEBIAN +mkdir -pv $TMP_PATH/usr/share/im-config/data cat scripts/control.in | sed "s/%VER%/$VER/" > $TMP_PATH/DEBIAN/control +cp scripts/im_kime.rc $TMP_PATH/usr/share/im-config/data/$KIME_PREFIX.rc +cp scripts/im_kime.conf $TMP_PATH/usr/share/im-config/data/$KIME_PREFIX.conf +KIME_LIB_DIR=usr/lib/x86_64-linux-gnu \ +KIME_QT5_DIR=usr/lib/x86_64-linux-gnu/qt5 \ +KIME_QT6_DIR=usr/lib/x86_64-linux-gnu/qt6 \ scripts/install.sh $TMP_PATH -dpkg-deb --build $TMP_PATH "${TARGET_PATH}/kime_${VER}_amd64.deb" - +dpkg-deb --build $TMP_PATH "${TARGET_PATH}/kime_amd64.deb" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 76deb031..d4ce418b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,6 +17,7 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(KIME_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/engine/cffi) set(KIME_LIB_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../target/debug ${CMAKE_CURRENT_SOURCE_DIR}/../target/release) +set(KIME_ENGINE kime_engine) set(OpenGL_GL_PREFERENCE GLVND) include(GNUInstallDirs) diff --git a/src/frontends/gtk2/CMakeLists.txt b/src/frontends/gtk2/CMakeLists.txt index fb6fed2e..66c01b25 100644 --- a/src/frontends/gtk2/CMakeLists.txt +++ b/src/frontends/gtk2/CMakeLists.txt @@ -1,13 +1,11 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(GTK2 gtk+-2.0) -if(${GTK2_FOUND} STREQUAL "0") - return() -endif() - -add_library(kime-gtk2 SHARED src/gtk.c src/immodule.c) +if(GTK2_FOUND) + add_library(kime-gtk2 SHARED src/gtk.c src/immodule.c) -target_compile_definitions(kime-gtk2 PRIVATE GTK_DISABLE_DEPRECATED) -target_include_directories(kime-gtk2 PRIVATE ${GTK2_INCLUDE_DIRS} ${KIME_INCLUDE}) -target_link_directories(kime-gtk2 PRIVATE ${GTK2_LIBRARY_DIRS} ${KIME_LIB_DIRS}) -target_link_libraries(kime-gtk2 PRIVATE ${GTK2_LIBRARIES} kime_engine) + target_compile_definitions(kime-gtk2 PRIVATE GTK_DISABLE_DEPRECATED) + target_include_directories(kime-gtk2 PRIVATE ${GTK2_INCLUDE_DIRS} ${KIME_INCLUDE}) + target_link_directories(kime-gtk2 PRIVATE ${GTK2_LIBRARY_DIRS} ${KIME_LIB_DIRS}) + target_link_libraries(kime-gtk2 PRIVATE ${GTK2_LIBRARIES} ${KIME_ENGINE}) +endif() diff --git a/src/frontends/gtk3/CMakeLists.txt b/src/frontends/gtk3/CMakeLists.txt index 60db8fca..cdcb20d6 100644 --- a/src/frontends/gtk3/CMakeLists.txt +++ b/src/frontends/gtk3/CMakeLists.txt @@ -1,12 +1,10 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(GTK3 gtk+-3.0) -if(${GTK3_FOUND} STREQUAL "0") - return() -endif() - -add_library(kime-gtk3 SHARED ../gtk2/src/gtk.c ../gtk2/src/immodule.c) +if(GTK3_FOUND) + add_library(kime-gtk3 SHARED ../gtk2/src/gtk.c ../gtk2/src/immodule.c) -target_include_directories(kime-gtk3 PRIVATE ${GTK3_INCLUDE_DIRS} ${KIME_INCLUDE}) -target_link_directories(kime-gtk3 PRIVATE ${GTK3_LIBRARY_DIRS} ${KIME_LIB_DIRS}) -target_link_libraries(kime-gtk3 ${GTK3_LIBRARIES} kime_engine) + target_include_directories(kime-gtk3 PRIVATE ${GTK3_INCLUDE_DIRS} ${KIME_INCLUDE}) + target_link_directories(kime-gtk3 PRIVATE ${GTK3_LIBRARY_DIRS} ${KIME_LIB_DIRS}) + target_link_libraries(kime-gtk3 ${GTK3_LIBRARIES} ${KIME_ENGINE}) +endif() diff --git a/src/frontends/gtk4/CMakeLists.txt b/src/frontends/gtk4/CMakeLists.txt index bba1115b..80000637 100644 --- a/src/frontends/gtk4/CMakeLists.txt +++ b/src/frontends/gtk4/CMakeLists.txt @@ -1,12 +1,10 @@ find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK4 gtk4) +pkg_check_modules(GTK4 QUIET gtk4) -if(${GTK4_FOUND} STREQUAL "0") - return() -endif() - -add_library(kime-gtk4 SHARED src/gtk4.c ../gtk2/src/immodule.c) +if(GTK4_FOUND) + add_library(kime-gtk4 SHARED src/gtk4.c ../gtk2/src/immodule.c) -target_include_directories(kime-gtk4 PRIVATE ${GTK4_INCLUDE_DIRS} ${KIME_INCLUDE}) -target_link_directories(kime-gtk4 PRIVATE ${GTK4_LIBRARY_DIRS} ${KIME_LIB_DIRS}) -target_link_libraries(kime-gtk4 PRIVATE ${GTK4_LIBRARIES} kime_engine) + target_include_directories(kime-gtk4 PRIVATE ${GTK4_INCLUDE_DIRS} ${KIME_INCLUDE}) + target_link_directories(kime-gtk4 PRIVATE ${GTK4_LIBRARY_DIRS} ${KIME_LIB_DIRS}) + target_link_libraries(kime-gtk4 PRIVATE ${GTK4_LIBRARIES} ${KIME_ENGINE}) +endif() diff --git a/src/frontends/qt5/CMakeLists.txt b/src/frontends/qt5/CMakeLists.txt index aa8eb63a..3b8b9021 100644 --- a/src/frontends/qt5/CMakeLists.txt +++ b/src/frontends/qt5/CMakeLists.txt @@ -4,9 +4,9 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) -find_package(Qt5 5.1.0 COMPONENTS Gui REQUIRED) +find_package(Qt5 5.1.0 QUIET COMPONENTS Gui QUIET) -if(NOT ${Qt5_FOUND}) +if(NOT Qt5_FOUND) return() endif() @@ -14,4 +14,4 @@ add_library(kime-qt5 SHARED src/plugin.cc src/input_context.cc) target_include_directories(kime-qt5 PRIVATE ${Qt5Gui_PRIVATE_INCLUDE_DIRS} ${KIME_INCLUDE}) target_link_directories(kime-qt5 PRIVATE ${KIME_LIB_DIRS}) -target_link_libraries(kime-qt5 PRIVATE kime_engine Qt5::Gui) +target_link_libraries(kime-qt5 PRIVATE ${KIME_ENGINE} Qt5::Gui) diff --git a/src/frontends/qt6/CMakeLists.txt b/src/frontends/qt6/CMakeLists.txt index 00021d37..a5b2b79d 100644 --- a/src/frontends/qt6/CMakeLists.txt +++ b/src/frontends/qt6/CMakeLists.txt @@ -4,9 +4,9 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) -find_package(Qt6 6.0.0 COMPONENTS Gui REQUIRED) +find_package(Qt6 6.0.0 QUIET COMPONENTS Gui QUIET) -if(NOT ${Qt6_FOUND}) +if(NOT Qt6_FOUND) return() endif() @@ -14,4 +14,4 @@ add_library(kime-qt6 SHARED ../qt5/src/plugin.cc ../qt5/src/input_context.cc) target_include_directories(kime-qt6 PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS} ${KIME_INCLUDE}) target_link_directories(kime-qt6 PRIVATE ${KIME_LIB_DIRS}) -target_link_libraries(kime-qt6 PRIVATE kime_engine Qt6::Gui) +target_link_libraries(kime-qt6 PRIVATE ${KIME_ENGINE} Qt6::Gui)