2010年2月21日日曜日

setup.py bdist_rpmでjsをコンパイルする (step1)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
前のエントリで、distutilsの挙動がわかったので本筋に戻る。

まず、build_js.pyを作る。
print 'build_js is here!'
まだ呼び出しが行われることを確認するだけなので、これだけにしておく。

で、setup.pyをいじる。
from distutils.dist import Distribution
def xxx(self):
        print 'Distribution:has_js'
        return self.js and len(self.js) > 0
Distribution.has_js = xxx

from distutils.command.build import build
def yyy(self):
        print 'build:has_js'
        return self.distribution.has_js() 
build.has_js = yyy
build.sub_commands.append( ('build_js', build.has_js),)

from distutils.dist import Distribution
orig = Distribution.__init__
def myinit(self, attrs):
  self.js = None
  orig(self, attrs)

Distribution.__init__ = myinit

def CompiledJS(*args, **attr):
  return ['hogehoge']

setup(
  ...
  js=CompiledJS('/var/www/static/notepad.c.js',
                ['./src/notepad.js'],
                ['/home/nori/lib/closure/'],
                '/home/nori/bin/closure/compiler.jar',
                ['ADVANCED_OPTIMIZATIONS'],
               ),
   ...
)

すると実行されて
[nori@shinano]~/Desktop/study/JavaScript/closure-proj% python setup.py build
running build
build:has_js
Distribution:has_js
running build_js
error: invalid command 'build_js'
となる。あと一息。build_js.pyがloadされるように細工する必要がある。
クラスが変更されるのでbdistからbuildが呼び出された場合でも実行される。
[nori@shinano]~/Desktop/study/JavaScript/closure-proj% python setup.py bdist
running bdist
running bdist_dumb
running build
build:has_js
Distribution:has_js
running build_js
error: invalid command 'build_js'

0 件のコメント: