File fcitx.spec of Package fcitx

#
# spec file for package fcitx
#
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


%define libver -4_2_4

Name:           fcitx
Version:        4.2.4.1
Release:        0
Summary:        Flexible Context-aware Input Tool with eXtension
License:        GPL-2.0+
Group:          System/I18n/Chinese
Url:            http://code.google.com/p/fcitx
#Source:         http://fcitx.googlecode.com/files/%{name}-%{version}.tar.xz
# use bzip to be compatible with sles.
Source:         %{name}-%{version}.tar.bz2
Source1:        xim.d-fcitx
Source2:        fcitx-README.suse
Source3:        xim.fcitx.suse.template
Source5:        pinyin.tar.gz
Source6:        table.tar.gz
# for fedora auto-start
Source7:        xinput-fcitx
#FIX-FOR-UPSTREAM i@marguerite.su - dont download online
Patch1:         fix_fcitx_googlecode_resolv_error.patch
#FIX-FOR-UPSTREAM wengxuetian@gmail.com - fix memeory overflow
Patch2:         fix-fcitx-4.2.4.1-memory-overflow.patch
BuildRequires:  cairo-devel
%if 0%{?suse_version}
BuildRequires:  dbus-1-devel
BuildRequires:  dbus-1-glib-devel
BuildRequires:  update-desktop-files
%endif
%if 0%{?fedora_version}
BuildRequires:  dbus-devel
BuildRequires:  dbus-glib-devel
BuildRequires:  desktop-file-utils
BuildRequires:  libxkbfile-devel
%endif
BuildRequires:  enchant-devel
BuildRequires:  iso-codes-devel
BuildRequires:  pango-devel
%if 0%{?suse_version} >= 1110 || 0%{?fedora_version}
BuildRequires:  fdupes
%endif
%if 0%{?suse_version} > 1110 || 0%{?fedora_version}
BuildRequires:  libqt4-devel
%endif
%if 0%{?suse_version} <= 1210 || 0%{?fedora_version}
BuildRequires:  lua-devel
%else
BuildRequires:  lua51-devel
%endif
BuildRequires:  cmake
BuildRequires:  gtk2-devel
BuildRequires:  intltool
BuildRequires:  opencc-devel
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildRequires:  gtk3-devel
BuildRequires:  gobject-introspection-devel
%endif
BuildRequires:  gcc-c++
BuildRequires:  libicu-devel
BuildRequires:  libxml2-devel
Requires:       %{name}-gtk2 = %{version}-%{release}
Requires:       lib%{name}%{libver} = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
Requires:       %{name}-gtk3 = %{version}-%{release}
%endif
%if 0%{?suse_version} > 1110 || 0%{?fedora_version}
Requires:       %{name}-qt4 = %{version}-%{release}
%endif
%if 0%{?suse_version}
Recommends:       %{name}-pinyin = %{version}-%{release}
Recommends:       %{name}-table = %{version}-%{release}
%endif
%if 0%{?fedora_version}
Requires(post):		%{_sbindir}/alternatives
Requires(postun):	%{_sbindir}/alternatives
%endif
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
Provides:       locale(ko;zh_CN;zh_SG)

%description
Fcitx is a CJK input method framework. It supports Table,
Pinyin and QuWei input methods. It's flexible and fast.

%package -n lib%{name}%{libver}
Summary:        Shared libraries for %{name}
Group:          System/I18n/Chinese

%description -n lib%{name}%{libver}
Shared libraries for Fcitx input method framework.

%package devel
Summary:        Development files for %{name}
Group:          Development/Libraries/C and C++
Requires:       %{name} = %{version}-%{release}

%description devel
Development header files for Fcitx input method framework.
 
%package gtk2
Summary:        Gtk2 IM module for %{name}
Group:          System/I18n/Chinese
Requires:       %{name} = %{version}-%{release}
%if 0%{?suse_version} >= 1140
%gtk2_immodule_requires
%else
Requires(post):       gtk2
Requires(postun):       gtk2
%endif

%description gtk2
GTK+ version 2 input module for Fcitx input method rfamework.

%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}

%package gtk3
Summary:        Gtk3 IM module for %{name}
Group:          System/I18n/Chinese
Requires:       %{name} = %{version}-%{release}
%if 0%{?suse_version}
%gtk3_immodule_requires
%else
Requires(post):       gtk3
Requires(postun):     gtk3
%endif

%description gtk3
GTK+ version 3 input module for Fcitx input method framework.

%endif
%if 0%{?suse_version} > 1110 || 0%{?fedora_version}

%package qt4
Summary:        Qt4 IM module for %{name}
Group:          System/I18n/Chinese
Requires:       %{name} = %{version}-%{release}

%description qt4
QT4 input module for Fcitx input method framework.

%endif

%package quwei
Summary:       Chinese Zone-bit(QuWei) engine for %{name}
Group:         System/I18n/Chinese
Requires:      %{name} = %{version}-%{release}

%description quwei
Chinese Zone-bit(QuWei) engine for Fcitx input method framework.

%package pinyin
Summary:       Chinese Pinyin engine for %{name}
Group:         System/I18n/Chinese
Requires:      %{name} = %{version}-%{release}

%description pinyin
Chinese Pinyin engine for Fcitx input method framework.

%package table
Summary:       Table engine for %{name}
Group:         System/I18n/Chinese
Requires:      %{name} = %{version}-%{release}

%description table
Table engine for Fcitx input method framework.

It's the basic component for other users except some Chinese.

%package table-cn-cangjie
Summary:       Simplified Chinese Tsang-Jei(Cangjie) table for %{name}
Group:         System/I18n/Chinese
Requires:      %{name}-table = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description table-cn-cangjie
Fcitx Tsang Jei (Cang Jie) input tables for Simplified Chinese.

%package table-cn-dianbao
Summary:       Telegram(Dianbao) table for %{name}
Group:         System/I18n/Chinese
Requires:      %{name}-table = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description table-cn-dianbao
Fcitx Telegram (Dian Bao) input tables for Simplified Chinese.

%package table-cn-erbi
Summary:       Two stroke(Erbi) table for %{name}
Group:         System/I18n/Chinese
Requires:      %{name}-table = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description table-cn-erbi
Fcitx Two Stroke (Er Bi) input tables for Simplified Chinese.

%package table-cn-bingchan
Summary:       Icefrog Holography(QXM) table for %{name}
Group:         System/I18n/Chinese
Requires:      %{name}-table = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description table-cn-bingchan
Fcitx Icefrog Holography (Bing Chan Quan Xi, or QXM) input tables for Simplified Chinese.

%package table-cn-wanfeng
Summary:       Evening Breeze(Wanfeng) table for %{name}
Group:         System/I18n/Chinese
Requires:      %{name}-table = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description table-cn-wanfeng
Fcitx Evening Breeze (Wan feng) input tables for Simplified Chinese.

%package table-cn-wubi-pinyin
Summary:       Wubi and pinyin(wubi-pinyin) table for %{name}
Group:         System/I18n/Chinese
Provides:      locale(fcitx-table:zh-cn;)
Requires:      %{name}-table = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description table-cn-wubi-pinyin
Fcitx Wubi (Wu Bi Zi Xing) and Pinyin mixed input tables for Simplified Chinese.

Wubi in Fcitx is based on wubi x86.

%package table-cn-wubi
Summary:       Wubi table for %{name}
Group:         System/I18n/Chinese
Provides:      locale(fcitx-table:zh-cn;)
Requires:      %{name}-table = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description table-cn-wubi
Fcitx Wubi (Wu Bi Zi Xing) input tables for Simplified Chinese.

Wubi in Fcitx is based on wubi x86.

%package table-cn-ziran
Summary:       Nature(Ziran) table for %{name}
Group:         System/I18n/Chinese
Requires:      %{name}-table = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description table-cn-ziran
Fcitx Nature (Zi Ran Ma) input tables for Simplified Chinese.

%package table-tools
Summary:       Fcitx tools to make tables
Group:         System/I18n/Chinese
Requires:      lib%{name}%{libver} = %{version}-%{release}

%description table-tools
Tools to convert txt word sheets to fcitx tables.

see manpage for details

%package pinyin-tools
Summary:       Fcitx tools to make pinyin match list
Group:         System/I18n/Chinese
Requires:      lib%{name}%{libver} = %{version}-%{release}

%description pinyin-tools
Tools to convert txt or scel(sougou pinyin data format) pinyin sheets to fcitx match lists.

%package skin-classic
Summary:       Fcitx Classic Skin
Group:         System/I18n/Chinese
Requires:      %{name} = %{version}-%{release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description skin-classic
Fcitx classic skin.

You can either use this package or download from kde-look.org using knewstaff in fcitx-config-kde4.

%package skin-dark
Summary:       Fcitx Dark Skin
Group:         System/I18n/Chinese
Requires:      %{name} = %{version}-%release}
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
BuildArch:     noarch
%endif

%description skin-dark
Fcitx dark skin.

You can either use this package for download from kde-look.org using knewstaff in fcitx-config-kde4.


%prep
%setup -q -n %{name}-%{version}
%patch1 -p1
# remove when next release
%patch2 -p1

%build
mkdir build
cd build

cmake .. -DENABLE_GTK2_IM_MODULE=On \
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
         -DENABLE_GTK3_IM_MODULE=On \
%endif
%if 0%{?suse_version} > 1110 || 0%{?fedora_version}
         -DENABLE_QT_IM_MODULE=On \
%endif
         -DCMAKE_INSTALL_PREFIX=%{_prefix} \
         -DLIB_INSTALL_DIR=%{_libdir} \
	 -DENABLE_DEBUG=On \
	 -DENABLE_OPENCC=On \
     -DENABLE_LUA=On

# copy external data
pushd ../data
cp -r %{S:5} ./
popd
pushd ../data/table
cp -r %{S:6} ./
popd

# fix gobject-introspection build
export SUSE_ASNEEDED=0
make

%install
cd build
# support fedora 17
make DESTDIR=%{buildroot} install

cd ..

# fix desktop file
sed -i "s/x-fskin/x-fskin;/" %{buildroot}%{_datadir}/applications/fcitx-skin-installer.desktop

%if 0%{?suse_version}
%suse_update_desktop_file  fcitx Utility DesktopUtility
%suse_update_desktop_file  fcitx-skin-installer Utility DesktopUtility
%suse_update_desktop_file  fcitx-configtool System X-SuSE-SystemSetup
%endif

%if 0%{?fedora_version}
desktop-file-install --add-category="Utility" --delete-original --dir=%{buildroot}%{_datadir}/applications \
%{buildroot}/%{_datadir}/applications/fcitx.desktop
desktop-file-install --add-category="Utility" --delete-original --dir=%{buildroot}%{_datadir}/applications \
%{buildroot}/%{_datadir}/applications/fcitx-skin-installer.desktop
desktop-file-install --add-category="System" --delete-original --dir=%{buildroot}%{_datadir}/applications \
%{buildroot}/%{_datadir}/applications/fcitx-configtool.desktop
%endif

# fix doc
%if 0%{?suse_version}
mkdir %{buildroot}%{_docdir}
mv %{buildroot}%{_datadir}/doc/%{name}/ %{buildroot}%{_docdir}
cp -r AUTHORS %{buildroot}%{_docdir}/%{name}/
cp -r ChangeLog %{buildroot}%{_docdir}/%{name}/
%endif
%if 0%{?fedora_version}
mkdir %{buildroot}%{_docdir}/packages/
mv %{buildroot}%{_datadir}/doc/%{name}/ %{buildroot}%{_docdir}/packages/
cp -r AUTHORS %{buildroot}%{_docdir}/packages/%{name}/
cp -r ChangeLog %{buildroot}%{_docdir}/packages/%{name}/
%endif

# create autostart
%if 0%{?suse_version}
mkdir -p %{buildroot}%{_sysconfdir}/X11/xim.d/
install -m 644 %{S:1} %{buildroot}%{_sysconfdir}/X11/xim.d/fcitx

priority=30
pushd  %{buildroot}%{_sysconfdir}/X11/xim.d/
    for lang in en ko zh_CN zh_SG ; do
        mkdir $lang
        pushd $lang
            ln -s ../fcitx $priority-fcitx
        popd
    done
popd
%endif

%if 0%{?fedora_version}
mkdir -pv %{buildroot}%{_sysconfdir}/X11/xinit/xinput.d/
install -pm 644 -D %{SOURCE7} %{buildroot}%{_sysconfdir}/X11/xinit/xinput.d/fcitx.conf
%endif

# remove *.la
%{__rm} -rf %{buildroot}%{_libdir}/lib%{name}-config.la

%find_lang %{name}

%if 0%{?suse_version} >= 1110
%fdupes %{buildroot}
%else
%if 0%{?fedora_version}
fdupes -n -q -r %{buildroot}
%endif
%endif

# strip unnessary libraries
%{__strip} %{buildroot}%{_libdir}/%{name}/*.so
%{__strip} %{buildroot}%{_libdir}/libfcitx*.so.*
%{__strip} %{buildroot}%{_libdir}/gtk-2.0/*/immodules/im-%{name}.so
%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}
%{__strip} %{buildroot}%{_libdir}/gtk-3.0/*/immodules/im-%{name}.so
%endif
%if 0%{?suse_version} > 1110 || 0%{?fedora_version}
%{__strip} %{buildroot}%{_libdir}/qt4/plugins/inputmethods/qtim-%{name}.so
%endif

# Convenient define for the scriplets
%if %{_lib} == lib64
%define _gtk2_query_immodules %{_bindir}/gtk-query-immodules-2.0-64
%define _gtk2_query_immodules_update_cache %{_gtk2_query_immodules} > %{_sysconfdir}/gtk-2.0/gtk64.immodules
%else
%define _gtk2_query_immodules %{_bindir}/gtk-query-immodules-2.0
%define _gtk2_query_immodules_update_cache %{_gtk2_query_immodules} > %{_sysconfdir}/gtk-2.0/gtk.immodules
%endif

%post gtk2
%{_gtk2_query_immodules_update_cache}

%postun gtk2
%{_gtk2_query_immodules_update_cache}

%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}

%if %{_lib} == lib64
%define _gtk3_query_immodules %{_bindir}/gtk-query-immodules-3.0-64
%else
%define _gtk3_query_immodules %{_bindir}/gtk-query-immodules-3.0
%endif
%define _gtk3_query_immodules_update_cache %{_gtk3_query_immodules} --update-cache

%post gtk3
%{_gtk3_query_immodules_update_cache}

# Add fcitx icons to gnome3 panel
TARGET="/usr/share/gnome-shell/js/ui/statusIconDispatcher.js"
if [ -f $TARGET ] && [ ! -f $TARGET-fcitx ] ; then
mv $TARGET $TARGET-fcitx
sed "/^const STANDARD_TRAY_ICON_IMPLEMENTATIONS/a \    'fcitx': 'input-method'," $TARGET-fcitx > $TARGET
fi 

%postun gtk3
%{_gtk3_query_immodules_update_cache}

%endif

# fedora autostart
%if 0%{?fedora_version}
%post 
/sbin/ldconfig
%{_sbindir}/alternatives --install %{_sysconfdir}/X11/xinit/xinputrc xinputrc %{_sysconfdir}/X11/xinit/xinput.d/fcitx.conf 55 || :
update-desktop-database %{_datadir}/applications &>/dev/null || :

%postun  
/sbin/ldconfig
if [ "$1" = "0" ]; then
  %{_sbindir}/alternatives --remove xinputrc %{_sysconfdir}/X11/xinit/xinput.d/fcitx.conf || :
  # if alternative was set to manual, reset to auto
  [ -L %{_sysconfdir}/alternatives/xinputrc -a "`readlink %{_sysconfdir}/alternatives/xinputrc`" = "%{_sysconfdir}/X11/xinit/xinput.d/fcitx.conf" ] && %{_sbindir}/alternatives --auto xinputrc || :
fi
update-desktop-database %{_datadir}/applications &>/dev/null ||

%endif

%if 0%{?suse_version}
%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig
%endif

%post -n lib%{name}%{libver} -p /sbin/ldconfig

%postun -n lib%{name}%{libver} -p /sbin/ldconfig

%files -f %{name}.lang
%defattr(-,root,root)
%{_bindir}/%{name}
%{_bindir}/%{name}4-config
%{_bindir}/%{name}-configtool
%{_bindir}/%{name}-remote
%{_bindir}/%{name}-skin-installer
%{_datadir}/%{name}/
%{_datadir}/applications/*.desktop
%{_datadir}/icons/*
%{_datadir}/mime/packages/*
%{_mandir}/man1/fcitx.1.gz
%{_mandir}/man1/fcitx-remote.1.gz
%{_libdir}/%{name}/
%if 0%{?suse_version}
%config %{_sysconfdir}/X11/xim.d/
%{_docdir}/%{name}/
%endif
%if 0%{?fedora_version}
%config %{_sysconfdir}/X11/xinit/xinput.d/
%{_docdir}/packages/%{name}/
%endif

# excludes
%exclude %{_datadir}/%{name}/pinyin
%exclude %{_datadir}/%{name}/table
%exclude %{_datadir}/%{name}/imicon
%exclude %{_datadir}/%{name}/inputmethod
%exclude %{_datadir}/%{name}/addon/%{name}-pinyin.conf
%exclude %{_datadir}/%{name}/addon/%{name}-table.conf
%exclude %{_datadir}/%{name}/addon/%{name}-qw.conf
%exclude %{_datadir}/%{name}/configdesc/%{name}-pinyin.desc
%exclude %{_datadir}/%{name}/configdesc/table.desc
%exclude %{_libdir}/%{name}/fcitx-pinyin.so
%exclude %{_libdir}/%{name}/fcitx-table.so
%exclude %{_libdir}/%{name}/fcitx-qw.so
%exclude %{_datadir}/%{name}/skin/classic
%exclude %{_datadir}/%{name}/skin/dark

%files -n lib%{name}%{libver}
%defattr(-,root,root)
%{_libdir}/libfcitx*.so.*
%{_libdir}/libfcitx*.so

%files gtk2
%defattr(-,root,root)
%{_libdir}/gtk-2.0/*

%if 0%{?suse_version} >= 1140 || 0%{?fedora_version}

%files gtk3
%defattr(-,root,root)
%{_libdir}/gtk-3.0/*
%{_libdir}/girepository-1.0/Fcitx-1.0.typelib
%{_datadir}/gir-1.0/Fcitx-1.0.gir

%endif

%files quwei
%defattr(-,root,root)
%dir %{_datadir}/%{name}/inputmethod
%{_libdir}/%{name}/%{name}-qw.so
%{_datadir}/%{name}/inputmethod/qw.conf
%{_datadir}/%{name}/addon/%{name}-qw.conf

%files pinyin
%defattr(-,root,root)
%dir %{_datadir}/%{name}/imicon
%dir %{_datadir}/%{name}/inputmethod
%{_libdir}/%{name}/%{name}-pinyin.so
%{_datadir}/%{name}/pinyin/
%{_datadir}/%{name}/inputmethod/pinyin.conf
%{_datadir}/%{name}/inputmethod/shuangpin.conf
%{_datadir}/%{name}/addon/%{name}-pinyin.conf
%{_datadir}/%{name}/imicon/pinyin.png
%{_datadir}/%{name}/imicon/shuangpin.png
%{_datadir}/%{name}/configdesc/%{name}-pinyin.desc

%files table
%defattr(-,root,root)
%dir %{_datadir}/%{name}/table/
%{_libdir}/%{name}/%{name}-table.so
%{_datadir}/%{name}/addon/%{name}-table.conf
%{_datadir}/%{name}/configdesc/table.desc

%files table-cn-cangjie
%defattr(-,root,root)
%dir %{_datadir}/%{name}/imicon
%{_datadir}/%{name}/table/cangjie.*
%{_datadir}/%{name}/imicon/cangjie.png

%files table-cn-dianbao
%defattr(-,root,root)
%{_datadir}/%{name}/table/db.*

%files table-cn-erbi
%defattr(-,root,root)
%dir %{_datadir}/%{name}/imicon
%{_datadir}/%{name}/table/erbi.*
%{_datadir}/%{name}/imicon/erbi.png

%files table-cn-bingchan
%defattr(-,root,root)
%{_datadir}/%{name}/table/qxm.*

%files table-cn-wanfeng
%defattr(-,root,root)
%{_datadir}/%{name}/table/wanfeng.*

%files table-cn-wubi-pinyin
%defattr(-,root,root)
%dir %{_datadir}/%{name}/imicon
%{_datadir}/%{name}/table/wbpy.*
%{_datadir}/%{name}/imicon/wbpy.png

%files table-cn-wubi
%defattr(-,root,root)
%dir %{_datadir}/%{name}/imicon
%{_datadir}/%{name}/table/wbx.*
%{_datadir}/%{name}/imicon/wubi.png

%files table-cn-ziran
%defattr(-,root,root)
%dir %{_datadir}/%{name}/imicon
%{_datadir}/%{name}/table/zrm.*
%{_datadir}/%{name}/imicon/ziranma.png

%files table-tools
%defattr(-,root,root)
%{_bindir}/mb2txt
%{_bindir}/txt2mb
%{_mandir}/man1/mb2txt.1.gz
%{_mandir}/man1/txt2mb.1.gz

%files pinyin-tools
%defattr(-,root,root)
%{_bindir}/createPYMB
%{_bindir}/readPYMB
%{_bindir}/readPYBase
%{_bindir}/mb2org
%{_bindir}/scel2org
%{_mandir}/man1/createPYMB.1.gz
%{_mandir}/man1/readPYMB.1.gz
%{_mandir}/man1/readPYBase.1.gz
%{_mandir}/man1/mb2org.1.gz
%{_mandir}/man1/scel2org.1.gz

%files skin-classic
%defattr(-,root,root)
%{_datadir}/%{name}/skin/classic

%files skin-dark
%defattr(-,root,root)
%{_datadir}/%{name}/skin/dark

%files devel
%defattr(-,root,root)
%{_libdir}/pkgconfig/*.pc
%{_datadir}/cmake/
%{_includedir}/*

%if 0%{?suse_version} > 1110 || 0%{?fedora_version}

%files qt4
%defattr(-,root,root)
%{_libdir}/qt4/*

%endif

%changelog