[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Adding current svn revision to source automatically

From: Kenneth Goldman <kgoldman_at_us.ibm.com>
Date: Tue, 16 Dec 2008 09:58:56 -0500

"Andy Levy" <andy.levy_at_gmail.com> wrote on 12/15/2008 06:47:17 PM:

> On Mon, Dec 15, 2008 at 14:46, Kenneth Goldman <kgoldman_at_us.ibm.com>
wrote:
> > "Andy Levy" <andy.levy_at_gmail.com> wrote on 12/15/2008 02:15:27 PM:
> >
> >> On Mon, Dec 15, 2008 at 09:51, Kenneth Goldman <kgoldman_at_us.ibm.com>
> >> wrote:
> >> > I'd like to have svn add the current version of a directory to some
C
> >> > source code, something like
> >> >
> >> > #DEFINE PROGRAM_VERSION 1234
> >> >
> >> > or
> >> >
> >> > const unsigned long program_version = 1234;
> >> >
> >> > Is there a way to do that? Googling came up with two not quite
right
> >> > alternatives:
> >> >
> >> > - svn itself can add the current version of the file to the file,
but
> >> > that only works if I change the file every time.
> >> >
> >> > - svnversion utility can return the global version, and the makefile
> >> > can add it in during the compile, but it won't appear in the source.
> >> > Builder who just get the source and not svn repository access can't
> >> > run svnversion, can they?
> >> >
> >> > Is there a standard way to do this? Is there a better forum?
> >>
> >> If there's a "more accepted" method of doing it than the FAQ
> >> indicates, then the FAQ needs to be updated.
> >>
> >> http://subversion.tigris.org/faq.html#version-value-in-source
> >
> > This 'FAQ answer' requires use of the svnversion command at build time.
> >
> > As I tried to explain above, this requires access to the svn repository
> > at build time, right? The version never appears in the source, right?
> > So If I create a source tarball and send it to someone, they can't
> > build binaries.
>
> The FAQ answer requires access to the repository at *some* time. It
> doesn't have to be at compile time. It can be at the time you create
> your source tarball, if you make the call to svnversion part of your
> process for building that tarball.
>
> In fact, the FAQ even states "You can incorporate it into your build
> *or release process*". It does not explicitly state that you can only
> use it at build time - you inferred that from your own experience &
> perception of what's made available.
>
> > I think I need the global version applied to the file at commit, not at
> > build, but I don't understand how to do that. However, it seems like
> > such a common need that there must be a solution.
> >
>
> The FAQ answer is a solution. That process isn't restricted to just
> build or release time - you can execute that anytime you need it.

Here are my two specific problems with the FAQ solution:

Solution 1, adding 'svnversion' to the makefile, clearly requires
access to the repository at build time. That's when 'make' runs.
The globalrev is ephemeral, discarded after the build. So it won't
work on a released tarball.

Solution 2, using 'svnversion' to update a source file. gets one into
an endless loop. 'svnversion' adds version n to the .c file. But,
as soon as I commit, the version rolls to n+1. So my source is
always one version behind. Further, every overall project
build/test/commit cycle increments the program version, even when
nothing in the program changed.

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=1065&dsMessageId=985020

To unsubscribe from this discussion, e-mail: [users-unsubscribe_at_subversion.tigris.org].
Received on 2008-12-16 18:26:23 CET

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.