Additional work to match things to my build structure
[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 """.strip()\r
26 \r
27 \r
28 __postinstall__ = """#!/bin/sh -e\r
29 \r
30 gtk-update-icon-cache -f /usr/share/icons/hicolor\r
31 rm -f ~/.%(name)s/%(name)s.log\r
32 """ % {"name": constants.__app_name__}\r
33 \r
34 \r
35 def find_files(prefix, path):\r
36         for root, dirs, files in os.walk(path):\r
37                 for file in files:\r
38                         if file.startswith(prefix+"-"):\r
39                                 fileParts = file.split("-")\r
40                                 unused, relPathParts, newName = fileParts[0], fileParts[1:-1], fileParts[-1]\r
41                                 assert unused == prefix\r
42                                 relPath = os.sep.join(relPathParts)\r
43                                 yield relPath, file, newName\r
44 \r
45 \r
46 def unflatten_files(files):\r
47         d = {}\r
48         for relPath, oldName, newName in files:\r
49                 if relPath not in d:\r
50                         d[relPath] = []\r
51                 d[relPath].append((oldName, newName))\r
52         return d\r
53 \r
54 \r
55 def build_package(distribution):\r
56         try:\r
57                 os.chdir(os.path.dirname(sys.argv[0]))\r
58         except:\r
59                 pass\r
60 \r
61         py2deb.Py2deb.SECTIONS = py2deb.SECTIONS_BY_POLICY[distribution]\r
62         p = py2deb.Py2deb(__app_name__)\r
63         p.prettyName = constants.__pretty_app_name__\r
64         p.description = __description__\r
65         p.bugTracker="https://bugs.maemo.org/enter_bug.cgi?product=nQa%%20Audiobook%%20Player"\r
66         p.author = __author__\r
67         p.mail = __email__\r
68         p.license = "lgpl"\r
69         p.depends = ", ".join([\r
70                 "python2.6 | python2.5",\r
71                 "python-gtk2 | python2.5-gtk2",\r
72                 "python-dbus | python2.5-dbus",\r
73                 "python-telepathy | python2.5-telepathy",\r
74                 "python-gobject | python2.5-gobject",\r
75                 "python-simplejson",\r
76         ])\r
77         maemoSpecificDepends = ", python-osso | python2.5-osso, python-hildon | python2.5-hildon"\r
78         p.depends += {\r
79                 "debian": ", python-gst0.10",\r
80                 "diablo": maemoSpecificDepends,\r
81                 "fremantle": maemoSpecificDepends + ", python-gst0.10",\r
82         }[distribution]\r
83         p.section = {\r
84                 "debian": "sound",\r
85                 "diablo": "user/multimedia",\r
86                 "fremantle": "user/multimedia",\r
87         }[distribution]\r
88         p.arch="all"\r
89         p.urgency="low"\r
90         p.distribution=distribution\r
91         p.repository="extras"\r
92         p.changelog = __changelog__\r
93         p.postinstall = __postinstall__\r
94         p.icon = {\r
95                 "debian": "26x26-%s.png" % constants.__app_name__,\r
96                 "diablo": "26x26-%s.png" % constants.__app_name__,\r
97                 "fremantle": "48x48-%s.png" % constants.__app_name__,\r
98         }[distribution]\r
99         p["/opt/%s/bin" % constants.__app_name__] = [ "%s.py" % constants.__app_name__ ]\r
100         for relPath, files in unflatten_files(find_files("src", ".")).iteritems():\r
101                 fullPath = "/opt/%s/lib" % constants.__app_name__\r
102                 if relPath:\r
103                         fullPath += os.sep+relPath\r
104                 p[fullPath] = list(\r
105                         "|".join((oldName, newName))\r
106                         for (oldName, newName) in files\r
107                 )\r
108         p["/usr/share/applications/hildon"] = ["%s.desktop" % constants.__app_name__]\r
109         p["/usr/share/icons/hicolor/26x26/hildon"] = ["26x26-%s.png" % constants.__app_name__]\r
110         p["/usr/share/icons/hicolor/48x48/hildon"] = ["48x48-%s.png" % constants.__app_name__]\r
111         p["/usr/share/icons/hicolor/64x64/hildon"] = ["64x64-%s.png" % constants.__app_name__]\r
112         p["/usr/share/icons/hicolor/scalable/hildon"] = ["scale-%s.png" % constants.__app_name__]\r
113 \r
114         print p\r
115         if distribution == "debian":\r
116                 print p.generate(\r
117                         version="%s-%s" % (__version__, __build__),\r
118                         changelog=__changelog__,\r
119                         build=True,\r
120                         tar=False,\r
121                         changes=False,\r
122                         dsc=False,\r
123                 )\r
124         else:\r
125                 print p.generate(\r
126                         version="%s-%s" % (__version__, __build__),\r
127                         changelog=__changelog__,\r
128                         build=False,\r
129                         tar=True,\r
130                         changes=True,\r
131                         dsc=True,\r
132                 )\r
133         print "Building for %s finished" % distribution\r
134 \r
135 \r
136 if __name__ == "__main__":\r
137         if len(sys.argv) == 1:\r
138                 distribution = "fremantle"\r
139         else:\r
140                 distribution = sys.argv[1]\r
141         build_package(distribution)\r