пятница, 3 июня 2011 г.

Scons tools

Уже давно использую SCons для build-скриптов. Однако недавно, просматривая зачем-то его руководство, обратил внимание на такую удобную штуку как создание собственных тулзов.

SCons скрипты часто используют какие-то общие части. Раньше я такие части выносил в отдельные питоновские модули и подключал их через import в билд-скрипт. Однако так как эти модули лежали не рядом со скриптом, и не в PYTHONPATH, возникал ужас вида

 
1 import os
2 import sys
3 from os import path
4
5 sys.path.append(path.normpath(path.join(os.getcwd(), "..", "common", "build")))
6
7 from myModule import SomeFunc

Так вот, тулз – это просто модуль питона, который содержит две функции – generate(env, **kw) и exists(env, **kw).


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


Теперь все становится очень просто:



1 e = Environment(tools=('MyTool', ), toolpath=('../common/build',))
2 e.SomeFunc(...)


Ну и сам тулз выглядит вот так:



1 def generate(env):
2 env.AddMethod(SomeFunc)
3
4 def exists(env):
5 return 1
6
7 def SomeFunc(env):
8 pass


Полезно читать доку Улыбка

Комментариев нет:

Отправить комментарий