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;
180 if (strcasecmp(s,
"InstallLibrary")==0)
182 else if (strcasecmp(s,
"ConvenienceLibrary")==0 ||
183 strcasecmp(s,
"TempLibrary")==0)
185 else if (strcasecmp(s,
"Program")==0)
187 else if (strcasecmp(s,
"CxxProgram")==0)
189 else if (strcasecmp(s,
"Objects")==0)
191 else if (strcasecmp(s,
"Module")==0)
193 else if (strcasecmp(s,
"I18nCatalog")==0)
195 else if (strcasecmp(s,
"AvrHexFile")==0)
233 for(i=0; i<indent; i++)
234 fprintf(stderr,
" ");
235 fprintf(stderr,
"%s = %s\n", sName, sValue?sValue:
"<empty>");
244 for(i=0; i<indent; i++)
245 fprintf(stderr,
" ");
246 fprintf(stderr,
"%s = %d\n", sName, value);
255 for(i=0; i<indent; i++)
256 fprintf(stderr,
" ");
257 fprintf(stderr,
"%s:\n", sName);
262 kvp=GWB_KeyValuePair_List_First(kvpList);
270 kvp=GWB_KeyValuePair_List_Next(kvp);
281 for(i=0; i<indent; i++)
282 fprintf(stderr,
" ");
283 fprintf(stderr,
"%s:\n", sName);
295 for(i=0; i<indent; i++)
296 fprintf(stderr,
" ");
299 fprintf(stderr,
"%s = ", sName);
305 const char *sInstallPath;
306 const char *sFileType;
316 fprintf(stderr,
"[%5d] ", (
int)
id);
317 if (sFolder && *sFolder)
318 fprintf(stderr,
"%s/", sFolder);
319 fprintf(stderr,
"%s", sName?sName:
"<no name>");
320 fprintf(stderr,
" (%s)", sFileType?sFileType:
"no type");
323 fprintf(stderr,
" DIST");
325 fprintf(stderr,
" INSTALL");
327 fprintf(stderr,
" GENERATED");
328 fprintf(stderr,
" %s", sInstallPath?sInstallPath:
"<no install path>");
330 fprintf(stderr,
" BUILDCMD");
332 fprintf(stderr,
"\n");
335 fprintf(stderr,
"<empty>\n");
344 for(i=0; i<indent; i++)
345 fprintf(stderr,
" ");
346 fprintf(stderr,
"%s:\n", sName);
349 GWB_FILE_LIST2_ITERATOR *it;
351 it=GWB_File_List2_First(fileList2);
355 file=GWB_File_List2Iterator_Data(it);
358 file=GWB_File_List2Iterator_Next(it);
360 GWB_File_List2Iterator_free(it);
371 for(i=0; i<indent; i++)
372 fprintf(stderr,
" ");
373 fprintf(stderr,
"%s:\n", sName);
376 GWB_TARGET_LIST2_ITERATOR *it;
378 it=GWB_Target_List2_First(targetList2);
382 target=GWB_Target_List2Iterator_Data(it);
385 target=GWB_Target_List2Iterator_Next(it);
387 GWB_Target_List2Iterator_free(it);
398 for(i=0; i<indent; i++)
399 fprintf(stderr,
" ");
400 fprintf(stderr,
"%s:\n", sName);
405 option=GWB_Option_List_First(optionList);
408 option=GWB_Option_List_Next(option);
419 for(i=0; i<indent; i++)
420 fprintf(stderr,
" ");
421 fprintf(stderr,
"%s:\n", sName);
424 GWB_BUILDER_LIST2_ITERATOR *it;
426 it=GWB_Builder_List2_First(builderList2);
430 builder=GWB_Builder_List2Iterator_Data(it);
433 builder=GWB_Builder_List2Iterator_Next(it);
435 GWB_Builder_List2Iterator_free(it);
446 for(i=0; i<indent; i++)
447 fprintf(stderr,
" ");
448 fprintf(stderr,
"%s:\n", sName);
451 GWB_BUILD_CMD_LIST2_ITERATOR *it;
453 it=GWB_BuildCmd_List2_First(buildCmdList2);
457 builder=GWB_BuildCmd_List2Iterator_Data(it);
460 builder=GWB_BuildCmd_List2Iterator_Next(it);
462 GWB_BuildCmd_List2Iterator_free(it);
475 for(i=0; i<indent; i++)
476 fprintf(stderr,
" ");
477 fprintf(stderr,
"%s:\n", sName);
484 for(i=0; i<indent+2; i++)
485 fprintf(stderr,
" ");
486 fprintf(stderr,
"[%s]\n", (s && *s)?s:
"<empty>");
497 GWB_TARGET_LIST2 *targetList;
501 GWB_TARGET_LIST2_ITERATOR *it;
504 it=GWB_Target_List2_First(targetList);
508 target=GWB_Target_List2Iterator_Data(it);
515 GWB_Target_List2Iterator_free(it);
527 target=GWB_Target_List2Iterator_Next(it);
529 GWB_Target_List2Iterator_free(it);
545 GWB_FILE_LIST2 *fileList1;
550 if (!(fileList1 && GWB_File_List2_GetSize(fileList1)>0)) {
556 fileList1=GWB_File_List2_dup(fileList1);
557 while(GWB_File_List2_GetSize(fileList1)>0) {
558 GWB_FILE_LIST2 *fileList2;
561 fileList2=GWB_File_List2_new();
565 GWB_File_List2_free(fileList1);
566 GWB_File_List2_free(fileList1);
569 GWB_File_List2_free(fileList1);
572 GWB_File_List2_free(fileList1);
580 GWB_FILE_LIST2 *sourceFileList,
581 GWB_FILE_LIST2 *newOutputList)
585 GWB_FILE_LIST2_ITERATOR *it;
592 it=GWB_File_List2_First(sourceFileList);
596 file=GWB_File_List2Iterator_Data(it);
602 DBG_DEBUG(
NULL,
"- adding file \"%s\" as input for target \"%s\"",
612 GWB_FILE_LIST2 *buildersOutputFileList;
621 file=GWB_File_List2Iterator_Next(it);
624 GWB_File_List2Iterator_free(it);
634 GWB_TARGET_LIST2 *targetList;
638 GWB_TARGET_LIST2_ITERATOR *it;
640 it=GWB_Target_List2_First(targetList);
644 target=GWB_Target_List2Iterator_Data(it);
655 GWB_Target_List2Iterator_free(it);
660 target=GWB_Target_List2Iterator_Next(it);
662 GWB_Target_List2Iterator_free(it);
706 GWB_FILE_LIST2 *subTargetOutputFileList;
713 if (targetBuilder==
NULL) {
718 if (subTargetBuilder==
NULL) {
724 if (subTargetOutputFileList==
NULL) {
728 subTargetFile=GWB_File_List2_GetFront(subTargetOutputFileList);
729 if (subTargetFile==
NULL) {
781 GWB_BUILDER_LIST2 *builderList;
785 GWB_BUILDER_LIST2_ITERATOR *it;
787 it=GWB_Builder_List2_First(builderList);
791 builder=GWB_Builder_List2Iterator_Data(it);
798 GWB_Builder_List2Iterator_free(it);
801 builder=GWB_Builder_List2Iterator_Next(it);
804 GWB_Builder_List2Iterator_free(it);
817 GWB_TARGET_LIST2 *targetList;
818 GWB_BUILD_CMD_LIST *explicitBuildCmdList;
822 if (explicitBuildCmdList)
828 GWB_TARGET_LIST2_ITERATOR *it;
830 it=GWB_Target_List2_First(targetList);
834 target=GWB_Target_List2Iterator_Data(it);
837 if (explicitBuildCmdList)
839 target=GWB_Target_List2Iterator_Next(it);
841 GWB_Target_List2Iterator_free(it);
853 cmd=GWB_BuildCmd_List_First(buildCmdList);
858 cmd=GWB_BuildCmd_List_Next(cmd);
868 GWB_FILE_LIST2_ITERATOR *it;
870 it=GWB_File_List2_First(fileList);
874 file=GWB_File_List2Iterator_Data(it);
881 file=GWB_File_List2Iterator_Next(it);
884 GWB_File_List2Iterator_free(it);
896#if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
897 rv=lstat(filename, &st);
899 rv=stat(filename, &st);
902 DBG_INFO(
NULL,
"Error on stat(%s): %s", filename, strerror(errno));
913#if defined(__x86_64__) || defined(_M_X64)
915#elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
917#elif defined(__ARM_ARCH_2__)
919#elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__)
921#elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T)
923#elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_)
925#elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_)
927#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
929#elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
931#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
933#elif defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
935#elif defined(__ARM_ARCH_7M__)
937#elif defined(__ARM_ARCH_7S__)
939#elif defined(__aarch64__) || defined(_M_ARM64)
941#elif defined(mips) || defined(__mips__) || defined(__mips)
945#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC)
947#elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64)
949#elif defined(__sparc__) || defined(__sparc)
951#elif defined(__m68k__)
961#if defined(__linux__)
965#elif defined(__FreeBSD__)
967#elif defined(__NetBSD__)
969#elif defined(__OpenBSD__)
971#elif defined(__APPLE__)
976#elif defined(__osf__)
1016 const char *sFolder,
1018 GWB_FILE_LIST2 *outFileList,
1019 uint32_t flagsToAdd,
1020 int copyFileForOutList)
1036 if (copyFileForOutList)
1037 GWB_File_List2_PushBack(outFileList,
GWB_File_dup(file));
1039 GWB_File_List2_PushBack(outFileList, file);
1073 if (gwenbuild->builderDescrList==
NULL)
1084 if (builder==
NULL) {
1085 DBG_ERROR(
NULL,
"Error instantiating builder \"%s\"", builderName);
1103 const char *builderName;
1109 if (!(name && *name)) {
1115 DBG_DEBUG(
NULL,
"Unable to determine builder for source file \"%s\"", name);
1120 if (!(builderName && *builderName)) {
1121 DBG_INFO(
NULL,
"Determining builder type for file \%s\"", name);
1122 if (strcasecmp(ext,
".c")==0)
1123 builderName=
"cbuilder";
1124 else if (strcasecmp(ext,
".cpp")==0)
1125 builderName=
"cxxbuilder";
1126 else if (strcasecmp(ext,
".t2d")==0 || strcasecmp(ext,
".xml")==0)
1127 builderName=
"tm2builder";
1130 DBG_DEBUG(
NULL,
"Unable to determine builder for source file \"%s\" (unhandled ext)", name);
1136 DBG_INFO(
NULL,
"Selected builder type is for file \%s\" is \"%s\"", name, builderName);
1138 if (builder==
NULL) {
1139 DBG_ERROR(
NULL,
"Could not create builder for type \"%s\"", ext);
1190 if (builder==
NULL) {
1192 "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_INFO(dbg_logger, format,...)
#define DBG_ERROR(dbg_logger, format,...)
#define DBG_DEBUG(dbg_logger, format,...)
#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)
GWB_BUILD_CMD * GWB_File_GetBuildCmd(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_AvrHexFile
@ 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