123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- # Main fork Pisi: Copyright (C) 2005 - 2011, Tubitak/UEKAE
- #
- # Copyright (C) 2016 - 2017, Suleyman POYRAZ (Zaryob)
- #
- # This program 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 2 of the License, or (at your option)
- # any later version.
- #
- # Please read the COPYING file.
- #
- import os
- import shutil
- import glob
- import sys
- import inspect
- import tempfile
- import subprocess
- from distutils.core import setup
- from distutils.cmd import Command
- from distutils.command.build import build
- from distutils.command.install import install
- from distutils.sysconfig import get_python_lib
- sys.path.insert(0, '.')
- import inary
- IN_FILES = ("inary.xml.in",)
- PROJECT = "inary"
- CONFIG_DIR = "/etc/inary"
- MIMEFILE_DIR = "/usr/share/mime/packages"
- TMPFILES_DIR = "/usr/lib/tmpfiles.d"
- class Build(build):
- def run(self):
- # Preparing configure file
- shutil.copy("config/inary.conf-{}".format(os.uname().machine), "config/inary.conf")
- build.run(self)
- self.mkpath(self.build_base)
- for in_file in IN_FILES:
- name, ext = os.path.splitext(in_file)
- self.spawn(["intltool-merge", "-x", "po", in_file, os.path.join(self.build_base, name)])
- class BuildPo(build):
- def run(self):
- build.run(self)
- self.build_po()
- @staticmethod
- def build_po():
- import optparse
- files = tempfile.mkstemp()[1]
- filelist = []
- # Include optparse module path to translate
- optparse_path = os.path.abspath(optparse.__file__).rstrip("co")
- # Collect headers for mimetype files
- for filename in IN_FILES:
- os.system("intltool-extract --type=gettext/xml {}".format(filename))
- for root, dirs, filenames in os.walk("inary"):
- for filename in filenames:
- if filename.endswith(".py"):
- filelist.append(os.path.join(root, filename))
- filelist.extend(["inary-cli", "inary.xml.in.h", optparse_path])
- filelist.sort()
- with open(files, "w") as _files:
- _files.write("\n".join(filelist))
- # Generate POT file
- os.system("xgettext -L Python \
- --default-domain={0} \
- --keyword=_ \
- --keyword=N_ \
- --files-from={1} \
- -o po/{2}.pot".format(PROJECT, files, PROJECT))
- # Update PO files
- for item in glob.glob1("po", "*.po"):
- print("Updating .. ", item)
- os.system("msgmerge --update --no-wrap --sort-by-file po/{0} po/{1}.pot".format(item, PROJECT))
- # Cleanup
- os.unlink(files)
- for f in filelist:
- if not f.endswith(".h"):
- continue
- try:
- os.unlink(f)
- except OSError:
- pass
- class Install(install):
- def run(self):
- install.run(self)
- self.installi18n()
- self.generateConfigFile()
- def finalize_options(self):
- # NOTE: for Sulin distribution
- if os.path.exists("/etc/sulin-release"):
- self.install_platlib = '$base/lib/sulin'
- self.install_purelib = '$base/lib/sulin'
- install.finalize_options(self)
- def installi18n(self):
- for name in os.listdir('po'):
- if not name.endswith('.po'):
- continue
- lang = name[:-3]
- print("Installing '{}' translations...".format(lang))
- os.system("msgfmt po/{0}.po -o po/{0}.mo".format(lang))
- if not self.root:
- self.root = "/"
- destpath = os.path.join(self.root, "usr/share/locale/{}/LC_MESSAGES".format(lang))
- if not os.path.exists(destpath):
- os.makedirs(destpath)
- shutil.copy("po/{}.mo".format(lang), os.path.join(destpath, "inary.mo"))
- def generateConfigFile(self):
- import inary.configfile
- destpath = os.path.join(self.root, CONFIG_DIR)
- if not os.path.exists(destpath):
- os.makedirs(destpath)
- confFile = os.path.join(destpath, "inary.conf")
- if os.path.isfile(confFile): # Don't overwrite existing inary.conf
- return
- inaryconf = open(confFile, "w")
- klasses = inspect.getmembers(inary.configfile, inspect.isclass)
- defaults = [klass for klass in klasses if klass[0].endswith('Defaults')]
- for d in defaults:
- section_name = d[0][:-len('Defaults')].lower()
- inaryconf.write("[{}]\n".format(section_name))
- section_members = [m for m in inspect.getmembers(d[1]) \
- if not m[0].startswith('__') \
- and not m[0].endswith('__')]
- for member in section_members:
- if member[1] is None or member[1] == "":
- inaryconf.write("# {0[0]} = {0[1]}\n".format(member))
- else:
- inaryconf.write("{0[0]} = {0[1]}\n".format(member))
- inaryconf.write('\n')
- class Test(Command):
- user_options = []
- def initialize_options(self):
- pass
- def finalize_options(self):
- pass
- def run(self):
- self.run_command('build')
- os.chdir('tests')
- subprocess.check_call([
- sys.executable, '-bWd',
- os.path.join('runTests.py')
- ])
- setup(name="inary",
- version=inary.__version__,
- description="Inary (Special Package Manager)",
- long_description="Inary is the package management system of Sulin Linux.",
- license="GNU GPLv3",
- author="Zaryob",
- author_email="zaryob.dev@gmail.com",
- url="https://github.com/Zaryob/inary",
- # package_dir = {'': ''},
- packages=['inary',
- 'inary.actionsapi',
- 'inary.analyzer',
- 'inary.cli',
- 'inary.data',
- 'inary.db',
- 'inary.libraries',
- 'inary.operations',
- 'inary.sxml'],
- cmdclass={'build': Build,
- 'build_po': BuildPo,
- 'install': Install,
- 'test': Test},
- data_files=[(CONFIG_DIR, ["config/inary.conf", "config/mirrors.conf", "config/sandbox.conf"]),
- (MIMEFILE_DIR, ["build/inary.xml"])],
- scripts=['inary-cli',
- 'scripts/pspec2po',
- 'scripts/revdep-rebuild',
- 'scripts/sulinstrapt',
- 'scripts/update-inary-cache',
- 'scripts/version-bump'],
- classifiers=[
- 'Development Status :: 5 - Production/Stable',
- 'Environment :: Console',
- 'Environment :: Plugins',
- 'Framework :: Sphinx',
- 'Intended Audience :: End Users/Desktop',
- 'Intended Audience :: Developers',
- 'Intended Audience :: System Administrators',
- 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
- 'License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)',
- 'Natural Language :: English',
- 'Natural Language :: Dutch',
- 'Natural Language :: French',
- 'Natural Language :: German',
- 'Natural Language :: Hungarian',
- 'Natural Language :: Italian',
- 'Natural Language :: Portuguese (Brazilian)',
- 'Natural Language :: Russian',
- 'Natural Language :: Slovak',
- 'Natural Language :: Turkish',
- 'Natural Language :: Ukrainian',
- 'Operating System :: MacOS :: MacOS X',
- 'Operating System :: POSIX',
- 'Operating System :: POSIX :: BSD',
- 'Programming Language :: Python :: 3 :: Only',
- 'Topic :: Desktop Environment',
- 'Topic :: System',
- 'Topic :: System :: Installation/Setup',
- 'Topic :: Software Development :: Bug Tracking',
- ],
- )
- # the below stuff is really nice but we already have a version
- # we can use this stuff for svn snapshots in a separate
- # script, or with a parameter I don't know -- exa
- INARY_VERSION = inary.__version__
|