164 lines
6.7 KiB
Python
164 lines
6.7 KiB
Python
|
#! /usr/bin/env python
|
||
|
# encoding: utf-8
|
||
|
|
||
|
import os,re
|
||
|
import TaskGen,Utils,Runner,Task,Build,Options,Logs
|
||
|
import cc
|
||
|
from Logs import error
|
||
|
from TaskGen import taskgen,before,after,feature
|
||
|
n1_regexp=re.compile('<refentrytitle>(.*)</refentrytitle>',re.M)
|
||
|
n2_regexp=re.compile('<manvolnum>(.*)</manvolnum>',re.M)
|
||
|
def postinstall_schemas(prog_name):
|
||
|
if Build.bld.is_install:
|
||
|
dir=Build.bld.get_install_path('${PREFIX}/etc/gconf/schemas/%s.schemas'%prog_name)
|
||
|
if not Options.options.destdir:
|
||
|
Utils.pprint('YELLOW','Installing GConf schema')
|
||
|
command='gconftool-2 --install-schema-file=%s 1> /dev/null'%dir
|
||
|
ret=Utils.exec_command(command)
|
||
|
else:
|
||
|
Utils.pprint('YELLOW','GConf schema not installed. After install, run this:')
|
||
|
Utils.pprint('YELLOW','gconftool-2 --install-schema-file=%s'%dir)
|
||
|
def postinstall_icons():
|
||
|
dir=Build.bld.get_install_path('${DATADIR}/icons/hicolor')
|
||
|
if Build.bld.is_install:
|
||
|
if not Options.options.destdir:
|
||
|
Utils.pprint('YELLOW',"Updating Gtk icon cache.")
|
||
|
command='gtk-update-icon-cache -q -f -t %s'%dir
|
||
|
ret=Utils.exec_command(command)
|
||
|
else:
|
||
|
Utils.pprint('YELLOW','Icon cache not updated. After install, run this:')
|
||
|
Utils.pprint('YELLOW','gtk-update-icon-cache -q -f -t %s'%dir)
|
||
|
def postinstall_scrollkeeper(prog_name):
|
||
|
if Build.bld.is_install:
|
||
|
if os.access('/var/log/scrollkeeper.log',os.W_OK):
|
||
|
dir1=Build.bld.get_install_path('${PREFIX}/var/scrollkeeper')
|
||
|
dir2=Build.bld.get_install_path('${DATADIR}/omf/%s'%prog_name)
|
||
|
command='scrollkeeper-update -q -p %s -o %s'%(dir1,dir2)
|
||
|
ret=Utils.exec_command(command)
|
||
|
def postinstall(prog_name='myapp',schemas=1,icons=1,scrollkeeper=1):
|
||
|
if schemas:postinstall_schemas(prog_name)
|
||
|
if icons:postinstall_icons()
|
||
|
if scrollkeeper:postinstall_scrollkeeper(prog_name)
|
||
|
class gnome_doc_taskgen(TaskGen.task_gen):
|
||
|
def __init__(self,*k,**kw):
|
||
|
TaskGen.task_gen.__init__(self,*k,**kw)
|
||
|
def init_gnome_doc(self):
|
||
|
self.default_install_path='${PREFIX}/share'
|
||
|
def apply_gnome_doc(self):
|
||
|
self.env['APPNAME']=self.doc_module
|
||
|
lst=self.to_list(self.doc_linguas)
|
||
|
bld=self.bld
|
||
|
lst.append('C')
|
||
|
for x in lst:
|
||
|
if not x=='C':
|
||
|
tsk=self.create_task('xml2po')
|
||
|
node=self.path.find_resource(x+'/'+x+'.po')
|
||
|
src=self.path.find_resource('C/%s.xml'%self.doc_module)
|
||
|
out=self.path.find_or_declare('%s/%s.xml'%(x,self.doc_module))
|
||
|
tsk.set_inputs([node,src])
|
||
|
tsk.set_outputs(out)
|
||
|
else:
|
||
|
out=self.path.find_resource('%s/%s.xml'%(x,self.doc_module))
|
||
|
tsk2=self.create_task('xsltproc2po')
|
||
|
out2=self.path.find_or_declare('%s/%s-%s.omf'%(x,self.doc_module,x))
|
||
|
tsk2.set_outputs(out2)
|
||
|
node=self.path.find_resource(self.doc_module+".omf.in")
|
||
|
tsk2.inputs=[node,out]
|
||
|
tsk2.run_after.append(tsk)
|
||
|
if bld.is_install:
|
||
|
path=self.install_path+'/gnome/help/%s/%s'%(self.doc_module,x)
|
||
|
bld.install_files(self.install_path+'/omf',out2,env=self.env)
|
||
|
for y in self.to_list(self.doc_figures):
|
||
|
try:
|
||
|
os.stat(self.path.abspath()+'/'+x+'/'+y)
|
||
|
bld.install_as(path+'/'+y,self.path.abspath()+'/'+x+'/'+y)
|
||
|
except:
|
||
|
bld.install_as(path+'/'+y,self.path.abspath()+'/C/'+y)
|
||
|
bld.install_as(path+'/%s.xml'%self.doc_module,out.abspath(self.env))
|
||
|
if x=='C':
|
||
|
xmls=self.to_list(self.doc_includes)
|
||
|
xmls.append(self.doc_entities)
|
||
|
for z in xmls:
|
||
|
out=self.path.find_resource('%s/%s'%(x,z))
|
||
|
bld.install_as(path+'/%s'%z,out.abspath(self.env))
|
||
|
class xml_to_taskgen(TaskGen.task_gen):
|
||
|
def __init__(self,*k,**kw):
|
||
|
TaskGen.task_gen.__init__(self,*k,**kw)
|
||
|
def init_xml_to(self):
|
||
|
Utils.def_attrs(self,source='xmlfile',xslt='xlsltfile',target='hey',default_install_path='${PREFIX}',task_created=None)
|
||
|
def apply_xml_to(self):
|
||
|
xmlfile=self.path.find_resource(self.source)
|
||
|
xsltfile=self.path.find_resource(self.xslt)
|
||
|
tsk=self.create_task('xmlto',[xmlfile,xsltfile],xmlfile.change_ext('html'))
|
||
|
tsk.install_path=self.install_path
|
||
|
def sgml_scan(self):
|
||
|
node=self.inputs[0]
|
||
|
env=self.env
|
||
|
variant=node.variant(env)
|
||
|
fi=open(node.abspath(env),'r')
|
||
|
content=fi.read()
|
||
|
fi.close()
|
||
|
name=n1_regexp.findall(content)[0]
|
||
|
num=n2_regexp.findall(content)[0]
|
||
|
doc_name=name+'.'+num
|
||
|
if not self.outputs:
|
||
|
self.outputs=[self.generator.path.find_or_declare(doc_name)]
|
||
|
return([],[doc_name])
|
||
|
class gnome_sgml2man_taskgen(TaskGen.task_gen):
|
||
|
def __init__(self,*k,**kw):
|
||
|
TaskGen.task_gen.__init__(self,*k,**kw)
|
||
|
def apply_gnome_sgml2man(self):
|
||
|
assert(getattr(self,'appname',None))
|
||
|
def install_result(task):
|
||
|
out=task.outputs[0]
|
||
|
name=out.name
|
||
|
ext=name[-1]
|
||
|
env=task.env
|
||
|
self.bld.install_files('${DATADIR}/man/man%s/'%ext,out,env)
|
||
|
self.bld.rescan(self.path)
|
||
|
for name in self.bld.cache_dir_contents[self.path.id]:
|
||
|
base,ext=os.path.splitext(name)
|
||
|
if ext!='.sgml':continue
|
||
|
task=self.create_task('sgml2man')
|
||
|
task.set_inputs(self.path.find_resource(name))
|
||
|
task.task_generator=self
|
||
|
if self.bld.is_install:task.install=install_result
|
||
|
task.scan()
|
||
|
cls=Task.simple_task_type('sgml2man','${SGML2MAN} -o ${TGT[0].bld_dir(env)} ${SRC} > /dev/null',color='BLUE')
|
||
|
cls.scan=sgml_scan
|
||
|
cls.quiet=1
|
||
|
Task.simple_task_type('xmlto','${XMLTO} html -m ${SRC[1].abspath(env)} ${SRC[0].abspath(env)}')
|
||
|
Task.simple_task_type('xml2po','${XML2PO} ${XML2POFLAGS} ${SRC} > ${TGT}',color='BLUE')
|
||
|
xslt_magic="""${XSLTPROC2PO} -o ${TGT[0].abspath(env)} \
|
||
|
--stringparam db2omf.basename ${APPNAME} \
|
||
|
--stringparam db2omf.format docbook \
|
||
|
--stringparam db2omf.lang ${TGT[0].abspath(env)[:-4].split('-')[-1]} \
|
||
|
--stringparam db2omf.dtd '-//OASIS//DTD DocBook XML V4.3//EN' \
|
||
|
--stringparam db2omf.omf_dir ${PREFIX}/share/omf \
|
||
|
--stringparam db2omf.help_dir ${PREFIX}/share/gnome/help \
|
||
|
--stringparam db2omf.omf_in ${SRC[0].abspath(env)} \
|
||
|
--stringparam db2omf.scrollkeeper_cl ${SCROLLKEEPER_DATADIR}/Templates/C/scrollkeeper_cl.xml \
|
||
|
${DB2OMF} ${SRC[1].abspath(env)}"""
|
||
|
Task.simple_task_type('xsltproc2po',xslt_magic,color='BLUE')
|
||
|
def detect(conf):
|
||
|
conf.check_tool('gnu_dirs glib2 dbus')
|
||
|
sgml2man=conf.find_program('docbook2man',var='SGML2MAN')
|
||
|
def getstr(varname):
|
||
|
return getattr(Options.options,varname,'')
|
||
|
conf.define('GNOMELOCALEDIR',os.path.join(conf.env['DATADIR'],'locale'))
|
||
|
xml2po=conf.find_program('xml2po',var='XML2PO')
|
||
|
xsltproc2po=conf.find_program('xsltproc',var='XSLTPROC2PO')
|
||
|
conf.env['XML2POFLAGS']='-e -p'
|
||
|
conf.env['SCROLLKEEPER_DATADIR']=Utils.cmd_output("scrollkeeper-config --pkgdatadir",silent=1).strip()
|
||
|
conf.env['DB2OMF']=Utils.cmd_output("/usr/bin/pkg-config --variable db2omf gnome-doc-utils",silent=1).strip()
|
||
|
def set_options(opt):
|
||
|
opt.add_option('--want-rpath',type='int',default=1,dest='want_rpath',help='set rpath to 1 or 0 [Default 1]')
|
||
|
|
||
|
feature('gnome_doc')(init_gnome_doc)
|
||
|
feature('gnome_doc')(apply_gnome_doc)
|
||
|
after('init_gnome_doc')(apply_gnome_doc)
|
||
|
feature('xml_to')(init_xml_to)
|
||
|
feature('xml_to')(apply_xml_to)
|
||
|
after('init_xml_to')(apply_xml_to)
|
||
|
feature('gnome_sgml2man')(apply_gnome_sgml2man)
|