From 433cbf586f80f09812a7913cba4872b1816594bc Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sun, 14 Nov 2004 23:18:20 +0000 Subject: [PATCH] Define an elaborate set of lunacy to make sure that RPM versions do the right thing with our recalcitrant versioning scheme. See tor.spec.in for full details. Basically, the progression is now: Tor version RPM version 0.0.8 ---> 0.0.8 0.0.8.1 ---> 0.0.8.1 0.0.9pre1-cvs ---> 0.0.8.99.0.0.9.pre.1.cvs 0.0.9pre1 ---> 0.0.8.99.0.0.9.pre.1.release 0.0.9pre2 ---> 0.0.8.99.0.0.9.pre.2.release 0.0.9rc1 ---> 0.0.8.99.0.0.9.rc.1.release 0.0.9 ---> 0.0.9 0.0.9.1-cvs ---> 0.0.9.0.99.0.0.9.1.cvs 0.0.9.1 ---> 0.0.9.1 The spec file (but not the system) will break if a tor version ends in ".0", so don't do that yet. svn:r2877 --- doc/TODO | 6 +++--- tor.spec.in | 41 +++++++++++++++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/doc/TODO b/doc/TODO index 22704d36ea..559a0fa111 100644 --- a/doc/TODO +++ b/doc/TODO @@ -31,13 +31,13 @@ R - fix print_usage() running-routers so often? R - document signals in man page o Check for hibernation on startup, hup, etc. -N - Test hibernation a lot. +N . Test hibernation a lot. o Document all undocumented configuration options. o Accounting o Control interface authentication -N - RPMs + o RPMs o Merge changes from jbash - - Figure out versioning + o Figure out versioning o Windows installer o Make installer get built o Write script to correct windows versions. diff --git a/tor.spec.in b/tor.spec.in index 4eb0eea35d..44f39b0f60 100644 --- a/tor.spec.in +++ b/tor.spec.in @@ -6,7 +6,7 @@ # This should be incremented whenever the spec file changes, but # can drop back to zero at a new Tor version -%define specver 1 +%define specver 2 ## Things users may want to change # @@ -20,14 +20,43 @@ # including any "pre" or "rc" suffix. This gets massaged to # create the RPM version number, in a way that depends on the Tor # numbering scheme. -%define native_version @VERSION@ +%define native_version @VERSION@ # Massage the version so that pre-releases will be treated as earlier # than release candidates which will be treated as earlier than released -# versions... while making as few confusing changes to the standard -# release naming as possible. -# XXXX009 Execept that handling cvs breaks this. -%define version %(echo %{native_version} | sed -e 's/-cvs/.cvs/' -e 's/pre/.pre./' -e 's/rc/.rc./' -e 's/([0-9])$/\1.release/') +# versions. +# +# We do this as follows: +# - If the version number has no "pre", "cvs", or "rc", we let it pass. +# - Otherwise, we mangle it heavily: +# * To make 0.0.Xpre come after 0.0.{X-1}* but before 0.0.X, we prepend +# 0.0.{X-1}.99 to the version. +# * We replace pre with .pre. and rc with .rc. +# * We replace -cvs with .cvs, and lack of -cvs with .release. +# +# Note what this scheme will break if we ever use 0 as a last digit for a +# Tor version: so don't do that. + +%define is_dev_version %(echo %{native_version} | grep 'cvs\\|pre\\|rc' > /dev/null && echo 1 || echo 0) + +%if %{is_dev_version} + +# The 0.0.X.pre.1.cvs part. +%define safe_native_version %(echo %{native_version} | sed -e 's/-cvs/.cvs/' -e 's/pre/.pre./' -e 's/rc/.rc./' -e 's/\\([0-9]\\)$/\\1.release/') +# The 0.0.X part -- the version we are leading up to. +%define stub_version %(echo %{native_version} | sed -e 's/-cvs//' -e 's/pre.*//' -e 's/rc.*//') +# The 0.0 part +%define stub_start %(echo %{stub_version} | sed -e 's/\\.[0-9]*$//') +# The X part. +%define stub_last %(echo %{stub_version} | sed -e 's/.*\\.\\([0-9]*\\)$/\\1/') +# The {X-1} part. +%define stub_newlast %(expr %{stub_last} - 1) +# The actual version: 0.0.{X-1}.99.0.0.X.pre.1.cvs +%define version %{stub_start}.%{stub_newlast}.99.%{safe_native_version} + +%else +%define version %{native_version} +%endif ## Release and OS identification song and dance #