#!/usr/bin/env python3 # Python program to set the version. ############################################## import re import sys import optparse def fileProcess( name, lineFunction ): filestream = open( name, 'r' ) if filestream.closed: print( "file " + name + " not open." ) return output = "" print( "--- Processing " + name + " ---------" ) while 1: line = filestream.readline() if not line: break output += lineFunction( line ) filestream.close() if not output: return # basic error checking print( "Writing file " + name ) filestream = open( name, "w" ); filestream.write( output ); filestream.close() def echoInput( line ): return line parser = optparse.OptionParser( "usage: %prog major minor build" ) (options, args) = parser.parse_args() if len(args) != 3: parser.error( "incorrect number of arguments" ); major = args[0] minor = args[1] build = args[2] versionStr = major + "." + minor + "." + build print ("Setting dox,tinyxml2.h") print ("Version: " + major + "." + minor + "." + build) #### Write the tinyxml.h #### def engineRule( line ): matchMajor = "static const int TIXML2_MAJOR_VERSION" matchMinor = "static const int TIXML2_MINOR_VERSION" matchBuild = "static const int TIXML2_PATCH_VERSION" if line[0:len(matchMajor)] == matchMajor: print( "1)tinyxml2.h Major found" ) return matchMajor + " = " + major + ";\n" elif line[0:len(matchMinor)] == matchMinor: print( "2)tinyxml2.h Minor found" ) return matchMinor + " = " + minor + ";\n" elif line[0:len(matchBuild)] == matchBuild: print( "3)tinyxml2.h Build found" ) return matchBuild + " = " + build + ";\n" else: return line; fileProcess( "tinyxml2.h", engineRule ) def macroVersionRule( line ): matchMajor = "#define TINYXML2_MAJOR_VERSION" matchMinor = "#define TINYXML2_MINOR_VERSION" matchBuild = "#define TINYXML2_PATCH_VERSION" if line[0:len(matchMajor)] == matchMajor: print( "1)macro Major found" ) return matchMajor + " " + major + "\n" elif line[0:len(matchMinor)] == matchMinor: print( "2)macro Minor found" ) return matchMinor + " " + minor + "\n" elif line[0:len(matchBuild)] == matchBuild: print( "3)macro Build found" ) return matchBuild + " " + build + "\n" else: return line; fileProcess("tinyxml2.h", macroVersionRule) #### Write the dox #### def doxRule( line ): match = "PROJECT_NUMBER" if line[0:len( match )] == match: print( "dox project found" ) return "PROJECT_NUMBER = " + major + "." + minor + "." + build + "\n" else: return line; fileProcess( "dox", doxRule ) #### Write the CMakeLists.txt #### def cmakeRule( line ): matchVersion = "project(tinyxml2 VERSION" if line[0:len(matchVersion)] == matchVersion: print( "1)tinyxml2.h Major found" ) return matchVersion + " " + major + "." + minor + "." + build + ")\n" else: return line; fileProcess( "CMakeLists.txt", cmakeRule ) def mesonRule(line): match = re.search(r"(\s*version) : '(\d+.\d+.\d+)',", line) if match: print("1)meson.build version found.") return "{} : '{}.{}.{}',\n".format(match.group(1), major, minor, build) return line fileProcess("meson.build", mesonRule) print( "Release note:" ) print( '1. Build. g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe' ) print( '2. Commit. git commit -am"setting the version to ' + versionStr + '"' ) print( '3. Tag. git tag ' + versionStr ) print( ' OR git tag -a ' + versionStr + ' -m [tag message]' ) print( 'Remember to "git push" both code and tag. For the tag:' ) print( 'git push origin [tagname]')