#!/usr/bin/python
import os, sys, re

def getVersion( svnversion, fileName ):
    
        if os.path.exists( fileName ):
                file = open( fileName )
                for s in file:
                        m = reNumTag.match(s)
                        if m:
                                s = s[29:-2]
                                s = s.replace('r', '')
                                return s
                file.close()

usage = "usage: %s `svnversion ../..` [outfile]" % os.path.basename(sys.argv[0])

# Default settings, these are things I expected to change over time
svnversionH = "svn_version.h"
reTag = re.compile('#define SVN_VER_TAG*')
reNumTag = re.compile('#define SVN_VER_NUMTAG*')


if len(sys.argv) < 2:
       print usage

else:
        svnversion = sys.argv[1]
        oldSvnVersion = getVersion(svnversion, svnversionH)
        
        if (oldSvnVersion == 'dev' or svnversion > oldSvnVersion):
        
                tag = "dev build r%s" % svnversion
                numtag = "-dev-r%s" % svnversion
                tagOut = "#define SVN_VER_TAG        \" (%s)\"" % tag
                numtagOut = "#define SVN_VER_NUMTAG     \"%s\"" % numtag

                print tagOut
                print numtagOut

                # Set up our file streams
                input = open( svnversionH )
                output = sys.stdout

                lines = input.readlines()
                input.close()
                        
                if len(sys.argv) > 2:
                        output = open(sys.argv[2], 'w')
                else:
                        output = open( svnversionH, 'w')

                for s in lines:
                        ftag = reTag.match(s)
                        fnumtag = reNumTag.match(s)
    
                        if ftag:
                                output.write(tagOut)
                        elif fnumtag:
                                output.write(numtagOut)
                        else:
                                output.write(s)
                
                output.close()

