waf

FORK: waf with some random patches
git clone https://git.neptards.moe/neptards/waf.git
Log | Files | Refs | README

blender.py (3069B)


      1 #!/usr/bin/env python
      2 # encoding: utf-8
      3 # Michal Proszek, 2014 (poxip)
      4 
      5 """
      6 Detect the version of Blender, path
      7 and install the extension:
      8 
      9 	def options(opt):
     10 		opt.load('blender')
     11 	def configure(cnf):
     12 		cnf.load('blender')
     13 	def build(bld):
     14 		bld(name='io_mesh_raw',
     15 			feature='blender',
     16 			files=['file1.py', 'file2.py']
     17 		)
     18 If name variable is empty, files are installed in scripts/addons, otherwise scripts/addons/name
     19 Use ./waf configure --system to set the installation directory to system path
     20 """
     21 import os
     22 import re
     23 from getpass import getuser
     24 
     25 from waflib import Utils
     26 from waflib.TaskGen import feature
     27 from waflib.Configure import conf
     28 
     29 def options(opt):
     30 	opt.add_option(
     31 		'-s', '--system',
     32 		dest='directory_system',
     33 		default=False,
     34 		action='store_true',
     35 		help='determines installation directory (default: user)'
     36 	)
     37 
     38 @conf
     39 def find_blender(ctx):
     40 	'''Return version number of blender, if not exist return None'''
     41 	blender = ctx.find_program('blender')
     42 	output = ctx.cmd_and_log(blender + ['--version'])
     43 	m = re.search(r'Blender\s*((\d+(\.|))*)', output)
     44 	if not m:
     45 		ctx.fatal('Could not retrieve blender version')
     46 
     47 	try:
     48 		blender_version = m.group(1)
     49 	except IndexError:
     50 		ctx.fatal('Could not retrieve blender version')
     51 
     52 	ctx.env['BLENDER_VERSION'] = blender_version
     53 	return blender
     54 
     55 @conf
     56 def configure_paths(ctx):
     57 	"""Setup blender paths"""
     58 	# Get the username
     59 	user = getuser()
     60 	_platform = Utils.unversioned_sys_platform()
     61 	config_path = {'user': '', 'system': ''}
     62 	if _platform.startswith('linux'):
     63 		config_path['user'] = '/home/%s/.config/blender/' % user
     64 		config_path['system'] = '/usr/share/blender/'
     65 	elif _platform == 'darwin':
     66 		# MAC OS X
     67 		config_path['user'] = \
     68 			'/Users/%s/Library/Application Support/Blender/' % user
     69 		config_path['system'] = '/Library/Application Support/Blender/'
     70 	elif Utils.is_win32:
     71 		# Windows
     72 		appdata_path = ctx.getenv('APPDATA').replace('\\', '/')
     73 		homedrive = ctx.getenv('HOMEDRIVE').replace('\\', '/')
     74 
     75 		config_path['user'] = '%s/Blender Foundation/Blender/' % appdata_path
     76 		config_path['system'] = \
     77 			'%sAll Users/AppData/Roaming/Blender Foundation/Blender/' % homedrive
     78 	else:
     79 		ctx.fatal(
     80 			'Unsupported platform. '
     81 			'Available platforms: Linux, OSX, MS-Windows.'
     82 		)
     83 
     84 	blender_version = ctx.env['BLENDER_VERSION']
     85 
     86 	config_path['user'] += blender_version + '/'
     87 	config_path['system'] += blender_version + '/'
     88 
     89 	ctx.env['BLENDER_CONFIG_DIR'] = os.path.abspath(config_path['user'])
     90 	if ctx.options.directory_system:
     91 		ctx.env['BLENDER_CONFIG_DIR'] = config_path['system']
     92 
     93 	ctx.env['BLENDER_ADDONS_DIR'] = os.path.join(
     94 		ctx.env['BLENDER_CONFIG_DIR'], 'scripts/addons'
     95 	)
     96 	Utils.check_dir(ctx.env['BLENDER_ADDONS_DIR'])
     97 
     98 def configure(ctx):
     99 	ctx.find_blender()
    100 	ctx.configure_paths()
    101 
    102 @feature('blender_list')
    103 def blender(self):
    104 	# Two ways to install a blender extension: as a module or just .py files
    105 	dest_dir = os.path.join(self.env.BLENDER_ADDONS_DIR, self.get_name())
    106 	Utils.check_dir(dest_dir)
    107 	self.add_install_files(install_to=dest_dir, install_from=getattr(self, 'files', '.'))
    108