Add ENABLE_COMPLEX_DEPS flag
[platform/upstream/libsolv.git] / src / solvable.h
1 /*
2  * Copyright (c) 2007-2012, Novell Inc.
3  *
4  * This program is licensed under the BSD license, read LICENSE.BSD
5  * for further information
6  */
7
8 /*
9  * solvable.h
10  *
11  * A solvable represents an object with name-epoch:version-release.arch
12  * and dependencies
13  */
14
15 #ifndef LIBSOLV_SOLVABLE_H
16 #define LIBSOLV_SOLVABLE_H
17
18 #include "pooltypes.h"
19 #include "queue.h"
20 #include "bitmap.h"
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 struct s_Repo;
27
28 typedef struct s_Solvable {
29   Id name;
30   Id arch;
31   Id evr;                       /* epoch:version-release */
32   Id vendor;
33
34   struct s_Repo *repo;          /* repo we belong to */
35
36   /* dependencies are offsets into repo->idarraydata */
37   /* the ifdef resolves "requires" conflicting with a C++20 keyword */
38 #ifdef LIBSOLV_SOLVABLE_PREPEND_DEP
39   Offset dep_provides;          /* terminated with Id 0 */
40   Offset dep_obsoletes;
41   Offset dep_conflicts;
42
43   Offset dep_requires;
44   Offset dep_recommends;
45   Offset dep_suggests;
46
47   Offset dep_supplements;
48   Offset dep_enhances;
49 #else
50   Offset provides;              /* terminated with Id 0 */
51   Offset obsoletes;
52   Offset conflicts;
53
54   Offset requires;
55   Offset recommends;
56   Offset suggests;
57
58   Offset supplements;
59   Offset enhances;
60 #endif
61 } Solvable;
62
63 /* lookup functions */
64 Id solvable_lookup_type(Solvable *s, Id keyname);
65 Id solvable_lookup_id(Solvable *s, Id keyname);
66 unsigned long long solvable_lookup_num(Solvable *s, Id keyname, unsigned long long notfound);
67 unsigned long long solvable_lookup_sizek(Solvable *s, Id keyname, unsigned long long notfound);
68 const char *solvable_lookup_str(Solvable *s, Id keyname);
69 const char *solvable_lookup_str_poollang(Solvable *s, Id keyname);
70 const char *solvable_lookup_str_lang(Solvable *s, Id keyname, const char *lang, int usebase);
71 int solvable_lookup_bool(Solvable *s, Id keyname);
72 int solvable_lookup_void(Solvable *s, Id keyname);
73 const char *solvable_get_location(Solvable *s, unsigned int *medianrp); /* old name */
74 const char *solvable_lookup_location(Solvable *s, unsigned int *medianrp);
75 const char *solvable_lookup_sourcepkg(Solvable *s);
76 const unsigned char *solvable_lookup_bin_checksum(Solvable *s, Id keyname, Id *typep);
77 const char *solvable_lookup_checksum(Solvable *s, Id keyname, Id *typep);
78 int solvable_lookup_idarray(Solvable *s, Id keyname, Queue *q);
79 int solvable_lookup_deparray(Solvable *s, Id keyname, Queue *q, Id marker);
80 unsigned int solvable_lookup_count(Solvable *s, Id keyname);    /* internal */
81
82 /* setter functions */
83 void solvable_set_id(Solvable *s, Id keyname, Id id);
84 void solvable_set_num(Solvable *s, Id keyname, unsigned long long num);
85 void solvable_set_str(Solvable *s, Id keyname, const char *str);
86 void solvable_set_poolstr(Solvable *s, Id keyname, const char *str);
87 void solvable_add_poolstr_array(Solvable *s, Id keyname, const char *str);
88 void solvable_add_idarray(Solvable *s, Id keyname, Id id);
89 void solvable_add_deparray(Solvable *s, Id keyname, Id dep, Id marker);
90 void solvable_set_idarray(Solvable *s, Id keyname, Queue *q);
91 void solvable_set_deparray(Solvable *s, Id keyname, Queue *q, Id marker);
92 void solvable_unset(Solvable *s, Id keyname);
93
94 int solvable_identical(Solvable *s1, Solvable *s2);
95 Id solvable_selfprovidedep(Solvable *s);
96
97 int solvable_matchesdep(Solvable *s, Id keyname, Id dep, int marker);
98 int solvable_matchessolvable(Solvable *s, Id keyname, Id solvid, Queue *depq, int marker);
99
100 /* internal */
101 int solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map *solvidmap, Queue *depq, Map *missc, int reloff, Queue *outdepq);
102
103
104 /* weird suse stuff */
105 int solvable_is_irrelevant_patch(Solvable *s, Map *installedmap);
106 int solvable_trivial_installable_map(Solvable *s, Map *installedmap, Map *conflictsmap, Map *multiversionmap);
107 int solvable_trivial_installable_queue(Solvable *s, Queue *installed, Map *multiversionmap);
108 int solvable_trivial_installable_repo(Solvable *s, struct s_Repo *installed, Map *multiversionmap);
109
110 #ifdef __cplusplus
111 }
112 #endif
113
114 #endif /* LIBSOLV_SOLVABLE_H */