Remove Profile Build Dependency 05/108105/7
authorMyungJoo Ham <myungjoo.ham@samsung.com>
Tue, 18 Oct 2016 09:41:58 +0000 (09:41 +0000)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Mon, 23 Jan 2017 05:41:06 +0000 (14:41 +0900)
- 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 <jihoon48.kim@samsung.com>'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 <myungjoo.ham@samsung.com>
configure.ac
packaging/isf.spec

index 616d238..f8790ff 100644 (file)
@@ -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
index c2ce8b9..723aac2 100644 (file)
@@ -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,-)