From 1cdfae5a8824cbe7cb583599c92e9d385d5501e4 Mon Sep 17 00:00:00 2001 From: Maxim Kalaev Date: Fri, 14 Sep 2012 13:46:01 +0300 Subject: packaging: refactored rpm building Now passing through a valid SRPM, working in a standard way. --- configure.py | 18 +++--------------- misc/packaging/ninja.spec | 21 ++++++++++++++------- misc/packaging/rpmbuild.sh | 29 +++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 22 deletions(-) create mode 100755 misc/packaging/rpmbuild.sh diff --git a/configure.py b/configure.py index 8d9f31e..f8e82f0 100755 --- a/configure.py +++ b/configure.py @@ -429,21 +429,9 @@ n.newline() if host == 'linux': n.comment('Packaging') n.rule('rpmbuild', - command="rpmbuild \ - --define 'ver git' \ - --define \"rel `git rev-parse --short HEAD`\" \ - --define '_topdir %(pwd)/rpm-build' \ - --define '_builddir %{_topdir}' \ - --define '_rpmdir %{_topdir}' \ - --define '_srcrpmdir %{_topdir}' \ - --define '_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm' \ - --define '_specdir %{_topdir}' \ - --define '_sourcedir %{_topdir}' \ - --quiet \ - -bb misc/packaging/ninja.spec", - description='Building RPM..') - n.build('rpm', 'rpmbuild', - implicit=['ninja','README', 'COPYING', doc('manual.html')]) + command="misc/packaging/rpmbuild.sh", + description='Building rpms..') + n.build('rpm', 'rpmbuild') n.newline() n.build('all', 'phony', all_targets) diff --git a/misc/packaging/ninja.spec b/misc/packaging/ninja.spec index d513c6d..2f009f6 100644 --- a/misc/packaging/ninja.spec +++ b/misc/packaging/ninja.spec @@ -5,6 +5,8 @@ Release: %{rel}%{?dist} Group: Development/Tools License: Apache 2.0 URL: https://github.com/martine/ninja +Source0: %{name}-%{version}-%{release}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release} %description Ninja is yet another build system. It takes as input the interdependencies of files (typically source code and output executables) and @@ -14,20 +16,25 @@ Ninja joins a sea of other build systems. Its distinguishing goal is to be fast. which has over 30,000 source files and whose other build systems (including one built from custom non-recursive Makefiles) can take ten seconds to start building after changing one file. Ninja is under a second. +%prep +%setup -q -n %{name}-%{version}-%{release} + %build -# Assuming we've bootstrapped already.. -../ninja manual ninja -C .. +echo Building.. +./bootstrap.py +./ninja manual %install mkdir -p %{buildroot}%{_bindir} %{buildroot}%{_docdir} -cp -p ../ninja %{buildroot}%{_bindir}/ -git log --oneline --pretty=format:'%h: %s (%an, %cd)' --abbrev-commit --all > GITLOG +cp -p ninja %{buildroot}%{_bindir}/ %files %defattr(-, root, root) -%doc GITLOG ../COPYING ../README ../doc/manual.html +%doc COPYING README doc/manual.html %{_bindir}/* %clean -mv %{_topdir}/*.rpm .. -rm -rf %{_topdir} +rm -rf %{buildroot} + +#The changelog is built automatically from Git history +%changelog diff --git a/misc/packaging/rpmbuild.sh b/misc/packaging/rpmbuild.sh new file mode 100755 index 0000000..9b74c65 --- /dev/null +++ b/misc/packaging/rpmbuild.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +echo Building ninja RPMs.. +GITROOT=$(git rev-parse --show-toplevel) +cd $GITROOT + +VER=1.0 +REL=$(git rev-parse --short HEAD)git +RPMTOPDIR=$GITROOT/rpm-build +echo "Ver: $VER, Release: $REL" + +# Create tarball +mkdir -p $RPMTOPDIR/{SOURCES,SPECS} +git archive --format=tar --prefix=ninja-${VER}-${REL}/ HEAD | gzip -c > $RPMTOPDIR/SOURCES/ninja-${VER}-${REL}.tar.gz + +# Convert git log to RPM's ChangeLog format (shown with rpm -qp --changelog ) +sed -e "s/%{ver}/$VER/" -e "s/%{rel}/$REL/" misc/packaging/ninja.spec > $RPMTOPDIR/SPECS/ninja.spec +git log --format="* %cd %aN%n- (%h) %s%d%n" --date=local | sed -r 's/[0-9]+:[0-9]+:[0-9]+ //' >> $RPMTOPDIR/SPECS/ninja.spec + +# Build SRC and binary RPMs +rpmbuild --quiet \ + --define "_topdir $RPMTOPDIR" \ + --define "_rpmdir $PWD" \ + --define "_srcrpmdir $PWD" \ + --define '_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm' \ + -ba $RPMTOPDIR/SPECS/ninja.spec && + +rm -rf $RPMTOPDIR && +echo Done -- cgit v0.12