21#include <gwenhywfar/debug.h>
22#include <gwenhywfar/directory.h>
23#include <gwenhywfar/text.h>
36 const char *sCommand,
const char *sEnvVar,
const char *sVarName);
53 GWB_KEYVALUEPAIR_LIST *givenOptionList;
59 if (!(folder && *folder)) {
60 fprintf(stderr,
"ERROR: Folder needed.\n");
63 if (strcasecmp(folder,
".")==0) {
64 fprintf(stderr,
"ERROR: Only building outside source folder supported.\n");
78 fprintf(stderr,
"ERROR: Error preparing first context.\n");
84 fprintf(stderr,
"ERROR: Error reading build files.\n");
90 fprintf(stderr,
"ERROR: Error making builders for targets.\n");
96 fprintf(stderr,
"ERROR: Could not generate build commands.\n");
102 fprintf(stderr,
"ERROR: Error writing build context file.\n");
108 fprintf(stderr,
"ERROR: Error writing file list file.\n");
116 fprintf(stderr,
"ERROR: Error writing file list file.\n");
122 fprintf(stderr,
"ERROR: Error writing install file list.\n");
129 fprintf(stderr,
"ERROR: Error writing project to file.\n");
136 fprintf(stderr,
"ERROR: Error writing project info to file.\n");
145 fprintf(stderr,
"ERROR: Error writing staticlibhelper.\n");
167 DBG_ERROR(
NULL,
"Error reading arguments from previous run (file \"%s\")", fileName);
211 const char *sTargetSystem;
213 int systemIsWindows=0;
229 systemIsWindows=(strcasecmp(sTargetSystem,
"windows")==0)?1:0;
279 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"gcc",
"CC",
"GWBUILD_TOOL_CC");
283 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"g++",
"CXX",
"GWBUILD_TOOL_CXX");
287 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"ld",
"LD",
"GWBUILD_TOOL_LD");
291 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"ar",
"AR",
"GWBUILD_TOOL_AR");
295 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"ranlib",
"RANLIB",
"GWBUILD_TOOL_RANLIB");
299 rv=
_getToolPath(dbVars,
NULL, sl,
"typemaker2",
"TYPEMAKER2",
"GWBUILD_TOOL_TYPEMAKER2");
304 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"msgfmt",
"MSGFMT",
"GWBUILD_TOOL_MSGFMT");
306 DBG_WARN(
NULL,
"Tool msgfmt not found, limited i18n support.");
322 const char *sCommand,
const char *sEnvVar,
const char *sVarName)
331 if (sCompileTarget && *sCompileTarget) {
386 GWB_KEYVALUEPAIR_LIST *kvpList;
388 kvpList=GWB_KeyValuePair_List_new();
389 for (i=0; i<100; i++) {
408 GWB_KeyValuePair_List_Add(kvp, kvpList);
414 if (GWB_KeyValuePair_List_GetCount(kvpList)==0) {
415 GWB_KeyValuePair_List_free(kvpList);
427 static char *staticLibHelperContent=
433 "$TOOL -t $LIB | xargs ar rvs $LIB.new && mv -v $LIB.new $LIB";
438 DBG_ERROR(
NULL,
"Error writing static lib helper to \"%s\" (%d)", fileName, rv);
441 if (chmod(fileName, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP)==-1) {
442 DBG_ERROR(
NULL,
"Error on chmod(%s): %s", fileName, strerror(errno));
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)
struct GWB_BUILD_CONTEXT GWB_BUILD_CONTEXT
int GWB_BuildCtx_WriteToXmlFile(const GWB_BUILD_CONTEXT *buildCtx, const char *fileName)
static GWB_KEYVALUEPAIR_LIST * _readOptionsFromDb(GWEN_DB_NODE *db)
static int _prepareContextForSetup(GWB_CONTEXT *firstContext, GWEN_DB_NODE *dbArgs)
static void _copyEnvironmentVariableToDb(GWEN_DB_NODE *db, const char *envName, const char *dbVarName)
static int _writeStaticLibHelper(const char *fileName)
static int _getToolPath(GWEN_DB_NODE *dbVars, const char *sTarget, const GWEN_STRINGLIST *sl, const char *sCommand, const char *sEnvVar, const char *sVarName)
int GWB_Setup(GWEN_DB_NODE *dbArgs)
static void _determineTarget(GWB_CONTEXT *context, GWEN_DB_NODE *dbArgs)
int GWB_RepeatLastSetup(const char *fileName)
static int _determineTools(GWB_CONTEXT *context, GWEN_DB_NODE *dbArgs)
static void _copySomeEnvironmentVariablesToDb(GWEN_DB_NODE *db)
static int _getAllToolPaths(GWEN_DB_NODE *dbVars, const char *sCompileTarget, const GWEN_STRINGLIST *sl)
GWB_CONTEXT * GWB_Context_new(GWENBUILD *gwenbuild)
GWEN_DB_NODE * GWB_Context_GetVars(const GWB_CONTEXT *ctx)
GWENBUILD * GWB_Context_GetGwenbuild(const GWB_CONTEXT *ctx)
struct GWB_CONTEXT GWB_CONTEXT
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
GWENHYWFAR_API int GWEN_DB_ReadFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
GWENHYWFAR_API int GWEN_DB_WriteFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
#define GWEN_DB_FLAGS_DEFAULT
#define GWEN_DB_FLAGS_OVERWRITE_VARS
struct GWEN_DB_NODE GWEN_DB_NODE
#define DBG_WARN(dbg_logger, format, args...)
#define DBG_INFO(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
GWENHYWFAR_API int GWEN_Directory_FindFileInPaths(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf)
#define GWEN_ERROR_GENERIC
#define GWBUILD_FILE_PROJECTINFO
#define GWBUILD_FILE_PROJECT
#define GWBUILD_FILE_BUILDFILES
#define GWBUILD_FILE_INSTALLFILES
#define GWBUILD_FILE_FILES
#define GWBUILD_FILE_ARGS
#define GWBUILD_FILE_CTXTREE
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
const char * GWBUILD_GetHostSystem()
uint32_t GWBUILD_GetFlags(const GWENBUILD *gwenbuild)
int GWBUILD_MakeBuildersForTargets(GWB_PROJECT *project)
GWEN_STRINGLIST * GWBUILD_GetPathFromEnvironment()
const char * GWBUILD_GetSystemFromTriplet(const char *sTriplet)
GWB_BUILD_CONTEXT * GWBUILD_MakeBuildCommands(GWB_PROJECT *project)
GWENBUILD * GWBUILD_new(void)
void GWBUILD_SetTargetIsWindows(GWENBUILD *gwenbuild, int i)
const char * GWBUILD_GetArchFromTriplet(const char *sTriplet)
void GWBUILD_SetTargetSystem(GWENBUILD *gwenbuild, const char *s)
const char * GWBUILD_GetHostArch()
void GWBUILD_AddFlags(GWENBUILD *gwenbuild, uint32_t f)
struct GWENBUILD GWENBUILD
#define GWENBUILD_FLAGS_STATIC
GWB_KEYVALUEPAIR * GWB_KeyValuePair_new(const char *key, const char *value)
struct GWB_KEYVALUEPAIR GWB_KEYVALUEPAIR
GWB_PROJECT * GWB_Parser_ReadBuildTree(GWENBUILD *gwbuild, GWB_CONTEXT *currentContext, const char *srcDir, GWB_KEYVALUEPAIR_LIST *givenOptionList)
GWB_CONTEXT * GWB_Project_GetRootContext(const GWB_PROJECT *project)
void GWB_Project_Dump(const GWB_PROJECT *project, int indent, int fullDump)
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)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
const char * GWEN_StringList_StringAt(const GWEN_STRINGLIST *sl, int idx)
GWEN_STRINGLIST * GWEN_StringList_new(void)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
int GWEN_SyncIo_Helper_WriteFile(const char *fName, const uint8_t *ptrSource, uint64_t lenSource)
#define GWEN_TEXT_FLAGS_DEL_QUOTES
#define GWEN_TEXT_FLAGS_CHECK_BACKSLASH
int GWB_Utils_WriteProjectInfoToFile(const GWB_PROJECT *project, const char *fileName)
int GWB_Utils_WriteProjectToFile(const GWB_PROJECT *project, const char *fileName)
int GWB_Utils_WriteContextTreeToFile(const GWB_CONTEXT *ctx, const char *fileName)
int GWB_Utils_WriteInstallFileList(const GWB_PROJECT *project, const char *fileName)
int GWB_Utils_WriteBuildFileList(const GWENBUILD *gwenbuild, const char *fileName)
int GWB_Utils_WriteProjectFileList(const GWB_PROJECT *project, const char *fileName)