Add RPM build infrastructure
authorRalf Ertzinger <ralf@skytale.net>
Thu, 27 Feb 2014 15:43:52 +0000 (16:43 +0100)
committerRalf Ertzinger <ralf@skytale.net>
Thu, 27 Feb 2014 15:45:50 +0000 (16:45 +0100)
This adds an RPM spec file (in rpm/) and two new build targets
(rpm and srpm).

The RPM build targets are taken from the zfsonlinux source and
slightly modified. They don't work too well if you've messed with
your local RPM build environment by redefining directory paths
in ~/.rpmmacros.

.gitignore
Makefile
rpm/.gitignore [new file with mode: 0644]
rpm/Makefile [new file with mode: 0644]
rpm/time-slider.spec.in [new file with mode: 0644]

index 0d20b64..51fa109 100644 (file)
@@ -1 +1,3 @@
 *.pyc
+*.rpm
+*.tar.bz2
index b0f8064..42197d4 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,8 @@ ifeq ($(wildcard .git),)
 else
        VERSION=$(shell git describe)
 endif
+MAINVER=$(shell echo $(VERSION) | cut -f1 -d'-')
+RELEASE=$(shell echo $(VERSION) | cut -f2- -d'-' | sed -e 's/-/./g')
 
 mkinstalldirs = /usr/bin/mkdir -p
 INSTALL = /usr/bin/install
@@ -12,12 +14,14 @@ INSTALL_SCRIPT = ${INSTALL} -t
 RM = /usr/bin/rm -f
 RMRF = /usr/bin/rm -Rf
 RMDIR = /usr/bin/rmdir
+RPM = /usr/bin/rpm
+RPMBUILD = /usr/bin/rpmbuild
 # Use python 2.6 if PYTHON environent is not set
 ifeq ($(strip $(PYTHON)),)
 PYTHON = /usr/bin/python2
 endif
 
-SUBDIRS = po data
+SUBDIRS = po data rpm
 
 DISTFILES = Authors \
                        VERSION \
@@ -35,6 +39,7 @@ clean:
        $(RM) usr/share/time-slider/lib/plugin/*.pyc
        $(RM) usr/share/time-slider/lib/plugin/rsync/*.pyc
        $(RM) usr/share/time-slider/lib/plugin/zfssend/*.pyc
+       $(RM) rpm/time-slider.spec
 
 all:
        for subdir in $(SUBDIRS); do \
@@ -163,3 +168,53 @@ uninstall:
        $(RM) $(DESTDIR)/var/svc/manifest/application/time-slider.xml
        $(RM) $(DESTDIR)/var/svc/manifest/application/time-slider-plugin.xml
        $(RM) $(DESTDIR)/var/svc/manifest/system/filesystem/auto-snapshot.xml
+
+
+rpm-local:
+       @(if test ! -x "${RPMBUILD}"; then \
+               echo -e "\n" \
+       "*** Required util ${RPMBUILD} missing.  Please install the\n" \
+       "*** package for your distribution which provides ${RPMBUILD},\n" \
+       "*** re-run configure, and try again.\n"; \
+               exit 1; \
+       fi; \
+       mkdir -p $(rpmbuild)/TMP && \
+       mkdir -p $(rpmbuild)/BUILD && \
+       mkdir -p $(rpmbuild)/RPMS && \
+       mkdir -p $(rpmbuild)/SRPMS && \
+       mkdir -p $(rpmbuild)/SPECS && \
+       cp rpm/$(rpmspec) $(rpmbuild)/SPECS && \
+       mkdir -p $(rpmbuild)/SOURCES && \
+       cp time-slider-$(VERSION).tar.bz2 $(rpmbuild)/SOURCES)
+
+srpm: dist
+       @(dist=`$(RPM) --eval %{?dist}`; \
+       rpmpkg=time-slider-$(MAINVER)-0.$(RELEASE)$$dist*src.rpm; \
+       rpmspec=time-slider.spec; \
+       rpmbuild=`mktemp -t -d time-slider-build-$$USER-XXXXXXXX`; \
+       $(MAKE) \
+               rpmbuild="$$rpmbuild" \
+               rpmspec="$$rpmspec" \
+               rpm-local || exit 1; \
+       $(RPMBUILD) \
+               --define "_tmppath $$rpmbuild/TMP" \
+               --define "_topdir $$rpmbuild" \
+               $(def) -bs $$rpmbuild/SPECS/$$rpmspec || exit 1; \
+       cp $$rpmbuild/SRPMS/$$rpmpkg . || exit 1; \
+       rm -R $$rpmbuild)
+
+rpm: srpm
+       @(dist=`$(RPM) --eval %{?dist}`; \
+       rpmpkg=time-slider-$(MAINVER)-0.$(RELEASE)$$dist*src.rpm; \
+       rpmspec=time-slider.spec; \
+       rpmbuild=`mktemp -t -d time-slider-build-$$USER-XXXXXXXX`; \
+       $(MAKE) \
+               rpmbuild="$$rpmbuild" \
+               rpmspec="$$rpmspec" \
+               rpm-local || exit 1; \
+       ${RPMBUILD} \
+               --define "_tmppath $$rpmbuild/TMP" \
+               --define "_topdir $$rpmbuild" \
+               $(def) --rebuild $$rpmpkg || exit 1; \
+       cp $$rpmbuild/RPMS/*/* . || exit 1; \
+       rm -R $$rpmbuild)
diff --git a/rpm/.gitignore b/rpm/.gitignore
new file mode 100644 (file)
index 0000000..612654b
--- /dev/null
@@ -0,0 +1 @@
+*.spec
diff --git a/rpm/Makefile b/rpm/Makefile
new file mode 100644 (file)
index 0000000..078f462
--- /dev/null
@@ -0,0 +1,22 @@
+top_builddir = ..
+top_srcdir = ..
+SED = /usr/bin/sed
+INTLTOOL_MERGE = /usr/bin/intltool-merge
+spec_in_files = time-slider.spec.in
+spec_DATA = $(spec_in_files:.spec.in=.spec)
+
+ifeq ($(wildcard $(top_srcdir)/.git),)
+       include $(top_srcdir)/VERSION
+else
+       VERSION=$(shell git describe)
+endif
+MAINVER=$(shell echo $(VERSION) | cut -f1 -d'-')
+RELEASE=$(shell echo $(VERSION) | cut -f2- -d'-' | sed -e 's/-/./g')
+
+all: $(spec_DATA)
+
+$(spec_DATA):
+       $(SED) -e 's,\@VERSION\@,$(MAINVER),g' \
+               -e 's,\@RELEASE\@,$(RELEASE),g' \
+               -e 's,\@GITVER\@,$(VERSION),g' \
+               '$@.in' > '$@'
diff --git a/rpm/time-slider.spec.in b/rpm/time-slider.spec.in
new file mode 100644 (file)
index 0000000..761630c
--- /dev/null
@@ -0,0 +1,57 @@
+%define gitver @GITVER@
+
+Name:           time-slider
+Version:        @VERSION@
+Release:        0.@RELEASE@%{?dist}
+Summary:        The Solaris ZFS time slider package
+
+License:        CDDL
+URL:            none
+Source0:        %{name}-%{gitver}.tar.bz2
+
+Requires:       python(abi) < 3.0
+Requires(post):   systemd
+Requires(preun):  systemd
+Requires(postun): systemd
+Requires(post):   systemd
+
+BuildRequires:  python(abi) < 3.0
+BuildRequires:  systemd
+
+BuildArch:      noarch
+
+%description
+The Solaris time slider package for ZFS
+
+%prep
+%setup -q -n %{name}-%{gitver}
+
+%build
+
+%install
+rm -rf ${RPM_BUILD_ROOT}
+mkdir ${RPM_BUILD_ROOT}
+make DESTDIR=${RPM_BUILD_ROOT} install
+rm -rf ${RPM_BUILD_ROOT}{/var,/lib,/usr/bin,/usr/share/icons,/etc/xdg/,/usr/share/applications}
+%find_lang %{name}
+
+%files -f %{name}.lang
+%{_prefix}/lib/time-slider*
+%{_datadir}/time-slider
+%{_sysconfdir}/dbus-1/system.d/time-slider.conf
+%{_unitdir}/time-sliderd.service
+
+%post
+# run after an installation
+%systemd_post time-sliderd.service
+
+%preun
+# run before a package is removed
+%systemd_preun time-sliderd.service
+
+%postun
+# run after a package is removed
+%systemd_postun_with_restart time-sliderd.service
+
+
+%changelog