fcitx / fcitx5

maybe a new fcitx.
1.62k stars 118 forks source link

编译错误:Color.cpp #127

Closed LatticeLadder closed 4 years ago

LatticeLadder commented 4 years ago

System Information

Alpine Linux,一个常用于Docker的Linux发行版,它的软件包构建系统APKBUILD说是抄袭Arch的PKGBUILD也不为过。

hp:~/fcitx5$ neofetch --off

tis@hp 
------ 
OS: Alpine Linux edge x86_64 
Host: HP Pavilion Sleekbook 14 PC 08801000003B5900000300100 
Kernel: 5.4.68-0-lts 
Uptime: 1 hour, 49 mins 
Packages: 488 (apk) 
Shell: ash 
Resolution: 1366x768 
DE: Xfce 4.14 
Theme: Greybird [GTK2], Adwaita [GTK3] 
Icons: Faenza [GTK2], Adwaita [GTK3] 
Terminal: xfce4-terminal 
Terminal Font: Monospace 12 
CPU: Intel i5-3317U (4) @ 2.600GHz 
GPU: NVIDIA GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M 
GPU: Intel 3rd Gen Core processor Graphics Controller 
Memory: 1367MiB / 3828MiB 

How the bug appears

国庆去Arch上找来fcitx5和xcb-imdkit的PKGBUILD文件,改了一下成APKBUILD(附在后面),后者几下搞好,前者怎么也搞不定,总是卡在lib/fcitx-utils/color.cpp那里:

-- The C compiler identification is GNU 10.2.0
-- The CXX compiler identification is GNU 10.2.0

# 中间省略

/home/tis/fcitx5/src/fcitx5-401a81e6f1916cf21d15381508e716ef3e2a5cbf/src/lib/fcitx-utils/color.cpp:50:13: error: expected constructor, destructor, or type conversion before '(' token
   50 | Color::Color(ushort r, ushort g, ushort b, ushort alpha)
      |             ^

What I've done

有人说是gcc的bug,于是我写了一个linux.toolchain.cmake把编译器改成clang

    cmake_minimum_required( VERSION 2.6.3 )
    set(CMAKE_SYSTEM_NAME Linux )

    SET (CMAKE_C_COMPILER             "/usr/bin/clang")
    SET (CMAKE_C_FLAGS                "-Wall -std=c99")
    SET (CMAKE_C_FLAGS_DEBUG          "-g")
    SET (CMAKE_C_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
    SET (CMAKE_C_FLAGS_RELEASE        "-O4 -DNDEBUG")
    SET (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")

    SET (CMAKE_CXX_COMPILER             "/usr/bin/clang++")
    SET (CMAKE_CXX_FLAGS                "-Wall")
    SET (CMAKE_CXX_FLAGS_DEBUG          "-g")
    SET (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
    SET (CMAKE_CXX_FLAGS_RELEASE        "-O4 -DNDEBUG")
    SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")

    SET (CMAKE_AR      "/usr/bin/llvm-ar")
    SET (CMAKE_LINKER  "/usr/bin/llvm-ld")
    SET (CMAKE_NM      "/usr/bin/llvm-nm")
    SET (CMAKE_OBJDUMP "/usr/bin/llvm-objdump")
    SET (CMAKE_RANLIB  "/usr/bin/llvm-ranlib")

错误依旧


-- The C compiler identification is Clang 10.0.1
-- The CXX compiler identification is Clang 10.0.1

# 中间省略

/home/tis/fcitx5/src/fcitx5-401a81e6f1916cf21d15381508e716ef3e2a5cbf/src/lib/fcitx-utils/color.cpp:50:14: error: 
      unknown type name 'ushort'; did you mean 'short'?
Color::Color(ushort r, ushort g, ushort b, ushort alpha)
             ^~~~~~
             short
/home/tis/fcitx5/src/fcitx5-401a81e6f1916cf21d15381508e716ef3e2a5cbf/src/lib/fcitx-utils/color.cpp:50:24: error: 
      unknown type name 'ushort'; did you mean 'short'?
Color::Color(ushort r, ushort g, ushort b, ushort alpha)
                       ^~~~~~
                       short
/home/tis/fcitx5/src/fcitx5-401a81e6f1916cf21d15381508e716ef3e2a5cbf/src/lib/fcitx-utils/color.cpp:50:34: error: 
      unknown type name 'ushort'; did you mean 'short'?
Color::Color(ushort r, ushort g, ushort b, ushort alpha)
                                 ^~~~~~
                                 short
/home/tis/fcitx5/src/fcitx5-401a81e6f1916cf21d15381508e716ef3e2a5cbf/src/lib/fcitx-utils/color.cpp:50:44: error: 
      unknown type name 'ushort'; did you mean 'short'?
Color::Color(ushort r, ushort g, ushort b, ushort alpha)
                                           ^~~~~~
                                           short
/home/tis/fcitx5/src/fcitx5-401a81e6f1916cf21d15381508e716ef3e2a5cbf/src/lib/fcitx-utils/color.cpp:50:8: error: 
      out-of-line definition of 'Color' does not match any declaration in
      'fcitx::Color'
Color::Color(ushort r, ushort g, ushort b, ushort alpha)
       ^~~~~
5 errors generated.

Appendices

APKBUILD File for fcitx5

pkgname=fcitx5
pkgver=0.0.0.20200929
pkgrel=1
_commit=401a81e6f1916cf21d15381508e716ef3e2a5cbf
_endictver=20121020
pkgdesc="Next generation of fcitx"
arch="x86_64"
url="https://github.com/fcitx/fcitx5"
license="LGPL"
depends="cairo libevent enchant2 libxcb iso-codes libxkbcommon-x11  libxkbcommon 
         pango libxcb xcb-util-wm libxkbfile fmt-dev gdk-pixbuf libexecinfo
         cldr-emoji-annotation dbus-glib json-c xcb-util-keysyms"
depends_dev="cairo-dev libevent-dev enchant2-dev libxcb-dev iso-codes-dev libexecinfo-dev
         libxkbcommon-dev pango-dev libxcb-dev xcb-util-wm-dev libxkbfile-dev fmt-dev gdk-pixbuf-dev
         dbus-glib-dev json-c-dev xcb-util-keysyms-dev"
makedepends="extra-cmake-modules $depends_dev"
source="https://github.com/fcitx/fcitx5/archive/$_commit/fcitx5-$_commit.tar.gz 
https://download.fcitx-im.org/data/en_dict-$_endictver.tar.gz"
builddir="$srcdir/"
prepare() {
  cd $srcdir/$pkgname-$_commit/src/modules/spell/dict
  ln -s "$srcdir"/en_dict-$_endictver.tar.gz ./
}

build() {
  cd $srcdir/$pkgname-$_commit
  cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib -DENABLE_WAYLAND=0 -DUSE_SYSTEMD=0 .
  make
}

check() {
  cd $srcdir/$pkgname-$_commit
  make test
}

package() {
  cd $srcdir/$pkgname-$_commit
  make DESTDIR="$pkgdir" install
}
sha512sums="17f1309e4a8a3159a71c8e311fc17f9262790ed729c410398851f23ada506939aa620b509b6ced89ea25fda82d4313b646bf33c8be6fddf76a57518b1a8196dc  fcitx5-401a81e6f1916cf21d15381508e716ef3e2a5cbf.tar.gz
8418bd02492bfd786c0fab93be4400ef027ec8e9fac02220cc1f653f5eb67f54573a6a84a15baba19bb34ab892745c87df16499d6304ea75009131e2ab3b97f2  en_dict-20121020.tar.gz"
karuboniru commented 4 years ago

Try adding

typedef unsigned short int ushort

This should be done in /usr/include/sys/types.h (as part of POSIX, provided by glibc), while it seems not working in your clang trial, or not present in your system headers.


Seems that Alpine is not using glibc by default, you may want to try manually adding those headers or find a musl equivalent (musl comply with POSIX, a equivalent should exist, and I don't know will this lead to any other problems).