15#include "gwenbuild/builders/genericbuilder_p.h"
19#include <gwenhywfar/debug.h>
20#include <gwenhywfar/memory.h>
21#include <gwenhywfar/text.h>
100 "No description for builder type \"%s\" found (%d, tried \"%s\")",
107 if (xmlDescr==
NULL) {
135 GWB_BUILDER_GENERIC *xbuilder;
140 DBG_ERROR(
NULL,
"No builder name in XML builder description");
147 xbuilder->builderName=strdup(s);
150 xbuilder->xmlDescr=xmlDescr;
166 GWB_BUILDER_GENERIC *xbuilder;
168 xbuilder=(GWB_BUILDER_GENERIC*) p;
172 free(xbuilder->toolName);
173 free(xbuilder->builderName);
181 GWB_BUILDER_GENERIC *xbuilder;
209 GWB_BUILDER_GENERIC *xbuilder;
230 GWB_BUILDER_GENERIC *xbuilder;
233 free(xbuilder->toolName);
234 xbuilder->toolName=s?strdup(s):
NULL;
241 GWB_FILE_LIST2 *fileList;
246 if (!(fileList && GWB_File_List2_GetSize(fileList)>0)) {
255 GWB_BUILDER_GENERIC *xbuilder;
256 GWB_FILE_LIST2 *fileList;
264 file=GWB_File_List2_GetFront(fileList);
270 const char *ptrToPoint;
273 ptrToPoint=strrchr(s,
'.');
293 GWB_BUILDER_GENERIC *xbuilder;
298 const char *installName;
318 fileOut=
_parseOutFile(builder, project, target, nFile, folder);
320 if (installName && *installName)
338 GWB_BUILDER_GENERIC *xbuilder;
339 const char *sFileType;
340 const char *sInstall;
350 const char *sTargetInstallPath=
NULL;
357 if (sInstall && strcasecmp(sInstall,
"target")==0)
361 if (sTargetInstallPath && *sTargetInstallPath) {
375 GWB_BUILDER_GENERIC *xbuilder;
381 if (nTargetLinkSpec) {
426 GWB_BUILDER_GENERIC *xbuilder;
448 GWB_BUILDER_GENERIC *xbuilder;
489 GWB_BUILDER_GENERIC *xbuilder;
499 if (s && strcasecmp(s,
"TRUE")==0)
504 if (s && strcasecmp(s,
"TRUE")==0)
513 GWB_BuildSubCmd_List_Add(cmd, cmdList);
524 GWB_BUILDER_GENERIC *xbuilder;
525 const char *sToolName;
544 if (s && strcasecmp(s,
"TRUE")==0)
548 if (s && strcasecmp(s,
"TRUE")==0)
569 GWB_BUILDER_GENERIC *xbuilder;
595 GWB_FILE_LIST2 *filesList;
602 if (filenameBuffer) {
640 return filenameBuffer;
675 const char *sTagName;
679 if (strcasecmp(sTagName,
"fixed")==0)
681 else if (strcasecmp(sTagName,
"inputFiles")==0)
683 else if (strcasecmp(sTagName,
"outputFiles")==0)
685 else if (strcasecmp(sTagName,
"ifHasSubTargetLibs")==0)
687 else if (strcasecmp(sTagName,
"subTargetLibs")==0)
689 else if (strcasecmp(sTagName,
"includes")==0)
691 else if (strcasecmp(sTagName,
"defines")==0)
693 else if (strcasecmp(sTagName,
"ifHasLibraries")==0)
695 else if (strcasecmp(sTagName,
"libraries")==0)
697 else if (strcasecmp(sTagName,
"haveConfigH")==0)
699 else if (strcasecmp(sTagName,
"blank")==0) {
715 GWB_BUILDER_GENERIC *xbuilder;
732 GWB_FILE_LIST2 *inFilesList;
767 GWB_FILE_LIST2 *filesList;
775 const char *useField;
788 if (useField && strcasecmp(useField,
"installPath")==0) {
867 GWB_KEYVALUEPAIR_LIST *kvpList;
868 const char *fileType;
885 GWB_KEYVALUEPAIR_LIST *kvpList;
919 GWB_FILE_LIST2_ITERATOR *it;
921 it=GWB_File_List2_First(filesList);
925 file=GWB_File_List2Iterator_Data(it);
940 file=GWB_File_List2Iterator_Next(it);
943 GWB_File_List2Iterator_free(it);
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)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
void GWB_BuildCmd_SetFolder(GWB_BUILD_CMD *bcmd, const char *s)
void GWB_BuildCmd_SetBuilderName(GWB_BUILD_CMD *bcmd, const char *s)
GWB_BUILD_SUBCMD_LIST * GWB_BuildCmd_GetPrepareCommandList(const GWB_BUILD_CMD *bcmd)
GWB_BUILD_CMD * GWB_BuildCmd_new(void)
GWB_BUILD_SUBCMD_LIST * GWB_BuildCmd_GetBuildCommandList(const GWB_BUILD_CMD *bcmd)
void GWB_BuildCmd_AddFlags(GWB_BUILD_CMD *bcmd, uint32_t i)
struct GWB_BUILD_CMD GWB_BUILD_CMD
#define GWB_BUILD_CMD_FLAGS_CHECK_DATES
#define GWB_BUILD_CMD_FLAGS_AUTO
#define GWB_BUILD_CMD_FLAGS_DEL_OUTFILES
void GWB_BuildCtx_AddInFilesToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE_LIST2 *fileList)
void GWB_BuildCtx_AddCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *cmd)
void GWB_BuildCtx_AddOutFilesToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE_LIST2 *fileList)
struct GWB_BUILD_CONTEXT GWB_BUILD_CONTEXT
void GWB_Builder_AddAbsFileNameToBuffer(const GWB_CONTEXT *context, const GWB_FILE *file, GWEN_BUFFER *argBuffer)
GWB_FILE_LIST2 * GWB_Builder_GetOutputFileList2(const GWB_BUILDER *builder)
GWB_BUILDER_ADDSOURCEFILE_FN GWB_Builder_SetAddSourceFileFn(GWB_BUILDER *builder, GWB_BUILDER_ADDSOURCEFILE_FN fn)
GWB_CONTEXT * GWB_Builder_GetContext(const GWB_BUILDER *builder)
GWB_BUILDER * GWB_Builder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *typeName)
void GWB_Builder_AddInputFile(GWB_BUILDER *builder, GWB_FILE *f)
GWEN_BUILDER_ISACCEPTABLEINPUT_FN GWB_Builder_SetIsAcceptableInputFn(GWB_BUILDER *builder, GWEN_BUILDER_ISACCEPTABLEINPUT_FN fn)
GWEN_BUILDER_ADDBUILDCMD_FN GWB_Builder_SetAddBuildCmdFn(GWB_BUILDER *builder, GWEN_BUILDER_ADDBUILDCMD_FN fn)
void GWB_Builder_SetTargetLinkSpec(GWB_BUILDER *builder, const char *s)
GWB_FILE_LIST2 * GWB_Builder_GetInputFileList2(const GWB_BUILDER *builder)
void GWB_Builder_AddFileNameToBuffer(const GWB_CONTEXT *context, const GWB_FILE *file, GWEN_BUFFER *argBuffer)
void GWB_Builder_AddOutputFile(GWB_BUILDER *builder, GWB_FILE *f)
struct GWB_BUILDER GWB_BUILDER
void GWB_BuildSubCmd_SetBuildMessage(GWB_BUILD_SUBCMD *cmd, const char *s)
void GWB_BuildSubCmd_SetCommand(GWB_BUILD_SUBCMD *cmd, const char *s)
void GWB_BuildSubCmd_SetArguments(GWB_BUILD_SUBCMD *cmd, const char *s)
GWB_BUILD_SUBCMD * GWB_BuildSubCmd_new(void)
void GWB_BuildSubCmd_AddFlags(GWB_BUILD_SUBCMD *cmd, uint32_t f)
void GWB_BuildSubCmd_SetDepFilePath(GWB_BUILD_SUBCMD *cmd, const char *s)
#define GWB_BUILD_SUBCMD_FLAGS_CHECK_DEPENDS
struct GWB_BUILD_SUBCMD GWB_BUILD_SUBCMD
#define GWB_BUILD_SUBCMD_FLAGS_IGNORE_RESULT
const char * GWB_Context_GetCurrentRelativeDir(const GWB_CONTEXT *ctx)
GWB_TARGET * GWB_Context_GetCurrentTarget(const GWB_CONTEXT *ctx)
GWB_KEYVALUEPAIR_LIST * GWB_Context_GetDefineList(const GWB_CONTEXT *ctx)
GWEN_DB_NODE * GWB_Context_GetVars(const GWB_CONTEXT *ctx)
const char * GWB_Context_GetInitialSourceDir(const GWB_CONTEXT *ctx)
GWB_KEYVALUEPAIR_LIST * GWB_Context_GetIncludeList(const GWB_CONTEXT *ctx)
const char * GWB_Context_GetCurrentBuildDir(const GWB_CONTEXT *ctx)
struct GWB_CONTEXT GWB_CONTEXT
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
int GWEN_DB_ReplaceVars(GWEN_DB_NODE *db, const char *s, GWEN_BUFFER *dbuf)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
#define GWEN_DB_FLAGS_DEFAULT
struct GWEN_DB_NODE GWEN_DB_NODE
#define DBG_INFO(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
GWB_FILE * GWB_File_List2_GetAt(const GWB_FILE_LIST2 *fileList, int index)
void GWB_File_SetInstallPath(GWB_FILE *f, const char *s)
const char * GWB_File_GetFolder(const GWB_FILE *f)
const char * GWB_File_GetName(const GWB_FILE *f)
void GWB_File_SetInstallName(GWB_FILE *f, const char *s)
void GWB_File_SetFileType(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)
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_INSTALL
static void _setupOutFiles(GWB_BUILDER *builder)
static void _readArgsFixed(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
static void _readArgsInputFiles(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
void _setToolName(GWB_BUILDER *builder, const char *s)
static void _readDepFile(GWB_BUILDER *builder, GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode)
static void _readArgsDefines(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer)
static void _addBuildCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd)
static void _addSourceFile(GWB_BUILDER *builder, GWB_FILE *f)
static void _readArgsIncludes(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
static GWEN_BUFFER * _readMainFilename(GWB_CONTEXT *context, GWEN_XMLNODE *xmlFile, GWB_FILE_LIST2 *filesList)
static void _readArgsIfHasLibraries(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
GWB_BUILDER * GWB_GenericBuilder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWEN_XMLNODE *xmlDescr)
static void _addStringListToBuffer(GWEN_STRINGLIST *sl, GWEN_BUFFER *argsBuffer)
static void GWENHYWFAR_CB _freeData(void *bp, void *p)
static void _readArgsLibraries(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer)
static void _setupVariables(GWB_BUILDER *builder)
static void _readArgsUsedSubTargets(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer)
static void _setupTargetLinkSpec(GWB_BUILDER *builder)
static void _readArgsHaveConfigH(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer)
static void _addCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, const char *groupName, GWB_BUILD_SUBCMD_LIST *cmdList)
static void _addMatchingFiles(GWB_BUILDER *builder, GWB_FILE_LIST2 *filesList, const char *pattern, int addAbs, GWEN_BUFFER *argsBuffer)
static GWB_BUILD_SUBCMD * _readSubCmd(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *n)
static GWB_FILE * _parseOutFile(GWB_BUILDER *builder, GWB_PROJECT *project, GWB_TARGET *target, GWEN_XMLNODE *nFile, const char *folder)
static GWEN_BUFFER * _readArgs(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode)
GWB_BUILDER * GWB_GenericBuilder_Factory(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *builderName)
static void _readArgsLoop(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *nArgs, GWEN_BUFFER *argsBuffer)
static int _isAcceptableInput(GWB_BUILDER *builder, const GWB_FILE *file)
static GWEN_BUFFER * _readXmlDataIntoBufferAndExpand(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
static void _readArgsOutputFiles(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
static void _readArgsIfHasUsedSubTargets(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
static void _readMainSettingsFromXml(GWB_BUILDER *builder)
static void _readBuildMessage(GWB_BUILDER *builder, GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode)
static void _setupAfterAddingFirstInputFile(GWB_BUILDER *builder)
static int _addBuildCmd(GWB_BUILDER *builder, GWB_BUILD_CONTEXT *bctx)
static void _addPrepareCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
int GWBUILD_GetTargetIsWindows(const GWENBUILD *gwenbuild)
struct GWENBUILD GWENBUILD
#define GWEN_DIR_SEPARATOR_S
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
#define GWEN_INHERIT(bt, t)
#define GWEN_INHERIT_GETDATA(bt, t, element)
int GWB_KeyValuePair_List_SampleValuesByKey(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key, const char *prefix, const char *delim, GWEN_BUFFER *destBuf)
int GWB_KeyValuePair_List_WriteAllPairsToBuffer(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *prefix, const char *assignmentString, const char *delim, GWEN_BUFFER *destBuf)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
GWEN_STRINGLIST * GWB_Parser_ReadXmlDataIntoStringList(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
uint32_t GWB_Project_GetFlags(const GWB_PROJECT *project)
GWB_FILE_LIST2 * GWB_Project_GetFileList(const GWB_PROJECT *project)
#define GWB_PROJECT_FLAGS_CONFIG_H
struct GWB_PROJECT GWB_PROJECT
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_HasString(const GWEN_STRINGLIST *sl, const char *s)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
const char * GWB_Target_GetInstallName(const GWB_TARGET *target)
GWEN_STRINGLIST * GWB_Target_GetUsedLibraryNameList(const GWB_TARGET *target)
GWEN_STRINGLIST * GWB_Target_GetUsedTargetLinkSpecList(const GWB_TARGET *target)
const char * GWB_Target_GetInstallPath(const GWB_TARGET *target)
GWB_PROJECT * GWB_Target_GetProject(const GWB_TARGET *target)
struct GWB_TARGET GWB_TARGET
char * GWEN_Text_strndup(const char *s, size_t n)
int GWEN_Text_ComparePattern(const char *w, const char *p, int sensecase)
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n)
void GWEN_XMLNode_free(GWEN_XMLNODE *n)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue)
struct GWEN__XMLNODE GWEN_XMLNODE
#define GWEN_XML_FLAGS_DEFAULT
GWENHYWFAR_API int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags)
#define GWEN_XML_FLAGS_SIMPLE