20 #include <gwenhywfar/debug.h> 21 #include <gwenhywfar/directory.h> 22 #include <gwenhywfar/text.h> 35 const char *sCommand,
const char *sEnvVar,
const char *sVarName);
52 GWB_KEYVALUEPAIR_LIST *givenOptionList;
58 if (!(folder && *folder)) {
59 fprintf(stderr,
"ERROR: Folder needed.\n");
62 if (strcasecmp(folder,
".")==0) {
63 fprintf(stderr,
"ERROR: Only building outside source folder supported.\n");
77 fprintf(stderr,
"ERROR: Error preparing first context.\n");
83 fprintf(stderr,
"ERROR: Error reading build files.\n");
89 fprintf(stderr,
"ERROR: Error making builders for targets.\n");
95 fprintf(stderr,
"ERROR: Could not generate build commands.\n");
101 fprintf(stderr,
"ERROR: Error writing build context file.\n");
107 fprintf(stderr,
"ERROR: Error writing file list file.\n");
115 fprintf(stderr,
"ERROR: Error writing file list file.\n");
121 fprintf(stderr,
"ERROR: Error writing install file list.\n");
128 fprintf(stderr,
"ERROR: Error writing project to file.\n");
135 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;
276 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"gcc",
"CC",
"GWBUILD_TOOL_CC");
280 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"g++",
"CXX",
"GWBUILD_TOOL_CXX");
284 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"ld",
"LD",
"GWBUILD_TOOL_LD");
288 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"ar",
"AR",
"GWBUILD_TOOL_AR");
292 rv=
_getToolPath(dbVars, sCompileTarget, sl,
"ranlib",
"RANLIB",
"GWBUILD_TOOL_RANLIB");
296 rv=
_getToolPath(dbVars,
NULL, sl,
"typemaker2",
"TYPEMAKER2",
"GWBUILD_TOOL_TYPEMAKER2");
307 const char *sCommand,
const char *sEnvVar,
const char *sVarName)
316 if (sCompileTarget && *sCompileTarget) {
371 GWB_KEYVALUEPAIR_LIST *kvpList;
373 kvpList=GWB_KeyValuePair_List_new();
374 for (i=0; i<100; i++) {
393 GWB_KeyValuePair_List_Add(kvp, kvpList);
399 if (GWB_KeyValuePair_List_GetCount(kvpList)==0) {
400 GWB_KeyValuePair_List_free(kvpList);
412 static char *staticLibHelperContent=
418 "$TOOL -t $LIB | xargs ar rvs $LIB.new && mv -v $LIB.new $LIB";
423 DBG_ERROR(
NULL,
"Error writing static lib helper to \"%s\" (%d)", fileName, rv);
426 if (chmod(fileName, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP)==-1) {
427 DBG_ERROR(
NULL,
"Error on chmod(%s): %s", fileName, strerror(errno));
static int _prepareContextForSetup(GWB_CONTEXT *firstContext, GWEN_DB_NODE *dbArgs)
GWEN_STRINGLIST * GWEN_StringList_fromString2(const char *str, const char *delimiters, int checkDouble, uint32_t flags)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
static int _getAllToolPaths(GWEN_DB_NODE *dbVars, const char *sCompileTarget, const GWEN_STRINGLIST *sl)
const char * GWBUILD_GetHostArch()
struct GWB_CONTEXT GWB_CONTEXT
#define GWEN_DB_FLAGS_OVERWRITE_VARS
int GWB_Setup(GWEN_DB_NODE *dbArgs)
struct GWEN_DB_NODE GWEN_DB_NODE
int GWB_RepeatLastSetup(const char *fileName)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
int GWB_Utils_WriteInstallFileList(const GWB_PROJECT *project, const char *fileName)
GWENBUILD * GWBUILD_new(void)
static int _determineTools(GWB_CONTEXT *context, GWEN_DB_NODE *dbArgs)
struct GWB_BUILD_CONTEXT GWB_BUILD_CONTEXT
void GWB_Project_Dump(const GWB_PROJECT *project, int indent, int fullDump)
const char * GWBUILD_GetHostSystem()
#define GWENBUILD_FLAGS_STATIC
void GWBUILD_AddFlags(GWENBUILD *gwenbuild, uint32_t f)
struct GWB_PROJECT GWB_PROJECT
const char * GWBUILD_GetArchFromTriplet(const char *sTriplet)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
const char * GWEN_StringList_StringAt(const GWEN_STRINGLIST *sl, int idx)
GWEN_STRINGLIST * GWBUILD_GetPathFromEnvironment()
static void _determineTarget(GWB_CONTEXT *context, GWEN_DB_NODE *dbArgs)
static int _writeStaticLibHelper(const char *fileName)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
GWEN_DB_NODE * GWB_Context_GetVars(const GWB_CONTEXT *ctx)
int GWB_Utils_WriteProjectToFile(const GWB_PROJECT *project, const char *fileName)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
int GWB_Utils_WriteProjectInfoToFile(const GWB_PROJECT *project, const char *fileName)
GWB_CONTEXT * GWB_Context_new(GWENBUILD *gwenbuild)
GWENHYWFAR_API int GWEN_Directory_FindFileInPaths(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf)
uint32_t GWBUILD_GetFlags(const GWENBUILD *gwenbuild)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
#define GWEN_ERROR_GENERIC
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
static void _copyEnvironmentVariableToDb(GWEN_DB_NODE *db, const char *envName, const char *dbVarName)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWB_PROJECT * GWB_Parser_ReadBuildTree(GWENBUILD *gwbuild, GWB_CONTEXT *currentContext, const char *srcDir, GWB_KEYVALUEPAIR_LIST *givenOptionList)
GWB_BUILD_CONTEXT * GWBUILD_MakeBuildCommands(GWB_PROJECT *project)
GWB_KEYVALUEPAIR * GWB_KeyValuePair_new(const char *key, const char *value)
int GWB_BuildCtx_WriteToXmlFile(const GWB_BUILD_CONTEXT *buildCtx, const char *fileName)
int GWBUILD_MakeBuildersForTargets(GWB_PROJECT *project)
static GWB_KEYVALUEPAIR_LIST * _readOptionsFromDb(GWEN_DB_NODE *db)
#define DBG_ERROR(dbg_logger, format, args...)
int GWB_Utils_WriteContextTreeToFile(const GWB_CONTEXT *ctx, const char *fileName)
const char * GWBUILD_GetSystemFromTriplet(const char *sTriplet)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
void GWBUILD_SetTargetSystem(GWENBUILD *gwenbuild, const char *s)
struct GWB_KEYVALUEPAIR GWB_KEYVALUEPAIR
#define DBG_INFO(dbg_logger, format, args...)
#define GWEN_TEXT_FLAGS_DEL_QUOTES
GWENHYWFAR_API int GWEN_DB_ReadFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
int GWB_Utils_WriteProjectFileList(const GWB_PROJECT *project, const char *fileName)
int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
GWENHYWFAR_API int GWEN_DB_WriteFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
static int _getToolPath(GWEN_DB_NODE *dbVars, const char *sTarget, const GWEN_STRINGLIST *sl, const char *sCommand, const char *sEnvVar, const char *sVarName)
#define GWEN_TEXT_FLAGS_CHECK_BACKSLASH
struct GWENBUILD GWENBUILD
GWEN_STRINGLIST * GWEN_StringList_new(void)
static void _copySomeEnvironmentVariablesToDb(GWEN_DB_NODE *db)
GWB_CONTEXT * GWB_Project_GetRootContext(const GWB_PROJECT *project)
GWENBUILD * GWB_Context_GetGwenbuild(const GWB_CONTEXT *ctx)
int GWEN_SyncIo_Helper_WriteFile(const char *fName, const uint8_t *ptrSource, uint64_t lenSource)
void GWBUILD_SetTargetIsWindows(GWENBUILD *gwenbuild, int i)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
#define GWEN_DB_FLAGS_DEFAULT
int GWB_Utils_WriteBuildFileList(const GWENBUILD *gwenbuild, const char *fileName)