15#include "gwenbuild/types/gwenbuild_p.h"
19#include <gwenhywfar/debug.h>
20#include <gwenhywfar/directory.h>
21#include <gwenhywfar/text.h>
22#include <gwenhywfar/stringlist.h>
45 GWB_FILE_LIST2 *sourceFileList,
46 GWB_FILE_LIST2 *newOutputList);
76 GWB_GBuilderDescr_List_free(gwenbuild->builderDescrList);
86 return gwenbuild->flags;
107 gwenbuild->flags&=~f;
114 return gwenbuild->targetSystem;
121 free(gwenbuild->targetSystem);
122 gwenbuild->targetSystem=s?strdup(s):
NULL;
128 return gwenbuild->targetIsWindows;
135 gwenbuild->targetIsWindows=i;
142 return gwenbuild->buildFilenameList;
179 if (strcasecmp(s,
"InstallLibrary")==0)
181 else if (strcasecmp(s,
"ConvenienceLibrary")==0 ||
182 strcasecmp(s,
"TempLibrary")==0)
184 else if (strcasecmp(s,
"Program")==0)
186 else if (strcasecmp(s,
"CxxProgram")==0)
188 else if (strcasecmp(s,
"Objects")==0)
190 else if (strcasecmp(s,
"Module")==0)
192 else if (strcasecmp(s,
"I18nCatalog")==0)
229 for(i=0; i<indent; i++)
230 fprintf(stderr,
" ");
231 fprintf(stderr,
"%s = %s\n", sName, sValue?sValue:
"<empty>");
240 for(i=0; i<indent; i++)
241 fprintf(stderr,
" ");
242 fprintf(stderr,
"%s = %d\n", sName, value);
251 for(i=0; i<indent; i++)
252 fprintf(stderr,
" ");
253 fprintf(stderr,
"%s:\n", sName);
258 kvp=GWB_KeyValuePair_List_First(kvpList);
266 kvp=GWB_KeyValuePair_List_Next(kvp);
277 for(i=0; i<indent; i++)
278 fprintf(stderr,
" ");
279 fprintf(stderr,
"%s:\n", sName);
291 for(i=0; i<indent; i++)
292 fprintf(stderr,
" ");
295 fprintf(stderr,
"%s = ", sName);
301 const char *sInstallPath;
302 const char *sFileType;
312 fprintf(stderr,
"[%5d] ", (
int)
id);
313 if (sFolder && *sFolder)
314 fprintf(stderr,
"%s/", sFolder);
315 fprintf(stderr,
"%s", sName?sName:
"<no name>");
316 fprintf(stderr,
" (%s)", sFileType?sFileType:
"no type");
319 fprintf(stderr,
" DIST");
321 fprintf(stderr,
" INSTALL");
323 fprintf(stderr,
" GENERATED");
324 fprintf(stderr,
" %s", sInstallPath?sInstallPath:
"<no install path>");
326 fprintf(stderr,
"\n");
329 fprintf(stderr,
"<empty>\n");
338 for(i=0; i<indent; i++)
339 fprintf(stderr,
" ");
340 fprintf(stderr,
"%s:\n", sName);
343 GWB_FILE_LIST2_ITERATOR *it;
345 it=GWB_File_List2_First(fileList2);
349 file=GWB_File_List2Iterator_Data(it);
352 file=GWB_File_List2Iterator_Next(it);
354 GWB_File_List2Iterator_free(it);
365 for(i=0; i<indent; i++)
366 fprintf(stderr,
" ");
367 fprintf(stderr,
"%s:\n", sName);
370 GWB_TARGET_LIST2_ITERATOR *it;
372 it=GWB_Target_List2_First(targetList2);
376 target=GWB_Target_List2Iterator_Data(it);
379 target=GWB_Target_List2Iterator_Next(it);
381 GWB_Target_List2Iterator_free(it);
392 for(i=0; i<indent; i++)
393 fprintf(stderr,
" ");
394 fprintf(stderr,
"%s:\n", sName);
399 option=GWB_Option_List_First(optionList);
402 option=GWB_Option_List_Next(option);
413 for(i=0; i<indent; i++)
414 fprintf(stderr,
" ");
415 fprintf(stderr,
"%s:\n", sName);
418 GWB_BUILDER_LIST2_ITERATOR *it;
420 it=GWB_Builder_List2_First(builderList2);
424 builder=GWB_Builder_List2Iterator_Data(it);
427 builder=GWB_Builder_List2Iterator_Next(it);
429 GWB_Builder_List2Iterator_free(it);
440 for(i=0; i<indent; i++)
441 fprintf(stderr,
" ");
442 fprintf(stderr,
"%s:\n", sName);
445 GWB_BUILD_CMD_LIST2_ITERATOR *it;
447 it=GWB_BuildCmd_List2_First(buildCmdList2);
451 builder=GWB_BuildCmd_List2Iterator_Data(it);
454 builder=GWB_BuildCmd_List2Iterator_Next(it);
456 GWB_BuildCmd_List2Iterator_free(it);
469 for(i=0; i<indent; i++)
470 fprintf(stderr,
" ");
471 fprintf(stderr,
"%s:\n", sName);
478 for(i=0; i<indent+2; i++)
479 fprintf(stderr,
" ");
480 fprintf(stderr,
"[%s]\n", (s && *s)?s:
"<empty>");
491 GWB_TARGET_LIST2 *targetList;
495 GWB_TARGET_LIST2_ITERATOR *it;
498 it=GWB_Target_List2_First(targetList);
502 target=GWB_Target_List2Iterator_Data(it);
509 GWB_Target_List2Iterator_free(it);
521 target=GWB_Target_List2Iterator_Next(it);
523 GWB_Target_List2Iterator_free(it);
539 GWB_FILE_LIST2 *fileList1;
544 if (!(fileList1 && GWB_File_List2_GetSize(fileList1)>0)) {
550 fileList1=GWB_File_List2_dup(fileList1);
551 while(GWB_File_List2_GetSize(fileList1)>0) {
552 GWB_FILE_LIST2 *fileList2;
555 fileList2=GWB_File_List2_new();
559 GWB_File_List2_free(fileList1);
560 GWB_File_List2_free(fileList1);
563 GWB_File_List2_free(fileList1);
566 GWB_File_List2_free(fileList1);
574 GWB_FILE_LIST2 *sourceFileList,
575 GWB_FILE_LIST2 *newOutputList)
579 GWB_FILE_LIST2_ITERATOR *it;
586 it=GWB_File_List2_First(sourceFileList);
590 file=GWB_File_List2Iterator_Data(it);
596 DBG_DEBUG(
NULL,
"- adding file \"%s\" as input for target \"%s\"",
606 GWB_FILE_LIST2 *buildersOutputFileList;
615 file=GWB_File_List2Iterator_Next(it);
618 GWB_File_List2Iterator_free(it);
628 GWB_TARGET_LIST2 *targetList;
632 GWB_TARGET_LIST2_ITERATOR *it;
634 it=GWB_Target_List2_First(targetList);
638 target=GWB_Target_List2Iterator_Data(it);
649 GWB_Target_List2Iterator_free(it);
654 target=GWB_Target_List2Iterator_Next(it);
656 GWB_Target_List2Iterator_free(it);
700 GWB_FILE_LIST2 *subTargetOutputFileList;
707 if (targetBuilder==
NULL) {
712 if (subTargetBuilder==
NULL) {
718 if (subTargetOutputFileList==
NULL) {
722 subTargetFile=GWB_File_List2_GetFront(subTargetOutputFileList);
723 if (subTargetFile==
NULL) {
775 GWB_BUILDER_LIST2 *builderList;
779 GWB_BUILDER_LIST2_ITERATOR *it;
781 it=GWB_Builder_List2_First(builderList);
785 builder=GWB_Builder_List2Iterator_Data(it);
792 GWB_Builder_List2Iterator_free(it);
795 builder=GWB_Builder_List2Iterator_Next(it);
798 GWB_Builder_List2Iterator_free(it);
811 GWB_TARGET_LIST2 *targetList;
812 GWB_BUILD_CMD_LIST *explicitBuildCmdList;
816 if (explicitBuildCmdList)
822 GWB_TARGET_LIST2_ITERATOR *it;
824 it=GWB_Target_List2_First(targetList);
828 target=GWB_Target_List2Iterator_Data(it);
831 if (explicitBuildCmdList)
833 target=GWB_Target_List2Iterator_Next(it);
835 GWB_Target_List2Iterator_free(it);
847 cmd=GWB_BuildCmd_List_First(buildCmdList);
852 cmd=GWB_BuildCmd_List_Next(cmd);
862 GWB_FILE_LIST2_ITERATOR *it;
864 it=GWB_File_List2_First(fileList);
868 file=GWB_File_List2Iterator_Data(it);
875 file=GWB_File_List2Iterator_Next(it);
878 GWB_File_List2Iterator_free(it);
890#if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
891 rv=lstat(filename, &st);
893 rv=stat(filename, &st);
896 DBG_INFO(
NULL,
"Error on stat(%s): %s", filename, strerror(errno));
907#if defined(__x86_64__) || defined(_M_X64)
909#elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
911#elif defined(__ARM_ARCH_2__)
913#elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__)
915#elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T)
917#elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_)
919#elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_)
921#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
923#elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
925#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
927#elif defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
929#elif defined(__ARM_ARCH_7M__)
931#elif defined(__ARM_ARCH_7S__)
933#elif defined(__aarch64__) || defined(_M_ARM64)
935#elif defined(mips) || defined(__mips__) || defined(__mips)
939#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC)
941#elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64)
943#elif defined(__sparc__) || defined(__sparc)
945#elif defined(__m68k__)
955#if defined(__linux__)
959#elif defined(__FreeBSD__)
961#elif defined(__NetBSD__)
963#elif defined(__OpenBSD__)
965#elif defined(__APPLE__)
970#elif defined(__osf__)
1010 const char *sFolder,
1012 GWB_FILE_LIST2 *outFileList,
1013 uint32_t flagsToAdd,
1014 int copyFileForOutList)
1030 if (copyFileForOutList)
1031 GWB_File_List2_PushBack(outFileList,
GWB_File_dup(file));
1033 GWB_File_List2_PushBack(outFileList, file);
1067 if (gwenbuild->builderDescrList==
NULL)
1078 if (builder==
NULL) {
1079 DBG_ERROR(
NULL,
"Error instantiating builder \"%s\"", builderName);
1097 const char *builderName;
1103 if (!(name && *name)) {
1109 DBG_DEBUG(
NULL,
"Unable to determine builder for source file \"%s\"", name);
1114 if (!(builderName && *builderName)) {
1115 DBG_INFO(
NULL,
"Determining builder type for file \%s\"", name);
1116 if (strcasecmp(ext,
".c")==0)
1117 builderName=
"cbuilder";
1118 else if (strcasecmp(ext,
".cpp")==0)
1119 builderName=
"cxxbuilder";
1120 else if (strcasecmp(ext,
".t2d")==0 || strcasecmp(ext,
".xml")==0)
1121 builderName=
"tm2builder";
1124 DBG_DEBUG(
NULL,
"Unable to determine builder for source file \"%s\" (unhandled ext)", name);
1130 DBG_INFO(
NULL,
"Selected builder type is for file \%s\" is \"%s\"", name, builderName);
1132 if (builder==
NULL) {
1133 DBG_ERROR(
NULL,
"Could not create builder for type \"%s\"", ext);
1180 if (builder==
NULL) {
1182 "Could not create builder for type \"%s\"",
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
GWB_BUILD_CMD * GWB_BuildCmd_dup(GWB_BUILD_CMD *origCmd)
GWB_FILE_LIST2 * GWB_BuildCmd_GetOutFileList2(const GWB_BUILD_CMD *bcmd)
void GWB_BuildCmd_Dump(const GWB_BUILD_CMD *bcmd, int indent)
GWB_FILE_LIST2 * GWB_BuildCmd_GetInFileList2(const GWB_BUILD_CMD *bcmd)
struct GWB_BUILD_CMD GWB_BUILD_CMD
void GWB_BuildCtx_free(GWB_BUILD_CONTEXT *bctx)
void GWB_BuildCtx_SetInitialSourceDir(GWB_BUILD_CONTEXT *bctx, const char *s)
void GWB_BuildCtx_AddCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *cmd)
void GWB_BuildCtx_AddFile(GWB_BUILD_CONTEXT *bctx, GWB_FILE *file)
GWB_BUILD_CONTEXT * GWB_BuildCtx_new()
struct GWB_BUILD_CONTEXT GWB_BUILD_CONTEXT
int GWB_Builder_AddBuildCmd(GWB_BUILDER *builder, GWB_BUILD_CONTEXT *bctx)
GWB_FILE_LIST2 * GWB_Builder_GetOutputFileList2(const GWB_BUILDER *builder)
int GWB_Builder_IsAcceptableInput(GWB_BUILDER *builder, const GWB_FILE *file)
void GWB_Builder_AddInputFile(GWB_BUILDER *builder, GWB_FILE *f)
void GWB_Builder_AddSourceFile(GWB_BUILDER *builder, GWB_FILE *f)
void GWB_Builder_Dump(const GWB_BUILDER *builder, int indent, int fullDump)
const char * GWB_Builder_GetTargetLinkSpec(const GWB_BUILDER *builder)
void GWB_Builder_AddRelativeFolderToBuffer(const GWB_CONTEXT *context, const char *folder, int useBuildDir, GWEN_BUFFER *argBuffer)
struct GWB_BUILDER GWB_BUILDER
GWB_FILE_LIST2 * GWB_Context_GetSourceFileList2(const GWB_CONTEXT *ctx)
const char * GWB_Context_GetInitialSourceDir(const GWB_CONTEXT *ctx)
struct GWB_CONTEXT GWB_CONTEXT
void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert)
struct GWEN_DB_NODE GWEN_DB_NODE
#define DBG_DEBUG(dbg_logger, format, args...)
#define DBG_INFO(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
#define GWEN_ERROR_GENERIC
#define GWEN_ERROR_NO_DATA
void GWB_File_SetId(GWB_FILE *f, uint32_t i)
void GWB_File_AddFileList2ToFileList2(GWB_FILE_LIST2 *sourceList, GWB_FILE_LIST2 *destList, const char *ext)
const char * GWB_File_GetFolder(const GWB_FILE *f)
const char * GWB_File_GetName(const GWB_FILE *f)
void GWB_File_SetBuilder(GWB_FILE *f, const char *s)
GWB_FILE * GWB_File_List2_GetOrCreateFile(GWB_FILE_LIST2 *fileList, const char *folder, const char *fname)
uint32_t GWB_File_GetFlags(const GWB_FILE *f)
const char * GWB_File_GetInstallPath(const GWB_FILE *f)
GWB_FILE * GWB_File_dup(const GWB_FILE *oldFile)
uint32_t GWB_File_GetId(const GWB_FILE *f)
const char * GWB_File_GetBuilder(const GWB_FILE *f)
const char * GWB_File_GetFileType(const GWB_FILE *f)
void GWB_File_AddFlags(GWB_FILE *f, uint32_t i)
const char * GWB_File_GetExt(const GWB_FILE *f)
#define GWB_FILE_FLAGS_GENERATED
#define GWB_FILE_FLAGS_DIST
#define GWB_FILE_FLAGS_INSTALL
GWB_GBUILDER_DESCR * GWB_GBuilderDescr_List_GetByName(const GWB_GBUILDER_DESCR_LIST *descrList, const char *name)
GWB_GBUILDER_DESCR_LIST * GWB_GBuilderDescr_ReadAll(const char *folder)
GWEN_XMLNODE * GWB_GBuilderDescr_GetXmlDescr(const GWB_GBUILDER_DESCR *descr)
struct GWB_GBUILDER_DESCR GWB_GBUILDER_DESCR
GWB_BUILDER * GWB_GenericBuilder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWEN_XMLNODE *xmlDescr)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
static void _addBuildCommands(GWB_BUILD_CONTEXT *buildCtx, const GWB_BUILD_CMD_LIST *buildCmdList)
const char * GWBUILD_GetHostSystem()
void GWBUILD_Debug_PrintKvpList(const char *sName, const GWB_KEYVALUEPAIR_LIST *kvpList, int indent)
uint32_t GWBUILD_GetFlags(const GWENBUILD *gwenbuild)
void GWBUILD_Debug_PrintStringList(const char *sName, const GWEN_STRINGLIST *sl, int indent)
static int _addSubTargets(GWB_PROJECT *project)
static void _addExplicitBuildCommandsFromTargets(GWB_PROJECT *project, GWB_BUILD_CONTEXT *buildCtx)
int GWBUILD_GetTargetIsWindows(const GWENBUILD *gwenbuild)
int GWBUILD_MakeBuildersForTargets(GWB_PROJECT *project)
GWEN_STRINGLIST * GWBUILD_GetBuildFilenameList(const GWENBUILD *gwenbuild)
void GWBUILD_Debug_PrintIntValue(const char *sName, int value, int indent)
GWEN_STRINGLIST * GWBUILD_GetPathFromEnvironment()
void GWBUILD_AddFilesFromStringList(GWB_FILE_LIST2 *mainFileList, const char *sFolder, const GWEN_STRINGLIST *fileNameList, GWB_FILE_LIST2 *outFileList, uint32_t flagsToAdd, int copyFileForOutList)
static int _addBuildCommandsFromBuilder(GWB_PROJECT *project, GWB_BUILD_CONTEXT *buildCtx)
void _readBuilderDescrList(GWENBUILD *gwenbuild)
const char * GWBUILD_TargetType_toString(GWBUILD_TARGETTYPE tt)
static GWB_BUILDER * _genBuilderForTarget(GWB_PROJECT *project, GWB_TARGET *target)
static int _addOrBuildTargetSources(GWB_PROJECT *project, GWB_TARGET *target)
void GWBUILD_Debug_PrintOptionList(const char *sName, const GWB_OPTION_LIST *optionList, int indent)
void GWBUILD_Debug_PrintFile(const char *sName, const GWB_FILE *file, int indent)
void GWBUILD_Debug_PrintBuildCmdList2(const char *sName, const GWB_BUILD_CMD_LIST2 *buildCmdList2, int indent)
const char * GWBUILD_GetSystemFromTriplet(const char *sTriplet)
void GWBUILD_Debug_PrintFileList2(const char *sName, const GWB_FILE_LIST2 *fileList2, int indent)
static void _addFilesToBuildCtx(GWB_BUILD_CONTEXT *buildCtx, GWB_FILE_LIST2 *fileList)
static GWB_BUILDER * _getBuilderByName(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *builderName)
GWB_BUILD_CONTEXT * GWBUILD_MakeBuildCommands(GWB_PROJECT *project)
GWENBUILD * GWBUILD_new(void)
time_t GWBUILD_GetModificationTimeOfFile(const char *filename)
static GWB_BUILDER * _genBuilderForSourceFile(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWB_FILE *file)
GWBUILD_TARGETTYPE GWBUILD_TargetType_fromString(const char *s)
void GWBUILD_Debug_PrintBuilderList2(const char *sName, const GWB_BUILDER_LIST2 *builderList2, int indent, int fullDump)
void GWBUILD_SetTargetIsWindows(GWENBUILD *gwenbuild, int i)
void GWBUILD_Debug_PrintDb(const char *sName, GWEN_DB_NODE *db, int indent)
const char * GWBUILD_GetArchFromTriplet(const char *sTriplet)
void GWBUILD_SetTargetSystem(GWENBUILD *gwenbuild, const char *s)
const char * GWBUILD_GetTargetSystem(const GWENBUILD *gwenbuild)
void GWBUILD_Debug_PrintTargetList2(const char *sName, const GWB_TARGET_LIST2 *targetList2, int indent, int fullDump)
void GWBUILD_AddBuildFilename(GWENBUILD *gwenbuild, const char *s)
void GWBUILD_SetFlags(GWENBUILD *gwenbuild, uint32_t f)
static int _addOneSubTargetForTarget(GWB_TARGET *target, GWB_TARGET *subTarget)
const char * GWBUILD_GetHostArch()
static int _addSubTargetsForTarget(GWB_PROJECT *project, GWB_TARGET *target, GWEN_STRINGLIST *usedTargetList)
void GWBUILD_DelFlags(GWENBUILD *gwenbuild, uint32_t f)
void GWBUILD_AddFlags(GWENBUILD *gwenbuild, uint32_t f)
static int _addSourcesOrMkBuildersAndGetTheirOutputs(GWB_PROJECT *project, GWB_TARGET *target, GWB_FILE_LIST2 *sourceFileList, GWB_FILE_LIST2 *newOutputList)
void GWBUILD_free(GWENBUILD *gwenbuild)
void GWBUILD_Debug_PrintValue(const char *sName, const char *sValue, int indent)
@ GWBUILD_TargetType_Objects
@ GWBUILD_TargetType_Program
@ GWBUILD_TargetType_None
@ GWBUILD_TargetType_ConvenienceLibrary
@ GWBUILD_TargetType_Module
@ GWBUILD_TargetType_Invalid
@ GWBUILD_TargetType_CxxProgram
@ GWBUILD_TargetType_InstallLibrary
@ GWBUILD_TargetType_I18nCatalog
struct GWENBUILD GWENBUILD
#define GWENBUILD_FLAGS_STATIC
#define GWEN_DIR_SEPARATOR_S
const char * GWB_KeyValuePair_GetValue(const GWB_KEYVALUEPAIR *kvp)
const char * GWB_KeyValuePair_GetKey(const GWB_KEYVALUEPAIR *kvp)
struct GWB_KEYVALUEPAIR GWB_KEYVALUEPAIR
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
void GWB_Option_Dump(const GWB_OPTION *option, int indent)
struct GWB_OPTION GWB_OPTION
GWB_BUILDER_LIST2 * GWB_Project_GetBuilderList(const GWB_PROJECT *project)
GWB_TARGET * GWB_Project_GetTargetById(const GWB_PROJECT *project, const char *id)
GWENBUILD * GWB_Project_GetGwbuild(const GWB_PROJECT *project)
GWB_BUILD_CMD_LIST * GWB_Project_GetExplicitBuildList(const GWB_PROJECT *project)
GWB_CONTEXT * GWB_Project_GetRootContext(const GWB_PROJECT *project)
void GWB_Project_AddBuilder(GWB_PROJECT *project, GWB_BUILDER *builder)
GWB_TARGET_LIST2 * GWB_Project_GetTargetList(const GWB_PROJECT *project)
struct GWB_PROJECT GWB_PROJECT
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_fromString2(const char *str, const char *delimiters, int checkDouble, uint32_t flags)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_new(void)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
GWB_BUILDER * GWB_Target_GetBuilder(const GWB_TARGET *target)
void GWB_Target_AddUsedTargetLinkSpec(GWB_TARGET *target, const char *s)
void GWB_Target_Dump(const GWB_TARGET *target, int indent, int fullDump)
GWB_CONTEXT * GWB_Target_GetContext(const GWB_TARGET *target)
const char * GWB_Target_GetId(const GWB_TARGET *target)
void GWB_Target_SetBuilder(GWB_TARGET *target, GWB_BUILDER *builder)
GWB_BUILD_CMD_LIST * GWB_Target_GetExplicitBuildList(const GWB_TARGET *target)
GWEN_STRINGLIST * GWB_Target_GetUsedTargetNameList(const GWB_TARGET *target)
GWBUILD_TARGETTYPE GWB_Target_GetTargetType(const GWB_TARGET *target)
struct GWB_TARGET GWB_TARGET
int GWEN_Text_ComparePattern(const char *w, const char *p, int sensecase)
#define GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS
#define GWEN_TEXT_FLAGS_DEL_QUOTES
#define GWEN_TEXT_FLAGS_CHECK_BACKSLASH
#define GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS
GWEN_XMLNODE * GWEN_XMLNode_dup(const GWEN_XMLNODE *n)
struct GWEN__XMLNODE GWEN_XMLNODE