#!/usr/bin/env python from __future__ import print_function import os import re import sys import glob from os.path import join as pathjoin HERE = os.path.dirname(os.path.abspath(__file__)) AUTOGEN_WARNING = ('# ******** AUTOGENERATED by {0} ' + ('*' * 20)).format(os.path.basename(sys.argv[0])) PATTERN_RULE_MXMLC = \ '$(MXMLC) {firstdep} -warnings -l+={parent_dir} -output {target}' def main(sysargs=sys.argv[:]): targets_mk = pathjoin(HERE, 'targets.mk') os.chmod(targets_mk, 0600) targetmaker = TargetMaker(outstream=open(targets_mk, 'wb')) targetmaker.make() os.chmod(targets_mk, 0444) return 0 class TargetMaker(object): _to_glob = ( pathjoin(HERE, '[0-9]*-*', '*.mxml'), pathjoin(HERE, 'custom-*', '*.mxml'), ) _sibling_fileexts = ('.as', '.css') def __init__(self, outstream=sys.stdout): self.outstream = outstream self.targets = {} def make(self): for pattern in self._to_glob: for mxml in glob.glob(pattern): self._add_target_from_mxml(mxml) self._write_out_targets() def _add_target_from_mxml(self, mxml): rel_mxml = os.path.relpath(mxml, HERE) as_swf = re.sub('(.*)\.mxml$', '\\1.swf', rel_mxml) self.targets[as_swf] = set([rel_mxml]) self._add_deps_from_sibling_file_extensions(as_swf, rel_mxml) def _add_deps_from_sibling_file_extensions(self, as_swf, rel_mxml): for fileext in self._sibling_fileexts: sibling_glob = re.sub('(.*)/(.*)\.mxml$', '\\1/*' + fileext, rel_mxml) for sibling in glob.glob(sibling_glob): rel_sibling = os.path.relpath(sibling, HERE) self.targets[as_swf].add(rel_sibling) def _write_out_targets(self): print(AUTOGEN_WARNING, file=self.outstream) for target in sorted(self.targets.iterkeys()): deps = list(reversed(sorted(list(self.targets[target]), key=lambda d: os.path.splitext(d)[-1]))) print('{target}: {deps}'.format(target=target, deps=' '.join(deps)), file=self.outstream) print('\t' + PATTERN_RULE_MXMLC.format(firstdep=deps[0], parent_dir=os.path.dirname(deps[0]), target=target) + '\n\n', file=self.outstream) if __name__ == '__main__': sys.exit(main()) # vim:filetype=python