gwenhywfar 5.10.1
p_project.c
Go to the documentation of this file.
1/***************************************************************************
2 begin : Mon Feb 08 2021
3 copyright : (C) 2021 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10#ifdef HAVE_CONFIG_H
11# include <config.h>
12#endif
13
14
25#include "gwenbuild/utils.h"
26
28
29#include <gwenhywfar/debug.h>
30
31#include <unistd.h>
32
33
34
35static int _parseVersions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
36static int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
37static int _writeConfigH(const GWB_PROJECT *project);
38static int _parseDefine(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
39static int _parseI18n(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
40static void _addTargetForLanguage(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *sLanguage, const char *installPath);
41static int _setProjectVersionFromString(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, const char *sVersionString);
42static void _setProjectVersionFromProjectAttributes(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, GWEN_XMLNODE *xmlNode);
43static void _writeProjectVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars);
44static void _writeProjectSoVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars);
45
46
47
48
49
50
51int GWB_ParseProject(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
52{
53 const char *s;
54 int rv;
55 GWEN_DB_NODE *db;
56 uint32_t flags=GWEN_DB_FLAGS_OVERWRITE_VARS;
57
58 db=GWB_Context_GetVars(currentContext);
59
60 s=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL);
61 if (!(s && *s)) {
62 DBG_ERROR(NULL, "Project has no name");
64 }
65
67 GWEN_DB_SetCharValue(db, flags, "PACKAGE", s);
68 GWB_Project_SetDefineQuoted(project, "PACKAGE", s);
69
70 s=GWEN_XMLNode_GetProperty(xmlNode, "write_config_h", "TRUE");
71 if (s && strcasecmp(s, "TRUE")==0)
73
74 rv=_parseVersions(project, currentContext, xmlNode);
75 if (rv<0) {
76 DBG_INFO(NULL, "here (%d)", rv);
77 return rv;
78 }
79
80 rv=_parseChildNodes(project, currentContext, xmlNode);
81 if (rv<0) {
82 DBG_INFO(NULL, "here (%d)", rv);
83 return rv;
84 }
85
87 int rv;
88
89 rv=_writeConfigH(project);
90 if (rv<0) {
91 DBG_ERROR(GWEN_LOGDOMAIN, "Error writing config.h, aborting");
92 return rv;
93 }
94 }
95
96 return 0;
97}
98
99
100
101int _parseVersions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
102{
103 const char *s;
104 int rv;
105 GWEN_DB_NODE *dbContextVars;
106
107 dbContextVars=GWB_Context_GetVars(currentContext);
108
109 s=GWEN_XMLNode_GetProperty(xmlNode, "version", NULL);
110 if (s && *s) {
111 rv=_setProjectVersionFromString(project, dbContextVars, s);
112 if (rv<0) {
113 DBG_ERROR(NULL, "here (%d)", rv);
114 return GWEN_ERROR_BAD_DATA;
115 }
116 }
117 else
118 _setProjectVersionFromProjectAttributes(project, dbContextVars, xmlNode);
119
120 _writeProjectVersionToContextDbVars(project, dbContextVars);
121
123 GWEN_XMLNode_GetIntProperty(xmlNode, "so_current", 0),
124 GWEN_XMLNode_GetIntProperty(xmlNode, "so_age", 0),
125 GWEN_XMLNode_GetIntProperty(xmlNode, "so_revision", 0));
126
127 _writeProjectSoVersionToContextDbVars(project, dbContextVars);
128
129 s=GWEN_DB_GetCharValue(dbContextVars, "project_version", 0, NULL);
130 if (s && *s) {
131 GWB_Project_SetDefineQuoted(project, "VERSION", s);
132 }
133
134 return 0;
135}
136
137
138
140{
141 const uint32_t flags=GWEN_DB_FLAGS_OVERWRITE_VARS;
142 const char *s;
143
144 GWEN_DB_SetCharValue(dbContextVars, flags, "project_name", GWB_Project_GetProjectName(project));
145 GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_vmajor", GWB_Project_GetVersionMajor(project));
146 GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_vminor", GWB_Project_GetVersionMinor(project));
147 GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_vpatchlevel", GWB_Project_GetVersionPatchlevel(project));
148 GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_vbuild", GWB_Project_GetVersionBuild(project));
149 s=GWB_Project_GetVersionTag(project);
150 if (s && *s)
151 GWEN_DB_SetCharValue(dbContextVars, flags, "project_vtag", s);
152 s=GWEN_DB_GetCharValue(dbContextVars, "project_version", 0, NULL);
153 if (s && *s) {
154 GWEN_DB_SetCharValue(dbContextVars, flags, "VERSION", s);
155 }
156}
157
158
159
161{
162 const uint32_t flags=GWEN_DB_FLAGS_OVERWRITE_VARS;
163
164 GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_so_current", GWB_Project_GetSoVersionCurrent(project));
165 GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_so_age", GWB_Project_GetSoVersionAge(project));
166 GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_so_revision", GWB_Project_GetSoVersionRevision(project));
167 GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_so_effective",
169}
170
171
172
173int _setProjectVersionFromString(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, const char *sVersionString)
174{
175 int rv;
176 const uint32_t flags=GWEN_DB_FLAGS_OVERWRITE_VARS;
177 GWEN_DB_NODE *versionDb;
178
179 GWEN_DB_SetCharValue(dbContextVars, flags, "project_version", sVersionString);
180
181 versionDb=GWEN_DB_Group_new("versionDb");
182 rv=GWB_Utils_VersionStringToDb(versionDb, NULL, sVersionString);
183 if (rv<0) {
184 DBG_ERROR(NULL, "Invalid version string [%s]", sVersionString);
185 GWEN_DB_Group_free(versionDb);
186 return GWEN_ERROR_BAD_DATA;
187 }
189 GWEN_DB_GetIntValue(versionDb, "vmajor", 0, 0),
190 GWEN_DB_GetIntValue(versionDb, "vminor", 0, 0),
191 GWEN_DB_GetIntValue(versionDb, "vpatchlevel", 0, 0),
192 GWEN_DB_GetIntValue(versionDb, "vbuild", 0, 0),
193 GWEN_DB_GetCharValue(versionDb, "vtag", 0, NULL));
194 GWEN_DB_Group_free(versionDb);
195 return 0;
196}
197
198
199
201{
203 GWEN_XMLNode_GetIntProperty(xmlNode, "vmajor", 0),
204 GWEN_XMLNode_GetIntProperty(xmlNode, "vminor", 0),
205 GWEN_XMLNode_GetIntProperty(xmlNode, "vpatchlevel", 0),
206 GWEN_XMLNode_GetIntProperty(xmlNode, "vbuild", 0),
207 GWEN_XMLNode_GetProperty(xmlNode, "vtag", NULL));
208 GWB_Utils_VersionToDbVar(dbContextVars, "project_version",
214}
215
216
217
218int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
219{
220 GWEN_XMLNODE *n;
221
222 n=GWEN_XMLNode_GetFirstTag(xmlNode);
223 while (n) {
224 const char *name;
225
226 DBG_DEBUG(NULL, "- Reading child node");
227 name=GWEN_XMLNode_GetData(n);
228 if (name && *name) {
229 int rv;
230
231 DBG_DEBUG(NULL, "Handling element \"%s\"", name);
232
233 if (strcasecmp(name, "option")==0)
234 rv=GWB_ParseOption(project, currentContext, n);
235 else if (strcasecmp(name, "dependencies")==0)
236 rv=GWB_ParseDependencies(project, currentContext, n);
237 else if (strcasecmp(name, "checkheaders")==0)
238 rv=GWB_ParseCheckHeaders(project, currentContext, n);
239 else if (strcasecmp(name, "checkfunctions")==0)
240 rv=GWB_ParseCheckFunctions(project, currentContext, n);
241 else if (strcasecmp(name, "checklibs")==0)
242 rv=GWB_ParseCheckLibs(project, currentContext, n);
243 else if (strcasecmp(name, "checkprogs")==0)
244 rv=GWB_ParseCheckProgs(project, currentContext, n);
245 else if (strcasecmp(name, "checkCompiler")==0)
246 rv=GWB_ParseCheckCompiler(project, currentContext, n);
247 else if (strcasecmp(name, "target")==0)
248 rv=GWB_ParseTarget(project, currentContext, n);
249 else if (strcasecmp(name, "define")==0)
250 rv=_parseDefine(project, currentContext, n);
251 else if (strcasecmp(name, "i18n")==0)
252 rv=_parseI18n(project, currentContext, n);
253 else if (strcasecmp(name, "buildFiles")==0)
254 rv=GWB_ParseBuildFiles(project, currentContext, n);
255 else if (strcasecmp(name, "extradist")==0)
257 else if (strcasecmp(name, "data")==0)
259 else if (strcasecmp(name, "i18n")==0)
260 rv=GWB_Parser_ParseSourcesOrHeaders(project, currentContext, n, GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST, "po", "msgfmt");
261 else if (strcasecmp(name, "subdirs")==0)
262 rv=GWB_Parser_ParseSubdirs(project, currentContext, n, _parseChildNodes);
263 else
264 rv=GWB_Parser_ParseWellKnownElements(project, currentContext, n, _parseChildNodes);
265 if (rv<0) {
266 DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name);
267 return rv;
268 }
269 }
270
272 }
273
274 return 0;
275}
276
277
278
279int _writeConfigH(const GWB_PROJECT *project)
280{
281 GWB_KEYVALUEPAIR_LIST *defineList;
282 GWEN_BUFFER *fileBuffer;
283 int rv;
284
285 defineList=GWB_Project_GetDefineList(project);
286 fileBuffer=GWEN_Buffer_new(0, 256, 0, 1);
287
288 GWEN_Buffer_AppendString(fileBuffer, "/* config.h generated by gwenbuild */\n\n");
289 if (defineList)
290 GWB_KeyValuePair_List_WriteAllPairsToBuffer(defineList, "#define ", " ", "\n", fileBuffer);
291 GWEN_Buffer_AppendString(fileBuffer, "\n");
292
293 unlink("config.h");
294 rv=GWEN_SyncIo_Helper_WriteFile("config.h",
295 (const uint8_t*)GWEN_Buffer_GetStart(fileBuffer),
296 GWEN_Buffer_GetUsedBytes(fileBuffer));
297 if (rv<0) {
298 DBG_ERROR(NULL, "Could not write \"config.h\" (%d)", rv);
299 GWEN_Buffer_free(fileBuffer);
300 return rv;
301 }
302
303 GWEN_Buffer_free(fileBuffer);
304
305 return 0;
306}
307
308
309
310int _parseDefine(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
311{
312 int rv;
313 const char *varName;
314 const char *value;
315 const char *quoted;
316
317 rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext));
318 if (rv<0) {
319 DBG_INFO(NULL, "here (%d)", rv);
320 return rv;
321 }
322
323 quoted=GWEN_XMLNode_GetProperty(xmlNode, "quoted", "FALSE");
324 varName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL);
325 value=GWEN_XMLNode_GetProperty(xmlNode, "value", NULL);
326 if (!(varName && *varName)) {
327 DBG_ERROR(NULL, "Missing variable name in DEFINE");
328 return GWEN_ERROR_GENERIC;
329 }
330 if (quoted && strcasecmp(quoted, "TRUE")==0)
331 GWB_Project_SetDefineQuoted(project, varName, value);
332 else
333 GWB_Project_SetDefine(project, varName, value);
334
335
336 return 0;
337}
338
339
340
341int _parseI18n(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
342{
343 if (GWEN_DB_GetCharValue(GWB_Context_GetVars(currentContext), "GWBUILD_TOOL_MSGFMT", 0, NULL)) {
344 GWEN_STRINGLIST *sl;
345 const char *installPath;
346
347 installPath=GWEN_XMLNode_GetProperty(xmlNode, "install", NULL);
348
350 if (sl) {
352
354 while(se) {
355 const char *s;
356
358 if (s && *s) {
359 fprintf(stderr, "Adding language catalog \"%s\"\n", s);
360 _addTargetForLanguage(project, currentContext, s, installPath);
361 }
363 }
364 }
365 }
366 else {
367 DBG_WARN(NULL, "Tool msgfmt missing, not creating language catalogs");
368 }
369
370 return 0;
371}
372
373
374
375void _addTargetForLanguage(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *sLanguage, const char *installPath)
376{
377 GWEN_BUFFER *fileNameBuffer;
378 GWEN_BUFFER *installPathBuffer=NULL;
379 GWB_TARGET *target;
380
381 fileNameBuffer=GWEN_Buffer_new(0, 256, 0, 1);
382 GWEN_Buffer_AppendString(fileNameBuffer, sLanguage);
383 GWEN_Buffer_AppendString(fileNameBuffer, ".po");
384
385 if (!(installPath && *installPath))
386 installPath=GWEN_DB_GetCharValue(GWB_Context_GetVars(currentContext), "localedir", 0, NULL);
387
388 if (installPath && *installPath) {
389 installPathBuffer=GWEN_Buffer_new(0, 256, 0, 1);
390 GWEN_Buffer_AppendString(installPathBuffer, installPath);
392 GWEN_Buffer_AppendString(installPathBuffer, sLanguage);
393 GWEN_Buffer_AppendString(installPathBuffer, GWEN_DIR_SEPARATOR_S "LC_MESSAGES");
394 }
395
397 currentContext,
399 GWEN_Buffer_GetStart(fileNameBuffer),
400 "po",
401 "msgfmt",
402 installPathBuffer?GWEN_Buffer_GetStart(installPathBuffer):NULL);
403
404 GWEN_Buffer_Reset(fileNameBuffer);
406 GWEN_Buffer_AppendString(fileNameBuffer, ".mo");
407 GWB_Target_SetInstallName(target, GWEN_Buffer_GetStart(fileNameBuffer));
408
409 GWEN_Buffer_free(installPathBuffer);
410 GWEN_Buffer_free(fileNameBuffer);
411}
412
413
414
415
416
417
418
419
420
421
#define NULL
Definition: binreloc.c:300
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:650
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition: buffer.c:277
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
GWEN_DB_NODE * GWB_Context_GetVars(const GWB_CONTEXT *ctx)
Definition: context.c:427
struct GWB_CONTEXT GWB_CONTEXT
Definition: context.h:17
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
Definition: db.c:971
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition: db.c:173
int GWEN_DB_SetCharValueFromInt(GWEN_DB_NODE *n, uint32_t flags, const char *path, int val)
Definition: db.c:1036
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition: db.c:997
int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
Definition: db.c:1163
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition: db.c:421
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition: db.h:121
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
#define DBG_DEBUG(dbg_logger, format, args...)
Definition: debug.h:214
#define DBG_WARN(dbg_logger, format, args...)
Definition: debug.h:125
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
#define GWEN_ERROR_GENERIC
Definition: error.h:62
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
@ GWBUILD_TargetType_I18nCatalog
Definition: gwenbuild.h:27
#define GWEN_DIR_SEPARATOR_S
int GWB_KeyValuePair_List_WriteAllPairsToBuffer(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *prefix, const char *assignmentString, const char *delim, GWEN_BUFFER *destBuf)
Definition: keyvaluepair.c:199
#define GWEN_LOGDOMAIN
Definition: logger.h:35
int GWB_ParseBuildFiles(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_buildfiles.c:62
int GWB_ParseCheckCompiler(GWEN_UNUSED GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
int GWB_ParseCheckFunctions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
int GWB_ParseCheckHeaders(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
int GWB_ParseCheckLibs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_checklibs.c:32
int GWB_ParseCheckProgs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_checkprogs.c:34
int GWB_ParseDependencies(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
int GWB_ParseOption(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_options.c:35
static int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:218
static int _parseDefine(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:310
int GWB_ParseProject(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:51
static void _writeProjectVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars)
Definition: p_project.c:139
static int _setProjectVersionFromString(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, const char *sVersionString)
Definition: p_project.c:173
static int _parseVersions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:101
static void _writeProjectSoVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars)
Definition: p_project.c:160
static int _parseI18n(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:341
static void _addTargetForLanguage(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *sLanguage, const char *installPath)
Definition: p_project.c:375
static int _writeConfigH(const GWB_PROJECT *project)
Definition: p_project.c:279
static void _setProjectVersionFromProjectAttributes(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:200
int GWB_ParseTarget(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_target.c:36
int GWB_Parser_ParseSubdirs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWB_PARSER_PARSE_ELEMENT_FN fn)
Definition: parser.c:367
GWEN_STRINGLIST * GWB_Parser_ReadXmlDataIntoStringList(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
Definition: parser.c:283
int GWB_Parser_ParseWellKnownElements(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn)
Definition: parser.c:942
GWB_TARGET * GWB_Parser_AddTargetForSourceFile(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWBUILD_TARGETTYPE targetType, const char *fileName, const char *fileType, const char *builderName, const char *installPath)
Definition: parser.c:1054
int GWB_Parser_ParseSourcesOrHeaders(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, uint32_t fileFlags, const char *defaultTypeName, const char *defaultBuilder)
Definition: parser.c:979
#define GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST
Definition: parser.h:25
void GWB_Project_SetSoVersion(GWB_PROJECT *project, int vCurrent, int vAge, int vRevision)
Definition: project.c:143
GWB_KEYVALUEPAIR_LIST * GWB_Project_GetDefineList(const GWB_PROJECT *project)
Definition: project.c:291
uint32_t GWB_Project_GetFlags(const GWB_PROJECT *project)
Definition: project.c:173
void GWB_Project_SetVersion(GWB_PROJECT *project, int vMajor, int vMinor, int vPatchlevel, int vBuild, const char *vTag)
Definition: project.c:96
int GWB_Project_GetVersionPatchlevel(const GWB_PROJECT *project)
Definition: project.c:122
int GWB_Project_GetSoVersionRevision(const GWB_PROJECT *project)
Definition: project.c:166
int GWB_Project_GetSoVersionAge(const GWB_PROJECT *project)
Definition: project.c:159
int GWB_Project_GetVersionMinor(const GWB_PROJECT *project)
Definition: project.c:115
void GWB_Project_SetDefineQuoted(GWB_PROJECT *project, const char *name, const char *value)
Definition: project.c:316
int GWB_Project_GetSoVersionCurrent(const GWB_PROJECT *project)
Definition: project.c:152
const char * GWB_Project_GetVersionTag(const GWB_PROJECT *project)
Definition: project.c:136
void GWB_Project_AddFlags(GWB_PROJECT *project, uint32_t fl)
Definition: project.c:187
void GWB_Project_SetDefine(GWB_PROJECT *project, const char *name, const char *value)
Definition: project.c:298
int GWB_Project_GetVersionMajor(const GWB_PROJECT *project)
Definition: project.c:108
const char * GWB_Project_GetProjectName(const GWB_PROJECT *project)
Definition: project.c:77
void GWB_Project_SetProjectName(GWB_PROJECT *project, const char *s)
Definition: project.c:84
int GWB_Project_GetVersionBuild(const GWB_PROJECT *project)
Definition: project.c:129
#define GWB_PROJECT_FLAGS_CONFIG_H
Definition: project.h:27
struct GWB_PROJECT GWB_PROJECT
Definition: project.h:14
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:406
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:398
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:390
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition: stringlist.h:53
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
int GWEN_SyncIo_Helper_WriteFile(const char *fName, const uint8_t *ptrSource, uint64_t lenSource)
Definition: syncio.c:586
void GWB_Target_SetInstallName(GWB_TARGET *target, const char *s)
Definition: target.c:97
struct GWB_TARGET GWB_TARGET
Definition: target.h:17
void GWB_Utils_VersionToDbVar(GWEN_DB_NODE *db, const char *dbVarName, int vmajor, int vminor, int vpatchlevel, int vbuild, const char *vtag)
Definition: utils.c:794
int GWB_Utils_VersionStringToDb(GWEN_DB_NODE *db, const char *prefix, const char *s)
Definition: utils.c:630
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
Definition: xml.c:239
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
Definition: xml.c:705
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
Definition: xml.c:712
int GWEN_XMLNode_ExpandProperties(const GWEN_XMLNODE *n, GWEN_DB_NODE *dbVars)
Definition: xml.c:634
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
Definition: xml.c:370
int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue)
Definition: xml.c:263
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:156