printrun-src/setup.py

changeset 15
0bbb006204fc
child 45
c82943fb205f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printrun-src/setup.py	Fri Jun 03 09:16:07 2016 +0200
@@ -0,0 +1,172 @@
+#!/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,
+      )

mercurial