1 /* libcomps - C alternative to yum.comps library
2  * Copyright (C) 2013 Jindrich Luza
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to  Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
17  * USA
18  */
19 
20 #ifndef COMPS_DOCPACKAGE_H
21 #define COMPS_DOCPACKAGE_H
22 
23 #include "comps_utils.h"
24 #include "comps_obj.h"
25 #include "comps_log.h"
26 
27 #include "comps_validate.h"
28 #include "comps_default.h"
29 
30 /** \file comps_docpackage.h
31  * \brief COMPS_DocPackage header file
32  */
33 
34 /** COMPS_DocGroupPackage type
35  */
36 typedef enum {COMPS_PACKAGE_DEFAULT, COMPS_PACKAGE_OPTIONAL,
37               COMPS_PACKAGE_CONDITIONAL, COMPS_PACKAGE_MANDATORY,
38               COMPS_PACKAGE_UNKNOWN} COMPS_PackageType;
39 
40 /** COMPS_Object derivate representing packagereq element in comps.xml structure*/
41 typedef struct {
42     COMPS_Object_HEAD;
43     COMPS_PackageType type; /**< package type */
44     COMPS_Str *name; /**< name of package */
45     COMPS_Str *requires; /**< packagereq requires attribute */
46     COMPS_Num *basearchonly;
47     COMPS_ObjList *arches;
48 } COMPS_DocGroupPackage;
49 
50 
51 //HEAD_COMPS_CREATE_u(docpackage, COMPS_DocGroupPackagePackage)  /*comps_utils.h macro*/
52 //HEAD_COMPS_COPY_u(docpackage, COMPS_DocGroupPackagePackage)  /*comps_utils.h macro*/
53 //HEAD_COMPS_DESTROY_u(docpackage, COMPS_DocGroupPackagePackage)  /*comps_utils.h macro*/
54 
55 signed char comps_docpackage_cmp_u(COMPS_Object *pkg1, COMPS_Object *pkg2);
56 char comps_docpackage_cmp_set(void *pkg1, void *pkg2);
57 
58 /** COMPS_DocGroupPackage name getter
59  * @param pkg COMPS_DocGroupPackage object
60  * @return COMPS_Str object typed as COMPS_Object representating package's name
61  * with incremented reference counter
62  */
63 COMPS_Object* comps_docpackage_get_name(COMPS_DocGroupPackage *pkg);
64 
65 /** COMPS_DocGroupPackage name setter
66  * @param pkg COMPS_DocGroupPackage object
67  * @param name new name of package
68  * @param copy deprecated argument
69  *
70  * Old name object's reference counter will be decremented
71  */
72 void comps_docpackage_set_name(COMPS_DocGroupPackage *pkg, char *name, char copy);
73 
74 /** COMPS_DocGroupPackage requires getter
75  * @param pkg COMPS_DocGroupPackage object
76  * @return COMPS_Str object typed as COMPS_Object representating package's
77  * requires attribute with incremented reference counter
78  */
79 COMPS_Object* comps_docpackage_get_requires(COMPS_DocGroupPackage *pkg);
80 
81 /** COMPS_DocGroupPackage requires setter
82  * @param pkg COMPS_DocGroupPackage object
83  * @param requires new requries attribute value
84  * @param copy deprecated argument
85  *
86  * Old requires object's reference counter will be decremented
87  */
88 void comps_docpackage_set_requires(COMPS_DocGroupPackage *pkg, char *requires, char copy);
89 
90 /** COMPS_DocGroupPackage type getter
91  * @param pkg COMPS_DocGroupPackage object
92  * @return COMPS_Num object typed as COMPS_Object representating package's
93  * type as number with incremented reference counter
94  */
95 COMPS_Object* comps_docpackage_get_type(COMPS_DocGroupPackage *pkg);
96 
97 /** COMPS_DocGroupPackage type setter
98  * @param pkg COMPS_DocGroupPackage object
99  * @param type package type
100  *
101  * old object with stored type will be decremented
102  */
103 void comps_docpackage_set_type(COMPS_DocGroupPackage *pkg,
104                                    COMPS_PackageType type,
105                                    bool unset);
106 
107 /** COMPS_DocGroupPackage type setter same as comps_docpackage_set_type
108  * @param pkg COMPS_DocGroupPackage object
109  * @param type package type as integer
110  */
111 void comps_docpackage_set_type_i(COMPS_DocGroupPackage *pkg, int type, bool unset);
112 
113 /** return package type as string
114  * @param type package type as COMPS_PackageType
115  * @return string representation of type
116  * */
117 const char* comps_docpackage_type_str(COMPS_PackageType type);
118 
119 /** set package basearchonly attribute
120  * @param type package type as COMPS_PckageType
121  * @param basearchonly basearchonly attribute
122  * */
123 void comps_docpackage_set_basearchonly(COMPS_DocGroupPackage *pkg,
124                                        int basearchonly, bool unset);
125 
126 /** return package basearchonly attrinute
127  * @param type package type as COMPS_PackageType
128  * @return COMPS_Num basearchonly attribute
129  * */
130 COMPS_Object* comps_docpackage_get_basearchonly(COMPS_DocGroupPackage *pkg);
131 
132 char __comps_docpackage_idcmp(void *pkg1, void *pkg2);
133 COMPS_ObjList* comps_docpackage_arches(COMPS_DocGroupPackage *pkg);
134 void comps_docpackage_set_arches(COMPS_DocGroupPackage *pkg,
135                                  COMPS_ObjList *arches);
136 
137 signed char comps_docpackage_xml(COMPS_DocGroupPackage *pkg,
138                                  xmlTextWriterPtr writer,
139                                  COMPS_Log *log, COMPS_XMLOptions *xml_options,
140                                  COMPS_DefaultsOptions *def_options);
141 
142 extern COMPS_ObjectInfo COMPS_DocGroupPackage_ObjInfo;
143 extern COMPS_ValRuleGeneric* COMPS_DocGroupPackage_ValidateRules[];
144 
145 #endif
146 
147