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> 25 #include <sys/types.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) 943 #elif defined(__sh__) 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__) 973 #elif defined(__hpux) 976 #elif defined(__osf__) 982 #elif defined(_WIN32) 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_STRINGLIST * GWEN_StringList_fromString2(const char *str, const char *delimiters, int checkDouble, uint32_t flags)
GWB_BUILDER_LIST2 * GWB_Project_GetBuilderList(const GWB_PROJECT *project)
const char * GWB_File_GetFileType(const GWB_FILE *f)
GWB_FILE_LIST2 * GWB_BuildCmd_GetInFileList2(const GWB_BUILD_CMD *bcmd)
void GWBUILD_Debug_PrintIntValue(const char *sName, int value, int indent)
GWB_BUILD_CONTEXT * GWB_BuildCtx_new()
#define DBG_ERROR(dbg_logger, format,...)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
const char * GWBUILD_GetHostArch()
struct GWB_CONTEXT GWB_CONTEXT
#define GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS
static void _addFilesToBuildCtx(GWB_BUILD_CONTEXT *buildCtx, GWB_FILE_LIST2 *fileList)
GWEN_XMLNODE * GWB_GBuilderDescr_GetXmlDescr(const GWB_GBUILDER_DESCR *descr)
void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert)
struct GWEN_DB_NODE GWEN_DB_NODE
uint32_t GWB_File_GetId(const GWB_FILE *f)
#define DBG_DEBUG(dbg_logger, format,...)
#define GWEN_DIR_SEPARATOR_S
void GWB_Target_Dump(const GWB_TARGET *target, int indent, int fullDump)
GWENBUILD * GWBUILD_new(void)
static GWB_BUILDER * _genBuilderForSourceFile(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWB_FILE *file)
void GWB_Builder_AddInputFile(GWB_BUILDER *builder, GWB_FILE *f)
GWENBUILD * GWB_Project_GetGwbuild(const GWB_PROJECT *project)
struct GWB_OPTION GWB_OPTION
struct GWB_BUILD_CONTEXT GWB_BUILD_CONTEXT
#define GWEN_FREE_OBJECT(varname)
void GWB_File_AddFlags(GWB_FILE *f, uint32_t i)
GWB_FILE * GWB_File_dup(const GWB_FILE *oldFile)
int GWB_Builder_AddBuildCmd(GWB_BUILDER *builder, GWB_BUILD_CONTEXT *bctx)
void GWBUILD_Debug_PrintTargetList2(const char *sName, const GWB_TARGET_LIST2 *targetList2, int indent, int fullDump)
const char * GWBUILD_GetHostSystem()
GWB_FILE * GWB_File_List2_GetOrCreateFile(GWB_FILE_LIST2 *fileList, const char *folder, const char *fname)
void GWB_BuildCtx_free(GWB_BUILD_CONTEXT *bctx)
#define GWENBUILD_FLAGS_STATIC
GWB_TARGET_LIST2 * GWB_Project_GetTargetList(const GWB_PROJECT *project)
void GWBUILD_AddFlags(GWENBUILD *gwenbuild, uint32_t f)
struct GWB_PROJECT GWB_PROJECT
GWBUILD_TARGETTYPE GWBUILD_TargetType_fromString(const char *s)
const char * GWBUILD_GetArchFromTriplet(const char *sTriplet)
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)
void GWBUILD_SetFlags(GWENBUILD *gwenbuild, uint32_t f)
void GWB_Builder_AddSourceFile(GWB_BUILDER *builder, GWB_FILE *f)
void GWBUILD_Debug_PrintBuildCmdList2(const char *sName, const GWB_BUILD_CMD_LIST2 *buildCmdList2, int indent)
#define GWB_FILE_FLAGS_DIST
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
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)
void GWB_Builder_AddRelativeFolderToBuffer(const GWB_CONTEXT *context, const char *folder, int useBuildDir, GWEN_BUFFER *argBuffer)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
GWB_BUILD_CMD * GWB_File_GetBuildCmd(const GWB_FILE *f)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
#define GWB_FILE_FLAGS_INSTALL
GWB_FILE_LIST2 * GWB_Context_GetSourceFileList2(const GWB_CONTEXT *ctx)
const char * GWB_File_GetInstallPath(const GWB_FILE *f)
const char * GWB_File_GetFolder(const GWB_FILE *f)
GWB_BUILD_CMD * GWB_BuildCmd_dup(GWB_BUILD_CMD *origCmd)
const char * GWB_File_GetName(const GWB_FILE *f)
void GWBUILD_Debug_PrintValue(const char *sName, const char *sValue, int indent)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
static int _addSourcesOrMkBuildersAndGetTheirOutputs(GWB_PROJECT *project, GWB_TARGET *target, GWB_FILE_LIST2 *sourceFileList, GWB_FILE_LIST2 *newOutputList)
GWB_FILE_LIST2 * GWB_Builder_GetOutputFileList2(const GWB_BUILDER *builder)
void GWB_File_SetBuilder(GWB_FILE *f, const char *s)
GWEN_STRINGLIST * GWB_Target_GetUsedTargetNameList(const GWB_TARGET *target)
#define GWEN_NEW_OBJECT(typ, varname)
void GWBUILD_Debug_PrintFile(const char *sName, const GWB_FILE *file, int indent)
struct GWB_TARGET GWB_TARGET
void GWBUILD_Debug_PrintOptionList(const char *sName, const GWB_OPTION_LIST *optionList, int indent)
const char * GWB_Context_GetInitialSourceDir(const GWB_CONTEXT *ctx)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
void _readBuilderDescrList(GWENBUILD *gwenbuild)
GWB_BUILD_CMD_LIST * GWB_Target_GetExplicitBuildList(const GWB_TARGET *target)
void GWBUILD_Debug_PrintKvpList(const char *sName, const GWB_KEYVALUEPAIR_LIST *kvpList, int indent)
GWB_BUILDER * GWB_GenericBuilder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWEN_XMLNODE *xmlDescr)
uint32_t GWBUILD_GetFlags(const GWENBUILD *gwenbuild)
GWB_FILE_LIST2 * GWB_BuildCmd_GetOutFileList2(const GWB_BUILD_CMD *bcmd)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
void GWBUILD_Debug_PrintStringList(const char *sName, const GWEN_STRINGLIST *sl, int indent)
#define GWEN_ERROR_GENERIC
void GWB_BuildCtx_SetInitialSourceDir(GWB_BUILD_CONTEXT *bctx, const char *s)
void GWBUILD_Debug_PrintFileList2(const char *sName, const GWB_FILE_LIST2 *fileList2, int indent)
GWB_GBUILDER_DESCR_LIST * GWB_GBuilderDescr_ReadAll(const char *folder)
static void _addBuildCommands(GWB_BUILD_CONTEXT *buildCtx, const GWB_BUILD_CMD_LIST *buildCmdList)
const char * GWB_File_GetExt(const GWB_FILE *f)
static int _addOneSubTargetForTarget(GWB_TARGET *target, GWB_TARGET *subTarget)
static void _addExplicitBuildCommandsFromTargets(GWB_PROJECT *project, GWB_BUILD_CONTEXT *buildCtx)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
const char * GWBUILD_TargetType_toString(GWBUILD_TARGETTYPE tt)
const char * GWB_Target_GetId(const GWB_TARGET *target)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWB_TARGET * GWB_Project_GetTargetById(const GWB_PROJECT *project, const char *id)
const char * GWB_Builder_GetTargetLinkSpec(const GWB_BUILDER *builder)
static GWB_BUILDER * _genBuilderForTarget(GWB_PROJECT *project, GWB_TARGET *target)
GWB_BUILD_CONTEXT * GWBUILD_MakeBuildCommands(GWB_PROJECT *project)
GWB_BUILDER * GWB_Target_GetBuilder(const GWB_TARGET *target)
void GWB_BuildCtx_AddCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *cmd)
int GWBUILD_MakeBuildersForTargets(GWB_PROJECT *project)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
int GWBUILD_GetTargetIsWindows(const GWENBUILD *gwenbuild)
GWB_BUILD_CMD_LIST * GWB_Project_GetExplicitBuildList(const GWB_PROJECT *project)
static int _addBuildCommandsFromBuilder(GWB_PROJECT *project, GWB_BUILD_CONTEXT *buildCtx)
void GWBUILD_free(GWENBUILD *gwenbuild)
void GWBUILD_Debug_PrintBuilderList2(const char *sName, const GWB_BUILDER_LIST2 *builderList2, int indent, int fullDump)
time_t GWBUILD_GetModificationTimeOfFile(const char *filename)
int GWEN_Text_ComparePattern(const char *w, const char *p, int sensecase)
void GWB_BuildCmd_Dump(const GWB_BUILD_CMD *bcmd, int indent)
const char * GWBUILD_GetSystemFromTriplet(const char *sTriplet)
const char * GWB_File_GetBuilder(const GWB_FILE *f)
void GWBUILD_Debug_PrintDb(const char *sName, GWEN_DB_NODE *db, int indent)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
void GWBUILD_SetTargetSystem(GWENBUILD *gwenbuild, const char *s)
static int _addSubTargetsForTarget(GWB_PROJECT *project, GWB_TARGET *target, GWEN_STRINGLIST *usedTargetList)
void GWB_BuildCtx_AddFile(GWB_BUILD_CONTEXT *bctx, GWB_FILE *file)
struct GWB_KEYVALUEPAIR GWB_KEYVALUEPAIR
struct GWB_BUILD_CMD GWB_BUILD_CMD
uint32_t GWB_File_GetFlags(const GWB_FILE *f)
struct GWB_BUILDER GWB_BUILDER
int GWB_Builder_IsAcceptableInput(GWB_BUILDER *builder, const GWB_FILE *file)
GWEN_XMLNODE * GWEN_XMLNode_dup(const GWEN_XMLNODE *n)
void GWB_Builder_Dump(const GWB_BUILDER *builder, int indent, int fullDump)
#define GWEN_TEXT_FLAGS_DEL_QUOTES
void GWB_Target_AddUsedTargetLinkSpec(GWB_TARGET *target, const char *s)
void GWB_Option_Dump(const GWB_OPTION *option, int indent)
#define GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS
GWB_GBUILDER_DESCR * GWB_GBuilderDescr_List_GetByName(const GWB_GBUILDER_DESCR_LIST *descrList, const char *name)
GWBUILD_TARGETTYPE GWB_Target_GetTargetType(const GWB_TARGET *target)
static int _addOrBuildTargetSources(GWB_PROJECT *project, GWB_TARGET *target)
void GWBUILD_DelFlags(GWENBUILD *gwenbuild, uint32_t f)
#define DBG_INFO(dbg_logger, format,...)
static GWB_BUILDER * _getBuilderByName(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *builderName)
GWB_CONTEXT * GWB_Target_GetContext(const GWB_TARGET *target)
#define GWEN_ERROR_NO_DATA
#define GWEN_TEXT_FLAGS_CHECK_BACKSLASH
struct GWENBUILD GWENBUILD
const char * GWB_KeyValuePair_GetValue(const GWB_KEYVALUEPAIR *kvp)
static int _addSubTargets(GWB_PROJECT *project)
const char * GWB_KeyValuePair_GetKey(const GWB_KEYVALUEPAIR *kvp)
GWEN_STRINGLIST * GWEN_StringList_new(void)
void GWB_Project_AddBuilder(GWB_PROJECT *project, GWB_BUILDER *builder)
void GWBUILD_AddBuildFilename(GWENBUILD *gwenbuild, const char *s)
struct GWEN__XMLNODE GWEN_XMLNODE
GWB_CONTEXT * GWB_Project_GetRootContext(const GWB_PROJECT *project)
GWEN_STRINGLIST * GWBUILD_GetBuildFilenameList(const GWENBUILD *gwenbuild)
void GWBUILD_SetTargetIsWindows(GWENBUILD *gwenbuild, int i)
#define GWB_FILE_FLAGS_GENERATED
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
struct GWB_GBUILDER_DESCR GWB_GBUILDER_DESCR
const char * GWBUILD_GetTargetSystem(const GWENBUILD *gwenbuild)
void GWB_Target_SetBuilder(GWB_TARGET *target, GWB_BUILDER *builder)