#!/usr/bin/env python
import platform
import distutils
import fnmatch
import glob
import os
import re
from subprocess import call
import sys
from distutils.core import setup
from DistUtilsExtra.command import (build_extra, build_i18n, build_help,
build_icons)
class PocketLint(distutils.cmd.Command):
""" command class that runs pocketlint """
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def binary_in_path(self, binary):
return any([os.path.exists(os.path.join(p, binary))
for p in os.environ["PATH"].split(":")])
def run(self):
if not self.binary_in_path("pocketlint"):
sys.stderr.write("No pocketlint found in path\n"
"Use python-pocket-lint in natty or from "
"ppa:sinzui\n")
return
py_files = []
for root, dirs, files in os.walk("."):
pyl = fnmatch.filter(files, "*.py")
py_files.extend([os.path.join(root, f) for f in pyl
if os.path.exists(os.path.join(root, f))])
call(["pocketlint"] + py_files)
def merge_authors_into_about_dialog():
fname = "./data/ui/gtk3/SoftwareCenter.ui"
authors = open("AUTHORS").read()
gtkbuilder = open(fname).read()
gtkbuilder = re.sub(r'.*?',
r'%s' % authors,
gtkbuilder, flags=re.DOTALL)
open(fname, "w").write(gtkbuilder)
def merge_extras_ubuntu_com_channel_file():
# update ubuntu-extras.list.in (this will not be part of debian as
# its killed of in debian/rules on a non-ubuntu build)
DISTROSERIES = platform.dist()[2]
channelfile = "data/channels/Ubuntu/ubuntu-extras.list"
s = open(channelfile + ".in").read()
open(channelfile, "w").write(s.replace("#DISTROSERIES#", DISTROSERIES))
# update version.py
line = open("debian/changelog").readline()
m = re.match("^[\w-]+ \(([\w\.~]+)\) ([\w-]+);", line)
VERSION = m.group(1)
CODENAME = m.group(2)
DISTRO = platform.dist()[0]
RELEASE = platform.dist()[1]
open("softwarecenter/version.py", "w").write("""
VERSION='%s'
CODENAME='%s'
DISTRO='%s'
RELEASE='%s'
""" % (VERSION, CODENAME, DISTRO, RELEASE))
# update po4a
if sys.argv[1] == "build":
merge_authors_into_about_dialog()
merge_extras_ubuntu_com_channel_file()
call(["po4a", "po/help/po4a.conf"])
# real setup
setup(name="software-center", version=VERSION,
scripts=["software-center",
# gtk3
"utils/submit_review_gtk3.py",
"utils/report_review_gtk3.py",
"utils/submit_usefulness_gtk3.py",
"utils/delete_review_gtk3.py",
"utils/modify_review_gtk3.py",
# db helpers
"utils/update-software-center",
"utils/update-software-center-channels",
"utils/update-software-center-agent",
# generic helpers
"utils/expunge-cache.py",
] + glob.glob("utils/piston-helpers/*.py"),
packages=['softwarecenter',
'softwarecenter.backend',
'softwarecenter.backend.installbackend_impl',
'softwarecenter.backend.channel_impl',
'softwarecenter.backend.oneconfhandler',
'softwarecenter.backend.piston',
'softwarecenter.backend.reviews',
'softwarecenter.db',
'softwarecenter.db.pkginfo_impl',
'softwarecenter.db.history_impl',
'softwarecenter.distro',
'softwarecenter.ui',
'softwarecenter.ui.gtk3',
'softwarecenter.ui.gtk3.dialogs',
'softwarecenter.ui.gtk3.models',
'softwarecenter.ui.gtk3.panes',
'softwarecenter.ui.gtk3.session',
'softwarecenter.ui.gtk3.views',
'softwarecenter.ui.gtk3.widgets',
'softwarecenter.ui.qml',
],
data_files=[
# gtk3
('share/software-center/ui/gtk3/',
glob.glob("data/ui/gtk3/*.ui")),
('share/software-center/ui/gtk3/css/',
glob.glob("data/ui/gtk3/css/*.css")),
('share/software-center/ui/gtk3/art/',
glob.glob("data/ui/gtk3/art/*.png")),
('share/software-center/ui/gtk3/art/icons',
glob.glob("data/ui/gtk3/art/icons/*.png")),
('share/software-center/default_banner',
glob.glob("data/default_banner/*")),
# dbus
('../etc/dbus-1/system.d/',
["data/com.ubuntu.SoftwareCenter.conf"]),
# images
('share/software-center/images/',
glob.glob("data/images/*.png") +
glob.glob("data/images/*.gif")),
('share/software-center/icons/',
glob.glob("data/emblems/*.png")),
# xapian
('share/apt-xapian-index/plugins',
glob.glob("apt-xapian-index-plugin/*.py")),
# apport
('share/apport/package-hooks/',
['debian/source_software-center.py']),
# extra software channels (can be distro specific)
('/usr/share/app-install/channels/',
glob.glob("data/channels/%s/*" % DISTRO)),
],
cmdclass={"build": build_extra.build_extra,
"build_i18n": build_i18n.build_i18n,
"build_help": build_help.build_help,
"build_icons": build_icons.build_icons,
"lint": PocketLint,
},
)