15 #include "gwenbuild/types/context_p.h" 17 #include <gwenhywfar/debug.h> 18 #include <gwenhywfar/memory.h> 28 static char *
_combinedString(
const char *string1,
const char *string2,
const char delim);
41 ctx->gwenbuild=gwenbuild;
56 ctx->gwenbuild=originalCtx->gwenbuild;
57 ctx->currentTarget=originalCtx->currentTarget;
59 if (originalCtx->initialSourceDir)
60 ctx->initialSourceDir=strdup(originalCtx->initialSourceDir);
61 if (originalCtx->currentRelativeDir)
62 ctx->currentRelativeDir=strdup(originalCtx->currentRelativeDir);
63 if (originalCtx->topBuildDir)
64 ctx->topBuildDir=strdup(originalCtx->topBuildDir);
65 if (originalCtx->topSourceDir)
66 ctx->topSourceDir=strdup(originalCtx->topSourceDir);
68 if (originalCtx->currentBuildDir)
69 ctx->currentBuildDir=strdup(originalCtx->currentBuildDir);
70 if (originalCtx->currentSourceDir)
71 ctx->currentSourceDir=strdup(originalCtx->currentSourceDir);
73 if (originalCtx->compilerFlags)
74 ctx->compilerFlags=originalCtx->compilerFlags;
76 if (originalCtx->linkerFlags)
77 ctx->linkerFlags=originalCtx->linkerFlags;
79 if (originalCtx->includeList)
82 if (originalCtx->defineList)
85 if (originalCtx->vars)
98 free(ctx->topBuildDir);
99 free(ctx->topSourceDir);
100 free(ctx->currentBuildDir);
101 free(ctx->currentSourceDir);
102 free(ctx->initialSourceDir);
103 free(ctx->compilerFlags);
104 free(ctx->linkerFlags);
106 GWB_KeyValuePair_List_free(ctx->includeList);
107 GWB_KeyValuePair_List_free(ctx->defineList);
109 GWB_File_List2_free(ctx->sourceFileList2);
119 return ctx->gwenbuild;
126 return ctx->topBuildDir;
133 if (ctx->topBuildDir)
134 free(ctx->topBuildDir);
136 ctx->topBuildDir=strdup(s);
138 ctx->topBuildDir=
NULL;
148 free(ctx->topBuildDir);
149 ctx->topBuildDir=newValue;
156 return ctx->topSourceDir;
163 if (ctx->topSourceDir)
164 free(ctx->topSourceDir);
166 ctx->topSourceDir=strdup(s);
168 ctx->topSourceDir=
NULL;
178 free(ctx->topSourceDir);
179 ctx->topSourceDir=newValue;
186 return ctx->currentBuildDir;
193 if (ctx->currentBuildDir)
194 free(ctx->currentBuildDir);
196 ctx->currentBuildDir=strdup(s);
198 ctx->currentBuildDir=
NULL;
208 free(ctx->currentBuildDir);
209 ctx->currentBuildDir=newValue;
216 return ctx->currentSourceDir;
226 free(ctx->currentSourceDir);
227 ctx->currentSourceDir=newValue;
237 free(ctx->currentSourceDir);
238 ctx->currentSourceDir=newValue;
245 if (ctx->currentSourceDir)
246 free(ctx->currentSourceDir);
248 ctx->currentSourceDir=strdup(s);
250 ctx->currentSourceDir=
NULL;
257 return ctx->currentRelativeDir;
267 free(ctx->currentRelativeDir);
268 ctx->currentRelativeDir=newValue;
275 if (ctx->currentRelativeDir)
276 free(ctx->currentRelativeDir);
278 ctx->currentRelativeDir=strdup(s);
280 ctx->currentRelativeDir=
NULL;
287 return ctx->initialSourceDir;
294 free(ctx->initialSourceDir);
295 ctx->initialSourceDir=s?strdup(s):
NULL;
302 return ctx->compilerFlags;
309 if (ctx->compilerFlags)
310 free(ctx->compilerFlags);
312 ctx->compilerFlags=strdup(s);
314 ctx->compilerFlags=
NULL;
324 free(ctx->compilerFlags);
325 ctx->compilerFlags=newValue;
332 return ctx->linkerFlags;
339 if (ctx->linkerFlags)
340 free(ctx->linkerFlags);
342 ctx->linkerFlags=strdup(s);
344 ctx->linkerFlags=
NULL;
354 free(ctx->linkerFlags);
355 ctx->linkerFlags=newValue;
362 return ctx->includeList;
369 if (genType && *genType &&incl && *incl) {
372 if (ctx->includeList==
NULL)
373 ctx->includeList=GWB_KeyValuePair_List_new();
376 GWB_KeyValuePair_List_Add(kvp, ctx->includeList);
384 if (ctx->includeList==
NULL)
385 ctx->includeList=GWB_KeyValuePair_List_new();
387 GWB_KeyValuePair_List_Clear(ctx->includeList);
394 return ctx->defineList;
404 if (ctx->defineList==
NULL)
405 ctx->defineList=GWB_KeyValuePair_List_new();
419 if (ctx->defineList==
NULL)
420 ctx->defineList=GWB_KeyValuePair_List_new();
422 GWB_KeyValuePair_List_Clear(ctx->defineList);
436 return ctx->sourceFileList2;
443 if (ctx->sourceFileList2==
NULL)
444 ctx->sourceFileList2=GWB_File_List2_new();
445 GWB_File_List2_PushBack(ctx->sourceFileList2, f);
452 if (ctx->sourceFileList2==
NULL)
453 ctx->sourceFileList2=GWB_File_List2_new();
455 GWB_File_List2_Clear(ctx->sourceFileList2);
462 return ctx->currentTarget;
468 ctx->currentTarget=target;
483 if (string2 && *string2) {
485 return strdup(string2);
491 len1=strlen(string1);
492 len2=strlen(string2);
494 newS=(
char*) malloc(len1+len2+2);
496 memmove(newS, string1, len1);
498 memmove(newS+len1+1, string2, len2);
505 return strdup(string1);
516 if (ctx->initialSourceDir)
518 if (ctx->currentRelativeDir)
520 if (ctx->topBuildDir)
522 if (ctx->topSourceDir)
524 if (ctx->currentBuildDir)
526 if (ctx->currentSourceDir)
528 if (ctx->compilerFlags)
530 if (ctx->linkerFlags)
533 if (ctx->includeList) {
541 if (ctx->defineList) {
549 if (withDb && ctx->vars) {
557 ctxChild=GWB_Context_Tree2_GetFirstChild(ctx);
568 ctxChild=GWB_Context_Tree2_GetNext(ctxChild);
603 for(i=0; i<indent; i++)
604 fprintf(stderr,
" ");
605 fprintf(stderr,
"Context:\n");
630 childCtx=GWB_Context_Tree2_GetFirstChild(ctx);
633 childCtx=GWB_Context_Tree2_GetNext(childCtx);
GWENHYWFAR_API int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n, GWEN_BUFFER *buf, uint32_t dbflags)
void GWB_Context_AddCurrentBuildDir(GWB_CONTEXT *ctx, const char *s)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWB_CONTEXT GWB_CONTEXT
const char * GWB_Target_GetName(const GWB_TARGET *target)
void GWB_Context_AddLinkerFlags(GWB_CONTEXT *ctx, const char *s)
struct GWEN_DB_NODE GWEN_DB_NODE
void GWB_Context_SetCurrentRelativeDir(GWB_CONTEXT *ctx, const char *s)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
const char * GWB_Context_GetCompilerFlags(const GWB_CONTEXT *ctx)
void GWB_KeyValuePair_List_WriteXml(const GWB_KEYVALUEPAIR_LIST *kvpList, GWEN_XMLNODE *xmlNode, const char *groupName)
#define GWEN_FREE_OBJECT(varname)
void GWB_Context_ClearSourceFileList2(GWB_CONTEXT *ctx)
#define GWEN_TREE2_FUNCTIONS(t, pr)
void GWB_KeyValuePair_SetValue(GWB_KEYVALUEPAIR *kvp, const char *s)
void GWEN_XMLNode_SetCharValue(GWEN_XMLNODE *n, const char *name, const char *value)
void GWB_Context_AddInclude(GWB_CONTEXT *ctx, const char *genType, const char *incl)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
void GWB_Context_SetLinkerFlags(GWB_CONTEXT *ctx, const char *s)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
GWB_KEYVALUEPAIR_LIST * GWB_Context_GetIncludeList(const GWB_CONTEXT *ctx)
const char * GWB_Context_GetLinkerFlags(const GWB_CONTEXT *ctx)
void GWB_Context_SetTopBuildDir(GWB_CONTEXT *ctx, const char *s)
GWB_FILE_LIST2 * GWB_Context_GetSourceFileList2(const GWB_CONTEXT *ctx)
#define GWEN_TREE2_FINI(t, element, pr)
void GWBUILD_Debug_PrintValue(const char *sName, const char *sValue, int indent)
GWEN_DB_NODE * GWB_Context_GetVars(const GWB_CONTEXT *ctx)
void GWB_Context_SetCompilerFlags(GWB_CONTEXT *ctx, const char *s)
#define GWEN_NEW_OBJECT(typ, varname)
struct GWB_TARGET GWB_TARGET
void GWB_Context_SetDefine(GWB_CONTEXT *ctx, const char *name, const char *value)
const char * GWB_Context_GetInitialSourceDir(const GWB_CONTEXT *ctx)
void GWB_Context_Tree2_Dump(const GWB_CONTEXT *ctx, int indent)
GWB_CONTEXT * GWB_Context_new(GWENBUILD *gwenbuild)
const char * GWB_Context_GetTopSourceDir(const GWB_CONTEXT *ctx)
void GWB_Context_AddCurrentRelativeDir(GWB_CONTEXT *ctx, const char *s)
void GWBUILD_Debug_PrintKvpList(const char *sName, const GWB_KEYVALUEPAIR_LIST *kvpList, int indent)
void GWB_Context_AddCompilerFlags(GWB_CONTEXT *ctx, const char *s)
void GWBUILD_Debug_PrintFileList2(const char *sName, const GWB_FILE_LIST2 *fileList2, int indent)
GWEN_DB_NODE * GWEN_DB_Group_dup(const GWEN_DB_NODE *n)
void GWB_Context_SetInitialSourceDir(GWB_CONTEXT *ctx, const char *s)
GWB_KEYVALUEPAIR_LIST * GWB_Context_GetDefineList(const GWB_CONTEXT *ctx)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWB_KEYVALUEPAIR * GWB_KeyValuePair_new(const char *key, const char *value)
#define DBG_ERROR(dbg_logger, format, args...)
void GWB_Context_InsertCurrentSourceDir(GWB_CONTEXT *ctx, const char *s)
void GWB_Context_SetCurrentSourceDir(GWB_CONTEXT *ctx, const char *s)
void GWB_Context_AddCurrentSourceDir(GWB_CONTEXT *ctx, const char *s)
static void _exportDbToXml(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
void GWBUILD_Debug_PrintDb(const char *sName, GWEN_DB_NODE *db, int indent)
GWB_CONTEXT * GWB_Context_dup(const GWB_CONTEXT *originalCtx)
void GWB_Context_InsertTopBuildDir(GWB_CONTEXT *ctx, const char *s)
struct GWB_KEYVALUEPAIR GWB_KEYVALUEPAIR
void GWB_Context_Dump(const GWB_CONTEXT *ctx, int indent)
void GWB_Context_toXml(const GWB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode, int withDb)
void GWB_Context_InsertTopSourceDir(GWB_CONTEXT *ctx, const char *s)
#define GWEN_TREE2_INIT(t, element, pr)
void GWB_Context_SetCurrentBuildDir(GWB_CONTEXT *ctx, const char *s)
const char * GWB_Context_GetTopBuildDir(const GWB_CONTEXT *ctx)
GWB_TARGET * GWB_Context_GetCurrentTarget(const GWB_CONTEXT *ctx)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
GWB_KEYVALUEPAIR * GWB_KeyValuePair_List_GetFirstByKey(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key)
const char * GWB_Context_GetCurrentRelativeDir(const GWB_CONTEXT *ctx)
static char * _combinedString(const char *string1, const char *string2, const char delim)
struct GWENBUILD GWENBUILD
void GWB_Context_SetCurrentTarget(GWB_CONTEXT *ctx, GWB_TARGET *target)
void GWB_Context_ClearDefineList(GWB_CONTEXT *ctx)
void GWB_Context_free(GWB_CONTEXT *ctx)
void GWB_Context_AddSourceFile(GWB_CONTEXT *ctx, GWB_FILE *f)
struct GWEN__XMLNODE GWEN_XMLNODE
GWENBUILD * GWB_Context_GetGwenbuild(const GWB_CONTEXT *ctx)
void GWB_Context_ClearIncludeList(GWB_CONTEXT *ctx)
#define GWEN_DB_FLAGS_DEFAULT
GWB_KEYVALUEPAIR_LIST * GWB_KeyValuePair_List_dup(const GWB_KEYVALUEPAIR_LIST *oldKvpList)
const char * GWB_Context_GetCurrentSourceDir(const GWB_CONTEXT *ctx)
void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child)
const char * GWB_Context_GetCurrentBuildDir(const GWB_CONTEXT *ctx)
void GWB_Context_SetTopSourceDir(GWB_CONTEXT *ctx, const char *s)