gwenhywfar  5.10.1
p_checkcompiler.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 
21 #include <ctype.h>
22 
23 
24 
25 static int _parseChildNodes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
26 static int _parseArg(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
27 
28 
29 
30 
31 
32 
33 int GWB_ParseCheckCompiler(GWEN_UNUSED GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
34 {
35  int rv;
36 
37  rv=_parseChildNodes(currentContext, xmlNode);
38  if (rv<0) {
39  DBG_INFO(NULL, "here (%d)", rv);
40  return rv;
41  }
42 
43  return 0;
44 }
45 
46 
47 
48 int _parseChildNodes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
49 {
50  GWEN_XMLNODE *n;
51 
52  n=GWEN_XMLNode_GetFirstTag(xmlNode);
53  while (n) {
54  const char *name;
55 
56  name=GWEN_XMLNode_GetData(n);
57  if (name && *name) {
58  int rv;
59 
60  DBG_DEBUG(NULL, "Handling element \"%s\"", name);
61 
62  if (strcasecmp(name, "arg")==0)
63  rv=_parseArg(currentContext, n);
64  else {
65  DBG_INFO(NULL, "Element not handled");
66  rv=0;
67  }
68  if (rv<0) {
69  DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name);
70  return rv;
71  }
72  }
73 
75  }
76 
77  return 0;
78 }
79 
80 
81 
82 int _parseArg(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
83 {
84  int rv;
85  const char *sName;
86  GWEN_DB_NODE *db;
87  GWEN_BUFFER *argsBuffer;
88 
89  db=GWB_Context_GetVars(currentContext);
90 
91  rv=GWEN_XMLNode_ExpandProperties(xmlNode, db);
92  if (rv<0) {
93  DBG_INFO(NULL, "here (%d)", rv);
94  return rv;
95  }
96 
97  sName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL);
98  if (!(sName && *sName)) {
99  DBG_ERROR(NULL, "Dependency has no name");
100  return GWEN_ERROR_GENERIC;
101  }
102 
103  argsBuffer=GWB_Parser_ReadXmlDataIntoBufferAndExpand(GWB_Context_GetVars(currentContext), xmlNode);
104  if (argsBuffer) {
105  rv=GWB_Tools_CheckCompilerArgs(currentContext, GWEN_Buffer_GetStart(argsBuffer));
106  if (rv<0) {
107  DBG_INFO(NULL, "here (%d)", rv);
108  return rv;
109  }
110  else if (rv==0) {
112  fprintf(stdout, " compiler args %s: TRUE\n", sName);
113  }
114  else {
116  fprintf(stdout, " compiler args %s: FALSE\n", sName);
117  }
118  }
119  return 0;
120 }
121 
122 
123 
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
struct GWB_CONTEXT GWB_CONTEXT
Definition: context.h:17
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition: db.h:121
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
Definition: xml.c:239
#define NULL
Definition: binreloc.c:300
struct GWB_PROJECT GWB_PROJECT
Definition: project.h:14
#define GWEN_LOGDOMAIN
Definition: logger.h:35
GWEN_BUFFER * GWB_Parser_ReadXmlDataIntoBufferAndExpand(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
Definition: parser.c:307
int GWB_Tools_CheckCompilerArgs(GWB_CONTEXT *context, const char *compilerArgs)
Definition: trycompile.c:89
GWEN_DB_NODE * GWB_Context_GetVars(const GWB_CONTEXT *ctx)
Definition: context.c:427
#define DBG_DEBUG(dbg_logger, format, args...)
Definition: debug.h:214
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
Definition: xml.c:712
static int _parseChildNodes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
#define GWEN_ERROR_GENERIC
Definition: error.h:62
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
#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 GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition: db.c:997
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
static int _parseArg(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
int GWEN_XMLNode_ExpandProperties(const GWEN_XMLNODE *n, GWEN_DB_NODE *dbVars)
Definition: xml.c:634
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:156
int GWB_ParseCheckCompiler(GWEN_UNUSED GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
#define GWEN_UNUSED