15 #include "gwenbuild/builders/genericbuilder_p.h" 19 #include <gwenhywfar/debug.h> 20 #include <gwenhywfar/memory.h> 21 #include <gwenhywfar/text.h> 95 "No description for builder type \"%s\" found (%d, tried \"%s\")",
102 if (xmlDescr==
NULL) {
130 GWB_BUILDER_GENERIC *xbuilder;
135 DBG_ERROR(
NULL,
"No builder name in XML builder description");
142 xbuilder->builderName=strdup(s);
145 xbuilder->xmlDescr=xmlDescr;
161 GWB_BUILDER_GENERIC *xbuilder;
163 xbuilder=(GWB_BUILDER_GENERIC*) p;
167 free(xbuilder->toolName);
168 free(xbuilder->builderName);
176 GWB_BUILDER_GENERIC *xbuilder;
204 GWB_BUILDER_GENERIC *xbuilder;
225 GWB_BUILDER_GENERIC *xbuilder;
228 free(xbuilder->toolName);
229 xbuilder->toolName=s?strdup(s):
NULL;
236 GWB_FILE_LIST2 *fileList;
241 if (!(fileList && GWB_File_List2_GetSize(fileList)>0)) {
250 GWB_BUILDER_GENERIC *xbuilder;
251 GWB_FILE_LIST2 *fileList;
259 file=GWB_File_List2_GetFront(fileList);
265 const char *ptrToPoint;
268 ptrToPoint=strrchr(s,
'.');
272 copyOfName=strndup(s, (ptrToPoint-s));
288 GWB_BUILDER_GENERIC *xbuilder;
309 const char *sFileType;
310 const char *sInstall;
318 const char *sTargetInstallPath=
NULL;
325 if (sInstall && strcasecmp(sInstall,
"target")==0)
329 if (sTargetInstallPath && *sTargetInstallPath) {
345 GWB_BUILDER_GENERIC *xbuilder;
351 if (nTargetLinkSpec) {
396 GWB_BUILDER_GENERIC *xbuilder;
418 GWB_BUILDER_GENERIC *xbuilder;
459 GWB_BUILDER_GENERIC *xbuilder;
469 if (s && strcasecmp(s,
"TRUE")==0)
474 if (s && strcasecmp(s,
"TRUE")==0)
479 const char *sToolName;
495 if (s && strcasecmp(s,
"TRUE")==0)
499 if (s && strcasecmp(s,
"TRUE")==0)
513 GWB_BuildSubCmd_List_Add(cmd, cmdList);
526 GWB_BUILDER_GENERIC *xbuilder;
552 GWB_FILE_LIST2 *filesList;
559 if (filenameBuffer) {
597 return filenameBuffer;
632 const char *sTagName;
636 if (strcasecmp(sTagName,
"fixed")==0)
638 else if (strcasecmp(sTagName,
"inputFiles")==0)
640 else if (strcasecmp(sTagName,
"outputFiles")==0)
642 else if (strcasecmp(sTagName,
"ifHasSubTargetLibs")==0)
644 else if (strcasecmp(sTagName,
"subTargetLibs")==0)
646 else if (strcasecmp(sTagName,
"includes")==0)
648 else if (strcasecmp(sTagName,
"defines")==0)
650 else if (strcasecmp(sTagName,
"ifHasLibraries")==0)
652 else if (strcasecmp(sTagName,
"libraries")==0)
654 else if (strcasecmp(sTagName,
"haveConfigH")==0)
656 else if (strcasecmp(sTagName,
"blank")==0) {
672 GWB_BUILDER_GENERIC *xbuilder;
689 GWB_FILE_LIST2 *inFilesList;
724 GWB_FILE_LIST2 *filesList;
732 const char *useField;
745 if (useField && strcasecmp(useField,
"installPath")==0) {
824 GWB_KEYVALUEPAIR_LIST *kvpList;
825 const char *fileType;
842 GWB_KEYVALUEPAIR_LIST *kvpList;
876 GWB_FILE_LIST2_ITERATOR *it;
878 it=GWB_File_List2_First(filesList);
882 file=GWB_File_List2Iterator_Data(it);
897 file=GWB_File_List2Iterator_Next(it);
900 GWB_File_List2Iterator_free(it);
int GWEN_DB_ReplaceVars(GWEN_DB_NODE *db, const char *s, GWEN_BUFFER *dbuf)
const char * GWB_File_GetFileType(const GWB_FILE *f)
int GWB_KeyValuePair_List_SampleValuesByKey(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key, const char *prefix, const char *delim, GWEN_BUFFER *destBuf)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
void GWB_Builder_AddAbsFileNameToBuffer(const GWB_CONTEXT *context, const GWB_FILE *file, GWEN_BUFFER *argBuffer)
struct GWB_CONTEXT GWB_CONTEXT
void _setupTargetLinkSpec(GWB_BUILDER *builder)
GWB_BUILD_SUBCMD_LIST * GWB_BuildCmd_GetPrepareCommandList(const GWB_BUILD_CMD *bcmd)
GWEN_STRINGLIST * GWB_Parser_ReadXmlDataIntoStringList(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
struct GWEN_DB_NODE GWEN_DB_NODE
#define GWEN_XML_FLAGS_DEFAULT
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
#define GWEN_DIR_SEPARATOR_S
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
#define GWEN_XML_FLAGS_SIMPLE
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
static void _addSourceFile(GWB_BUILDER *builder, GWB_FILE *f)
#define GWB_BUILD_SUBCMD_FLAGS_CHECK_DEPENDS
void GWB_File_SetInstallPath(GWB_FILE *f, const char *s)
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
void _addStringListToBuffer(GWEN_STRINGLIST *sl, GWEN_BUFFER *argsBuffer)
void GWB_Builder_AddInputFile(GWB_BUILDER *builder, GWB_FILE *f)
void _readArgsIfHasUsedSubTargets(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstData(const GWEN_XMLNODE *n)
void GWB_BuildCmd_SetFolder(GWB_BUILD_CMD *bcmd, const char *s)
void _readArgsFixed(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
struct GWB_BUILD_CONTEXT GWB_BUILD_CONTEXT
void GWB_BuildSubCmd_SetArguments(GWB_BUILD_SUBCMD *cmd, const char *s)
#define GWEN_FREE_OBJECT(varname)
void GWB_Builder_SetTargetLinkSpec(GWB_BUILDER *builder, const char *s)
void GWB_File_AddFlags(GWB_FILE *f, uint32_t i)
GWB_FILE * GWB_File_List2_GetOrCreateFile(GWB_FILE_LIST2 *fileList, const char *folder, const char *fname)
GWENHYWFAR_API int GWEN_XML_ReadFile(GWEN_XMLNODE *n, const char *filepath, uint32_t flags)
void GWB_File_SetFileType(GWB_FILE *f, const char *s)
void _readArgsOutputFiles(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
struct GWB_PROJECT GWB_PROJECT
void GWB_Builder_AddOutputFile(GWB_BUILDER *builder, GWB_FILE *f)
void GWB_BuildSubCmd_SetCommand(GWB_BUILD_SUBCMD *cmd, const char *s)
void GWB_Builder_AddFileNameToBuffer(const GWB_CONTEXT *context, const GWB_FILE *file, GWEN_BUFFER *argBuffer)
#define GWB_BUILD_CMD_FLAGS_CHECK_DATES
GWEN_INHERIT(GWB_BUILDER, GWB_BUILDER_GENERIC)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
void _addBuildCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd)
void _readArgsInputFiles(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
GWEN_STRINGLIST * GWB_Target_GetUsedLibraryNameList(const GWB_TARGET *target)
GWB_KEYVALUEPAIR_LIST * GWB_Context_GetIncludeList(const GWB_CONTEXT *ctx)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
#define GWB_FILE_FLAGS_INSTALL
static int _isAcceptableInput(GWB_BUILDER *builder, const GWB_FILE *file)
const char * GWB_File_GetInstallPath(const GWB_FILE *f)
GWEN_BUFFER * _readArgs(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode)
const char * GWB_File_GetFolder(const GWB_FILE *f)
GWB_BUILD_SUBCMD * GWB_BuildSubCmd_new(void)
const char * GWB_File_GetName(const GWB_FILE *f)
GWB_FILE_LIST2 * GWB_Project_GetFileList(const GWB_PROJECT *project)
GWB_FILE_LIST2 * GWB_Builder_GetOutputFileList2(const GWB_BUILDER *builder)
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
GWEN_DB_NODE * GWB_Context_GetVars(const GWB_CONTEXT *ctx)
void GWB_BuildSubCmd_SetBuildMessage(GWB_BUILD_SUBCMD *cmd, const char *s)
void _addPrepareCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd)
GWEN_STRINGLIST * GWB_Target_GetUsedTargetLinkSpecList(const GWB_TARGET *target)
void GWB_BuildCmd_SetBuilderName(GWB_BUILD_CMD *bcmd, const char *s)
#define GWEN_NEW_OBJECT(typ, varname)
int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue)
struct GWB_TARGET GWB_TARGET
const char * GWB_Context_GetInitialSourceDir(const GWB_CONTEXT *ctx)
void _setupVariables(GWB_BUILDER *builder)
void _readArgsLoop(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *nArgs, GWEN_BUFFER *argsBuffer)
GWB_BUILDER * GWB_Builder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *typeName)
GWB_FILE_LIST2 * GWB_Builder_GetInputFileList2(const GWB_BUILDER *builder)
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
GWB_BUILDER * GWB_GenericBuilder_Factory(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *builderName)
const char * GWB_Target_GetInstallPath(const GWB_TARGET *target)
void _readMainSettingsFromXml(GWB_BUILDER *builder)
#define GWB_BUILD_CMD_FLAGS_DEL_OUTFILES
static int _addBuildCmd(GWB_BUILDER *builder, GWB_BUILD_CONTEXT *bctx)
GWB_CONTEXT * GWB_Builder_GetContext(const GWB_BUILDER *builder)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
#define GWB_BUILD_CMD_FLAGS_AUTO
#define GWB_BUILD_SUBCMD_FLAGS_IGNORE_RESULT
void GWB_BuildSubCmd_AddFlags(GWB_BUILD_SUBCMD *cmd, uint32_t f)
void GWB_BuildCtx_AddInFilesToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE_LIST2 *fileList)
GWB_BUILDER * GWB_GenericBuilder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWEN_XMLNODE *xmlDescr)
const char * GWB_File_GetExt(const GWB_FILE *f)
GWB_BUILD_SUBCMD_LIST * GWB_BuildCmd_GetBuildCommandList(const GWB_BUILD_CMD *bcmd)
GWB_KEYVALUEPAIR_LIST * GWB_Context_GetDefineList(const GWB_CONTEXT *ctx)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWB_BUILD_SUBCMD GWB_BUILD_SUBCMD
void GWEN_XMLNode_free(GWEN_XMLNODE *n)
void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child)
void _readArgsHaveConfigH(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
void GWB_BuildSubCmd_SetDepFilePath(GWB_BUILD_SUBCMD *cmd, const char *s)
#define GWB_PROJECT_FLAGS_CONFIG_H
void GWB_BuildCtx_AddCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *cmd)
void _readBuildMessage(GWB_BUILDER *builder, GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
int GWBUILD_GetTargetIsWindows(const GWENBUILD *gwenbuild)
#define DBG_ERROR(dbg_logger, format, args...)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
void GWB_BuildCtx_AddOutFilesToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE_LIST2 *fileList)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
void _readArgsIncludes(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
int GWEN_StringList_HasString(const GWEN_STRINGLIST *sl, const char *s)
int GWEN_Text_ComparePattern(const char *w, const char *p, int sensecase)
GWB_BUILD_CMD * GWB_BuildCmd_new(void)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
void GWB_BuildCmd_AddFlags(GWB_BUILD_CMD *bcmd, uint32_t i)
struct GWB_BUILD_CMD GWB_BUILD_CMD
uint32_t GWB_File_GetFlags(const GWB_FILE *f)
void _readArgsDefines(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer)
struct GWB_BUILDER GWB_BUILDER
#define DBG_INFO(dbg_logger, format, args...)
void _setToolName(GWB_BUILDER *builder, const char *s)
static void GWENHYWFAR_CB _freeData(void *bp, void *p)
uint32_t GWB_Project_GetFlags(const GWB_PROJECT *project)
static void _readDepFile(GWB_BUILDER *builder, GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode)
GWB_TARGET * GWB_Context_GetCurrentTarget(const GWB_CONTEXT *ctx)
void _readArgsIfHasLibraries(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
void _addMatchingFiles(GWB_BUILDER *builder, GWB_FILE_LIST2 *filesList, const char *pattern, int addAbs, GWEN_BUFFER *argsBuffer)
GWEN_BUFFER * _readMainFilename(GWB_CONTEXT *context, GWEN_XMLNODE *xmlFile, GWB_FILE_LIST2 *filesList)
const char * GWB_Context_GetCurrentRelativeDir(const GWB_CONTEXT *ctx)
void _addCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, const char *groupName, GWB_BUILD_SUBCMD_LIST *cmdList)
int GWB_KeyValuePair_List_WriteAllPairsToBuffer(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *prefix, const char *assignmentString, const char *delim, GWEN_BUFFER *destBuf)
GWEN_BUILDER_ISACCEPTABLEINPUT_FN GWB_Builder_SetIsAcceptableInputFn(GWB_BUILDER *builder, GWEN_BUILDER_ISACCEPTABLEINPUT_FN fn)
struct GWENBUILD GWENBUILD
void _setupAfterAddingFirstInputFile(GWB_BUILDER *builder)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn)
GWEN_BUILDER_ADDBUILDCMD_FN GWB_Builder_SetAddBuildCmdFn(GWB_BUILDER *builder, GWEN_BUILDER_ADDBUILDCMD_FN fn)
GWB_BUILDER_ADDSOURCEFILE_FN GWB_Builder_SetAddSourceFileFn(GWB_BUILDER *builder, GWB_BUILDER_ADDSOURCEFILE_FN fn)
struct GWEN__XMLNODE GWEN_XMLNODE
GWB_PROJECT * GWB_Target_GetProject(const GWB_TARGET *target)
#define GWB_FILE_FLAGS_GENERATED
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
#define GWEN_DB_FLAGS_DEFAULT
#define GWEN_INHERIT_GETDATA(bt, t, element)
GWEN_BUFFER * _readXmlDataIntoBufferAndExpand(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode)
void _readArgsLibraries(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer)
GWB_FILE * GWB_File_List2_GetAt(const GWB_FILE_LIST2 *fileList, int index)
void _readArgsUsedSubTargets(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer)
const char * GWB_Context_GetCurrentBuildDir(const GWB_CONTEXT *ctx)
void _setupOutFiles(GWB_BUILDER *builder)