1# -*- coding: utf-8 -*-
2#
3# Copyright 2007-2011 Brecht Machiels
4# Copyright 2009-2010 Chris Roberts
5# Copyright 2009-2011 Scott McCreary
6# Copyright 2009 Alexander Deynichenko
7# Copyright 2009 HaikuBot (aka RISC)
8# Copyright 2010-2011 Jack Laxson (Jrabbit)
9# Copyright 2011 Ingo Weinhold
10# Copyright 2013 Oliver Tappe
11# Distributed under the terms of the MIT License.
12
13# -- Modules ------------------------------------------------------------------
14
15import copy
16
17from .Package import PackageType
18from .RecipeTypes import (Architectures, Extendable, LinesOfText, Phase,
19                          ProvidesList, RequiresList, YesNo)
20
21# -- recipe keys and their attributes -----------------------------------------
22
23def getRecipeFormatVersion():
24	"""Returns the current version of the recipe format"""
25	return 1
26
27recipeAttributes = {
28	# non-extendable and non-indexable, i.e. per-port attributes
29	'BUILD_PACKAGE_ACTIVATION_PHASE': {
30		'type': Phase,
31		'required': False,
32		'default': Phase('BUILD'),
33		'extendable': Extendable.NO,
34		'indexable': False,
35	},
36	'DISABLE_SOURCE_PACKAGE': {
37		'type': YesNo,
38		'required': False,
39		'default': False,
40		'extendable': Extendable.NO,
41		'indexable': False,
42	},
43	'HOMEPAGE': {
44		'type': list,
45		'required': True,
46		'default': None,
47		'extendable': Extendable.NO,
48		'indexable': False,
49	},
50	'MESSAGE': {
51		'type': bytes,
52		'required': False,
53		'default': None,
54		'extendable': Extendable.NO,
55		'indexable': False,
56	},
57	'REVISION': {
58		'type': int,
59		'required': True,
60		'default': 1,
61		'extendable': Extendable.NO,
62		'indexable': False,
63	},
64
65	# indexable, i.e. per-source attributes
66	'ADDITIONAL_FILES': {
67		'type': list,
68		'required': False,
69		'default': {},
70		'extendable': Extendable.NO,
71		'indexable': True,
72	},
73	'CHECKSUM_SHA256': {
74		'type': bytes,
75		'required': False,
76		'default': {},
77		'extendable': Extendable.NO,
78		'indexable': True,
79	},
80	'PATCHES': {
81		'type': list,
82		'required': False,
83		'default': {},
84		'extendable': Extendable.NO,
85		'indexable': True,
86	},
87	'SOURCE_DIR': {
88		'type': bytes,
89		'required': False,
90		'default': {},
91		'extendable': Extendable.NO,
92		'indexable': True,
93	},
94	'SOURCE_FILENAME': {
95		'type': bytes,
96		'required': False,
97		'default': {},
98		'extendable': Extendable.NO,
99		'indexable': True,
100	},
101	'SOURCE_URI': {
102		'type': list,
103		'required': True,
104		'default': {},
105		'extendable': Extendable.NO,
106		'indexable': True,
107	},
108
109	# extendable, i.e. per-package attributes
110	'ARCHITECTURES': {
111		'type': Architectures,
112		'required': True,
113		'default': None,
114		'extendable': Extendable.INHERITED,
115		'indexable': False,
116	},
117	'BUILD_PREREQUIRES': {
118		'type': RequiresList,
119		'required': False,
120		'default': [],
121		'extendable': Extendable.INHERITED,
122		'indexable': False,
123	},
124	'BUILD_REQUIRES': {
125		'type': RequiresList,
126		'required': False,
127		'default': [],
128		'extendable': Extendable.INHERITED,
129		'indexable': False,
130	},
131	'TEST_REQUIRES': {
132		'type': RequiresList,
133		'required': False,
134		'default': [],
135		'extendable': Extendable.INHERITED,
136		'indexable': False,
137	},
138	'CONFLICTS': {
139		'type': RequiresList,
140		'required': False,
141		'default': [],
142		'extendable': Extendable.DEFAULT,
143		'indexable': False,
144	},
145	'COPYRIGHT': {
146		'type': list,
147		'required': False,
148		'default': [],
149		'extendable': Extendable.INHERITED,
150		'indexable': False,
151	},
152	'DESCRIPTION': {
153		'type': LinesOfText,
154		'required': True,
155		'default': None,
156		'extendable': Extendable.INHERITED,
157		'indexable': False,
158	},
159	'FRESHENS': {
160		'type': RequiresList,
161		'required': False,
162		'default': [],
163		'extendable': Extendable.DEFAULT,
164		'indexable': False,
165	},
166	'GLOBAL_WRITABLE_FILES': {
167		'type': list,
168		'required': False,
169		'default': [],
170		'extendable': Extendable.DEFAULT,
171		'indexable': False,
172	},
173	'LICENSE': {
174		'type': list,
175		'required': False,
176		'default': [],
177		'extendable': Extendable.INHERITED,
178		'indexable': False,
179	},
180	'PACKAGE_GROUPS': {
181		'type': list,
182		'required': False,
183		'default': [],
184		'extendable': Extendable.DEFAULT,
185		'indexable': False,
186	},
187	'PACKAGE_NAME': {
188		'type': bytes,
189		'required': False,
190		'default': None,
191		'extendable': Extendable.DEFAULT,
192		'indexable': False,
193	},
194	'PACKAGE_USERS': {
195		'type': list,
196		'required': False,
197		'default': [],
198		'extendable': Extendable.DEFAULT,
199		'indexable': False,
200	},
201	'PACKAGE_VERSION': {
202		'type': bytes,
203		'required': False,
204		'default': None,
205		'extendable': Extendable.DEFAULT,
206		'indexable': False,
207	},
208	'PROVIDES': {
209		'type': ProvidesList,
210		'required': True,
211		'default': None,
212		'extendable': Extendable.DEFAULT,
213		'indexable': False,
214	},
215	'POST_INSTALL_SCRIPTS': {
216		'type': list,
217		'required': False,
218		'default': [],
219		'extendable': Extendable.DEFAULT,
220		'indexable': False,
221	},
222	'REPLACES': {
223		'type': list,
224		'required': False,
225		'default': [],
226		'extendable': Extendable.DEFAULT,
227		'indexable': False,
228	},
229	'REQUIRES': {
230		'type': RequiresList,
231		'required': False,
232		'default': [],
233		'extendable': Extendable.DEFAULT,
234		'indexable': False,
235	},
236	'SECONDARY_ARCHITECTURES': {
237		'type': Architectures,
238		'required': False,
239		'default': [],
240		'extendable': Extendable.INHERITED,
241		'indexable': False,
242	},
243	'SUMMARY': {
244		'type': bytes,
245		'required': True,
246		'default': None,
247		'extendable': Extendable.INHERITED,
248		'indexable': False,
249		'suffix': {
250			PackageType.DEVELOPMENT: ' (development files)',
251			PackageType.DEBUG_INFO: ' (debug info)',
252			PackageType.DOCUMENTATION: ' (documentation)',
253			PackageType.SOURCE: ' (source files)',
254		}
255	},
256	'SUPPLEMENTS': {
257		'type': RequiresList,
258		'required': False,
259		'default': [],
260		'extendable': Extendable.DEFAULT,
261		'indexable': False,
262	},
263	'USER_SETTINGS_FILES': {
264		'type': list,
265		'required': False,
266		'default': [],
267		'extendable': Extendable.DEFAULT,
268		'indexable': False,
269	}
270}
271
272def getRecipeAttributes():
273	return copy.deepcopy(recipeAttributes)
274