如何使用waf递归安装目录

时间:2012-04-07 12:33:15

标签: install waf

我目前使用以下valadoc构建任务为我的vala应用程序生成api文档:

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

2 个答案:

答案 0 :(得分:3)

我对生成的文件有类似的问题,必须更新相应Node对象的签名。尝试创建任务:

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")

答案 1 :(得分:0)

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

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

这将获取glob中的文件列表,删除前缀,并将其放入目标。