17#include <gwenhywfar/debug.h>
18#include <gwenhywfar/directory.h>
19#include <gwenhywfar/buffer.h>
32static GWB_KEYVALUEPAIR_LIST *
_generateInstallList(
const GWB_FILE_LIST2 *fileList,
const char *initialSourceDir);
44 GWB_FILE_LIST2 *fileList;
60 DBG_ERROR(
NULL,
"Error writing FileList to file \"%s\" (%d)", fileName, rv);
80 DBG_ERROR(
NULL,
"Error reading build file list from \"%s\"", fileName);
87 GWB_FILE_LIST2 *fileList;
89 fileList=GWB_File_List2_new();
91 if (GWB_File_List2_GetSize(fileList)==0) {
92 GWB_File_List2_free(fileList);
142 DBG_ERROR(
NULL,
"Error writing build file list to file \"%s\" (%d)", fileName, rv);
154 GWB_KEYVALUEPAIR_LIST *genFileList;
155 const char *initialSourceDir;
170 kvp=GWB_KeyValuePair_List_First(genFileList);
172 const char *sDestPath;
173 const char *sSrcPath;
177 if (sDestPath && sSrcPath) {
186 kvp=GWB_KeyValuePair_List_Next(kvp);
192 DBG_ERROR(
NULL,
"Error writing build file list to file \"%s\" (%d)", fileName, rv);
211 DBG_ERROR(
NULL,
"Error reading build file list from \"%s\"", fileName);
218 GWB_KEYVALUEPAIR_LIST *kvpList;
221 kvpList=GWB_KeyValuePair_List_new();
225 const char *sDestPath;
226 const char *sSrcPath;
231 GWB_KeyValuePair_List_Add(kvp, kvpList);
237 if (GWB_KeyValuePair_List_GetCount(kvpList)==0) {
238 GWB_KeyValuePair_List_free(kvpList);
254 GWB_FILE_LIST2_ITERATOR *it;
256 it=GWB_File_List2_First(fileList);
259 GWB_KEYVALUEPAIR_LIST *kvpList;
265 kvpList=GWB_KeyValuePair_List_new();
266 file=GWB_File_List2Iterator_Data(it);
274 const char *destFileName;
277 if (!(destFileName && *destFileName))
285 GWB_KeyValuePair_List_Add(kvp, kvpList);
290 file=GWB_File_List2Iterator_Next(it);
294 GWB_File_List2Iterator_free(it);
295 if (GWB_KeyValuePair_List_GetCount(kvpList)==0) {
296 GWB_KeyValuePair_List_free(kvpList);
313 if (slFileNameList) {
332 if (mtSourceFile==(time_t) 0) {
346 if (mt!=(time_t) 0) {
347 if (difftime(mt, mtSourceFile)>0) {
372 DBG_ERROR(
NULL,
"Error reading build file list from \"%s\"", fileName);
428 DBG_ERROR(
NULL,
"Error writing project to file \"%s\" (%d)", fileName, rv);
451 DBG_ERROR(
NULL,
"Error writing context tree to file \"%s\" (%d)", fileName, rv);
465#if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
466 rv=lstat(sSrcPath, &st);
468 rv=stat(sSrcPath, &st);
471 DBG_ERROR(
NULL,
"ERROR: stat(%s): %s", sSrcPath, strerror(errno));
475#if ((_BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L) && !defined(__MINGW32__)) || defined(OS_DARWIN)
476 if ((st.st_mode & S_IFMT)==S_IFLNK) {
484 bufSizeNeeded=st.st_size+1;
485 symlinkbuf=(
char*) malloc(bufSizeNeeded);
487 rv=readlink(sSrcPath, symlinkbuf, bufSizeNeeded);
489 DBG_ERROR(
NULL,
"ERROR: readlink(%s): %s", sSrcPath, strerror(errno));
493 else if (rv==bufSizeNeeded) {
509 rv=symlink(symlinkbuf, sDestPath);
511 DBG_ERROR(
NULL,
"ERROR: symlink(%s): %s", sSrcPath, strerror(errno));
518 if ((st.st_mode & S_IFMT)==S_IFREG) {
536 newMode=S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH;
537 if (st.st_mode & S_IXUSR)
538 newMode|=S_IXUSR|S_IXGRP|S_IXOTH;
539 rv=chmod(sDestPath, newMode);
541 DBG_ERROR(
NULL,
"ERROR: chmod(%s): %s", sSrcPath, strerror(errno));
559 const char *initialSourceDir;
567 if (initialSourceDir && *initialSourceDir)
575 DBG_ERROR(
NULL,
"Error writing project to file \"%s\" (%d)", fileName, rv);
611 DBG_ERROR(
NULL,
"Error reading project info from \"%s\"", fileName);
617 if (xmlProjectInfo) {
620 return xmlProjectInfo;
668 if (prefix && *prefix) {
700 if (varNamePrefix && *varNamePrefix) {
720 unsigned int vmajor=0;
721 unsigned int vminor=0;
722 unsigned int vpatchlevel=0;
723 unsigned int vbuild=0;
753 vpatchlevel=rv & 0xff;
765 return (
int) ((vmajor<<24)+(vminor<<16)+(vpatchlevel<<8)+vbuild);
776 while(*p && *p!=
'.' && *p!=
'-') {
795 int vmajor,
int vminor,
int vpatchlevel,
int vbuild,
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int GWEN_Buffer_AppendArgs(GWEN_BUFFER *bf, const char *fmt,...)
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
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)
void GWB_Context_toXml(const GWB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode, int withDb)
const char * GWB_Context_GetInitialSourceDir(const GWB_CONTEXT *ctx)
struct GWB_CONTEXT GWB_CONTEXT
int GWEN_DB_SetIntValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, int val)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
#define GWEN_DB_FLAGS_OVERWRITE_VARS
struct GWEN_DB_NODE GWEN_DB_NODE
#define DBG_DEBUG(dbg_logger, format, args...)
#define DBG_INFO(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
#define GWEN_DIR_FLAGS_PUBLIC_NAME
GWENHYWFAR_API int GWEN_Directory_GetPath(const char *path, unsigned int flags)
#define GWEN_DIR_FLAGS_PUBLIC_PATH
#define GWEN_ERROR_GENERIC
void GWB_File_List2_WriteXml(const GWB_FILE_LIST2 *fileList, GWEN_XMLNODE *xmlNode, const char *groupName)
void GWB_File_List2_ReadXml(GWEN_XMLNODE *xmlNode, const char *groupName, GWB_FILE_LIST2 *destFileList)
const char * GWB_File_GetName(const GWB_FILE *f)
void GWB_File_WriteFileNameToTopBuildDirString(const GWB_FILE *file, const char *initialSourceDir, GWEN_BUFFER *fbuf)
uint32_t GWB_File_GetFlags(const GWB_FILE *f)
const char * GWB_File_GetInstallPath(const GWB_FILE *f)
const char * GWB_File_GetInstallName(const GWB_FILE *f)
#define GWB_FILE_FLAGS_INSTALL
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWEN_STRINGLIST * GWBUILD_GetBuildFilenameList(const GWENBUILD *gwenbuild)
time_t GWBUILD_GetModificationTimeOfFile(const char *filename)
struct GWENBUILD GWENBUILD
#define GWEN_DIR_SEPARATOR_S
const char * GWB_KeyValuePair_GetValue(const GWB_KEYVALUEPAIR *kvp)
const char * GWB_KeyValuePair_GetKey(const GWB_KEYVALUEPAIR *kvp)
GWB_KEYVALUEPAIR * GWB_KeyValuePair_new(const char *key, const char *value)
struct GWB_KEYVALUEPAIR GWB_KEYVALUEPAIR
#define GWEN_PATH_FLAGS_CHECKROOT
#define GWEN_PATH_FLAGS_VARIABLE
void GWB_Project_toXml(const GWB_PROJECT *project, GWEN_XMLNODE *xmlNode)
int GWB_Project_GetVersionPatchlevel(const GWB_PROJECT *project)
GWB_CONTEXT * GWB_Project_GetRootContext(const GWB_PROJECT *project)
int GWB_Project_GetVersionMinor(const GWB_PROJECT *project)
GWB_FILE_LIST2 * GWB_Project_GetFileList(const GWB_PROJECT *project)
const char * GWB_Project_GetVersionTag(const GWB_PROJECT *project)
int GWB_Project_GetVersionMajor(const GWB_PROJECT *project)
const char * GWB_Project_GetProjectName(const GWB_PROJECT *project)
int GWB_Project_GetVersionBuild(const GWB_PROJECT *project)
struct GWB_PROJECT GWB_PROJECT
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
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_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_new(void)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
int GWEN_SyncIo_Helper_CopyFile(const char *srcPath, const char *destPath)
static void _writeProjectNameAndVersionToXml(const GWB_PROJECT *project, GWEN_XMLNODE *xmlNode)
static int _readIntUntilPointOrHyphen(const char **ptrToStringPtr)
int GWB_Utils_VersionStringToInt(const char *s)
static int _filesChanged(const char *fileName, GWEN_STRINGLIST *slFileNameList)
int GWB_Utils_WriteProjectInfoToFile(const GWB_PROJECT *project, const char *fileName)
static GWB_KEYVALUEPAIR_LIST * _generateInstallList(const GWB_FILE_LIST2 *fileList, const char *initialSourceDir)
void GWB_Utils_VersionToDbVar(GWEN_DB_NODE *db, const char *dbVarName, int vmajor, int vminor, int vpatchlevel, int vbuild, const char *vtag)
int GWB_Utils_WriteProjectToFile(const GWB_PROJECT *project, const char *fileName)
GWB_FILE_LIST2 * GWB_Utils_ReadFileList2(const char *fileName)
static GWEN_STRINGLIST * _readBuildFileList(const char *fileName)
GWEN_XMLNODE * GWB_Utils_ReadProjectInfoFromFile(const char *fileName)
GWB_KEYVALUEPAIR_LIST * GWB_Utils_ReadInstallFileList(const char *fileName)
int GWB_Utils_BuildFilesChanged(const char *fileName)
int GWB_Utils_CopyFile(const char *sSrcPath, const char *sDestPath)
static int _readAndStoreNextVersionPart(const char **s, GWEN_DB_NODE *db, const char *varNamePrefix, const char *varName)
int GWB_Utils_VersionStringToDb(GWEN_DB_NODE *db, const char *prefix, const char *s)
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)
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
void GWEN_XMLNode_UnlinkChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child)
GWEN_XMLNODE * GWEN_XMLNode_new(GWEN_XMLNODE_TYPE t, const char *data)
void GWEN_XMLNode_SetIntValue(GWEN_XMLNODE *n, const char *name, int value)
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
const char * GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n, const char *name, const char *defValue)
void GWEN_XMLNode_AddChild(GWEN_XMLNODE *n, GWEN_XMLNODE *child)
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)
void GWEN_XMLNode_SetCharValue(GWEN_XMLNODE *n, const char *name, const char *value)
struct GWEN__XMLNODE GWEN_XMLNODE
GWENHYWFAR_API int GWEN_XMLNode_WriteFile(const GWEN_XMLNODE *n, const char *fname, uint32_t flags)
#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