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 
35 static int _parseVersions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
36 static int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
37 static int _writeConfigH(const GWB_PROJECT *project);
38 static int _parseDefine(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
39 static int _parseI18n(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
40 static void _addTargetForLanguage(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *sLanguage, const char *installPath);
41 static int _setProjectVersionFromString(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, const char *sVersionString);
42 static void _setProjectVersionFromProjectAttributes(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, GWEN_XMLNODE *xmlNode);
43 static void _writeProjectVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars);
44 static void _writeProjectSoVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars);
45 
46 
47 
48 
49 
50 
51 int 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");
63  return GWEN_ERROR_BAD_DATA;
64  }
65 
66  GWB_Project_SetProjectName(project, s);
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 
101 int _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 
122  GWB_Project_SetSoVersion(project,
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 
173 int _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  }
188  GWB_Project_SetVersion(project,
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 {
202  GWB_Project_SetVersion(project,
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",
213  GWB_Project_GetVersionTag(project));
214 }
215 
216 
217 
218 int _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 
279 int _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 
310 int _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 
341 int _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 
349  sl=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), xmlNode);
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 
375 void _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 
396  target=GWB_Parser_AddTargetForSourceFile(project,
397  currentContext,
399  GWEN_Buffer_GetStart(fileNameBuffer),
400  "po",
401  "msgfmt",
402  installPathBuffer?GWEN_Buffer_GetStart(installPathBuffer):NULL);
403 
404  GWEN_Buffer_Reset(fileNameBuffer);
405  GWEN_Buffer_AppendString(fileNameBuffer, GWB_Project_GetProjectName(project));
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 
static int _setProjectVersionFromString(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, const char *sVersionString)
Definition: p_project.c:173
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition: stringlist.h:53
int GWB_ParseCheckFunctions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
struct GWB_CONTEXT GWB_CONTEXT
Definition: context.h:17
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition: db.h:121
GWEN_STRINGLIST * GWB_Parser_ReadXmlDataIntoStringList(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
Definition: parser.c:283
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition: db.c:421
#define GWEN_DIR_SEPARATOR_S
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
Definition: buffer.c:277
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
Definition: xml.c:239
const char * GWB_Project_GetVersionTag(const GWB_PROJECT *project)
Definition: project.c:136
void GWB_Target_SetInstallName(GWB_TARGET *target, const char *s)
Definition: target.c:97
GWB_KEYVALUEPAIR_LIST * GWB_Project_GetDefineList(const GWB_PROJECT *project)
Definition: project.c:291
#define NULL
Definition: binreloc.c:300
void GWB_Project_AddFlags(GWB_PROJECT *project, uint32_t fl)
Definition: project.c:187
static int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:218
int GWB_ParseCheckHeaders(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
void GWB_Project_SetDefine(GWB_PROJECT *project, const char *name, const char *value)
Definition: project.c:298
struct GWB_PROJECT GWB_PROJECT
Definition: project.h:14
static void _writeProjectSoVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars)
Definition: p_project.c:160
#define DBG_WARN(dbg_logger, format, args...)
Definition: debug.h:125
#define GWEN_LOGDOMAIN
Definition: logger.h:35
int GWB_Project_GetVersionBuild(const GWB_PROJECT *project)
Definition: project.c:129
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
int GWB_ParseBuildFiles(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_buildfiles.c:62
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:390
int GWB_Parser_ParseSubdirs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWB_PARSER_PARSE_ELEMENT_FN fn)
Definition: parser.c:367
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:650
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:406
static int _parseDefine(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:310
void GWB_Project_SetVersion(GWB_PROJECT *project, int vMajor, int vMinor, int vPatchlevel, int vBuild, const char *vTag)
Definition: project.c:96
int GWB_Parser_ParseWellKnownElements(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn)
Definition: parser.c:942
int GWB_Project_GetVersionPatchlevel(const GWB_PROJECT *project)
Definition: project.c:122
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
void GWB_Project_SetSoVersion(GWB_PROJECT *project, int vCurrent, int vAge, int vRevision)
Definition: project.c:143
GWEN_DB_NODE * GWB_Context_GetVars(const GWB_CONTEXT *ctx)
Definition: context.c:427
const char * GWB_Project_GetProjectName(const GWB_PROJECT *project)
Definition: project.c:77
int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue)
Definition: xml.c:263
struct GWB_TARGET GWB_TARGET
Definition: target.h:17
int GWB_ParseOption(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_options.c:35
int GWB_Project_GetSoVersionRevision(const GWB_PROJECT *project)
Definition: project.c:166
#define DBG_DEBUG(dbg_logger, format, args...)
Definition: debug.h:214
#define GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST
Definition: parser.h:25
int GWB_Project_GetVersionMajor(const GWB_PROJECT *project)
Definition: project.c:108
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
Definition: xml.c:712
static void _writeProjectVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars)
Definition: p_project.c:139
static int _writeConfigH(const GWB_PROJECT *project)
Definition: p_project.c:279
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
static void _setProjectVersionFromProjectAttributes(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:200
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
#define GWEN_ERROR_GENERIC
Definition: error.h:62
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
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
Definition: db.c:971
int GWB_ParseCheckLibs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_checklibs.c:32
static int _parseI18n(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:341
int GWB_ParseProject(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:51
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
int GWEN_DB_SetCharValueFromInt(GWEN_DB_NODE *n, uint32_t flags, const char *path, int val)
Definition: db.c:1036
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
#define GWB_PROJECT_FLAGS_CONFIG_H
Definition: project.h:27
int GWB_ParseDependencies(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
static void _addTargetForLanguage(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *sLanguage, const char *installPath)
Definition: p_project.c:375
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
Definition: xml.c:705
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
Definition: xml.c:370
int GWB_Project_GetVersionMinor(const GWB_PROJECT *project)
Definition: project.c:115
void GWB_Project_SetProjectName(GWB_PROJECT *project, const char *s)
Definition: project.c:84
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition: db.c:997
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:398
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
static int _parseVersions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_project.c:101
uint32_t GWB_Project_GetFlags(const GWB_PROJECT *project)
Definition: project.c:173
int GWB_Utils_VersionStringToDb(GWEN_DB_NODE *db, const char *prefix, const char *s)
Definition: utils.c:630
int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
Definition: db.c:1163
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition: db.c:173
int GWEN_XMLNode_ExpandProperties(const GWEN_XMLNODE *n, GWEN_DB_NODE *dbVars)
Definition: xml.c:634
void GWB_Project_SetDefineQuoted(GWB_PROJECT *project, const char *name, const char *value)
Definition: project.c:316
int GWB_ParseCheckProgs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_checkprogs.c:34
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
int GWB_Project_GetSoVersionCurrent(const GWB_PROJECT *project)
Definition: project.c:152
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:156
int GWB_ParseCheckCompiler(GWEN_UNUSED GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
int GWEN_SyncIo_Helper_WriteFile(const char *fName, const uint8_t *ptrSource, uint64_t lenSource)
Definition: syncio.c:586
int GWB_ParseTarget(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_target.c:36
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989
int GWB_Project_GetSoVersionAge(const GWB_PROJECT *project)
Definition: project.c:159