gwenhywfar 5.12.0
parser.c File Reference
#include "gwenbuild/parser/parser.h"
#include "gwenbuild/parser/p_project.h"
#include "gwenbuild/utils.h"
#include <gwenhywfar/debug.h>
#include <gwenhywfar/syncio.h>
#include <gwenhywfar/process.h>
#include <gwenhywfar/directory.h>
#include <gwenhywfar/text.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
Include dependency graph for parser.c:

Go to the source code of this file.

Functions

static void _addBuildFileNameToGwBuild (GWENBUILD *gwbuild, const GWB_CONTEXT *currentContext, const char *fileName)
static void _appendVarValue (GWEN_DB_NODE *db, const char *name, const char *newValue)
static int _getAndCheckRequiredGwenVersion (GWEN_XMLNODE *xmlGwbuildNode)
static int _getFilePermissions (const char *fname)
static GWEN_BUFFER_getSourcePathForFileName (const GWB_CONTEXT *currentContext, const char *fileName)
static int _parseIfNotVarHasValue (GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn)
static int _parseIfNotVarMatches (GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn)
static int _parseIfVarHasValue (GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn)
static int _parseIfVarMatches (GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn)
static int _parseSetVar (GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
static int _parseSubdir (GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *sFolder, GWB_PARSER_PARSE_ELEMENT_FN fn)
static int _parseWriteFile (GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
static int _readModifyWriteFile (GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbContextVars, const char *sSourceFile, const char *sDestFile)
static int _setFilePermissions (const char *fname, int perms)
static int _varHasValue (GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode)
GWB_TARGETGWB_Parser_AddTargetForSourceFile (GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWBUILD_TARGETTYPE targetType, const char *fileName, const char *fileType, const char *builderName, const char *installPath)
GWB_CONTEXTGWB_Parser_CopyContextForSubdir (const GWB_CONTEXT *sourceContext, const char *folder)
GWB_CONTEXTGWB_Parser_CopyContextForTarget (const GWB_CONTEXT *sourceContext)
int GWB_Parser_ParseSourcesOrHeaders (GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, uint32_t fileFlags, const char *defaultTypeName, const char *defaultBuilder)
int GWB_Parser_ParseSubdirs (GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWB_PARSER_PARSE_ELEMENT_FN fn)
int GWB_Parser_ParseWellKnownElements (GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn)
GWEN_XMLNODEGWB_Parser_ReadBuildFile (GWENBUILD *gwbuild, const GWB_CONTEXT *currentContext, const char *fileName)
GWB_PROJECTGWB_Parser_ReadBuildTree (GWENBUILD *gwbuild, GWB_CONTEXT *currentContext, const char *srcDir, GWB_KEYVALUEPAIR_LIST *givenOptionList)
GWEN_BUFFERGWB_Parser_ReadNamedXmlDataIntoBufferAndExpand (GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode, const char *elem)
GWEN_BUFFERGWB_Parser_ReadXmlDataIntoBufferAndExpand (GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
GWEN_STRINGLISTGWB_Parser_ReadXmlDataIntoStringList (GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode, int ignoreDupes)
int GWB_Parser_ReplaceVarsBetweenAtSigns (const char *s, GWEN_BUFFER *dbuf, GWEN_DB_NODE *db)
void GWB_Parser_SetItemValue (GWEN_DB_NODE *db, const char *sId, const char *suffix, const char *value)

Function Documentation

◆ _addBuildFileNameToGwBuild()

void _addBuildFileNameToGwBuild ( GWENBUILD * gwbuild,
const GWB_CONTEXT * currentContext,
const char * fileName )
static

Definition at line 231 of file parser.c.

References GWB_Context_GetCurrentBuildDir(), GWB_Context_GetInitialSourceDir(), GWBUILD_AddBuildFilename(), GWEN_Buffer_AppendString(), GWEN_Buffer_free(), GWEN_Buffer_GetStart(), GWEN_Buffer_new(), and GWEN_DIR_SEPARATOR_S.

Referenced by GWB_Parser_ReadBuildFile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _appendVarValue()

void _appendVarValue ( GWEN_DB_NODE * db,
const char * name,
const char * newValue )
static

Definition at line 835 of file parser.c.

References GWEN_Buffer_AppendString(), GWEN_Buffer_free(), GWEN_Buffer_GetStart(), GWEN_Buffer_new(), GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_DB_GetCharValue(), GWEN_DB_SetCharValue(), and NULL.

Referenced by _parseSetVar().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _getAndCheckRequiredGwenVersion()

int _getAndCheckRequiredGwenVersion ( GWEN_XMLNODE * xmlGwbuildNode)
static

Definition at line 253 of file parser.c.

References DBG_ERROR, GWB_Utils_VersionStringToInt(), GWEN_ERROR_GENERIC, GWEN_XMLNode_GetProperty(), GWENHYWFAR_VERSION_BUILD, GWENHYWFAR_VERSION_MAJOR, GWENHYWFAR_VERSION_MINOR, GWENHYWFAR_VERSION_PATCHLEVEL, and NULL.

Referenced by GWB_Parser_ReadBuildFile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _getFilePermissions()

int _getFilePermissions ( const char * fname)
static

Definition at line 803 of file parser.c.

References DBG_ERROR, GWEN_ERROR_IO, and NULL.

Referenced by _readModifyWriteFile().

Here is the caller graph for this function:

◆ _getSourcePathForFileName()

GWEN_BUFFER * _getSourcePathForFileName ( const GWB_CONTEXT * currentContext,
const char * fileName )
static

Definition at line 214 of file parser.c.

References GWB_Context_GetCurrentSourceDir(), GWEN_Buffer_AppendString(), GWEN_Buffer_new(), and GWEN_DIR_SEPARATOR_S.

Referenced by _parseWriteFile(), and GWB_Parser_ReadBuildFile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _parseIfNotVarHasValue()

int _parseIfNotVarHasValue ( GWB_PROJECT * project,
GWB_CONTEXT * currentContext,
GWEN_XMLNODE * n,
GWB_PARSER_PARSE_ELEMENT_FN fn )
static

Definition at line 627 of file parser.c.

References _varHasValue(), GWEN_XMLNode_FindFirstTag(), and NULL.

Referenced by GWB_Parser_ParseWellKnownElements().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _parseIfNotVarMatches()

int _parseIfNotVarMatches ( GWB_PROJECT * project,
GWB_CONTEXT * currentContext,
GWEN_XMLNODE * n,
GWB_PARSER_PARSE_ELEMENT_FN fn )
static

Definition at line 549 of file parser.c.

References DBG_ERROR, DBG_INFO, GWB_Context_GetVars(), GWEN_DB_GetCharValue(), GWEN_ERROR_GENERIC, GWEN_Text_ComparePattern(), GWEN_XMLNode_FindFirstTag(), GWEN_XMLNode_GetProperty(), and NULL.

Referenced by GWB_Parser_ParseWellKnownElements().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _parseIfVarHasValue()

int _parseIfVarHasValue ( GWB_PROJECT * project,
GWB_CONTEXT * currentContext,
GWEN_XMLNODE * n,
GWB_PARSER_PARSE_ELEMENT_FN fn )
static

Definition at line 604 of file parser.c.

References _varHasValue(), GWEN_XMLNode_FindFirstTag(), and NULL.

Referenced by GWB_Parser_ParseWellKnownElements().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _parseIfVarMatches()

int _parseIfVarMatches ( GWB_PROJECT * project,
GWB_CONTEXT * currentContext,
GWEN_XMLNODE * n,
GWB_PARSER_PARSE_ELEMENT_FN fn )
static

Definition at line 494 of file parser.c.

References DBG_ERROR, DBG_INFO, GWB_Context_GetVars(), GWEN_DB_GetCharValue(), GWEN_ERROR_GENERIC, GWEN_Text_ComparePattern(), GWEN_XMLNode_FindFirstTag(), GWEN_XMLNode_GetProperty(), and NULL.

Referenced by GWB_Parser_ParseWellKnownElements().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _parseSetVar()

int _parseSetVar ( GWB_CONTEXT * currentContext,
GWEN_XMLNODE * xmlNode )
static

◆ _parseSubdir()

int _parseSubdir ( GWB_PROJECT * project,
GWB_CONTEXT * currentContext,
const char * sFolder,
GWB_PARSER_PARSE_ELEMENT_FN fn )
static

◆ _parseWriteFile()

◆ _readModifyWriteFile()

int _readModifyWriteFile ( GWEN_XMLNODE * xmlNode,
GWEN_DB_NODE * dbContextVars,
const char * sSourceFile,
const char * sDestFile )
static

◆ _setFilePermissions()

int _setFilePermissions ( const char * fname,
int perms )
static

Definition at line 823 of file parser.c.

References DBG_ERROR, GWEN_ERROR_IO, and NULL.

Referenced by _readModifyWriteFile().

Here is the caller graph for this function:

◆ _varHasValue()

int _varHasValue ( GWB_CONTEXT * currentContext,
GWEN_XMLNODE * xmlNode )
static

Definition at line 650 of file parser.c.

References DBG_ERROR, GWB_Context_GetVars(), GWEN_DB_GetCharValue(), GWEN_ERROR_GENERIC, GWEN_Text_ComparePattern(), GWEN_XMLNode_GetProperty(), and NULL.

Referenced by _parseIfNotVarHasValue(), and _parseIfVarHasValue().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWB_Parser_AddTargetForSourceFile()

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 )

◆ GWB_Parser_CopyContextForSubdir()

◆ GWB_Parser_CopyContextForTarget()

GWB_CONTEXT * GWB_Parser_CopyContextForTarget ( const GWB_CONTEXT * sourceContext)

Definition at line 153 of file parser.c.

References GWB_Context_ClearDefineList(), GWB_Context_ClearIncludeList(), GWB_Context_ClearSourceFileList2(), and GWB_Context_dup().

Referenced by GWB_Parser_AddTargetForSourceFile(), and GWB_ParseTarget().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWB_Parser_ParseSourcesOrHeaders()

◆ GWB_Parser_ParseSubdirs()

int GWB_Parser_ParseSubdirs ( GWB_PROJECT * project,
GWB_CONTEXT * currentContext,
GWEN_XMLNODE * xmlNode,
GWB_PARSER_PARSE_ELEMENT_FN fn )

◆ GWB_Parser_ParseWellKnownElements()

int GWB_Parser_ParseWellKnownElements ( GWB_PROJECT * project,
GWB_CONTEXT * currentContext,
GWEN_XMLNODE * n,
GWB_PARSER_PARSE_ELEMENT_FN fn )

Definition at line 942 of file parser.c.

References _parseIfNotVarHasValue(), _parseIfNotVarMatches(), _parseIfVarHasValue(), _parseIfVarMatches(), _parseSetVar(), _parseWriteFile(), DBG_DEBUG, DBG_ERROR, GWEN_LOGDOMAIN, GWEN_XMLNode_GetData(), and NULL.

Referenced by _parseChildNodes(), _parseChildNodes(), and _parseChildNodes().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWB_Parser_ReadBuildFile()

GWEN_XMLNODE * GWB_Parser_ReadBuildFile ( GWENBUILD * gwbuild,
const GWB_CONTEXT * currentContext,
const char * fileName )

◆ GWB_Parser_ReadBuildTree()

◆ GWB_Parser_ReadNamedXmlDataIntoBufferAndExpand()

GWEN_BUFFER * GWB_Parser_ReadNamedXmlDataIntoBufferAndExpand ( GWEN_DB_NODE * db,
GWEN_XMLNODE * xmlNode,
const char * elem )

Definition at line 345 of file parser.c.

References GWB_Parser_ReadXmlDataIntoBufferAndExpand(), GWEN_Buffer_free(), GWEN_Buffer_GetUsedBytes(), GWEN_XMLNode_FindFirstTag(), and NULL.

Referenced by GWB_ParseOption().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWB_Parser_ReadXmlDataIntoBufferAndExpand()

◆ GWB_Parser_ReadXmlDataIntoStringList()

◆ GWB_Parser_ReplaceVarsBetweenAtSigns()

int GWB_Parser_ReplaceVarsBetweenAtSigns ( const char * s,
GWEN_BUFFER * dbuf,
GWEN_DB_NODE * db )

Definition at line 873 of file parser.c.

References DBG_ERROR, DBG_INFO, DBG_WARN, GWEN_Buffer_AppendByte(), GWEN_Buffer_AppendString(), GWEN_DB_Dump(), GWEN_DB_GetCharValue(), GWEN_ERROR_BAD_DATA, GWEN_LOGDOMAIN, and NULL.

Referenced by _readModifyWriteFile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GWB_Parser_SetItemValue()

void GWB_Parser_SetItemValue ( GWEN_DB_NODE * db,
const char * sId,
const char * suffix,
const char * value )

Definition at line 856 of file parser.c.

References GWEN_Buffer_AppendString(), GWEN_Buffer_free(), GWEN_Buffer_GetStart(), GWEN_Buffer_new(), GWEN_DB_FLAGS_OVERWRITE_VARS, and GWEN_DB_SetCharValue().

Referenced by _callPkgConfig(), _checkVersion(), _parseLib(), _parseProg(), _setVarFunctionExists(), and _setVarHeaderExists().

Here is the call graph for this function:
Here is the caller graph for this function: