Projekt

Allgemein

Profil

Herunterladen (2,77 KB) Statistiken
| Zweig: | Markierung: | Revision:
/***************************************************************************
begin : Mon Feb 08 2021
copyright : (C) 2021 by Martin Preuss
email : martin@libchipcard.de

***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif


#include "gwenbuild/parser/p_checkcompiler.h"
#include "gwenbuild/parser/parser.h"
#include "gwenbuild/tools/trycompile.h"

#include <gwenhywfar/debug.h>

#include <ctype.h>



static int _parseChildNodes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);
static int _parseArg(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode);






int GWB_ParseCheckCompiler(GWEN_UNUSED GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
{
int rv;

rv=_parseChildNodes(currentContext, xmlNode);
if (rv<0) {
DBG_INFO(NULL, "here (%d)", rv);
return rv;
}

return 0;
}



int _parseChildNodes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
{
GWEN_XMLNODE *n;

n=GWEN_XMLNode_GetFirstTag(xmlNode);
while (n) {
const char *name;

name=GWEN_XMLNode_GetData(n);
if (name && *name) {
int rv;

DBG_DEBUG(NULL, "Handling element \"%s\"", name);

if (strcasecmp(name, "arg")==0)
rv=_parseArg(currentContext, n);
else {
DBG_INFO(NULL, "Element not handled");
rv=0;
}
if (rv<0) {
DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name);
return rv;
}
}

n=GWEN_XMLNode_GetNextTag(n);
}

return 0;
}



int _parseArg(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
{
int rv;
const char *sName;
GWEN_DB_NODE *db;
GWEN_BUFFER *argsBuffer;

db=GWB_Context_GetVars(currentContext);

rv=GWEN_XMLNode_ExpandProperties(xmlNode, db);
if (rv<0) {
DBG_INFO(NULL, "here (%d)", rv);
return rv;
}

sName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL);
if (!(sName && *sName)) {
DBG_ERROR(NULL, "Dependency has no name");
return GWEN_ERROR_GENERIC;
}

argsBuffer=GWB_Parser_ReadXmlDataIntoBufferAndExpand(GWB_Context_GetVars(currentContext), xmlNode);
if (argsBuffer) {
rv=GWB_Tools_CheckCompilerArgs(currentContext, GWEN_Buffer_GetStart(argsBuffer));
if (rv<0) {
DBG_INFO(NULL, "here (%d)", rv);
return rv;
}
else if (rv==0) {
GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, sName, "TRUE");
fprintf(stdout, " compiler args %s: TRUE\n", sName);
}
else {
GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, sName, "FALSE");
fprintf(stdout, " compiler args %s: FALSE\n", sName);
}
}
return 0;
}



(4-4/23)