2012-04-07 88 views
3

我目前使用以下valadoc建设任务生成API文档我VALA应用:如何递归安装目录与WAF

doc = bld.new_task_gen (
    features = 'valadoc', 
    output_dir = '../doc/html', 
    package_name = bld.env['PACKAGE_NAME'], 
    package_version = bld.env['VERSION'], 
    packages = 'gtk+-3.0 gee-1.0 libxml-2.0 x11 gdk-x11-3.0 libpeas-gtk-1.0 libpeas-1.0 config xtst gdk-3.0', 
    vapi_dirs = '../vapi', 
    force = True) 

path = bld.path.find_dir ('../src') 
doc.files = path.ant_glob (incl='**/*.vala') 

此任务会在输出目录的目录HTML包括几个子目录与HTML和图片文件。

我所知道的试图将这些文件安装到/ usr/share/doc/projectname/html /。要做到这一点,我添加以下到wscript_build文件(我发现here文档以下):

output_dir = doc.bld.path.find_or_declare('../doc/html') 
doc.outputs = output_dir.ant_glob (incl='**/*') 
doc.bld.install_files('${PREFIX}/share/doc/projectname/html', doc.outputs) 

然而,这会导致一个错误“失踪节点签名”。有谁知道如何解决这个错误?还是有一种简单的方法来递归地用waf安装一个目录?

你可以找到一个完整的样本here

+0

通用信息---上述问题与试图通过ctx.install_files将库文件安装到目录时会出现的问题相同 – drahnr 2012-12-01 23:51:24

回答

3

我有一个类似的问题与生成的文件,并不得不更新相应的节点对象的签名。尝试创建一个任务:

def signature_task(task): 
    for x in task.generator.bld.path.find_dir('../doc/html').ant_glob('**/*', remove=False): 
     x.sig = Utils.h_file(x.abspath()) 

向你建立规则上,试着加入:

#Support running task groups serially 
bld.post_mode = Build.POST_LAZY 
在你构建结束

然后,添加:

#Previous tasks belong to a group 
bld.add_group() 
#This task runs last 
bld(rule=signature_task, always=True, name="signature_task") 
+0

谢谢。这帮了很多。但是需要进行更多的调整。请参阅http://bazaar.launchpad.net/~diodon-team/diodon/trunk/view/head:/doc/wscript_build – 2012-04-21 19:36:09

0

有一个使用relative_trick更简单的方法。

bld.install_files(destination, 
        bld.path.ant_glob('../doc/html/**'), 
        cwd=bld.path.find_dir('../doc/html'), 
        relative_trick=True) 

这将从glob中获取文件列表,将前缀截断并将其放入目标中。