+# NOTES
+# This spec file is used to build DALi Adaptor for different Tizen Profiles
+# Current profiles are: Mobile, TV, Wearable, Common
+#
+# The profile variable is defined outside of the spec file in a build.conf file.
+# It will contain the profile and whether or not to build with X11 or Wayland
+#
+# gbs will try to download the build.conf for the platform automatically from the repo location when
+# performing a gbs build ( use gbs build -v to see it download location) E.g.
+# http://download.tizen.org/snapshots/tizen/tv/tizen-tv/repos/arm-wayland/packages/repodata/xxxx-build.conf.gz
+
+
%bcond_with wayland
Name: dali-adaptor
Summary: The DALi Tizen Adaptor
-Version: 1.1.11
+Version: 1.1.44
Release: 1
Group: System/Libraries
-License: Apache-2.0, BSD-2.0, MIT
+License: Apache-2.0 and BSD-2-Clause and MIT
URL: https://review.tizen.org/git/?p=platform/core/uifw/dali-adaptor.git;a=summary
Source0: %{name}-%{version}.tar.gz
-# Get the profile from tizen_profile_name if it exists.
-%if 0%{?tizen_profile_name:1}
+Requires(post): /sbin/ldconfig
+Requires(postun): /sbin/ldconfig
+Requires: giflib
+
+#need libtzplatform-config for directory if tizen version is 3.x
+
+%if "%{tizen_version_major}" == "3"
+BuildRequires: pkgconfig(libtzplatform-config)
+%endif
+
+
+# Get the profile from tizen_profile_name if tizen version is 2.x and tizen_profile_name exists.
+
+%if "%{tizen_version_major}" == "2" && 0%{?tizen_profile_name:1}
%define profile %{tizen_profile_name}
%endif
%if "%{profile}" == "mobile"
%define dali_profile MOBILE
%define dali_feedback_plugin 0
+%define dali_videoplayer_plugin 1
%define shaderbincache_flag DISABLE
+BuildRequires: pkgconfig(gles20)
+%define gles_requirement_setup 1
%endif
%if "%{profile}" == "tv"
%define dali_profile TV
%define dali_feedback_plugin 0
+%define dali_videoplayer_plugin 1
%define shaderbincache_flag ENABLE
+BuildRequires: pkgconfig(glesv2)
+%define gles_requirement_setup 1
%endif
%if "%{profile}" == "wearable"
%define dali_profile WEARABLE
%define dali_feedback_plugin 0
+%define dali_videoplayer_plugin 1
%define shaderbincache_flag DISABLE
+BuildRequires: pkgconfig(gles20)
+BuildRequires: pkgconfig(capi-appfw-watch-application)
+BuildRequires: pkgconfig(appcore-watch)
+%define gles_requirement_setup 1
%endif
%if "%{profile}" == "common"
%define dali_profile COMMON
%define dali_feedback_plugin 0
-%define tizen_2_2_compatibility 1
+%define dali_videoplayer_plugin 1
+%define tizen_2_2_compatibility 0
%define shaderbincache_flag DISABLE
+BuildRequires: pkgconfig(glesv2)
+%define gles_requirement_setup 1
%endif
-Requires(post): /sbin/ldconfig
-Requires(postun): /sbin/ldconfig
-Requires: giflib
+# If we have not set a BuildRequires for the gles version, default it here.
+%{!?gles_requirement_setup: BuildRequires: pkgconfig(glesv2)}
+
BuildRequires: pkgconfig
BuildRequires: gawk
-BuildRequires: pkgconfig(sensor)
BuildRequires: pkgconfig(aul)
BuildRequires: giflib-devel
BuildRequires: pkgconfig(fontconfig)
-BuildRequires: pkgconfig(elementary)
-BuildRequires: pkgconfig(capi-appfw-application)
BuildRequires: libjpeg-turbo-devel
-BuildRequires: pkgconfig(evas)
BuildRequires: dali-devel
BuildRequires: dali-integration-devel
BuildRequires: pkgconfig(vconf)
BuildRequires: pkgconfig(dlog)
BuildRequires: libdrm-devel
BuildRequires: pkgconfig(libexif)
-BuildRequires: pkgconfig(capi-system-system-settings)
BuildRequires: pkgconfig(libpng)
-BuildRequires: pkgconfig(glesv2)
BuildRequires: pkgconfig(egl)
BuildRequires: libcurl-devel
-
+BuildRequires: pkgconfig(harfbuzz)
+BuildRequires: fribidi-devel
%if 0%{?tizen_2_2_compatibility} != 1
BuildRequires: pkgconfig(capi-system-info)
+BuildRequires: pkgconfig(capi-system-sensor)
%endif
+# Tizen currently does not have libuv as a separate libuv package
+# So we have to look into the uv headers bundled inside node-js
+BuildRequires: nodejs-devel
+
+
%if %{with wayland}
-BuildRequires: pkgconfig(ecore-wayland)
+
+####### BUILDING FOR WAYLAND #######
BuildRequires: pkgconfig(wayland-egl)
BuildRequires: pkgconfig(wayland-client)
+BuildRequires: wayland-devel
+# Currently Tizen Common we use does not have wayland extensions like xdg-shell
+%if "%{profile}" != "common"
+BuildRequires: wayland-extension-client-devel
+%endif
+
+# dali-adaptor-uv uses libuv mainloop and has its own wayland client (it needs wayland-client headers).
+BuildRequires: libxkbcommon-devel
+
+# dali-adaptor uses ecore mainloop
+BuildRequires: pkgconfig(ecore-wayland)
+
+# dali-adaptor needs tbm_surface in tizen 3.0 wayland
+BuildRequires: pkgconfig(libtbm)
+
+# tpkp-curl (certificate pinning for libcurl functions) is only available in Tizen 3.0
+BuildRequires: pkgconfig(tpkp-curl)
+
+####### BUILDING FOR X11#######
%else
+BuildRequires: pkgconfig(egl)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xfixes)
BuildRequires: pkgconfig(utilX)
%endif
-BuildRequires: pkgconfig(harfbuzz)
-BuildRequires: fribidi-devel
+# for dali-adaptor
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(capi-system-system-settings)
+
+%if 0%{?over_tizen_2_2}
+BuildRequires: pkgconfig(capi-system-info)
+%endif
+
+
%description
The DALi Tizen Adaptor provides a Tizen specific implementation of the dali-core
%if 0%{?dali_feedback_plugin}
#Requires: libdeviced
BuildRequires: pkgconfig(mm-sound)
-BuildRequires: pkgconfig(haptic)
+#BuildRequires: pkgconfig(haptic)
BuildRequires: libfeedback-devel
%endif
Feedback plugin to play haptic and audio feedback for Dali
##############################
+# Dali VideoPlayer Plugin
+##############################
+%if %{with wayland}
+
+%package dali-video-player-plugin
+Summary: Plugin to play a video file for Dali
+Group: System/Libraries
+%if 0%{?dali_videoplayer_plugin}
+BuildRequires: pkgconfig(capi-media-player)
+%endif
+
+%description dali-video-player-plugin
+VideoPlayer plugin to play a video file for Dali
+%endif
+
+##############################
# Preparation
##############################
%prep
%setup -q
+
+#Use TZ_PATH when tizen version is 3.x
+
+%if "%{tizen_version_major}" == "2"
%define dali_data_rw_dir /usr/share/dali/
%define dali_data_ro_dir /usr/share/dali/
-%define user_shader_cache_dir %{dali_data_ro_dir}/core/shaderbin/
%define font_preloaded_path /usr/share/fonts/
%define font_downloaded_path /opt/share/fonts/
%define font_application_path /usr/share/app_fonts/
%define font_configuration_file /opt/etc/fonts/conf.avail/99-slp.conf
-%define dali_plugin_sound_files %{dali_data_ro_dir}/plugins/sounds/
+%else
+%define dali_data_rw_dir %TZ_SYS_RO_SHARE/dali/
+%define dali_data_ro_dir %TZ_SYS_RO_SHARE/dali/
+%define font_preloaded_path %TZ_SYS_RO_SHARE/fonts/
+%define font_downloaded_path %TZ_SYS_SHARE/fonts/
+%define font_application_path %TZ_SYS_RO_SHARE/app_fonts/
+%define font_configuration_file %TZ_SYS_ETC/fonts/conf.avail/99-slp.conf
+%endif
+%define user_shader_cache_dir %{dali_data_ro_dir}/core/shaderbin/
+%define dali_plugin_sound_files %{dali_data_ro_dir}/plugins/sounds/
%define dev_include_path %{_includedir}
##############################
##############################
%build
PREFIX+="/usr"
-CXXFLAGS+=" -Wall -g -Os -fPIC -fvisibility-inlines-hidden -fdata-sections -ffunction-sections "
+CXXFLAGS+=" -Wall -g -Os -fPIC -fvisibility-inlines-hidden -fdata-sections -ffunction-sections -DGL_GLEXT_PROTOTYPES"
LDFLAGS+=" -Wl,--rpath=%{_libdir} -Wl,--as-needed -Wl,--gc-sections -Wl,-Bsymbolic-functions "
%ifarch %{arm}
FONT_APPLICATION_PATH="%{font_application_path}" ; export FONT_APPLICATION_PATH
FONT_CONFIGURATION_FILE="%{font_configuration_file}" ; export FONT_CONFIGURATION_FILE
-%configure --prefix=$PREFIX --with-jpeg-turbo --enable-gles=20 --enable-shaderbincache=%{shaderbincache_flag} --enable-profile=%{dali_profile} \
+# Default to GLES 2.0 if not specified.
+%{!?target_gles_version: %define target_gles_version 20}
+
+#--enable-efl=no \ # only affects dali-adaptor-uv
+#--enable-appfw=yes \ # affects both dali-adaptor & dali-adaptor-uv
+#--with-libuv=/usr/include/node/ \ # only affects dali-adaptor-uv
+
+# Set up the build via configure.
+%configure --prefix=$PREFIX --with-jpeg-turbo --enable-gles=%{target_gles_version} --enable-shaderbincache=%{shaderbincache_flag} --enable-profile=%{dali_profile} \
%if 0%{?dali_feedback_plugin}
--enable-feedback \
%endif
+%if 0%{?dali_videoplayer_plugin}
+ --enable-videoplayer \
+%endif
%if 0%{?tizen_2_2_compatibility}
--with-tizen-2-2-compatibility \
%endif
+%if %{with wayland}
+ --enable-efl=no \
+%else
+ --enable-efl=yes \
+%endif
+%if 0%{?enable_debug}
+ --enable-debug \
+%endif
+ --enable-appfw=yes \
+ --with-libuv=/usr/include/node/ \
$configure_flags --libdir=%{_libdir}
+# Build.
make %{?jobs:-j%jobs}
##############################
exit 0
%endif
+%if %{with wayland}
+%if 0%{?dali_videoplayer_plugin}
+%post dali-video-player-plugin
+/sbin/ldconfig
+exit 0
+%endif
+%endif
+
##############################
# Pre Uninstall old package
##############################
exit 0
%endif
+%if %{with wayland}
+%if 0%{?dali_videoplayer_plugin}
+%postun dali-video-player-plugin
+/sbin/ldconfig
+exit 0
+%endif
+%endif
+
##############################
# Files in Binary Packages
##############################
%{dev_include_path}/dali/public-api/*
%{dev_include_path}/dali/devel-api/*
%{dev_include_path}/dali/doc/*
-%{_libdir}/pkgconfig/dali.pc
+%{_libdir}/pkgconfig/dali-adaptor.pc
+%{_libdir}/pkgconfig/dali-adaptor-uv.pc
%files integration-devel
%defattr(-,root,root,-)
%{dali_plugin_sound_files}/*
%endif
+%if %{with wayland}
+%if 0%{?dali_videoplayer_plugin}
+%files dali-video-player-plugin
+%manifest dali-adaptor.manifest
+%defattr(-,root,root,-)
+%{_libdir}/libdali-video-player-plugin.so*
+%endif
+%endif