gwenhywfar 5.14.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
25static int _parseChildNodes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
26static int _parseArg(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
27
28
29
30
31
32
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
48int _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
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
82int _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
#define NULL
Definition binreloc.c:300
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
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition db.c:997
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition db.h:121
struct GWEN_DB_NODE GWEN_DB_NODE
Definition db.h:228
#define DBG_INFO(dbg_logger, format,...)
Definition debug.h:181
#define DBG_ERROR(dbg_logger, format,...)
Definition debug.h:97
#define DBG_DEBUG(dbg_logger, format,...)
Definition debug.h:214
#define GWEN_ERROR_GENERIC
Definition error.h:62
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition buffer.h:38
#define GWEN_UNUSED
#define GWEN_LOGDOMAIN
Definition logger.h:32
static int _parseArg(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
static int _parseChildNodes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
int GWB_ParseCheckCompiler(GWEN_UNUSED GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
GWEN_BUFFER * GWB_Parser_ReadXmlDataIntoBufferAndExpand(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
Definition parser.c:307
struct GWB_PROJECT GWB_PROJECT
Definition project.h:14
int GWB_Tools_CheckCompilerArgs(GWB_CONTEXT *context, const char *compilerArgs)
Definition trycompile.c:89
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
struct GWEN__XMLNODE GWEN_XMLNODE
Definition xml.h:156