Обработка измененных файлов в WAF-скрипте

Можно ли написать WAF-функцию в файле wscript, которая будет вызываться при построении каждого измененного файла?

Я хочу иметь возможность сделать следующее:

  1. Обработайте все входные файлы .hpp пользовательской функцией Python и выведите их в папку сборки. Если такой файл был изменен, я хочу обработать его и обновить его определение в выходной папке.
  2. Обработайте все входные .hpp файлы внешним скриптом и выведите результаты в папку сборки.

ОБНОВЛЕНИЕ:

Чтобы объяснить: я хочу, чтобы для каждого измененного файла запускалась функция fun1(file), которая будет читать файл, изменять его и возвращать измененную версию, которая должна быть выведена в каталог назначения.


person Wojciech Danilo    schedule 10.02.2013    source источник


Ответы (1)


Обработка только модифицированных файлов — одна из основных возможностей WAF ^^

Чтобы выполнить вашу функцию Python, вы можете сделать что-то вроде этого:

top = '.'
out = 'build'


def configure(conf):
    pass

def build(bld):

    def fun1(input_file):

        # whatever

        return output_file_content_as_string

    def process(task):

        for src_node in task.inputs:

            src = src_node.abspath()
            tgt = src_node.get_bld()

            out = fun1(src)

            tgt.write(out)

        return 0 # everything ok

    bld(
        rule   = process,
        source = ['myfile.hpp', 'myfile2.hpp', ],
    )

Это вызовет fun1 для myfile.hpp и т. д. и выведет в каталоге сборки только измененные файлы.

По умолчанию waf управляет сигнатурой для каждого источника, чтобы обнаруживать любые изменения и обрабатывать их, только если сигнатура изменяется...

person neuro    schedule 18.03.2013
comment
Спасибо, но я хочу обработать файл перед копированием — скажем, запустить для него функцию Python — возможно ли это? - person Wojciech Danilo; 19.03.2013
comment
Да. На самом деле функция subst делает именно это, если вы не используете параметр is_copy=True. Он может заменить что-то в источнике, чтобы получить цель. Что именно вы хотите сделать с вашим файлом? Кстати, обновите свой вопрос, чтобы сделать его более ясным/подробным, это ТАК. - person neuro; 19.03.2013
comment
Я хочу обработать его с помощью моей пользовательской функции Python (посмотрите на обновление в вопросе). Функция могла прочитать файл, разобрать его, изменить и вывести измененную версию — я хочу сделать это ДЛЯ КАЖДОГО измененного файла. - person Wojciech Danilo; 19.03.2013
comment
до сих пор нет ответа, как запустить мою функцию python для каждого измененного файла :( - person Wojciech Danilo; 01.04.2013
comment
Думаю, то, что я предлагаю, подойдет. - person neuro; 03.04.2013