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
|
#! /usr/bin/env python
# encoding: utf-8
# WARNING! All changes made to this file will be lost!
import os,re
from waflib import Configure,TaskGen,Task,Utils,Runner,Options,Build,Logs
import waflib.Tools.ccroot
from waflib.TaskGen import feature,before
from waflib.Logs import error
def apply_intltool_in_f(self):
try:self.meths.remove('process_source')
except ValueError:pass
if not self.env.LOCALEDIR:
self.env.LOCALEDIR=self.env.PREFIX+'/share/locale'
for i in self.to_list(self.source):
node=self.path.find_resource(i)
podir=getattr(self,'podir','po')
podirnode=self.path.find_dir(podir)
if not podirnode:
error("could not find the podir %r"%podir)
continue
cache=getattr(self,'intlcache','.intlcache')
self.env['INTLCACHE']=os.path.join(self.path.bldpath(),podir,cache)
self.env['INTLPODIR']=podirnode.bldpath()
self.env['INTLFLAGS']=getattr(self,'flags',['-q','-u','-c'])
task=self.create_task('intltool',node,node.change_ext(''))
inst=getattr(self,'install_path','${LOCALEDIR}')
if inst:
self.bld.install_files(inst,task.outputs)
def apply_intltool_po(self):
try:self.meths.remove('process_source')
except ValueError:pass
if not self.env.LOCALEDIR:
self.env.LOCALEDIR=self.env.PREFIX+'/share/locale'
appname=getattr(self,'appname','set_your_app_name')
podir=getattr(self,'podir','')
inst=getattr(self,'install_path','${LOCALEDIR}')
linguas=self.path.find_node(os.path.join(podir,'LINGUAS'))
if linguas:
file=open(linguas.abspath())
langs=[]
for line in file.readlines():
if not line.startswith('#'):
langs+=line.split()
file.close()
re_linguas=re.compile('[-a-zA-Z_@.]+')
for lang in langs:
if re_linguas.match(lang):
node=self.path.find_resource(os.path.join(podir,re_linguas.match(lang).group()+'.po'))
task=self.create_task('po',node,node.change_ext('.mo'))
if inst:
filename=task.outputs[0].name
(langname,ext)=os.path.splitext(filename)
inst_file=inst+os.sep+langname+os.sep+'LC_MESSAGES'+os.sep+appname+'.mo'
self.bld.install_as(inst_file,task.outputs[0],chmod=getattr(self,'chmod',Utils.O644),env=task.env)
else:
Logs.pprint('RED',"Error no LINGUAS file found in po directory")
class po(Task.Task):
run_str='${MSGFMT} -o ${TGT} ${SRC}'
color='BLUE'
class intltool(Task.Task):
run_str='${INTLTOOL} ${INTLFLAGS} ${INTLCACHE} ${INTLPODIR} ${SRC} ${TGT}'
color='BLUE'
def configure(conf):
conf.find_program('msgfmt',var='MSGFMT')
conf.find_perl_program('intltool-merge',var='INTLTOOL')
prefix=conf.env.PREFIX
datadir=conf.env.DATADIR
if not datadir:
datadir=os.path.join(prefix,'share')
conf.define('LOCALEDIR',os.path.join(datadir,'locale'))
conf.define('DATADIR',datadir)
if conf.env.CC or conf.env.CXX:
conf.check(header_name='locale.h')
before('process_source')(apply_intltool_in_f)
feature('intltool_in')(apply_intltool_in_f)
feature('intltool_po')(apply_intltool_po)
|