gwenhywfar  5.10.1
p_buildfiles.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 
18 
19 #include <gwenhywfar/debug.h>
20 #include <gwenhywfar/text.h>
21 
22 
23 
24 
25 static GWB_BUILD_CMD *_parseBuildCmd(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
26 static GWB_BUILD_SUBCMD *_parseSubCmd(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext,
27  GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd);
28 static GWEN_DB_NODE *_prepareCmdDb(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext);
29 static void _parseAndSetBuildMessage(GWB_BUILD_SUBCMD *buildSubCmd, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd);
30 static int _parseBuildInputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
31 static int _parseBuildOutputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
33  GWB_CONTEXT *currentContext,
34  GWEN_XMLNODE *xmlNode,
35  GWEN_DB_NODE *dbForCmd);
36 
37 static int _readFileList(GWEN_XMLNODE *xmlNode,
38  GWEN_DB_NODE *dbVars,
39  const char *sCurrentRelativeDir,
40  GWB_FILE_LIST2 *projectFileList,
41  GWB_FILE_LIST2 *targetFileList,
42  uint32_t flagsToAdd);
43 static int _readFilesFromDataNode(GWEN_XMLNODE *xmlNode,
44  GWEN_DB_NODE *dbVars,
45  const char *sCurrentRelativeDir,
46  GWB_FILE_LIST2 *projectFileList,
47  GWB_FILE_LIST2 *targetFileList,
48  uint32_t flagsToAdd);
49 static int _readFileListFromTagNode(GWEN_XMLNODE *xmlNode,
50  const GWB_FILE_LIST2 *projectFileList,
51  GWB_FILE_LIST2 *targetFileList);
52 static void _addFilePathsToDb(GWB_CONTEXT *currentContext,
53  const GWB_FILE_LIST2 *fileList,
54  GWEN_DB_NODE *db,
55  const char *varName);
56 
57 
58 
59 
60 
61 
62 int GWB_ParseBuildFiles(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
63 {
64  GWB_TARGET *target;
65  GWB_BUILD_CMD *bcmd;
66  GWB_BUILD_SUBCMD *buildSubCmd;
67  GWEN_DB_NODE *dbForCmd;
68 
69  target=GWB_Context_GetCurrentTarget(currentContext);
70 
71  bcmd=_parseBuildCmd(project, currentContext, xmlNode);
72  if (bcmd==NULL) {
73  DBG_INFO(NULL, "here");
74  return GWEN_ERROR_GENERIC;
75  }
76 
77  dbForCmd=_prepareCmdDb(bcmd, currentContext);
78  if (dbForCmd==NULL) {
79  DBG_INFO(NULL, "here");
80  GWB_BuildCmd_free(bcmd);
81  return GWEN_ERROR_GENERIC;
82  }
83 
84  buildSubCmd=_parseSubCmd(bcmd, currentContext, xmlNode, dbForCmd);
85  if (buildSubCmd==NULL) {
86  DBG_INFO(NULL, "here");
87  GWEN_DB_Group_free(dbForCmd);
88  GWB_BuildCmd_free(bcmd);
89  return GWEN_ERROR_GENERIC;
90  }
91  _parseAndSetBuildMessage(buildSubCmd, xmlNode, dbForCmd);
92 
93  GWB_BuildCmd_AddBuildCommand(bcmd, buildSubCmd);
94 
95  if (target)
96  GWB_Target_AddExplicitBuild(target, bcmd);
97  else
98  GWB_Project_AddExplicitBuild(project, bcmd);
99  GWEN_DB_Group_free(dbForCmd);
100 
101  return 0;
102 }
103 
104 
105 
106 GWB_BUILD_CMD *_parseBuildCmd(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
107 {
108  GWEN_XMLNODE *n;
109  GWB_BUILD_CMD *bcmd;
110  int rv;
111  const char *s;
112 
113  bcmd=GWB_BuildCmd_new();
115 
116  s=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL);
117  if (s && *s)
119 
120  s=GWEN_XMLNode_GetProperty(xmlNode, "auto", "TRUE");
121  if (s && *s && 0==strcasecmp(s, "TRUE"))
123 
124  n=GWEN_XMLNode_FindFirstTag(xmlNode, "input", NULL, NULL);
125  if (n) {
126  rv=_parseBuildInputFiles(bcmd, project, currentContext, n);
127  if (rv<0) {
128  DBG_INFO(NULL, "here (%d)", rv);
129  GWB_BuildCmd_free(bcmd);
130  return NULL;
131  }
132  }
133 
134  n=GWEN_XMLNode_FindFirstTag(xmlNode, "output", NULL, NULL);
135  if (n) {
136  rv=_parseBuildOutputFiles(bcmd, project, currentContext, n);
137  if (rv<0) {
138  DBG_INFO(NULL, "here (%d)", rv);
139  GWB_BuildCmd_free(bcmd);
140  return NULL;
141  }
142  }
143 
144  return bcmd;
145 }
146 
147 
148 
150 {
151  GWEN_DB_NODE *dbForCmd;
152 
153  dbForCmd=GWEN_DB_Group_new("dbForCmd");
154  _addFilePathsToDb(currentContext, GWB_BuildCmd_GetInFileList2(bcmd), dbForCmd, "INPUT");
155  _addFilePathsToDb(currentContext, GWB_BuildCmd_GetOutFileList2(bcmd), dbForCmd, "OUTPUT");
156  return dbForCmd;
157 }
158 
159 
160 
162 {
163  GWEN_XMLNODE *n;
164 
165  n=GWEN_XMLNode_FindFirstTag(xmlNode, "cmd", NULL, NULL);
166  if (n) {
167  GWB_BUILD_SUBCMD *buildSubCmd;
168  const char *s;
169 
170  buildSubCmd=_parseBuildCommand(bcmd, currentContext, n, dbForCmd);
171  if (buildSubCmd==NULL) {
172  DBG_ERROR(NULL, "here");
173  return NULL;
174  }
175 
176  s=GWEN_XMLNode_GetProperty(n, "deleteOutFileFirst", "FALSE");
177  if (s && strcasecmp(s, "TRUE")==0)
179  return buildSubCmd;
180  }
181  return 0;
182 }
183 
184 
185 
187 {
188  GWEN_XMLNODE *n;
189 
190  n=GWEN_XMLNode_FindFirstTag(xmlNode, "buildMessage", NULL, NULL);
191  if (n) {
192  GWEN_BUFFER *dbuf;
193 
195  if (dbuf) {
197  GWEN_Buffer_free(dbuf);
198  }
199  }
200 }
201 
202 
203 
204 int _parseBuildInputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
205 {
206  int rv;
207 
208  rv=_readFileList(xmlNode,
209  GWB_Context_GetVars(currentContext),
210  GWB_Context_GetCurrentRelativeDir(currentContext),
211  GWB_Project_GetFileList(project),
213  0);
214  if (rv<0) {
215  DBG_INFO(NULL, "here (%d)", rv);
216  return rv;
217  }
218 
219  return 0;
220 }
221 
222 
223 
224 int _parseBuildOutputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
225 {
226  int rv;
227 
228  rv=_readFileList(xmlNode,
229  GWB_Context_GetVars(currentContext),
230  GWB_Context_GetCurrentRelativeDir(currentContext),
231  GWB_Project_GetFileList(project),
234  if (rv<0) {
235  DBG_INFO(NULL, "here (%d)", rv);
236  return rv;
237  }
238 
239  return 0;
240 }
241 
242 
243 
245  GWB_CONTEXT *currentContext,
246  GWEN_XMLNODE *xmlNode,
247  GWEN_DB_NODE *dbForCmd)
248 {
249  GWEN_BUFFER *dbuf;
250  const char *toolName;
251  GWB_BUILD_SUBCMD *buildSubCmd;
252  const char *s;
253  int rv;
254 
255  rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext));
256  if (rv<0) {
257  DBG_INFO(NULL, "here (%d)", rv);
258  return NULL;
259  }
260 
261  toolName=GWEN_XMLNode_GetProperty(xmlNode, "tool", NULL);
262  if (!(toolName && *toolName)) {
263  DBG_ERROR(NULL, "No tool in <cmd>");
264  return NULL;
265  }
266 
267  dbuf=GWB_Parser_ReadXmlDataIntoBufferAndExpand(dbForCmd, xmlNode);
268  buildSubCmd=GWB_BuildSubCmd_new();
269  GWB_BuildSubCmd_SetCommand(buildSubCmd, toolName);
270  if (dbuf) {
272  GWEN_Buffer_free(dbuf);
273  }
274 
275  s=GWEN_XMLNode_GetProperty(xmlNode, "checkDates", "TRUE");
276  if (s && strcasecmp(s, "TRUE")==0)
278 
279  return buildSubCmd;
280 }
281 
282 
283 
285  GWEN_DB_NODE *dbVars,
286  const char *sCurrentRelativeDir,
287  GWB_FILE_LIST2 *projectFileList,
288  GWB_FILE_LIST2 *targetFileList,
289  uint32_t flagsToAdd)
290 {
291  GWEN_XMLNODE *n;
292 
293  n=GWEN_XMLNode_GetChild(xmlNode);
294  while(n) {
296  int rv;
297 
298  tt=GWEN_XMLNode_GetType(n);
299  if (tt==GWEN_XMLNodeTypeTag)
300  rv=_readFileListFromTagNode(n, projectFileList, targetFileList);
301  else if (tt==GWEN_XMLNodeTypeData)
303  dbVars,
304  sCurrentRelativeDir,
305  projectFileList,
306  targetFileList,
307  flagsToAdd);
308  else
309  rv=0;
310  if (rv<0) {
311  DBG_INFO(NULL, "here (%d)", rv);
312  return rv;
313  }
314 
315  n=GWEN_XMLNode_Next(n);
316  }
317 
318  return 0;
319 }
320 
321 
322 
324  GWEN_DB_NODE *dbVars,
325  const char *sCurrentRelativeDir,
326  GWB_FILE_LIST2 *projectFileList,
327  GWB_FILE_LIST2 *targetFileList,
328  uint32_t flagsToAdd)
329 {
330  const char *s;
331 
332  s=GWEN_XMLNode_GetData(xmlNode);
333  if (s && *s) {
334  int rv;
335  GWEN_BUFFER *buf;
336 
337  buf=GWEN_Buffer_new(0, 256, 0, 1);
338  rv=GWEN_DB_ReplaceVars(dbVars, s, buf);
339  if(rv<0) {
340  DBG_INFO(NULL, "here (%d)", rv);
341  GWEN_Buffer_free(buf);
342  return rv;
343  }
344  if (GWEN_Buffer_GetUsedBytes(buf)) {
345  GWEN_STRINGLIST *sl;
346 
348  if (sl==NULL) {
349  DBG_ERROR(NULL, "Could not generate string list from data [%s]", GWEN_Buffer_GetStart(buf));
350  GWEN_Buffer_free(buf);
351  return GWEN_ERROR_GENERIC;
352  }
353  GWBUILD_AddFilesFromStringList(projectFileList,
354  sCurrentRelativeDir,
355  sl,
356  targetFileList,
357  flagsToAdd,
358  0);
360  }
361  GWEN_Buffer_free(buf);
362  }
363  return 0;
364 }
365 
366 
367 
369  const GWB_FILE_LIST2 *projectFileList,
370  GWB_FILE_LIST2 *targetFileList)
371 {
372  const char *tagName;
373 
374  tagName=GWEN_XMLNode_GetData(xmlNode);
375  if (tagName && *tagName && strcasecmp(tagName, "files")==0) {
376  int index;
377  const char *pattern;
378 
379  pattern=GWEN_XMLNode_GetProperty(xmlNode, "match", NULL);
380  index=GWEN_XMLNode_GetIntProperty(xmlNode, "index", -1);
381 
382  if (index>=0) {
383  GWB_FILE *file;
384 
385  file=GWB_File_List2_GetAt(projectFileList, index);
386  if (file)
387  GWB_File_List2_PushBack(targetFileList, file);
388  }
389  else {
390  GWB_FILE_LIST2_ITERATOR *it;
391 
392  it=GWB_File_List2_First(projectFileList);
393  if (it) {
394  GWB_FILE *file;
395 
396  file=GWB_File_List2Iterator_Data(it);
397  while(file) {
398  const char *fname;
399 
400  fname=GWB_File_GetName(file);
401  if (fname) {
402  if (pattern==NULL || -1!=GWEN_Text_ComparePattern(fname, pattern, 0))
403  GWB_File_List2_PushBack(targetFileList, file);
404  }
405  file=GWB_File_List2Iterator_Next(it);
406  }
407 
408  GWB_File_List2Iterator_free(it);
409  }
410  }
411  return 0;
412  }
413  else {
414  DBG_ERROR(NULL, "Unknown tag name \"%s\"", tagName);
415  return GWEN_ERROR_GENERIC;
416  }
417 }
418 
419 
420 
421 void _addFilePathsToDb(GWB_CONTEXT *currentContext,
422  const GWB_FILE_LIST2 *fileList,
423  GWEN_DB_NODE *db,
424  const char *varName)
425 {
426  GWB_FILE_LIST2_ITERATOR *it;
427 
428  it=GWB_File_List2_First(fileList);
429  if (it) {
430  const GWB_FILE *file;
431  GWEN_BUFFER *fbuf;
432 
433  fbuf=GWEN_Buffer_new(0, 256, 0, 1);
434  file=GWB_File_List2Iterator_Data(it);
435  while(file) {
436  const char *folder;
437  int useBuildDir;
438 
439  useBuildDir=GWB_File_GetFlags(file) & GWB_FILE_FLAGS_GENERATED;
440  folder=GWB_File_GetFolder(file);
441  GWB_Builder_AddRelativeFolderToBuffer(currentContext, folder, useBuildDir, fbuf);
442  if (GWEN_Buffer_GetUsedBytes(fbuf))
445  GWEN_DB_SetCharValue(db, 0, varName, GWEN_Buffer_GetStart(fbuf));
446 
447  GWEN_Buffer_Reset(fbuf);
448  file=GWB_File_List2Iterator_Next(it);
449  }
450  GWEN_Buffer_free(fbuf);
451 
452  GWB_File_List2Iterator_free(it);
453  }
454 
455 }
456 
457 
458 
int GWEN_DB_ReplaceVars(GWEN_DB_NODE *db, const char *s, GWEN_BUFFER *dbuf)
Definition: db.c:1951
GWB_FILE_LIST2 * GWB_BuildCmd_GetInFileList2(const GWB_BUILD_CMD *bcmd)
Definition: buildcmd.c:255
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
struct GWB_CONTEXT GWB_CONTEXT
Definition: context.h:17
static int _readFileList(GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbVars, const char *sCurrentRelativeDir, GWB_FILE_LIST2 *projectFileList, GWB_FILE_LIST2 *targetFileList, uint32_t flagsToAdd)
Definition: p_buildfiles.c:284
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
static int _readFileListFromTagNode(GWEN_XMLNODE *xmlNode, const GWB_FILE_LIST2 *projectFileList, GWB_FILE_LIST2 *targetFileList)
Definition: p_buildfiles.c:368
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
void GWB_BuildCmd_SetFolder(GWB_BUILD_CMD *bcmd, const char *s)
Definition: buildcmd.c:173
struct GWB_FILE GWB_FILE
Definition: file.h:18
void GWB_BuildSubCmd_SetArguments(GWB_BUILD_SUBCMD *cmd, const char *s)
Definition: buildsubcmd.c:122
void GWB_Project_AddExplicitBuild(GWB_PROJECT *project, GWB_BUILD_CMD *bcmd)
Definition: project.c:413
#define NULL
Definition: binreloc.c:300
static void _addFilePathsToDb(GWB_CONTEXT *currentContext, const GWB_FILE_LIST2 *fileList, GWEN_DB_NODE *db, const char *varName)
Definition: p_buildfiles.c:421
static GWB_BUILD_SUBCMD * _parseSubCmd(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd)
Definition: p_buildfiles.c:161
struct GWB_PROJECT GWB_PROJECT
Definition: project.h:14
void GWB_BuildSubCmd_SetCommand(GWB_BUILD_SUBCMD *cmd, const char *s)
Definition: buildsubcmd.c:107
static void _parseAndSetBuildMessage(GWB_BUILD_SUBCMD *buildSubCmd, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd)
Definition: p_buildfiles.c:186
#define GWB_BUILD_CMD_FLAGS_CHECK_DATES
Definition: buildcmd.h:25
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
void GWBUILD_AddFilesFromStringList(GWB_FILE_LIST2 *mainFileList, const char *sFolder, const GWEN_STRINGLIST *fileNameList, GWB_FILE_LIST2 *outFileList, uint32_t flagsToAdd, int copyFileForOutList)
Definition: gwenbuild.c:1009
void GWB_Builder_AddRelativeFolderToBuffer(const GWB_CONTEXT *context, const char *folder, int useBuildDir, GWEN_BUFFER *argBuffer)
Definition: builder.c:276
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:650
static GWEN_DB_NODE * _prepareCmdDb(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext)
Definition: p_buildfiles.c:149
static int _parseBuildOutputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_buildfiles.c:224
GWEN_BUFFER * GWB_Parser_ReadXmlDataIntoBufferAndExpand(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
Definition: parser.c:307
GWEN_XMLNODE * GWEN_XMLNode_GetChild(const GWEN_XMLNODE *n)
Definition: xml.c:409
const char * GWB_File_GetFolder(const GWB_FILE *f)
Definition: file.c:127
GWB_BUILD_SUBCMD * GWB_BuildSubCmd_new(void)
Definition: buildsubcmd.c:25
const char * GWB_File_GetName(const GWB_FILE *f)
Definition: file.c:146
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:62
GWB_FILE_LIST2 * GWB_Project_GetFileList(const GWB_PROJECT *project)
Definition: project.c:205
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:776
GWEN_DB_NODE * GWB_Context_GetVars(const GWB_CONTEXT *ctx)
Definition: context.c:427
void GWB_BuildSubCmd_SetBuildMessage(GWB_BUILD_SUBCMD *cmd, const char *s)
Definition: buildsubcmd.c:137
void GWB_BuildCmd_SetBuilderName(GWB_BUILD_CMD *bcmd, const char *s)
Definition: buildcmd.c:155
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
GWEN_XMLNODE_TYPE GWEN_XMLNode_GetType(const GWEN_XMLNODE *n)
Definition: xml.c:458
void GWB_Target_AddExplicitBuild(GWB_TARGET *target, GWB_BUILD_CMD *bcmd)
Definition: target.c:300
#define GWB_BUILD_CMD_FLAGS_DEL_OUTFILES
Definition: buildcmd.h:26
GWB_FILE_LIST2 * GWB_BuildCmd_GetOutFileList2(const GWB_BUILD_CMD *bcmd)
Definition: buildcmd.c:270
GWEN_XMLNODE * GWEN_XMLNode_Next(const GWEN_XMLNODE *n)
Definition: xml.c:465
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
#define GWEN_ERROR_GENERIC
Definition: error.h:62
#define GWB_BUILD_CMD_FLAGS_AUTO
Definition: buildcmd.h:27
static int _parseBuildInputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_buildfiles.c:204
GWEN_STRINGLIST * GWEN_StringList_fromString(const char *str, const char *delimiters, int checkDouble)
Definition: stringlist.c:746
static GWB_BUILD_CMD * _parseBuildCmd(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
Definition: p_buildfiles.c:106
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
struct GWB_BUILD_SUBCMD GWB_BUILD_SUBCMD
Definition: buildsubcmd.h:16
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
GWEN_XMLNODE_TYPE
Definition: xml.h:142
static GWB_BUILD_SUBCMD * _parseBuildCommand(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd)
Definition: p_buildfiles.c:244
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
Definition: xml.c:370
int GWEN_Text_ComparePattern(const char *w, const char *p, int sensecase)
Definition: text.c:1208
GWB_BUILD_CMD * GWB_BuildCmd_new(void)
Definition: buildcmd.c:42
static int _readFilesFromDataNode(GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbVars, const char *sCurrentRelativeDir, GWB_FILE_LIST2 *projectFileList, GWB_FILE_LIST2 *targetFileList, uint32_t flagsToAdd)
Definition: p_buildfiles.c:323
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition: db.c:997
void GWB_BuildCmd_AddFlags(GWB_BUILD_CMD *bcmd, uint32_t i)
Definition: buildcmd.c:134
struct GWB_BUILD_CMD GWB_BUILD_CMD
Definition: buildcmd.h:20
uint32_t GWB_File_GetFlags(const GWB_FILE *f)
Definition: file.c:99
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
GWB_TARGET * GWB_Context_GetCurrentTarget(const GWB_CONTEXT *ctx)
Definition: context.c:460
void GWB_BuildCmd_AddBuildCommand(GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *cmd)
Definition: buildcmd.c:217
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
const char * GWB_Context_GetCurrentRelativeDir(const GWB_CONTEXT *ctx)
Definition: context.c:255
void GWB_BuildCmd_free(GWB_BUILD_CMD *bcmd)
Definition: buildcmd.c:97
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:156
#define GWB_FILE_FLAGS_GENERATED
Definition: file.h:23
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989
GWB_FILE * GWB_File_List2_GetAt(const GWB_FILE_LIST2 *fileList, int index)
Definition: file.c:643