Fri, 28 Jul 2017 16:05:08 +0200
Added module watcher for easier development (automatic module reload)
#!/usr/bin/env python # This file is part of the Printrun suite. # # Printrun is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Printrun is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Printrun. If not, see <http://www.gnu.org/licenses/>. import sys import os from stat import S_IRUSR, S_IWUSR, S_IRGRP, S_IROTH from distutils.core import setup from distutils.command.install import install as _install from distutils.command.install_data import install_data as _install_data try: from Cython.Build import cythonize extensions = cythonize("printrun/gcoder_line.pyx") from Cython.Distutils import build_ext except ImportError, e: print "WARNING: Failed to cythonize: %s" % e # Debug helper: uncomment these: # import traceback # traceback.print_exc() extensions = None build_ext = None from printrun.printcore import __version__ as printcore_version INSTALLED_FILES = "installed_files" class install (_install): def run(self): _install.run(self) outputs = self.get_outputs() length = 0 if self.root: length += len(self.root) if self.prefix: length += len(self.prefix) if length: for counter in xrange(len(outputs)): outputs[counter] = outputs[counter][length:] data = "\n".join(outputs) try: file = open(INSTALLED_FILES, "w") except: self.warn("Could not write installed files list %s" % INSTALLED_FILES) return file.write(data) file.close() class install_data(_install_data): def run(self): def chmod_data_file(file): try: os.chmod(file, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) except: self.warn("Could not chmod data file %s" % file) _install_data.run(self) map(chmod_data_file, self.get_outputs()) class uninstall(_install): def run(self): try: file = open(INSTALLED_FILES, "r") except: self.warn("Could not read installed files list %s" % INSTALLED_FILES) return files = file.readlines() file.close() prepend = "" if self.root: prepend += self.root if self.prefix: prepend += self.prefix if len(prepend): for counter in xrange(len(files)): files[counter] = prepend + files[counter].rstrip() for file in files: print "Uninstalling", file try: os.unlink(file) except: self.warn("Could not remove file %s" % file) ops = ("install", "build", "sdist", "uninstall", "clean", "build_ext") if len(sys.argv) < 2 or sys.argv[1] not in ops: print "Please specify operation : %s" % " | ".join(ops) raise SystemExit prefix = None if len(sys.argv) > 2: i = 0 for o in sys.argv: if o.startswith("--prefix"): if o == "--prefix": if len(sys.argv) >= i: prefix = sys.argv[i + 1] sys.argv.remove(prefix) elif o.startswith("--prefix=") and len(o[9:]): prefix = o[9:] sys.argv.remove(o) i += 1 if not prefix and "PREFIX" in os.environ: prefix = os.environ["PREFIX"] if not prefix or not len(prefix): prefix = sys.prefix if sys.argv[1] in("install", "uninstall") and len(prefix): sys.argv += ["--prefix", prefix] target_images_path = "share/pronterface/images/" data_files = [('share/pixmaps', ['pronterface.png', 'plater.png', 'pronsole.png']), ('share/applications', ['pronterface.desktop', 'pronsole.desktop', 'plater.desktop']), ('share/appdata', ['pronterface.appdata.xml', 'pronsole.appdata.xml', 'plater.appdata.xml'])] for basedir, subdirs, files in os.walk("images"): images = [] for filename in files: if filename.find(".svg") or filename.find(".png"): file_path = os.path.join(basedir, filename) images.append(file_path) data_files.append((target_images_path + basedir[len("images/"):], images)) for basedir, subdirs, files in os.walk("locale"): if not basedir.endswith("LC_MESSAGES"): continue destpath = os.path.join("share", "pronterface", basedir) files = filter(lambda x: x.endswith(".mo"), files) files = map(lambda x: os.path.join(basedir, x), files) data_files.append((destpath, files)) extra_data_dirs = ["css"] for extra_data_dir in extra_data_dirs: for basedir, subdirs, files in os.walk(extra_data_dir): files = map(lambda x: os.path.join(basedir, x), files) destpath = os.path.join("share", "pronterface", basedir) data_files.append((destpath, files)) cmdclass = {"uninstall": uninstall, "install": install, "install_data": install_data} if build_ext: cmdclass['build_ext'] = build_ext setup(name = "Printrun", version = printcore_version, description = "Host software for 3D printers", author = "Kliment Yanev", url = "http://github.com/kliment/Printrun/", license = "GPLv3", data_files = data_files, packages = ["printrun", "printrun.gl", "printrun.gl.libtatlin", "printrun.gui", "printrun.power"], scripts = ["pronsole.py", "pronterface.py", "plater.py", "printcore.py"], cmdclass = cmdclass, ext_modules = extensions, )