Provide devel package with helper script and rpm macros for easier addon packaging. (patch submitted from Ludwig Nussel)
authorWolfgang Rosenauer <wr@rosenauer.org>
Fri, 28 Jan 2011 18:06:54 +0100
changeset 225 5a7504b93699
parent 224 f6a61d48d483
child 226 6bf3bb4c115e
Provide devel package with helper script and rpm macros for easier addon packaging. (patch submitted from Ludwig Nussel)
MozillaFirefox/MozillaFirefox.changes
MozillaFirefox/MozillaFirefox.spec
MozillaFirefox/mozilla-get-app-id
--- a/MozillaFirefox/MozillaFirefox.changes	Fri Jan 28 09:06:16 2011 +0100
+++ b/MozillaFirefox/MozillaFirefox.changes	Fri Jan 28 18:06:54 2011 +0100
@@ -1,7 +1,8 @@
 -------------------------------------------------------------------
-Wed Jan 26 15:41:56 UTC 2011 - wr@rosenauer.org
+Fri Jan 28 08:56 UTC 2011 - wr@rosenauer.org
 
 - set correct desktop file name within KDE for 11.4 and up
+- add devel package with macros for extensions (from lnussel@suse.de)
 
 -------------------------------------------------------------------
 Sat Jan 22 22:21:52 UTC 2011 - wr@rosenauer.org
--- a/MozillaFirefox/MozillaFirefox.spec	Fri Jan 28 09:06:16 2011 +0100
+++ b/MozillaFirefox/MozillaFirefox.spec	Fri Jan 28 18:06:54 2011 +0100
@@ -18,6 +18,8 @@
 
 # norootforbuild
 
+%define major 4
+%define mainver %major.0
 
 Name:           MozillaFirefox
 %define use_xulrunner 1
@@ -32,10 +34,11 @@
 BuildRequires:  %{xulrunner}-devel = 2.0b10
 %endif
 License:        GPLv2+ ; LGPLv2.1+ ; MPLv1.1+
-Version:        4.0b10
+Version:        %{mainver}b10
+Release:        1
 Provides:       web_browser
-Provides:       firefox = %{version}
-Release:        1
+Provides:       firefox = %{version}-%{release}
+Provides:       firefox = %{mainver}
 %define         releasedate 2011012100
 Summary:        Mozilla Firefox Web Browser
 Url:            http://www.mozilla.org/
@@ -52,6 +55,7 @@
 Source9:        firefox-lockdown.js
 Source10:       compare-locales.tar.bz2
 Source11:       firefox.1
+Source12:       mozilla-get-app-id
 Patch1:         toolkit-download-folder.patch
 Patch2:         firefox-linkorder.patch
 Patch3:         firefox-browser-css.patch
@@ -61,7 +65,7 @@
 Patch7:         firefox-ui-lockdown.patch
 Patch8:         firefox-no-sync-l10n.patch
 Patch9:         firefox-libxulsdk-locales.patch
-Patch10:         firefox-no-default-ualocale.patch
+Patch10:        firefox-no-default-ualocale.patch
 Patch11:        firefox-multilocale-chrome.patch
 Patch12:        firefox-shellservice.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
@@ -76,6 +80,7 @@
 %endif
 %endif
 Requires:       %{name}-branding >= 4.0
+%define firefox_appid \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\}
 %define _use_internal_dependency_generator 0
 %define __find_requires sh %{SOURCE4}
 %global provfind sh -c "grep -v '.so' | %__find_provides"
@@ -103,6 +108,17 @@
 compliance and performance.  Its functionality can be enhanced via a
 plethora of extensions.
 
+%package devel
+License:        GPLv2+ ; LGPLv2.1+ ; MPLv1.1+
+Summary:        Devel package for Firefox
+Group:          Development/Tools/Other
+Provides:       firefox-devel = %{version}-%{release}
+Requires:       %{name} = %{version}
+Requires:       perl(XML::Simple)
+Requires:       perl(Archive::Zip)
+
+%description devel
+Development files for Firefox to make packaging of addons easier.
 
 %if %localize
 %package translations-common
@@ -128,7 +144,6 @@
 %description translations-other
 This package contains rarely used languages for the user interface
 of MozillaFirefox.
-
 %endif
 
 %package branding-upstream
@@ -291,6 +306,8 @@
 ##########
 # ADDONS
 #
+mkdir -p $RPM_BUILD_ROOT%{_datadir}/mozilla/extensions/%{firefox_appid}
+mkdir -p $RPM_BUILD_ROOT%{_libdir}/mozilla/extensions/%{firefox_appid}
 mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/
 ln -sf %{progdir}/icons/mozicon128.png $RPM_BUILD_ROOT/usr/share/pixmaps/%{progname}.png
 ln -sf %{progdir}/icons/mozicon128.png $RPM_BUILD_ROOT/usr/share/pixmaps/%{progname}-gnome.png
@@ -309,6 +326,35 @@
 rm -f $RPM_BUILD_ROOT%{progdir}/old-homepage-default.properties
 rm -f $RPM_BUILD_ROOT%{progdir}/run-mozilla.sh
 rm -f $RPM_BUILD_ROOT%{progdir}/LICENSE
+# devel
+mkdir -p %{buildroot}%{_bindir}
+install -m 755 %SOURCE12 %{buildroot}%{_bindir}
+# inspired by mandriva
+mkdir -p %{buildroot}/etc/rpm
+cat <<'FIN' >%{buildroot}/etc/rpm/macros.%{progname}
+# Macros from %{name} package
+%%firefox_major              %{major}
+%%firefox_version            %{version}
+%%firefox_mainver            %{mainver}
+%%firefox_mozillapath        %{progdir}
+%%firefox_xulrunner          %{xulrunner}
+%%firefox_xulrunner_version  %(rpm -q --queryformat '%{VERSION}' %{xulrunner})
+%%firefox_pluginsdir         %{_libdir}/browser-plugins
+%%firefox_appid              \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\}
+%%firefox_extdir             %%(if [ "%%_target_cpu" = "noarch" ]; then echo %%{_datadir}/mozilla/extensions/%%{firefox_appid}; else echo %%{_libdir}/mozilla/extensions/%%{firefox_appid}; fi)
+
+%%firefox_ext_install() \
+   extdir="%%{buildroot}%%{firefox_extdir}/`mozilla-get-app-id '%%1'`" \
+   mkdir -p "$extdir" \
+   %%{__unzip} -q -d "$extdir" "%%1" \
+   %%{nil}
+FIN
+# just dumping an xpi file there doesn't work...
+#%%firefox_ext_install() \
+#       extdir="%%{buildroot}%%{firefox_extdir}" \
+#       mkdir -p "$extdir" \
+#       cp "%%1" "$extdir" \
+#       %%{nil}
 # fdupes
 %fdupes $RPM_BUILD_ROOT%{progdir}
 %fdupes $RPM_BUILD_ROOT%{_datadir}
@@ -380,12 +426,23 @@
 %{_datadir}/applications/%{desktop_file_name}.desktop
 %{_datadir}/mime/packages/%{progname}.xml
 %{_datadir}/pixmaps/firefox*
+%dir %{_datadir}/mozilla
+%dir %{_datadir}/mozilla/extensions
+%dir %{_datadir}/mozilla/extensions/%{firefox_appid}
+%dir %{_libdir}/mozilla
+%dir %{_libdir}/mozilla/extensions
+%dir %{_libdir}/mozilla/extensions/%{firefox_appid}
 %if %branding
 %{gnome_dir}/share/icons/hicolor/
 %endif
 %{_bindir}/%{progname}
 %doc %{_mandir}/man1/%{progname}.1.gz
 
+%files devel
+%defattr(-,root,root)
+%{_bindir}/mozilla-get-app-id
+%config /etc/rpm/macros.%{progname}
+
 %if %localize
 %files translations-common -f %{_tmppath}/translations.common
 %defattr(-,root,root)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MozillaFirefox/mozilla-get-app-id	Fri Jan 28 18:06:54 2011 +0100
@@ -0,0 +1,51 @@
+#!/usr/bin/perl -w
+use XML::Simple;
+
+my $file = shift || die "Usage: $0 [install.rdf|somefile.xpi]\n";
+my $xml;
+
+if ($file =~ /\.xpi$/) {
+	use Archive::Zip qw/:ERROR_CODES :CONSTANTS/;
+	my $zip = Archive::Zip->new();
+	if ( $zip->read($file) != AZ_OK ) {
+		die "zip file read error\n";
+	}
+	my $data = $zip->contents("install.rdf");
+	die "missing install.rdf in $file\n" unless $data;
+	$xml = XMLin($data) || die "$!\n";
+} elsif ($file =~ /install.rdf/) {
+	$xml = XMLin($file) || die "$!\n";
+} else {
+	die "unsupported file format\n";
+}
+
+my $desc;
+for my $tag (qw/RDF:Description Description/) {
+	if (exists $xml->{$tag}) {
+		if (ref $xml->{$tag} eq 'ARRAY') {
+			$desc = $xml->{$tag};
+		} else {
+			$desc = [ $xml->{$tag} ];
+		}
+	}
+}
+
+my $uuid;
+my $id;
+for my $x (@$desc) {
+	if ($x->{"em:id"} =~ /{[[:xdigit:]]+-/) {
+		print STDERR "Warning: multiple uuids!\n" if defined $uuid;
+		$uuid = $x->{"em:id"};
+	} elsif ($x->{"em:id"} =~ /@/) {
+		print STDERR "Warning: multiple ids!\n" if defined $id;
+		$id = $x->{"em:id"};
+	}
+}
+
+if (defined $id) {
+	print "$id\n";
+} elsif (defined $uuid) {
+	print "$uuid\n";
+} else {
+	exit 1;
+}