| #!/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]') |