199 lines
6.1 KiB
Python
Executable File
199 lines
6.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (C) 2005 - 2007, TUBITAK/UEKAE
|
|
#
|
|
# 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
|
|
from distutils.core import setup
|
|
from distutils.command.build import build
|
|
from distutils.command.install import install
|
|
|
|
sys.path.insert(0, '.')
|
|
import pisi
|
|
|
|
IN_FILES = ("pisi.xml.in",)
|
|
PROJECT = "pisi"
|
|
MIMEFILE_DIR = "usr/share/mime/packages"
|
|
|
|
|
|
class Build(build):
|
|
def run(self):
|
|
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()
|
|
|
|
def build_po(self):
|
|
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 %s" % filename)
|
|
|
|
for root,dirs,filenames in os.walk("pisi"):
|
|
for filename in filenames:
|
|
if filename.endswith(".py"):
|
|
filelist.append(os.path.join(root, filename))
|
|
|
|
filelist.extend(["pisi-cli", "pisi.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=%s \
|
|
--keyword=_ \
|
|
--keyword=N_ \
|
|
--files-from=%s \
|
|
-o po/%s.pot" % (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/%s po/%s.pot" % (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.installdoc()
|
|
self.generateConfigFile()
|
|
|
|
def installi18n(self):
|
|
for name in os.listdir('po'):
|
|
if not name.endswith('.po'):
|
|
continue
|
|
lang = name[:-3]
|
|
print("Installing '%s' translations..." % lang)
|
|
os.system("msgfmt po/%s.po -o po/%s.mo" % (lang, lang))
|
|
if not self.root:
|
|
self.root = "/"
|
|
destpath = os.path.join(self.root, "usr/share/locale/%s/LC_MESSAGES" % lang)
|
|
if not os.path.exists(destpath):
|
|
os.makedirs(destpath)
|
|
shutil.copy("po/%s.mo" % lang, os.path.join(destpath, "pisi.mo"))
|
|
|
|
def installdoc(self):
|
|
destpath = os.path.join(self.root, "usr/share/doc/pisi")
|
|
if not os.path.exists(destpath):
|
|
os.makedirs(destpath)
|
|
os.chdir('doc')
|
|
for pdf in glob.glob('*.pdf'):
|
|
print('Installing', pdf)
|
|
shutil.copy(pdf, os.path.join(destpath, pdf))
|
|
os.chdir('..')
|
|
|
|
def generateConfigFile(self):
|
|
import pisi.configfile
|
|
destpath = os.path.join(self.root, "etc/pisi/")
|
|
if not os.path.exists(destpath):
|
|
os.makedirs(destpath)
|
|
|
|
confFile = os.path.join(destpath, "pisi.conf")
|
|
if os.path.isfile(confFile): # Don't overwrite existing pisi.conf
|
|
return
|
|
|
|
pisiconf = open(confFile, "w")
|
|
|
|
klasses = inspect.getmembers(pisi.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()
|
|
pisiconf.write("[%s]\n" % 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] == None or member[1] == "":
|
|
pisiconf.write("# %s = %s\n" % (member[0], member[1]))
|
|
else:
|
|
pisiconf.write("%s = %s\n" % (member[0], member[1]))
|
|
pisiconf.write('\n')
|
|
|
|
|
|
setup(
|
|
name="pisi",
|
|
version=pisi.__version__,
|
|
description="PiSi (Packages Installed Successfully as Intended)",
|
|
long_description="PiSi is the package management system of Pardus Linux.",
|
|
license="GNU GPL2",
|
|
author="Pardus Developers",
|
|
author_email="pisi@pardus.org.tr",
|
|
url="http://www.pardus.org.tr/eng/pisi/",
|
|
package_dir={'': ''},
|
|
packages=['pisi', 'pisi.cli', 'pisi.operations', 'pisi.actionsapi', 'pisi.pxml', 'pisi.scenarioapi', 'pisi.db'],
|
|
scripts=['pisi-cli', 'scripts/lspisi', 'scripts/unpisi', 'scripts/check-newconfigs.py', 'scripts/revdep-rebuild'],
|
|
cmdclass={'build': Build, 'build_po': BuildPo, 'install': Install}
|
|
)
|
|
|
|
# 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
|
|
|
|
PISI_VERSION = pisi.__version__
|
|
|
|
|
|
def getRevision():
|
|
import os
|
|
try:
|
|
p = os.popen("svn info 2> /dev/null")
|
|
for line in p.readlines():
|
|
line = line.strip()
|
|
if line.startswith("Revision:"):
|
|
return line.split(":")[1].strip()
|
|
except:
|
|
pass
|
|
|
|
# doesn't working in a Subversion directory
|
|
return None
|
|
|
|
|
|
def getVersion():
|
|
rev = getRevision()
|
|
if rev:
|
|
return "-r".join([PISI_VERSION, rev])
|
|
else:
|
|
return PISI_VERSION
|