forked from bartvdbraak/blender
fa5d910f93
It seemed trivial enough, so I updated all systems (makefiles, xcode, scons, scons win installer), please complain if something went wrong. Mostly it was just removing release/bpydata references, since the release/scripts dir is already worked on recursevely, handling dirs inside it. For the scons nsi file writer script I had to write code for each new dir, but it can be recoded recursively, too (in fact joining all release stuff in a single dir tree with nothing else would be a good idea, making installation code simpler). Since it's just python and I have a little more time now, I can help scons managers if they still need. Thanks Campbell Barton for reporting.
241 lines
7.1 KiB
Python
241 lines
7.1 KiB
Python
# archive targets ('scons release')
|
|
# and extra functions
|
|
#
|
|
# Mac OS: appit
|
|
# Unices: zipit -> .tar.gz
|
|
# Windows: zipit -> .zip
|
|
#
|
|
|
|
import os
|
|
import sys
|
|
import string
|
|
import bs_dirs
|
|
|
|
import bs_globals
|
|
|
|
def add2arc(arc, file):
|
|
"""
|
|
Add file to arc. For win32 arc is a Zipfile, for unices it's a Tarfile
|
|
"""
|
|
if sys.platform == 'win32':
|
|
arc.write(file)
|
|
else:
|
|
arc.add(file)
|
|
|
|
def appit(target, source, env):
|
|
if sys.platform == 'darwin':
|
|
import shutil
|
|
import commands
|
|
import os.path
|
|
|
|
target = 'blender'
|
|
sourceinfo = "source/darwin/%s.app/Contents/Info.plist"%target
|
|
targetinfo = "%s.app/Contents/Info.plist"%target
|
|
|
|
cmd = '%s.app'%target
|
|
if os.path.isdir(cmd):
|
|
shutil.rmtree('%s.app'%target)
|
|
shutil.copytree("source/darwin/%s.app"%target, '%s.app'%target)
|
|
cmd = "cat %s | sed s/VERSION/`cat release/VERSION`/ | sed s/DATE/`date +'%%Y-%%b-%%d'`/ > %s"%(sourceinfo,targetinfo)
|
|
commands.getoutput(cmd)
|
|
cmd = 'cp %s %s.app/Contents/MacOS/%s'%(target, target, target)
|
|
commands.getoutput(cmd)
|
|
if bs_globals.user_options_dict['BUILD_BINARY'] == 'debug':
|
|
print "building debug"
|
|
else :
|
|
cmd = 'strip -u -r %s.app/Contents/MacOS/%s'%(target, target)
|
|
commands.getoutput(cmd)
|
|
cmd = '%s.app/Contents/Resources/'%target
|
|
shutil.copy('bin/.blender/.bfont.ttf', cmd)
|
|
shutil.copy('bin/.blender/.Blanguages', cmd)
|
|
cmd = 'cp -R bin/.blender/locale %s.app/Contents/Resources/'%target
|
|
commands.getoutput(cmd)
|
|
cmd = 'mkdir %s.app/Contents/MacOS/.blender'%target
|
|
commands.getoutput(cmd)
|
|
cmd = 'cp -R release/scripts %s.app/Contents/MacOS/.blender/'%target
|
|
commands.getoutput(cmd)
|
|
cmd = 'cp -R release/plugins %s.app/Contents/Resources/'%target
|
|
commands.getoutput(cmd)
|
|
cmd = 'chmod +x %s.app/Contents/MacOS/%s'%(target, target)
|
|
commands.getoutput(cmd)
|
|
cmd = 'find %s.app -name CVS -prune -exec rm -rf {} \;'%target
|
|
commands.getoutput(cmd)
|
|
cmd = 'find %s.app -name .DS_Store -exec rm -rf {} \;'%target
|
|
commands.getoutput(cmd)
|
|
|
|
if bs_globals.user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
|
|
target = 'blenderplayer'
|
|
sourceinfo = "source/darwin/%s.app/Contents/Info.plist"%target
|
|
targetinfo = "%s.app/Contents/Info.plist"%target
|
|
|
|
cmd = '%s.app'%target
|
|
if os.path.isdir(cmd):
|
|
shutil.rmtree('%s.app'%target)
|
|
shutil.copytree("source/darwin/%s.app"%target, '%s.app'%target)
|
|
cmd = "cat %s | sed s/VERSION/`cat release/VERSION`/ | sed s/DATE/`date +'%%Y-%%b-%%d'`/ > %s"%(sourceinfo,targetinfo)
|
|
commands.getoutput(cmd)
|
|
cmd = 'cp %s %s.app/Contents/MacOS/%s'%(target, target, target)
|
|
commands.getoutput(cmd)
|
|
if bs_globals.user_options_dict['BUILD_BINARY'] == 'debug':
|
|
print "building debug player"
|
|
else :
|
|
cmd = 'strip -u -r %s.app/Contents/MacOS/%s'%(target, target)
|
|
commands.getoutput(cmd)
|
|
cmd = '%s.app/Contents/Resources/'%target
|
|
shutil.copy('bin/.blender/.bfont.ttf', cmd)
|
|
shutil.copy('bin/.blender/.Blanguages', cmd)
|
|
cmd = 'cp -R bin/.blender/locale %s.app/Contents/Resources/'%target
|
|
commands.getoutput(cmd)
|
|
cmd = 'cp -R release/scripts %s.app/Contents/MacOS/.blender/'%target
|
|
commands.getoutput(cmd)
|
|
cmd = 'cp -R release/plugins %s.app/Contents/Resources/'%target
|
|
commands.getoutput(cmd)
|
|
cmd = 'chmod +x %s.app/Contents/MacOS/%s'%(target, target)
|
|
commands.getoutput(cmd)
|
|
cmd = 'find %s.app -name CVS -prune -exec rm -rf {} \;'%target
|
|
commands.getoutput(cmd)
|
|
cmd = 'find %s.app -name .DS_Store -exec rm -rf {} \;'%target
|
|
commands.getoutput(cmd)
|
|
|
|
else:
|
|
print "This target is for the Os X platform only"
|
|
|
|
def zipit(env, target, source):
|
|
try:
|
|
if sys.platform == 'win32':
|
|
import zipfile
|
|
else:
|
|
import tarfile
|
|
except:
|
|
if sys.platform == 'win32':
|
|
print "no zipfile module found"
|
|
else:
|
|
print "no tarfile module found"
|
|
print "make sure you use python 2.3"
|
|
print
|
|
return
|
|
|
|
import shutil
|
|
import glob
|
|
import time
|
|
|
|
startdir = os.getcwd()
|
|
pf=""
|
|
zipext = ""
|
|
zipname = ""
|
|
|
|
today = time.strftime("%Y%m%d", time.gmtime()) # get time in the form 20040714
|
|
|
|
if bs_dirs.preparedist()==0:
|
|
print "check output for error"
|
|
return
|
|
|
|
if sys.platform == 'win32':
|
|
zipext += ".zip"
|
|
pf = "windows"
|
|
elif sys.platform == 'linux2' or sys.platform == 'linux-i386':
|
|
zipext += ".tar.gz"
|
|
pf = "linux"
|
|
elif sys.platform == 'freebsd4':
|
|
zipext += ".tar.gz"
|
|
pf = "freebsd4"
|
|
elif sys.platform == 'freebsd5':
|
|
zipext += ".tar.gz"
|
|
pf = "freebsd5"
|
|
elif sys.platform == 'cygwin':
|
|
zipext += ".tar.gz"
|
|
pf = "cygwin"
|
|
|
|
if bs_globals.user_options_dict['BUILD_BINARY'] == 'release':
|
|
if sys.platform == 'cygwin':
|
|
blendname = "blender-" + bs_globals.version + "-" + pf
|
|
else:
|
|
blendname = "blender-" + bs_globals.version + "-" + bs_globals.config_guess
|
|
else:
|
|
blendname = "bf_blender_" + pf + "_" + today
|
|
|
|
zipname = blendname + zipext
|
|
|
|
if os.path.isdir(blendname):
|
|
shutil.rmtree(blendname)
|
|
shutil.move(startdir + os.sep + "dist", blendname)
|
|
|
|
print
|
|
if sys.platform == 'win32':
|
|
print "Create the zip!"
|
|
else:
|
|
print "Create the tarball!"
|
|
print
|
|
|
|
if sys.platform == 'win32':
|
|
thezip = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED)
|
|
else:
|
|
thezip = tarfile.open(zipname, 'w:gz')
|
|
|
|
for root, dirs, files in os.walk(blendname, topdown=False):
|
|
for name in files:
|
|
if name in [zipname]:
|
|
print "skipping self"
|
|
else:
|
|
file = root + "/" + name
|
|
print "adding: " + file
|
|
add2arc(thezip, file)
|
|
|
|
thezip.close()
|
|
|
|
os.chdir(startdir)
|
|
shutil.move(blendname, startdir + os.sep + "dist")
|
|
|
|
if bs_dirs.finalisedist(zipname)==0:
|
|
print "encountered an error in finalisedist"
|
|
print
|
|
return
|
|
|
|
print
|
|
print "Blender has been successfully packaged"
|
|
print "You can find the file %s in the root source directory"%zipname
|
|
print
|
|
|
|
def printadd(env, target, source):
|
|
"""
|
|
Print warning message if platform hasn't been added to zipit() yet
|
|
"""
|
|
|
|
print
|
|
print "############"
|
|
print
|
|
print "Make sure zipit() works for your platform:"
|
|
print " - binaries to copy (naming?)"
|
|
print " - possible libraries?"
|
|
print " - archive format?"
|
|
print
|
|
print "/Nathan Letwory (jesterKing)"
|
|
print
|
|
|
|
def BlenderRelease(target):
|
|
"""
|
|
Make a Release package (tarball, zip, bundle).
|
|
|
|
target = Name of package to make (string)
|
|
eg: BlenderRelease('blender')
|
|
"""
|
|
|
|
if sys.platform == 'darwin':
|
|
app_env = bs_globals.init_env.Copy()
|
|
Mappit = app_env.Command('appit', bs_globals.appname, appit)
|
|
if bs_globals.user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
|
|
app_env.Depends(Mappit, bs_globals.playername)
|
|
app_env.Alias("release", Mappit)
|
|
elif sys.platform in ['win32', 'linux2', 'linux-i386', 'freebsd4', 'freebsd5','cygwin']:
|
|
release_env = bs_globals.init_env.Copy()
|
|
releaseit = release_env.Command('blenderrelease', bs_globals.appname, zipit)
|
|
if bs_globals.user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
|
|
release_env.Depends(releaseit, bs_globals.playername)
|
|
release_env.Alias("release", releaseit)
|
|
else:
|
|
release_env = bs_globals.init_env.Copy()
|
|
releaseit = release_env.Command('blender.tar.gz', bs_globals.appname, printadd)
|
|
if bs_globals.user_options_dict['BUILD_BLENDER_PLAYER'] == 1:
|
|
release_env.Depends(releaseit, bs_globals.playername)
|
|
release_env.Alias("release", releaseit)
|