From: Kenneth J. P. <pro...@us...> - 2005-09-02 22:42:05
|
Update of /cvsroot/pychecker/pychecker In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13408 Modified Files: setup.py Log Message: Fix setup.py behavior when invoking just build rule (bug #1279223) Index: setup.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/setup.py,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** setup.py 2 Sep 2005 02:32:10 -0000 1.54 --- setup.py 2 Sep 2005 22:41:56 -0000 1.55 *************** *** 22,27 **** customize (override) some of the distutils action classes. This way, we get access to the distutils configuration and can "do the right thing" when options ! are specified. It turns out that I needed to customize the build_scripts and ! install_data sections. There are more notes below by each customized action. @author: Kenneth J. Pronovici <pro...@ie...>, after Nicolas Chauvat. --- 22,28 ---- customize (override) some of the distutils action classes. This way, we get access to the distutils configuration and can "do the right thing" when options ! are specified. It turns out that I needed to customize the build_scripts, ! install_scripts and install_data sections. There are more notes below by each ! customized action. @author: Kenneth J. Pronovici <pro...@ie...>, after Nicolas Chauvat. *************** *** 37,40 **** --- 38,42 ---- from distutils.util import execute from distutils.command.install_data import install_data + from distutils.command.install_scripts import install_scripts from distutils.command.build_scripts import build_scripts *************** *** 66,69 **** --- 68,92 ---- install_data.finalize_options(self) # invoke "standard" action + class my_install_scripts(install_scripts): + """ + Customized install_scripts distutils action. + + This customized action fills in the pychecker script (either Windows or + shell style, depending on platform) using the proper path to the checker.py + file and Python interpreter. This all is done through the execute() method, + so that the action obeys the --dry-run flag, etc. + + The pychecker script must be built here, in the install action, because the + proper path to checker.py cannot be known before this point. + """ + def run(self): + install_lib = self.distribution.get_command_obj("install").install_lib + scripts = self.distribution.get_command_obj("build_scripts").scripts + script_path = get_script_path(self.build_dir) + if scripts is not None and script_path in scripts: + package_path = os.path.join(install_lib, "pychecker") + self.execute(func=create_script, args=[script_path, package_path], msg="filling in script %s" % script_path) + install_scripts.run(self) # invoke "standard" action + class my_build_scripts(build_scripts): """ *************** *** 73,80 **** in the list, replaces that entry with the real name of the script to be created within the build directory (including the .bat extension if needed). ! Then, it builds the script (either Windows or shell style, depending on ! platform) using the proper path to the checker.py file and Python ! interpreter. This is done through the execute() method, so that the action ! obeys the --dry-run flag, etc. This action completely ignores any scripts other than "pychecker" which are --- 96,107 ---- in the list, replaces that entry with the real name of the script to be created within the build directory (including the .bat extension if needed). ! Then, it creates an empty script file at that path to make distutils happy. ! This is all done through the execute() method, so that the action obeys the ! --dry-run flag, etc. ! ! It might be surprising that we don't fill in the pychecker script here. ! This is because in order to fill in the script, we need to know the ! installed location of checker.py. This information isn't available until ! the install action is executed. This action completely ignores any scripts other than "pychecker" which are *************** *** 82,102 **** is listed in the first place. This way, new scripts with constant contents (if any) can be added to the setup configuration without writing any new ! code. """ def run(self): if self.scripts is not None and "pychecker" in self.scripts: ! if sys.platform == "win32": ! script_path = os.path.join(self.build_dir, "pychecker.bat") ! else: ! script_path = os.path.join(self.build_dir, "pychecker") self.scripts.remove("pychecker") self.scripts.append(script_path) self.mkpath(self.build_dir) ! install_lib = self.distribution.get_command_obj("install").install_lib ! package_path = os.path.join(install_lib, "pychecker") ! self.execute(func=create_pychecker, args=[script_path, package_path], msg="Building %s" % script_path) build_scripts.run(self) # invoke "standard" action ! def create_pychecker(script_path, package_path): """ Creates the pychecker script at the indicated path. --- 109,135 ---- is listed in the first place. This way, new scripts with constant contents (if any) can be added to the setup configuration without writing any new ! code. It also helps OS package maintainers (like for the Debian package) ! because they can still avoid installing scripts just by commenting out the ! scripts line in configuration, just like usual. """ def run(self): if self.scripts is not None and "pychecker" in self.scripts: ! script_path = get_script_path(self.build_dir) self.scripts.remove("pychecker") self.scripts.append(script_path) self.mkpath(self.build_dir) ! self.execute(func=open, args=[script_path, "w"], msg="creating empty script %s" % script_path) build_scripts.run(self) # invoke "standard" action ! def get_script_path(build_dir): ! """ ! Returns the platform-specific path to the pychecker script within the build dir. ! """ ! if sys.platform == "win32": ! return os.path.join(build_dir, "pychecker.bat") ! else: ! return os.path.join(build_dir, "pychecker") ! ! def create_script(script_path, package_path): """ Creates the pychecker script at the indicated path. *************** *** 131,134 **** --- 164,168 ---- CUSTOMIZED_ACTIONS = { 'build_scripts' : my_build_scripts, + 'install_scripts': my_install_scripts, 'install_data' : my_install_data, } |