On Thu, Sep 17, 2009 at 21:05 +0200, Wolodja Wentland wrote: > On Thu, Sep 17, 2009 at 18:51 +0200, Tarek Ziadé wrote: > > you might be able to alter it on-the-fly by overriding the build_py command > > instead of the install command > > That worked perfectly! Thanks again for the help and pointers you gave > me. I really appreciate that. > > The solution i came up with is: > > --- snip --- > class build_py(_build_py): > """build_py command > > This specific build_py command will modify module 'foo.build_config' so > that it > contains information on installation prefixes afterwards. > """ > def build_module (self, module, module_file, package): > if type(package) is StringType: > _package = string.split(package, '.') > elif type(package) not in (ListType, TupleType): > raise TypeError, \ > "'package' must be a string (dot-separated), list, or tuple" > > if ( module == 'build_info' and len(_package) == 1 and > package[0] == 'foo'): > iobj = self.distribution.command_obj['install'] > > with open(module_file, 'w') as module_fp: > module_fp.write('# -*- coding: UTF-8 -*-\n\n') > module_fp.write("DATA_DIR = '%s'\n"%( > os.path.join(iobj.install_data, 'share'))) > module_fp.write("LIB_DIR = '%s'\n"%(iobj.install_lib)) > module_fp.write("SCRIPT_DIR = '%s'\n"%(iobj.install_scripts)) > > _build_py.build_module(self, module, module_file, package) > --- snip --- > > I might change the 'detect my module' logic a little because i rely on > python short circuit evaluation a bit too much. > > I have some final questions: > > 1. Is the distutils API i am using here likely to change? > > 2. Is there a better way to access install_{lib,scripts,data} than going > through the install command object available from distribution? > > 3. Could you include something like this in distutils? My idea on how to > handle this would be to define an additional argument 'foo_bar' for > core.setup() which will take a user defined dotted module name in > which information like this will be saved. > > So if a user defines: > > core.setup( ... > foo_bar : 'foo.build_info', > ... > ) > > A file lib_prefix/foo/build_info.py will be injected into the > library or an already one would be altered according to user defined > string templates. > > Something like this would end module.__file__ hacks once and for all > and is IMHO a much cleaner way to advertise this information to > libraries/application than trying to take care of this externally.
Bump. Is this approach a feasible one, or am I better served by using the Distribute API, which I am not familiar at this point? What about the distutils internal I am using here? TIA Wolodja
signature.asc
Description: Digital signature
_______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org http://mail.python.org/mailman/listinfo/distutils-sig