From 8172caad20e1e0ea69f6dc88b3c22808e5aea0c3 Mon Sep 17 00:00:00 2001 From: MyungJoo Ham Date: Tue, 18 Oct 2016 09:41:58 +0000 Subject: [PATCH] Remove Profile Build Dependency - Added --disable-include-* option for configure.ac to always BuildRequires optional packages without changing built binaries. - This commit is for Tizen 4.0 (tizen branch) development. Do not add this for Tizen 3.0 (tizen_3.0 branch). - When this commit is being SR-ed, you need to create JIRA-TRE issue of the followings: - Add isf-profile_common for common profile - Add isf-profile_mobile for mobile profile - Add isf-profile_wearable for wearable profile - Add isf-profile_tv for tv profile - Add isf-profile_ivi for ivi profile (you should keep isf along with isf-profile_* in profile meta) - This is for Tizen 4.0 configurability and building blocks. - Please do not add "profile" or "repository" in .spec files anymore. ps1. The reverted commits included. ps2. Merged Jihoon Kim 's fix (manifest files) ps3. Fixed have-choice-for issue of .so require issues. (update of OBS/GBS should follow soon) Change-Id: I6da81922bbe57356671efc8a34a2fbe5ae59983a Signed-off-by: MyungJoo Ham --- configure.ac | 26 +++++- packaging/isf.spec | 231 ++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 217 insertions(+), 40 deletions(-) diff --git a/configure.ac b/configure.ac index 616d238..f8790ff 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # Process this file with autoconf to produce a configure script #AC_INIT(scim, 1.4.7, suzhe@tsinghua.org.cn) -AC_INIT(isf, 3.0.163, isf@samsung.com) +AC_INIT(isf, 3.0.164, isf@samsung.com) AC_CONFIG_SRCDIR([ism/src/scim.h]) ########################################################### @@ -10,7 +10,7 @@ AC_CONFIG_SRCDIR([ism/src/scim.h]) # ISF version ISF_MAJOR_VERSION=3 ISF_MINOR_VERSION=0 -ISF_MICRO_VERSION=163 +ISF_MICRO_VERSION=164 ISF_VERSION=$ISF_MAJOR_VERSION.$ISF_MINOR_VERSION.$ISF_MICRO_VERSION @@ -354,6 +354,17 @@ PKG_CHECK_MODULES(DB_UTIL, [db-util], [ISF_HAS_DB_UTIL=yes], [ISF_HAS_DB_UTIL=no]) +# Ignore checked modules if --disable option is added +AC_ARG_ENABLE(include-notification, + [ --disable-include-notification Do not include notification package], + enable_notification=no, + enable_notification=yes) + +AC_ARG_ENABLE(include-libwebsocket, + [ --disable-include-libwebsocket Do not include libwebsocket package], + enable_libwebsocket=no, + enable_libwebsocket=yes) + if test "$ISF_HAS_VCONF" = "yes"; then AC_DEFINE(HAVE_VCONF,1,[Have VConf functions.]) fi @@ -366,10 +377,14 @@ if test "$ISF_HAS_FEEDBACK" = "yes"; then AC_DEFINE(HAVE_FEEDBACK,1,[Have Feedback functions.]) fi -if test "$ISF_HAS_NOTIFICATION" = "yes"; then +if test "$ISF_HAS_NOTIFICATION" = "yes" && test "$enable_notification" = "yes"; then AC_DEFINE(HAVE_NOTIFICATION,1,[Have Notification functions.]) fi +if test "$enable_notification" = "no"; then + AC_MSG_NOTICE([Notification functions force-disabled.]) +fi + if test "$ISF_HAS_PKGMGR_INFO" = "yes"; then AC_DEFINE(HAVE_PKGMGR_INFO,1,[Have Package manager functions.]) fi @@ -687,10 +702,13 @@ fi ISF_BUILD_REMOTE_INPUT=0 if test "$enable_remote_input" != "no"; then enable_remote_input=no - if test "$ISF_HAS_LIBWEBSOCKETS" = "yes"; then + if test "$ISF_HAS_LIBWEBSOCKETS" = "yes" && test "$enable_libwebsocket" = "yes"; then ISF_BUILD_REMOTE_INPUT=1 enable_remote_input=yes fi + if test "$enable_libwebsocket" = "no"; then + AC_MSG_NOTICE([LIBWEBSOCKET forced disable.]) + fi fi #if nothing needs libscim-gtkutils, just disable it diff --git a/packaging/isf.spec b/packaging/isf.spec index c2ce8b9..723aac2 100644 --- a/packaging/isf.spec +++ b/packaging/isf.spec @@ -1,7 +1,9 @@ +%global __provides_exclude_from ^(.*\\.(wearable|tv|mobile|ivi))$ + %bcond_with wayland Name: isf Summary: Input Service Framework -Version: 3.0.163 +Version: 3.0.164 Release: 1 Group: Graphics & UI Framework/Input License: LGPL-2.1+ @@ -41,19 +43,45 @@ BuildRequires: pkgconfig(cynara-creds-socket) BuildRequires: pkgconfig(cynara-session) BuildRequires: capi-appfw-package-manager-devel Requires(postun): /sbin/ldconfig -%if "%{?profile}" == "mobile" || "%{?profile}" == "common" +Requires: %{name}-compat = %{version}-%{release} +Recommends: %{name}-profile_common = %{version}-%{release} +Requires: org.tizen.isf-kbd-mode-changer + +# Mobile/Common ONLY BuildRequires: pkgconfig(notification) -Requires: org.tizen.isf-kbd-mode-changer -%endif -%if "%{?profile}" == "tv" +# TV ONLY BuildRequires: pkgconfig(libwebsockets) -%endif %define APP_PREFIX %{TZ_SYS_RO_APP}/org.tizen.isf-kbd-mode-changer/bin/ %description Input Service Framewok (ISF) is an input method (IM) platform, and it has been derived from SCIM. +%package profile_wearable +Summary: ISF bin for wearable/ivi +Provides: %{name}-compat = %{version}-%{release} +Provides: %{name}-profile_ivi = %{version}-%{release} +Conflicts: %{name}-profile_common +Conflicts: %{name}-profile_tv +%description profile_wearable +Compile isf with --disable-include-notification and --disable-include-libwebsocket + +%package profile_common +Summary: ISF bin for mobile/common +Provides: %{name}-compat = %{version}-%{release} +Provides: %{name}-profile_mobile = %{version}-%{release} +Conflicts: %{name}-profile_wearable +Conflicts: %{name}-profile_tv +%description profile_common +Compile isf with --disable-include-libwebsocket + +%package profile_tv +Summary: ISF bin for TV +Provides: %{name}-compat = %{version}-%{release} +Conflicts: %{name}-profile_common +Conflicts: %{name}-profile_wearable +%description profile_tv +Compile isf with --disable-include-notification %package devel Summary: ISF header files @@ -77,37 +105,79 @@ Keyboard mode changer application export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE" export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE" export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE" - -%if "%{profile}" == "wearable" -CFLAGS+=" -D_WEARABLE -DENABLE_HIDE_PANEL_KEY=1"; -CXXFLAGS+=" -D_WEARABLE -DENABLE_HIDE_PANEL_KEY=1"; -%endif - -%if "%{profile}" == "mobile" || "%{profile}" == "common" -CFLAGS+=" -D_MOBILE -DENABLE_HIDE_PANEL_KEY=1"; -CXXFLAGS+=" -D_MOBILE -DENABLE_HIDE_PANEL_KEY=1"; +%if %{with wayland} +export CFLAGS="$CFLAGS -DWAYLAND" +export CXXFLAGS="$CXXFLAGS -DWAYLAND" %endif +export GC_SECTIONS_FLAGS="-fdata-sections -ffunction-sections -Wl,--gc-sections" +export CFLAGS="$CFLAGS -fvisibility=hidden ${GC_SECTIONS_FLAGS} " +export CXXFLAGS="$CXXFLAGS -fvisibility=hidden -fvisibility-inlines-hidden ${GC_SECTIONS_FLAGS} " +export CFLAGS_BASIS="$CFLAGS" +export CXXFLAGS_BASIS="$CXXFLAGS" -%if "%{profile}" == "tv" -CFLAGS+=" -D_TV -DENABLE_REMOTE_INPUT=1"; -CXXFLAGS+=" -D_TV -DENABLE_REMOTE_INPUT=1"; +%autogen +mkdir -p build_tv +export CFLAGS="$CFLAGS_BASIS -D_TV -DENABLE_REMOTE_INPUT=1"; +export CXXFLAGS="$CFLAGS_BASIS -D_TV -DENABLE_REMOTE_INPUT=1"; +%configure --disable-static \ + --disable-tray-icon \ + --disable-filter-sctc \ + --disable-include-notification \ +%if %{with wayland} + --disable-efl-immodule \ %endif + --disable-frontend-x11 \ + --disable-multiwindow-support \ + --disable-ime-embed-app \ + --with-ro-app-dir=%{TZ_SYS_RO_APP} \ + --with-ro-packages-dir=%{TZ_SYS_RO_PACKAGES} +make %{?_smp_mflags} +# Install essential profile-tv files into build_tv +%make_install +mkdir -p build_tv/bin +mkdir -p build_tv/lib +mv %{buildroot}%{_bindir}/* build_tv/bin/ +mv %{buildroot}%{_libdir}/* build_tv/lib/ +mv %{buildroot}%{_datadir}/scim/remote-input build_tv/ +ls -la build_tv/bin/ +ls -la build_tv/lib/ +ls -la build_tv/ +make clean +mkdir -p build_wearable +export CFLAGS="$CFLAGS_BASIS -D_WEARABLE -DENABLE_HIDE_PANEL_KEY=1"; +export CXXFLAGS="$CXXFLAGS_BASIS -D_WEARABLE -DENABLE_HIDE_PANEL_KEY=1"; +%configure --disable-static \ + --disable-tray-icon \ + --disable-filter-sctc \ + --disable-include-libwebsocket \ + --disable-include-notification \ %if %{with wayland} -CFLAGS+=" -DWAYLAND" -CXXFLAGS+=" -DWAYLAND" + --disable-efl-immodule \ %endif + --disable-frontend-x11 \ + --disable-multiwindow-support \ + --disable-ime-embed-app \ + --with-ro-app-dir=%{TZ_SYS_RO_APP} \ + --with-ro-packages-dir=%{TZ_SYS_RO_PACKAGES} +make %{?_smp_mflags} +# Install essential profile-wearable files into build_wearable +%make_install +mkdir -p build_wearable/bin +mkdir -p build_wearable/lib +mv %{buildroot}%{_bindir}/* build_wearable/bin/ +mv %{buildroot}%{_libdir}/* build_wearable/lib/ +ls -la build_wearable/bin/ +ls -la build_wearable/lib/ +make clean -export GC_SECTIONS_FLAGS="-fdata-sections -ffunction-sections -Wl,--gc-sections" - -CFLAGS+=" -fvisibility=hidden ${GC_SECTIONS_FLAGS} "; export CFLAGS - -CXXFLAGS+=" -fvisibility=hidden -fvisibility-inlines-hidden ${GC_SECTIONS_FLAGS} ";export CXXFLAGS - -%autogen +# mobile/common +export CFLAGS="$CFLAGS_BASIS -D_MOBILE -DENABLE_HIDE_PANEL_KEY=1"; +export CXXFLAGS="$CXXFLAGS_BASIS -D_MOBILE -DENABLE_HIDE_PANEL_KEY=1"; %configure --disable-static \ --disable-tray-icon \ --disable-filter-sctc \ + --disable-include-libwebsocket \ %if %{with wayland} --disable-efl-immodule \ %endif @@ -127,6 +197,26 @@ cp -af ism/dump/isf_log_dump.sh %{buildroot}/%{TZ_SYS_ETC}/dump.d/module.d mkdir -p %{buildroot}/etc/scim/conf mkdir -p %{buildroot}/usr/share/upgrade/scripts/ cp 500.isf_upgrade_24to30.sh %{buildroot}/usr/share/upgrade/scripts/ +mv build_tv/bin/isf-demo-efl %{buildroot}%{_bindir}/isf-demo-efl.tv +mv build_tv/bin/isf-panel-efl %{buildroot}%{_bindir}/isf-panel-efl.tv +mv build_tv/bin/isf-log %{buildroot}%{_bindir}/isf-log.tv +mkdir -p %{buildroot}%{_datadir}/scim +mv build_tv/remote-input %{buildroot}%{_datadir}/scim/ +#mv build_tv/lib/libscim-*.so* %{buildroot}%{_libdir}/libscim-*.so*.tv +pushd build_tv/lib/ +for FILE in libscim-*.so*; do mv "$FILE" "%{buildroot}%{_libdir}/$FILE.tv"; done +popd +mv build_tv/lib/scim-1.0/scim-launcher %{buildroot}%{_libdir}/scim-1.0/scim-launcher.tv +mv build_tv/lib/scim-1.0/scim-helper-launcher %{buildroot}%{_libdir}/scim-1.0/scim-helper-launcher.tv +mv build_wearable/bin/isf-demo-efl %{buildroot}%{_bindir}/isf-demo-efl.wearable +mv build_wearable/bin/isf-panel-efl %{buildroot}%{_bindir}/isf-panel-efl.wearable +mv build_wearable/bin/isf-log %{buildroot}%{_bindir}/isf-log.wearable +#mv build_wearable/lib/libscim-*.so* %{buildroot}%{_libdir}/libscim-*.so*.wearable +pushd build_wearable/lib/ +for FILE in libscim-*.so*; do mv "$FILE" "%{buildroot}%{_libdir}/$FILE.wearable"; done +popd +mv build_wearable/lib/scim-1.0/scim-launcher %{buildroot}%{_libdir}/scim-1.0/scim-launcher.wearable +mv build_wearable/lib/scim-1.0/scim-helper-launcher %{buildroot}%{_libdir}/scim-1.0/scim-helper-launcher.wearable %find_lang scim @@ -138,6 +228,44 @@ ln -sf %{_libdir}/ecore_imf/modules/wayland/v-1.16/module.so %{_libdir}/ecore_im %postun -p /sbin/ldconfig +%post profile_wearable +ln -sf isf-demo-efl.wearable %{_bindir}/isf-demo-efl +ln -sf isf-panel-efl.wearable %{_bindir}/isf-panel-efl +ln -sf isf-log.wearable %{_bindir}/isf-log +ln -sf scim-launcher.wearable %{_libdir}/scim-1.0/scim-launcher +ln -sf scim-helper-launcher.wearable %{_libdir}/scim-1.0/scim-helper-launcher +pushd %{_libdir} +for FILE in libscim-*.so*.wearable; do ln -sf "$FILE" "${FILE%.wearable}"; done +popd + +%preun profile_wearable +rm %{_bindir}/isf-demo-efl +rm %{_bindir}/isf-panel-efl +rm %{_bindir}/isf-log +rm %{_libdir}/scim-1.0/scim-launcher +rm %{_libdir}/scim-1.0/scim-helper-launcher +pushd %{_libdir} +for FILE in libscim-*.so*; do rm "$FILE"; done +popd + +%post profile_tv +ln -sf isf-demo-efl.tv %{_bindir}/isf-demo-efl +ln -sf isf-panel-efl.tv %{_bindir}/isf-panel-efl +ln -sf isf-log.tv %{_bindir}/isf-log +ln -sf scim-launcher.tv %{_libdir}/scim-1.0/scim-launcher +ln -sf scim-helper-launcher.tv %{_libdir}/scim-1.0/scim-helper-launcher +pushd %{_libdir} +for FILE in libscim-*.so*.tv; do ln -sf "$FILE" "${FILE%.tv}"; done +popd +%preun profile_tv +rm %{_bindir}/isf-demo-efl +rm %{_bindir}/isf-panel-efl +rm %{_bindir}/isf-log +rm %{_libdir}/scim-1.0/scim-launcher +rm %{_libdir}/scim-1.0/scim-helper-launcher +pushd %{_libdir} +for FILE in libscim-*.so*; do rm "$FILE"; done +popd %files -f isf.lang %manifest %{name}.manifest @@ -148,25 +276,56 @@ ln -sf %{_libdir}/ecore_imf/modules/wayland/v-1.16/module.so %{_libdir}/ecore_im %{_sysconfdir}/scim/config %{_datadir}/scim/isf_candidate_theme1.edj %{_datadir}/scim/icons/* -%if "%{profile}" == "tv" -%attr(755,root,root) %{_datadir}/scim/remote-input/* -%endif -%{_bindir}/isf-demo-efl -%{_bindir}/isf-panel-efl -%{_bindir}/isf-log %{_libdir}/ecore_imf/modules/*/*/*.so %{_libdir}/scim-1.0/1.4.0/IMEngine/socket.so %{_libdir}/scim-1.0/1.4.0/PanelAgent/*.so %{_libdir}/scim-1.0/1.4.0/Config/simple.so %{_libdir}/scim-1.0/1.4.0/Config/socket.so %{_libdir}/scim-1.0/1.4.0/FrontEnd/*.so -%{_libdir}/scim-1.0/scim-launcher -%{_libdir}/scim-1.0/scim-helper-launcher -%{_libdir}/libscim-*.so* +# Fortunately imeparser is not fragemented. %{TZ_SYS_RO_ETC}/package-manager/parserlib/category/libimeparser.so %license COPYING %{TZ_SYS_ETC}/dump.d/module.d/* /usr/share/upgrade/scripts/* +# files in bindir, lib/libscim*.so.*, lib/scim-1.0/scim-launcher are different +%exclude %{_libdir}/libscim-*.so*.tv +%exclude %{_libdir}/libscim-*.so*.wearable +%{_libdir}/libscim-*.so* +# All .so files that are required by other packages should be housed in the main package +# although they might be overwritten by subpackages unless there is no possibilities of +# have-choice issues. + +%files profile_wearable +%manifest %{name}.manifest +# files in bindir and libdir may differ. +%{_bindir}/isf-demo-efl.wearable +%{_bindir}/isf-panel-efl.wearable +%{_bindir}/isf-log.wearable +%{_libdir}/scim-1.0/scim-launcher.wearable +%{_libdir}/scim-1.0/scim-helper-launcher.wearable +%{_libdir}/libscim-*.so*.wearable + +%files profile_common +%manifest %{name}.manifest +# files in bindir, lib/libscim*.so.*, lib/scim-1.0/scim-launcher are different +%{_bindir}/isf-demo-efl +%{_bindir}/isf-panel-efl +%{_bindir}/isf-log +%{_libdir}/scim-1.0/scim-launcher +%{_libdir}/scim-1.0/scim-helper-launcher +# default .so are housed in the main pkg. + +%files profile_tv +%manifest %{name}.manifest +# files in bindir, lib/libscim*.so.*, lib/scim-1.0/scim-launcher are different +%{_bindir}/isf-demo-efl.tv +%{_bindir}/isf-panel-efl.tv +%{_bindir}/isf-log.tv +%{_libdir}/scim-1.0/scim-launcher.tv +%{_libdir}/scim-1.0/scim-helper-launcher.tv +%{_libdir}/libscim-*.so*.tv +# TV Only: remote-input +%attr(755,root,root) %{_datadir}/scim/remote-input/* %files devel %defattr(-,root,root,-) -- 2.7.4