152 lines
5.2 KiB
Python
Executable file
152 lines
5.2 KiB
Python
Executable file
#!/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, os, glob
|
|
import subprocess
|
|
from stat import *
|
|
from distutils.core import setup
|
|
from distutils.command.install import install as _install
|
|
from distutils.command.install_data import install_data as _install_data
|
|
|
|
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 %s" % file
|
|
try:
|
|
os.unlink (file)
|
|
except:
|
|
self.warn ("Could not remove file %s" % file)
|
|
|
|
ops = ("install", "build", "sdist", "uninstall", "clean")
|
|
|
|
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 = "/usr/local"
|
|
|
|
if sys.argv[1] in ("install", "uninstall") and len (prefix):
|
|
sys.argv += ["--prefix", prefix]
|
|
|
|
target_images_path = "share/pronterface/images/"
|
|
data_files = [('share/pixmaps/', ['P-face.ico','plater.ico'])]
|
|
|
|
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))
|
|
|
|
setup (
|
|
name = "Printrun",
|
|
description = "Host software for 3D printers",
|
|
author = "Kliment Yanev",
|
|
url = "http://github.com/kliment/Printrun/",
|
|
license = "GPLv3",
|
|
data_files = data_files,
|
|
packages = ["printrun", "printrun.svg"],
|
|
scripts = ["pronsole.py", "pronterface.py", "plater.py", "printcore.py"],
|
|
cmdclass = {"uninstall" : uninstall,
|
|
"install" : install,
|
|
"install_data" : install_data}
|
|
)
|