Logo Search packages:      
Sourcecode: blender version File versions

bs_arc.py

# 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/bpydata %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/bpydata %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)
            
      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)

Generated by  Doxygen 1.6.0   Back to index