summaryrefslogtreecommitdiffstats
path: root/winbuild
diff options
context:
space:
mode:
Diffstat (limited to 'winbuild')
-rw-r--r--winbuild/pack_the_distribution_for_windows.py264
1 files changed, 264 insertions, 0 deletions
diff --git a/winbuild/pack_the_distribution_for_windows.py b/winbuild/pack_the_distribution_for_windows.py
new file mode 100644
index 0000000..e58f0b4
--- /dev/null
+++ b/winbuild/pack_the_distribution_for_windows.py
@@ -0,0 +1,264 @@
+#! python3
+
+import glob
+import os
+import re
+import shutil
+import subprocess
+import sys
+import textwrap
+
+
+def getCurrentSubdirName():
+ subdir, fname = os.path.split(os.path.realpath(__file__))
+ return os.path.basename(subdir)
+
+
+def getCurrentBranchName():
+ result = None
+ cmd = 'git branch --list --no-color'
+ pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE).stdout
+ for line in pipe:
+ line = line.decode('utf-8')
+ if line.startswith('*'):
+ result = line[2:].rstrip()
+ pipe.close()
+ return result
+
+
+def getUserName():
+ user = None # init
+ p = subprocess.Popen('git config user.name', stdout=subprocess.PIPE)
+ user = p.communicate()[0]
+ user = user.decode('utf-8')
+ p.wait()
+ return user
+
+
+def getUserInitials():
+ user = getUserName()
+ return ''.join(s[0] for s in user.split())
+
+
+def gitSHA_date_time():
+ cmd = 'git rev-parse --short HEAD'
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ output = p.communicate()[0]
+ output = output.decode('ASCII')
+ p.wait()
+ sha = output.strip()
+
+ cmd = 'git show -s --format="%ci" ' + sha
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ output = p.communicate()[0]
+ output = output.decode('ASCII')
+ p.wait()
+ date = output.strip()
+ lst = date.split() # string like '2013-06-21 09:23:47 +0200'
+ dstamp = lst[0].replace('-', '') # '20130621' for the date
+ tstamp = lst[1].replace(':', '') # '092347' for the time
+
+ return sha, dstamp, tstamp
+
+
+def gitDescribe():
+ result = None
+ cmd = 'git describe'
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ descr = p.communicate()[0]
+ descr = descr.decode('utf-8')
+ p.wait()
+ return descr.strip()
+
+
+def getDoxygenVersion():
+ # ... from the VERSION file.
+ sdir, fname = getThisScriptPathAndName()
+ version_fname = os.path.join(sdir, '..', 'VERSION')
+
+ with open(version_fname) as f:
+ lst = f.readlines()
+
+ doxver = lst[0].strip()
+
+ m = re.match(r'^(?P<ver>[0-9.]+)(-(?P<date>\d{8}))?', doxver)
+ assert m
+ ver = m.group('ver')
+ return ver
+
+
+def getThisScriptPathAndName():
+ script_fname = os.path.realpath(__file__)
+ sdir, fname = os.path.split(script_fname)
+ return sdir, fname
+
+
+def getEmptyDistribDir():
+ # Get this script full path, name, and the script subdir name
+ # (for checking the location).
+ sdir, fname = getThisScriptPathAndName()
+ subdir = os.path.basename(sdir)
+ assert subdir == 'winbuild'
+
+ # The distribution directory will be a subdirectory of the "../__put"
+ # (created if it does not exist, not the part of the git repo).
+ target_dir = os.path.normpath(os.path.join(sdir, '..', '__put'))
+ if not os.path.exists(target_dir):
+ os.mkdir(target_dir)
+ assert os.path.isdir(target_dir)
+
+ # The distribution subdir is composed out of 'Doxygen-', version stamp,
+ # timestamp, and commit id (partial SHA). Ignore the date from the VERSION
+ # file, take the commit date.
+ ver = getDoxygenVersion()
+ sha, dstamp, tstamp = gitSHA_date_time()
+ dist_subdir = 'Doxygen-' + ver + '-' + dstamp + tstamp
+ dist_dir = os.path.join(target_dir, dist_subdir)
+ print(dist_dir)
+ if os.path.isdir(dist_dir):
+ print("Removing the existing '{}'".format(dist_dir))
+ shutil.rmtree(dist_dir)
+ assert not os.path.exists(dist_dir)
+ print("Creating the new '{}'".format(dist_dir))
+ os.mkdir(dist_dir)
+ assert os.path.isdir(dist_dir)
+
+ return dist_dir
+
+
+def copyBinaries(dist_dir, subdir):
+ '''Copy the Windows binaries (doxygen.exe only) to the dist_dir directory.'''
+
+ # Source file should exist.
+ sdir, fname = getThisScriptPathAndName()
+ src = os.path.normpath(os.path.join(sdir, '..', 'bin', subdir, 'doxygen.exe'))
+ assert os.path.isfile(src)
+
+ # Destination directory must not exist. It must be created first.
+ dst_dir = os.path.normpath(os.path.join(dist_dir, 'bin', subdir))
+ assert not os.path.isdir(dst_dir)
+ os.makedirs(dst_dir)
+
+ # Copy the file.
+ print("Copying '{}'".format(src))
+ shutil.copy2(src, dst_dir)
+
+
+def getBinariesZipBareName():
+ ver = getDoxygenVersion()
+ sha, dstamp, tstamp = gitSHA_date_time()
+ fname = 'doxygenw{}_{}.zip'.format(dstamp, ver.replace('.', '_'))
+ return fname
+
+
+def getTranslatorReportZipBareName():
+ ver = getDoxygenVersion()
+ sha, dstamp, tstamp = gitSHA_date_time()
+ fname = 'tr{}_{}.zip'.format(dstamp, ver.replace('.', '_'))
+ return fname
+
+
+def zipBinaries(distr_dir):
+ # Build the zip filename. It is to be located at the same level as distr_dir.
+ zip_bare_name = getBinariesZipBareName()
+ dst, distr_subdir = os.path.split(distr_dir)
+ zip_full_name = os.path.join(dst, zip_bare_name)
+
+ if os.path.isfile(zip_full_name):
+ print("Removing the existing '{}'".format(zip_full_name))
+ os.remove(zip_full_name)
+
+ # Change the working directory to destination directory and zip from
+ # there using the bare names so that the full path is not zipped inside.
+ wd = os.getcwd()
+ os.chdir(dst)
+ print("Zipping new '{}'".format(zip_full_name))
+ subprocess.call('zip -r {} {}'.format(zip_bare_name, distr_subdir), shell=True)
+ os.chdir(wd) # back to the original working directory
+
+
+def buildAndZipTranslatorReport(distr_dir):
+ # Build the translator report zip filename. It is to be located at the same
+ # level as distr_dir.
+ zip_bare_name = getTranslatorReportZipBareName()
+ dst, subdir = os.path.split(distr_dir)
+ zip_full_name = os.path.join(dst, zip_bare_name)
+
+ if os.path.isfile(zip_full_name):
+ print("Removing the existing '{}'".format(zip_full_name))
+ os.remove(zip_full_name)
+ print("Zipping new '{}'".format(zip_full_name))
+
+ # Change the working directory to the doc one and generate
+ # the translator report.
+ sdir, fname = getThisScriptPathAndName()
+ docdir = os.path.join(sdir, '..', 'doc')
+ assert os.path.isdir(docdir)
+ wd = os.getcwd()
+ os.chdir(docdir)
+ subprocess.call('python translator.py', shell=True)
+
+ # Zip the generated translator_report.txt.
+ subprocess.call('zip -r {} {}'.format(zip_full_name,
+ 'translator_report.txt'), shell=True)
+
+ os.chdir(wd) # back to the original working directory
+
+
+def xxx():
+
+ # Vytvoříme dopis.
+ subject = 'Windows binaries available for %s in SVN' % doxdir
+ subject = subject.replace(' ', '%20')
+
+ body = textwrap.dedent('''\
+ Hi,
+
+ If interested, you can download the doxygen binaries
+ compiled for MS Windows from
+
+ http://sourceforge.net/projects/doxygen/files/snapshots/doxygen-1.8-svn/windows
+
+ This is the place where you should find also the next
+ releases. Name of the archive file is
+
+ %s
+
+ The related translator report can be found inside the directory
+
+ http://sourceforge.net/projects/doxygen/files/snapshots/doxygen-1.8-svn/translator_reports/
+
+ Name of the archive file is
+
+ %s
+
+ The binaries are NOT created automatically, so it may
+ happen that some newer SVN sources were not compiled
+ because I am not present to do that or I forgot... ;)
+
+ Regards,
+ Petr
+
+ --
+ Petr Prikryl (prikryl at atlas dot cz)''') % (doxzipname, trzipname)
+ body = body.replace('\n', '%0d')
+
+ # Zkonstruujeme URI a spustíme mailer pro odeslání dopisu.
+ to_addr = 'doxygen-users@lists.sourceforge.net'
+ mailtoURI = 'mailto:%s?subject=%s&body=%s' % (to_addr, subject, body)
+ os.startfile(mailtoURI)
+
+
+if __name__ == '__main__':
+ # Create the empty directory for the distribution files.
+ dist_dir = getEmptyDistribDir()
+
+ # Copy the compiled binaries to the distribution directory and zip them.
+ copyBinaries(dist_dir, 'Debug')
+ copyBinaries(dist_dir, 'Debug64')
+ copyBinaries(dist_dir, 'Release')
+ copyBinaries(dist_dir, 'Release64')
+ zipBinaries(dist_dir)
+
+ # The translator report...
+ buildAndZipTranslatorReport(dist_dir) \ No newline at end of file