1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
#! /usr/bin/env python3
## ____ _ __
## / __ )____ _____ | | / /___ ___________
## / __ / __ \/ ___/ | | /| / / __ `/ ___/ ___/
## / /_/ / /_/ (__ ) | |/ |/ / /_/ / / (__ )
## /_____/\____/____/ |__/|__/\__,_/_/ /____/
##
## A futuristic real-time strategy game.
## This file is part of Bos Wars.
##
## Script that generates all the distribution packages.
## (c) Copyright 2007-2023 by Francois Beerten
##
## Stratagus is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; only version 2 of the License.
##
## Stratagus is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
import sys
import os
import tarfile
import zipfile
import time
def printDot():
sys.stdout.write('.')
sys.stdout.flush()
def createTarArchive(archivename, namelist):
print("\nCreating %s.tar.gz" % archivename)
tar = tarfile.open(archivename + ".tar.gz", "w:gz")
for name in namelist:
tarinfo = tar.gettarinfo(name, archivename + "/" + name)
tarinfo.uid = 500
tarinfo.gid = 500
tarinfo.uname = "user"
tarinfo.gname = "user"
printDot()
tar.addfile(tarinfo, open(name, 'rb'))
tar.close()
print
def createZipArchive(archivename, namelist):
print("\nCreating %s.zip" % archivename)
z = zipfile.ZipFile(archivename + ".zip", "w", zipfile.ZIP_DEFLATED)
for name in namelist:
z.write(name, archivename + "/" + name)
printDot()
z.close()
print
def listGitFiles():
entries = os.popen('git ls-files').readlines()
return [i.strip() for i in entries]
def listSvnFiles():
entries = os.popen('svn ls -R').readlines()
files = []
for e in entries:
e = e.strip()
if not e.endswith('/'):
files.append(e)
return files
def listFilesInDirectories():
raise RuntimeError("Not implemented")
def listFiles():
if os.access('.git', os.F_OK):
return listGitFiles()
elif os.access('.svn', os.F_OK):
return listSvnFiles()
else:
return listFilesInDirectories()
def buildDefaultVersionName():
t = time.time()
v = time.strftime('%Y%m%d', time.gmtime(t))
return v
def buildVersionName():
if len(sys.argv) > 1:
return sys.argv[1]
else:
return buildDefaultVersionName()
def filterDirectories(files):
return [x for x in files if not x.endswith('/')]
def filterSources(files):
buildfiles = ['bos.sln', 'make.py', 'fabricate.py']
def isGoodFile(f):
return (not f.startswith('engine/') and not f.startswith('tools/') and
f not in buildfiles)
return [x for x in files if isGoodFile(x)]
def buildPackages():
name = 'boswars-' + buildVersionName() + '-%s'
os.chdir('../..')
files = listFiles()
files = filterDirectories(files)
# create source packages
createTarArchive(name % 'src', files)
createZipArchive(name % 'src', files)
# create binary packages
# FIXME: automatically build a "static" boswars executable ?
binarydistfiles = filterSources(files)
linuxfiles = binarydistfiles[:]
linuxfiles.append('boswars')
createTarArchive(name % 'linux', linuxfiles)
if os.access('boswars.exe', os.F_OK):
winfiles = binarydistfiles[:]
winfiles.append('boswars.exe')
createZipArchive(name % 'win32', winfiles)
if __name__ == '__main__':
buildPackages()
|