Skip to content

Commit

Permalink
[rpm] Improve Mer/SailfishOS RPM spec file for EmbedLite 38.
Browse files Browse the repository at this point in the history
Apart from some cleanup this actually makes it possible to build the
engine for Mer/SailfishOS. The current spec does not work anymore.
  • Loading branch information
tworaz committed Sep 29, 2015
1 parent cf674d1 commit 28af69a
Show file tree
Hide file tree
Showing 2 changed files with 174 additions and 61 deletions.
6 changes: 2 additions & 4 deletions embedding/embedlite/config/mozconfig.merqtxulrunner
Expand Up @@ -5,15 +5,14 @@ export MOZ_DEBUG_SYMBOLS=1
export MOZILLA_OFFICIAL=1

mk_add_options PROFILE_GEN_SCRIPT=@TOPSRCDIR@/build/profile_pageloader.pl
mk_add_options MOZ_MAKE_FLAGS="-j8"
mk_add_options MOZ_OBJDIR="@TOPSRCDIR@/obj-build-mer-qt-xr"

export CXXFLAGS="$CXXFLAGS -DUSE_ANDROID_OMTC_HACKS=1 "

ac_add_options --prefix=/usr

ac_add_options --with-system-jpeg

ac_add_options --without-x
ac_add_options --with-gl-provider=EGL

ac_add_options --enable-application=xulrunner
Expand All @@ -31,6 +30,7 @@ ac_add_options --disable-dbus
ac_add_options --disable-updater
ac_add_options --disable-gamepad
ac_add_options --disable-printing
ac_add_options --disable-crashreporter

# disabling for now, since the build fails...
ac_add_options --enable-webrtc
Expand All @@ -40,6 +40,4 @@ ac_add_options --disable-dbus
ac_add_options --disable-necko-wifi
ac_add_options --disable-elf-hack
ac_add_options --disable-fmp4

ac_add_options --disable-accessibility
ac_add_options --without-x
229 changes: 172 additions & 57 deletions rpm/xulrunner-qt5.spec
@@ -1,8 +1,42 @@
%define greversion 31.0a1
%define greversion 38.0.5
%define patch_level 0

%define embedlite_config merqtxulrunner

%define system_sqlite 0
%define system_ffi 1
%define system_hunspell 1
%define system_jpeg 1
%define system_png 1
%define system_icu 0
%define system_zlib 1
%define system_bz2 1

%global mozappdir %{_libdir}/%{name}-%{greversion}
%global mozappdirdev %{_libdir}/%{name}-devel-%{greversion}

# Private/bundled libs the final package should not provide or depend on.
%global privlibs libfreebl3
%global privlibs %{privlibs}|libmozalloc
%if %{system_sqlite}
%global privlibs %{privlibs}|libmozsqlite3
%endif
%global privlibs %{privlibs}|libnspr4
%global privlibs %{privlibs}|libnss3
%global privlibs %{privlibs}|libnssdbm3
%global privlibs %{privlibs}|libnssutil3
%global privlibs %{privlibs}|libplc4
%global privlibs %{privlibs}|libplds4
%global privlibs %{privlibs}|libsmime3
%global privlibs %{privlibs}|libsoftokn3
%global privlibs %{privlibs}|libssl3

%global __provides_exclude ^(%{privlibs})\\.so
%global __requires_exclude ^(%{privlibs})\\.so

Name: xulrunner-qt5
Summary: XUL runner
Version: %{greversion}
Version: %{greversion}.%{patch_level}
Release: 1
Group: Applications/Internet
License: Mozilla License
Expand All @@ -12,13 +46,14 @@ BuildRequires: pkgconfig(Qt5Quick)
BuildRequires: pkgconfig(Qt5Network)
BuildRequires: pkgconfig(pango)
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(gstreamer-0.10)
BuildRequires: pkgconfig(gstreamer-app-0.10)
BuildRequires: pkgconfig(gstreamer-plugins-base-0.10)
%ifarch armv7hl armv7tnhl
BuildRequires: pkgconfig(libresourceqt5)
%if %{system_sqlite}
BuildRequires: pkgconfig(sqlite3)
%endif
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libproxy-1.0)
BuildRequires: pkgconfig(gstreamer-1.0)
BuildRequires: pkgconfig(gstreamer-app-1.0)
BuildRequires: pkgconfig(gstreamer-plugins-base-1.0)
BuildRequires: pkgconfig(Qt5Positioning)
BuildRequires: qt5-qttools
BuildRequires: qt5-default
Expand All @@ -28,12 +63,34 @@ BuildRequires: python
BuildRequires: python-devel
BuildRequires: zip
BuildRequires: unzip
%if %{system_icu}
BuildRequires: libicu52-devel
%endif
%if %{system_hunspell}
BuildRequires: hunspell-devel
%endif
%if %{system_bz2}
BuildRequires: bzip2-devel
%endif
%if %{system_zlib}
BuildRequires: zlib
%endif
%if %{system_png}
BuildRequires: libpng
%endif
%if %{system_jpeg}
BuildRequires: libjpeg-turbo-devel
%endif
%ifarch i586 i486 i386 x86_64
BuildRequires: yasm
%endif
BuildRequires: fdupes
# See below on why the system version of this library is used
Requires: nss-ckbi >= 3.16.6
Requires: gstreamer1.0-plugins-good
%if %{system_ffi}
BuildRequires: libffi-devel
%endif

%description
Mozilla XUL runner
Expand All @@ -55,61 +112,119 @@ Summary: Misc files for xulrunner
%description misc
Tests and misc files for xulrunner.

# Build output directory.
%define BUILD_DIR "$PWD"/obj-build-mer-qt-xr
# EmbedLite config used to configure the engine.
%define BASE_CONFIG "$PWD"/embedding/embedlite/config/mozconfig.%{embedlite_config}

%prep
%setup -q -n %{name}-%{version}

%build
export DONT_POPULATE_VIRTUALENV=1
export PYTHONPATH=$PWD/python:$PWD/config:$PWD/build:$PWD/xpcom/typelib/xpt/tools:$PWD/dom/bindings:$PWD/dom/bindings/parser:$PWD/other-licenses/ply:$PWD/media/webrtc/trunk/tools/gyp/pylib/
for i in $(find $PWD/python $PWD/testing/mozbase -mindepth 1 -maxdepth 1 -type d); do
export PYTHONPATH+=:$i
mkdir -p "%BUILD_DIR"
cp -rf "%BASE_CONFIG" "%BUILD_DIR"/mozconfig

%ifarch %ix86
PYTHONPATH="$PWD"/python:"$PWD"/config:"$PWD"/build:"$PWD"/xpcom/typelib/xpt/tools
PYTHONPATH+=:"$PWD"/dom/bindings:$PWD/dom/bindings/parser
PYTHONPATH+=:"$PWD"/other-licenses/ply:$PWD/media/webrtc/trunk/tools/gyp/pylib
PYTHONPATH+=:"$PWD"/testing/taskcluster
PYTHONPATH+=:"$PWD"/testing/web-platform
PYTHONPATH+=:"$PWD"/testing/web-platform/harness
PYTHONPATH+=:"$PWD"/layout/tools/reftest
PYTHONPATH+=:"$PWD"/dom/bindings
for i in $(find "$PWD"/python "$PWD"/testing/mozbase -mindepth 1 -maxdepth 1 -type d); do
PYTHONPATH+=:"$i:$i/lib"
done
export SBOX_REDIRECT_FORCE=/usr/bin/python
# hack for when not using virtualenv
ln -sf $PWD/obj-build-mer-qt-xr/config.status $PWD/build/config.status
echo "export DONT_POPULATE_VIRTUALENV=1" > "%BUILD_DIR"/rpm-shared.env
echo "export PYTHONPATH=$PYTHONPATH" >> "%BUILD_DIR"/rpm-shared.env
echo "export SBOX_REDIRECT_FORCE=/usr/bin/python" >> "%BUILD_DIR"/rpm-shared.env
%endif
echo "export MOZCONFIG=%BUILD_DIR/mozconfig" >> "%BUILD_DIR"/rpm-shared.env

cp -rf embedding/embedlite/config/mozconfig.merqtxulrunner mozconfig
%build
source "%BUILD_DIR"/rpm-shared.env
# hack for when not using virtualenv
ln -sf "%BUILD_DIR"/config.status $PWD/build/config.status

printf "#\n# Added by xulrunner-qt.spec:\n#" >> "$MOZCONFIG"
%ifarch %arm
echo "ac_add_options --with-arm-kuser" >> mozconfig
echo "ac_add_options --with-float-abi=toolchain-default" >> mozconfig
echo "ac_add_options --with-arm-kuser" >> "$MOZCONFIG"
echo "ac_add_options --with-float-abi=toolchain-default" >> "$MOZCONFIG"
# No need for this, this should be managed by toolchain
echo "ac_add_options --with-thumb=toolchain-default" >> mozconfig
%endif
echo "mk_add_options MOZ_MAKE_FLAGS='-j%jobs'" >> mozconfig
echo "export CFLAGS=\"\$CFLAGS -fuse-ld=gold \"" >> mozconfig
echo "export CXXFLAGS=\"\$CXXFLAGS -fuse-ld=gold \"" >> mozconfig
echo "export LD=ld.gold" >> mozconfig
echo "ac_add_options --disable-tests" >> mozconfig
echo "ac_add_options --enable-system-hunspell" >> mozconfig
echo "ac_add_options --disable-strip" >> mozconfig
echo "ac_add_options --disable-mochitest" >> mozconfig
echo "ac_add_options --disable-installer" >> mozconfig
echo "ac_add_options --disable-javaxpcom" >> mozconfig
echo "ac_add_options --disable-crashreporter" >> mozconfig
echo "ac_add_options --without-x" >> mozconfig
echo "ac_add_options --with-app-name=%{name}" >> mozconfig
export MOZCONFIG=$PWD/mozconfig
echo "ac_add_options --with-thumb=toolchain-default" >> "$MOZCONFIG"
%endif

echo "mk_add_options MOZ_MAKE_FLAGS='%{?jobs:-j%jobs}'" >> "$MOZCONFIG"
echo "mk_add_options MOZ_OBJDIR='%BUILD_DIR'" >> "$MOZCONFIG"
# XXX: gold crashes when building gecko for both i486 and x86_64
#echo "export CFLAGS=\"\$CFLAGS -fuse-ld=gold \"" >> "$MOZCONFIG"
#echo "export CXXFLAGS=\"\$CXXFLAGS -fuse-ld=gold \"" >> "$MOZCONFIG"
#echo "export LD=ld.gold" >> "$MOZCONFIG"
echo "ac_add_options --disable-tests" >> "$MOZCONFIG"
echo "ac_add_options --disable-strip" >> "$MOZCONFIG"
echo "ac_add_options --with-app-name=%{name}" >> "$MOZCONFIG"

%if %{system_hunspell}
echo "ac_add_options --enable-system-hunspell" >> "$MOZCONFIG"
%endif

%if %{system_sqlite}
echo "ac_add_options --enable-system-sqlite" >> "$MOZCONFIG"
%endif

%if %{system_ffi}
echo "ac_add_options --enable-system-ffi" >> "${MOZCONFIG}"
%endif

%if %{system_icu}
echo "ac_add_options --with-system-icu" >> "${MOZCONFIG}"
%endif

%if %{system_png}
echo "ac_add_options --with-system-png" >> "${MOZCONFIG}"
%endif

%if %{system_jpeg}
echo "ac_add_options --with-system-jpeg" >> "${MOZCONFIG}"
%endif

%if %{system_zlib}
echo "ac_add_options --with-system-zlib" >> "${MOZCONFIG}"
%endif

%if %{system_bz2}
echo "ac_add_options --with-system-bz2" >> "${MOZCONFIG}"
%endif

# https://bugzilla.mozilla.org/show_bug.cgi?id=1002002
echo "ac_add_options --disable-startupcache" >> "$MOZCONFIG"

%{__make} -f client.mk build STRIP="/bin/true" %{?jobs:MOZ_MAKE_FLAGS="-j%jobs"}

%install
export DONT_POPULATE_VIRTUALENV=1
export PYTHONPATH=$PWD/python:$PWD/config:$PWD/build:$PWD/xpcom/typelib/xpt/tools:$PWD/dom/bindings:$PWD/dom/bindings/parser:$PWD/other-licenses/ply:$PWD/media/webrtc/trunk/tools/gyp/pylib/
for i in $(find $PWD/python $PWD/testing/mozbase -mindepth 1 -maxdepth 1 -type d); do
export PYTHONPATH+=:$i
done
export SBOX_REDIRECT_FORCE=/usr/bin/python
source "%BUILD_DIR"/rpm-shared.env

export MOZCONFIG=$PWD/mozconfig
%{__make} -f client.mk install DESTDIR=%{buildroot}
%{__chmod} +x %{buildroot}%{_libdir}/%{name}-%{greversion}/*.so
for i in $(cd ${RPM_BUILD_ROOT}%{mozappdirdev}/sdk/lib/; ls *.so); do
rm ${RPM_BUILD_ROOT}%{mozappdirdev}/sdk/lib/$i
ln -s %{mozappdir}/$i ${RPM_BUILD_ROOT}%{mozappdirdev}/sdk/lib/$i
done
%fdupes -s %{buildroot}%{_includedir}
%fdupes -s %{buildroot}%{_libdir}
chmod +x %{buildroot}%{_libdir}/%{name}-%{greversion}/*.so
%{__chmod} +x %{buildroot}%{mozappdir}/*.so
# Use the system hunspell dictionaries
%{__rm} -rf ${RPM_BUILD_ROOT}%{_libdir}/%{name}-%{greversion}/dictionaries
ln -s %{_datadir}/myspell ${RPM_BUILD_ROOT}%{_libdir}/%{name}-%{greversion}/dictionaries
mkdir ${RPM_BUILD_ROOT}%{_libdir}/%{name}-%{greversion}/defaults
%{__rm} -rf ${RPM_BUILD_ROOT}%{mozappdir}/dictionaries
ln -s %{_datadir}/myspell ${RPM_BUILD_ROOT}%{mozappdir}/dictionaries
mkdir ${RPM_BUILD_ROOT}%{mozappdir}/defaults

# symlink to the system libnssckbi.so (CA trust library). It is replaced by
# the p11-kit-nss-ckbi package to use p11-kit's trust store.
# There is a strong binary compatibility guarantee.
rm ${RPM_BUILD_ROOT}%{mozappdir}/libnssckbi.so
ln -s %{_libdir}/libnssckbi.so ${RPM_BUILD_ROOT}%{mozappdir}/libnssckbi.so

# Fix some of the RPM lint errors.
find "%{buildroot}%{_includedir}" -type f -name '*.h' -exec chmod 0644 {} +;

%post
# >> post
Expand All @@ -119,22 +234,22 @@ touch /var/lib/_MOZEMBED_CACHE_CLEAN_
%files
%defattr(-,root,root,-)
%attr(755,-,-) %{_bindir}/*
%dir %{_libdir}/%{name}-%{greversion}/defaults
%{_libdir}/%{name}-%{greversion}/*.so
%{_libdir}/%{name}-%{greversion}/omni.ja
%{_libdir}/%{name}-%{greversion}/dependentlibs.list
%{_libdir}/%{name}-%{greversion}/dictionaries
%dir %{mozappdir}/defaults
%{mozappdir}/*.so
%{mozappdir}/omni.ja
%{mozappdir}/dependentlibs.list
%{mozappdir}/dictionaries

%files devel
%defattr(-,root,root,-)
%{_datadir}/*
%{_libdir}/%{name}-devel-%{greversion}
%{mozappdirdev}
%{_libdir}/pkgconfig
%{_includedir}/*

%files misc
%defattr(-,root,root,-)
%{_libdir}/%{name}-%{greversion}/*
%exclude %{_libdir}/%{name}-%{greversion}/*.so
%exclude %{_libdir}/%{name}-%{greversion}/omni.ja
%exclude %{_libdir}/%{name}-%{greversion}/dependentlibs.list
%{mozappdir}/*
%exclude %{mozappdir}/*.so
%exclude %{mozappdir}/omni.ja
%exclude %{mozappdir}/dependentlibs.list

0 comments on commit 28af69a

Please sign in to comment.