Add support for preloading lua modules. This is useful both when
providing lua bindings to applications based on librazor and when
producing static binaries using librazor (where otherwise the lua
POSIX library would need to be included as an additional dynamic
object).
2 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
3 * Copyright (C) 2008 Red Hat, Inc
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 enum razor_repo_file_type {
27 RAZOR_REPO_FILE_DETAILS,
31 enum razor_detail_type {
32 RAZOR_DETAIL_LAST = 0, /* the sentinel */
37 RAZOR_DETAIL_DESCRIPTION,
42 enum razor_property_flags {
43 RAZOR_PROPERTY_LESS = 1 << 0,
44 RAZOR_PROPERTY_GREATER = 1 << 1,
45 RAZOR_PROPERTY_EQUAL = 1 << 2,
46 RAZOR_PROPERTY_RELATION_MASK =
48 RAZOR_PROPERTY_GREATER |
51 RAZOR_PROPERTY_REQUIRES = 0 << 3,
52 RAZOR_PROPERTY_PROVIDES = 1 << 3,
53 RAZOR_PROPERTY_CONFLICTS = 2 << 3,
54 RAZOR_PROPERTY_OBSOLETES = 3 << 3,
55 RAZOR_PROPERTY_TYPE_MASK = 3 << 3,
57 RAZOR_PROPERTY_PRE = 1 << 5,
58 RAZOR_PROPERTY_POST = 1 << 6,
59 RAZOR_PROPERTY_PREUN = 1 << 7,
60 RAZOR_PROPERTY_POSTUN = 1 << 8
66 * @short_description: Represents a set of packages and their metadata.
68 * This object represents a set of packages, their dependency
69 * information, the file lists and a number of other details.
74 struct razor_property;
79 * Create a new #razor_set object.
81 * Returns: the new #razor_set object.
83 struct razor_set *razor_set_create(void);
84 struct razor_set *razor_set_open(const char *filename);
85 void razor_set_destroy(struct razor_set *set);
86 int razor_set_write_to_fd(struct razor_set *set, int fd,
87 enum razor_repo_file_type type);
88 int razor_set_write(struct razor_set *set, const char *filename,
89 enum razor_repo_file_type type);
91 int razor_set_open_details(struct razor_set *set, const char *filename);
92 int razor_set_open_files(struct razor_set *set, const char *filename);
94 struct razor_package *
95 razor_set_get_package(struct razor_set *set, const char *package);
98 razor_package_get_details(struct razor_set *set,
99 struct razor_package *package, ...);
105 * @short_description: Objects for traversing packages or properties.
107 * The razor iterator objects provides a way to iterate through a set
108 * of packages or properties.
111 struct razor_package_iterator;
114 * razor_package_iterator_create:
116 * Create a new #razor_package_iterator object.
118 * Returns: the new #razor_package_iterator object.
121 struct razor_package_iterator *
122 razor_package_iterator_create(struct razor_set *set);
125 * razor_package_iterator_create_for_property:
127 * Create a new #razor_package_iterator object for the packages that
128 * own the given property.
130 * Returns: the new #razor_package_iterator object.
132 struct razor_package_iterator *
133 razor_package_iterator_create_for_property(struct razor_set *set,
134 struct razor_property *property);
137 * razor_package_iterator_create_for_file:
139 * Create a new #razor_package_iterator object for the packages that
140 * contain the given file name.
142 * Returns: the new #razor_package_iterator object.
144 struct razor_package_iterator *
145 razor_package_iterator_create_for_file(struct razor_set *set,
146 const char *filename);
148 int razor_package_iterator_next(struct razor_package_iterator *pi,
149 struct razor_package **package, ...);
150 void razor_package_iterator_destroy(struct razor_package_iterator *pi);
152 struct razor_package_query *
153 razor_package_query_create(struct razor_set *set);
155 razor_package_query_add_package(struct razor_package_query *pq,
156 struct razor_package *p);
158 razor_package_query_add_iterator(struct razor_package_query *pq,
159 struct razor_package_iterator *pi);
160 struct razor_package_iterator *
161 razor_package_query_finish(struct razor_package_query *pq);
163 struct razor_property_iterator;
164 struct razor_property_iterator *
165 razor_property_iterator_create(struct razor_set *set,
166 struct razor_package *package);
167 int razor_property_iterator_next(struct razor_property_iterator *pi,
168 struct razor_property **property,
171 const char **version);
173 razor_property_iterator_destroy(struct razor_property_iterator *pi);
175 struct razor_file_iterator;
176 struct razor_file_iterator *
177 razor_file_iterator_create(struct razor_set *set,
178 struct razor_package *package);
179 int razor_file_iterator_next(struct razor_file_iterator *fi,
181 void razor_file_iterator_destroy(struct razor_file_iterator *fi);
183 void razor_set_list_files(struct razor_set *set, const char *prefix);
184 void razor_set_list_package_files(struct razor_set *set,
185 struct razor_package *package);
187 enum razor_diff_action {
188 RAZOR_DIFF_ACTION_ADD,
189 RAZOR_DIFF_ACTION_REMOVE,
192 typedef void (*razor_diff_callback_t)(enum razor_diff_action action,
193 struct razor_package *package,
200 razor_set_diff(struct razor_set *set, struct razor_set *upstream,
201 razor_diff_callback_t callback, void *data);
203 struct razor_install_iterator;
205 enum razor_install_action {
206 RAZOR_INSTALL_ACTION_ADD,
207 RAZOR_INSTALL_ACTION_REMOVE
210 struct razor_install_iterator *
211 razor_set_create_install_iterator(struct razor_set *set,
212 struct razor_set *next);
214 int razor_install_iterator_next(struct razor_install_iterator *ii,
215 struct razor_set **set,
216 struct razor_package **package,
217 enum razor_install_action *action,
220 void razor_install_iterator_destroy(struct razor_install_iterator *ii);
223 * SECTION:transaction
224 * @title: Transaction
225 * @short_description: Create a new package set by merging two or more sets.
227 * The razor transaction object provides a way to create a new package set
228 * from packages from one or more other package sets.
231 struct razor_transaction *
232 razor_transaction_create(struct razor_set *system, struct razor_set *upstream);
233 void razor_transaction_install_package(struct razor_transaction *transaction,
234 struct razor_package *package);
235 void razor_transaction_remove_package(struct razor_transaction *transaction,
236 struct razor_package *package);
237 void razor_transaction_update_package(struct razor_transaction *trans,
238 struct razor_package *package);
239 void razor_transaction_update_all(struct razor_transaction *transaction);
240 int razor_transaction_resolve(struct razor_transaction *trans);
241 int razor_transaction_describe(struct razor_transaction *trans);
242 struct razor_set *razor_transaction_finish(struct razor_transaction *trans);
243 void razor_transaction_destroy(struct razor_transaction *trans);
245 /* Temporary helper for test suite. */
246 int razor_transaction_unsatisfied_property(struct razor_transaction *trans,
249 const char *version);
254 * @short_description: Operating on RPM files.
256 * Functions for open RPM files and extracting information and
257 * installing or removing RPM files.
260 struct razor_relocations;
263 struct razor_relocations *razor_relocations_create(void);
264 void razor_relocations_add(struct razor_relocations *relocations,
265 const char *oldpath, const char *newpath);
266 void razor_relocations_set_rpm(struct razor_relocations *relocations,
267 struct razor_rpm *rpm);
268 const char *razor_relocations_apply(struct razor_relocations *relocations,
270 void razor_relocations_destroy(struct razor_relocations *relocations);
272 struct razor_rpm *razor_rpm_open(const char *filename);
273 void razor_rpm_set_relocations(struct razor_rpm *rpm,
274 struct razor_relocations *relocations);
275 int razor_rpm_install(struct razor_rpm *rpm, const char *root);
276 int razor_rpm_close(struct razor_rpm *rpm);
281 * @short_description: A mechanism for building #razor_set objects
283 * The %razor_importer is a helper object for building a razor set
284 * from external sources, like yum metadata, the RPM database or RPM
287 * The importer is a stateful object; it has the notion of a current
288 * package, and the caller can provide meta data such as properties,
289 * files and similiar for the package as it becomes available. Once a
290 * package is fully described, the next pacakge can begin. When all
291 * packages have been described to the importer, the importer will
292 * create a new %razor_set with the specified packages.
295 * of the importer will follow this template:
297 * importer = razor_importer_create();
299 * while ( /<!-- -->* more packages to import *<!-- -->/; ) {
300 * /<!-- -->* get name, version and arch of next package *<!-- -->/
301 * razor_importer_begin_package(importer, name, version, arch);
302 * razor_importer_add_details(importer, summary, description, url, license);
304 * while ( /<!-- -->* more properties to add *<!-- -->/ )
305 * razor_importer_add_property(importer, name, flags, version);
307 * while ( /<!-- -->* [more files to add *<!-- -->/ )
308 * razor_importer_add_file(importer, name);
310 * razor_importer_finish_package(importer);
313 * return razor_importer_finish(importer);
316 struct razor_importer;
318 struct razor_importer *razor_importer_create(void);
319 void razor_importer_destroy(struct razor_importer *importer);
320 void razor_importer_begin_package(struct razor_importer *importer,
324 void razor_importer_add_details(struct razor_importer *importer,
326 const char *description,
328 const char *license);
329 void razor_importer_add_property(struct razor_importer *importer,
332 const char *version);
333 void razor_importer_add_file(struct razor_importer *importer,
335 void razor_importer_finish_package(struct razor_importer *importer);
337 int razor_importer_add_rpm(struct razor_importer *importer,
338 struct razor_rpm *rpm);
340 struct razor_set *razor_importer_finish(struct razor_importer *importer);
342 struct razor_set *razor_set_create_from_yum(void);
343 struct razor_set *razor_set_create_from_rpmdb(void);
348 * @short_description: Functions for accessing an install root.
350 * The #razor_root object encapsulate access to and locking of a razor
355 int razor_root_create(const char *root);
356 struct razor_root *razor_root_open(const char *root);
357 struct razor_set *razor_root_open_read_only(const char *root);
358 struct razor_set *razor_root_get_system_set(struct razor_root *root);
359 int razor_root_close(struct razor_root *root);
360 void razor_root_update(struct razor_root *root, struct razor_set *next);
361 int razor_root_commit(struct razor_root *root);
366 * @title: Miscellaneous Functions
367 * @short_description: Various helper functions
369 * Functions that doesn't fit anywhere else.
373 razor_property_relation_to_string(struct razor_property *p);
375 razor_property_type_to_string(struct razor_property *p);
377 void razor_build_evr(char *evr_buf, int size, const char *epoch,
378 const char *version, const char *release);
379 int razor_versioncmp(const char *s1, const char *s2);
381 void razor_disable_root_name_checks(int disable);
383 void razor_set_lua_loader(const char *modname, void (*loader)());
386 #endif /* _RAZOR_H_ */