Permalink
4a6b968 Jul 8, 2017
@iXce @hroncok @temoto @nexus511
executable file 173 lines (152 sloc) 5.82 KB
#!/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", "printrun.plugins"],
scripts = ["pronsole.py", "pronterface.py", "plater.py", "printcore.py"],
cmdclass = cmdclass,
ext_modules = extensions,
)