76935ada7709a72914e38adc42b2dd76c83440ab
[nqaap] / support / builddeb.py
1 #!/usr/bin/env python\r
2 \r
3 import os\r
4 import sys\r
5 \r
6 try:\r
7         import py2deb\r
8 except ImportError:\r
9         import fake_py2deb as py2deb\r
10 \r
11 import constants\r
12 \r
13 \r
14 __app_name__ = constants.__app_name__\r
15 __description__ = """Very simple Audiobook player.\r
16 Supports playing, pausing, seeking (sort of) and saving state when changing book/closing.\r
17 Plays books arranged as dirs under myDocs/Audiobooks\r
18 .\r
19 Homepage: http://wiki.maemo.org/Nqaap"""\r
20 __author__ = "Soeren 'Pengman' Pedersen"\r
21 __email__ = "pengmeister@gmail.com"\r
22 __version__ = constants.__version__\r
23 __build__ = constants.__build__\r
24 __changelog__ = """\r
25 * Cleaning up some of the code\r
26 * Making loading old settings more resiliant\r
27 """.strip()\r
28 \r
29 \r
30 __postinstall__ = """#!/bin/sh -e\r
31 \r
32 gtk-update-icon-cache -f /usr/share/icons/hicolor\r
33 rm -f ~/.%(name)s/%(name)s.log\r
34 """ % {"name": constants.__app_name__}\r
35 \r
36 \r
37 def find_files(prefix, path):\r
38         for root, dirs, files in os.walk(path):\r
39                 for file in files:\r
40                         if file.startswith(prefix+"-"):\r
41                                 fileParts = file.split("-")\r
42                                 unused, relPathParts, newName = fileParts[0], fileParts[1:-1], fileParts[-1]\r
43                                 assert unused == prefix\r
44                                 relPath = os.sep.join(relPathParts)\r
45                                 yield relPath, file, newName\r
46 \r
47 \r
48 def unflatten_files(files):\r
49         d = {}\r
50         for relPath, oldName, newName in files:\r
51                 if relPath not in d:\r
52                         d[relPath] = []\r
53                 d[relPath].append((oldName, newName))\r
54         return d\r
55 \r
56 \r
57 def build_package(distribution):\r
58         try:\r
59                 os.chdir(os.path.dirname(sys.argv[0]))\r
60         except:\r
61                 pass\r
62 \r
63         py2deb.Py2deb.SECTIONS = py2deb.SECTIONS_BY_POLICY[distribution]\r
64         p = py2deb.Py2deb(__app_name__)\r
65         p.prettyName = constants.__pretty_app_name__\r
66         p.description = __description__\r
67         p.bugTracker="https://bugs.maemo.org/enter_bug.cgi?product=nQa%%20Audiobook%%20Player"\r
68         p.author = __author__\r
69         p.mail = __email__\r
70         p.license = "lgpl"\r
71         p.depends = ", ".join([\r
72                 "python2.6 | python2.5",\r
73                 "python-gtk2 | python2.5-gtk2",\r
74                 "python-dbus | python2.5-dbus",\r
75                 "python-telepathy | python2.5-telepathy",\r
76                 "python-gobject | python2.5-gobject",\r
77                 "python-simplejson",\r
78         ])\r
79         maemoSpecificDepends = ", python-osso | python2.5-osso, python-hildon | python2.5-hildon"\r
80         p.depends += {\r
81                 "debian": ", python-gst0.10",\r
82                 "diablo": maemoSpecificDepends,\r
83                 "fremantle": maemoSpecificDepends + ", python-gst0.10",\r
84         }[distribution]\r
85         p.section = {\r
86                 "debian": "sound",\r
87                 "diablo": "user/multimedia",\r
88                 "fremantle": "user/multimedia",\r
89         }[distribution]\r
90         p.arch="all"\r
91         p.urgency="low"\r
92         p.distribution=distribution\r
93         p.repository="extras"\r
94         p.changelog = __changelog__\r
95         p.postinstall = __postinstall__\r
96         p.icon = {\r
97                 "debian": "26x26-%s.png" % constants.__app_name__,\r
98                 "diablo": "26x26-%s.png" % constants.__app_name__,\r
99                 "fremantle": "48x48-%s.png" % constants.__app_name__,\r
100         }[distribution]\r
101         p["/opt/%s/bin" % constants.__app_name__] = [ "%s.py" % constants.__app_name__ ]\r
102         for relPath, files in unflatten_files(find_files("src", ".")).iteritems():\r
103                 fullPath = "/opt/%s/lib" % constants.__app_name__\r
104                 if relPath:\r
105                         fullPath += os.sep+relPath\r
106                 p[fullPath] = list(\r
107                         "|".join((oldName, newName))\r
108                         for (oldName, newName) in files\r
109                 )\r
110         p["/usr/share/applications/hildon"] = ["%s.desktop" % constants.__app_name__]\r
111         p["/usr/share/icons/hicolor/26x26/hildon"] = ["26x26-%s.png" % constants.__app_name__]\r
112         p["/usr/share/icons/hicolor/48x48/hildon"] = ["48x48-%s.png" % constants.__app_name__]\r
113         p["/usr/share/icons/hicolor/64x64/hildon"] = ["64x64-%s.png" % constants.__app_name__]\r
114         p["/usr/share/icons/hicolor/scalable/hildon"] = ["scale-%s.png" % constants.__app_name__]\r
115 \r
116         print p\r
117         if distribution == "debian":\r
118                 print p.generate(\r
119                         version="%s-%s" % (__version__, __build__),\r
120                         changelog=__changelog__,\r
121                         build=True,\r
122                         tar=False,\r
123                         changes=False,\r
124                         dsc=False,\r
125                 )\r
126         else:\r
127                 print p.generate(\r
128                         version="%s-%s" % (__version__, __build__),\r
129                         changelog=__changelog__,\r
130                         build=False,\r
131                         tar=True,\r
132                         changes=True,\r
133                         dsc=True,\r
134                 )\r
135         print "Building for %s finished" % distribution\r
136 \r
137 \r
138 if __name__ == "__main__":\r
139         if len(sys.argv) == 1:\r
140                 distribution = "fremantle"\r
141         else:\r
142                 distribution = sys.argv[1]\r
143         build_package(distribution)\r