marrakesh - add src fetch and client arch + version ident
This commit is contained in:
parent
3d791bd5ff
commit
861ed79794
|
@ -11,11 +11,20 @@
|
||||||
#define M_QRY_LIST 21
|
#define M_QRY_LIST 21
|
||||||
#define M_QRY_SEARCH 22
|
#define M_QRY_SEARCH 22
|
||||||
#define M_QRY_GET 23
|
#define M_QRY_GET 23
|
||||||
|
#define M_QRY_GETSRC 24
|
||||||
|
|
||||||
#define M_ANS_START 31
|
#define M_ANS_START 31
|
||||||
#define M_ANS_DATA 32
|
#define M_ANS_DATA 32
|
||||||
#define M_ANS_END 33
|
#define M_ANS_END 33
|
||||||
|
|
||||||
|
#define M_SRC_START 41
|
||||||
|
#define M_SRC_DATA 42
|
||||||
|
#define M_SRC_END 43
|
||||||
|
|
||||||
|
#define M_ID_UUID 51
|
||||||
|
#define M_ID_VERSION 52
|
||||||
|
#define M_ID_ARCH 53
|
||||||
|
|
||||||
#if defined(__x86_64__)
|
#if defined(__x86_64__)
|
||||||
# define ARCH "x86_64"
|
# define ARCH "x86_64"
|
||||||
#elif defined(__i386__)
|
#elif defined(__i386__)
|
||||||
|
|
|
@ -9,15 +9,26 @@ rm -rf Marrakesh || true
|
||||||
export CC=gcc
|
export CC=gcc
|
||||||
export CFLAGS="-O3 -ffast-math"
|
export CFLAGS="-O3 -ffast-math"
|
||||||
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
|
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
|
||||||
|
export NAME=`grep "^PROJ:" Marrakesh.mrk | tail -1 | sed -e 's/PROJ://g' | sed -e 's/ *$//' -e 's/^ *//'`
|
||||||
|
|
||||||
|
## this is a sample - you need to do this N times, once per arch
|
||||||
|
export MRKARCH="x86_64"
|
||||||
|
export MRKOS="linux"
|
||||||
mrk extract *.mks
|
mrk extract *.mks
|
||||||
mrk build
|
mrk build
|
||||||
mrk bin
|
mrk bin
|
||||||
cp *.mkb "$2"/
|
export D="$2"/"$MRKOS-$MRKARCH"
|
||||||
|
mkdir -p "$D" || true
|
||||||
|
cp *.mkb "$D"
|
||||||
|
rm -f "$D"/"$NAME" || true
|
||||||
|
ln -sf *.mkb "$D"/"$NAME"
|
||||||
|
|
||||||
export NAME=`grep "^PROJ:" Marrakesh.mrk | tail -1 | sed -e 's/PROJ://g' | sed -e 's/ *$//' -e 's/^ *//'`
|
## # copy src to right place
|
||||||
rm -f "$2"/"$NAME" || true
|
export D="$2"/"src"
|
||||||
ln -sf *.mkb "$2"/"$NAME"
|
mkdir -p "$D" || true
|
||||||
|
cp *.mks "$D"
|
||||||
|
rm -f "$D"/"$NAME" || true
|
||||||
|
ln -sf *.mkb "$D"/"$NAME"
|
||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
rm -rf "$1"
|
rm -rf "$1"
|
||||||
|
|
103
mrk-srv.c
103
mrk-srv.c
|
@ -55,6 +55,8 @@ typedef struct
|
||||||
char *dir;
|
char *dir;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
Ecore_Exe *exe;
|
Ecore_Exe *exe;
|
||||||
|
char *arch;
|
||||||
|
char *version;
|
||||||
} Client;
|
} Client;
|
||||||
|
|
||||||
static Ecore_Ipc_Server *ipc = NULL;
|
static Ecore_Ipc_Server *ipc = NULL;
|
||||||
|
@ -178,7 +180,8 @@ client_send(Client *c, const char *name)
|
||||||
char tmp[4096];
|
char tmp[4096];
|
||||||
char *lnk;
|
char *lnk;
|
||||||
|
|
||||||
snprintf(tmp, sizeof(tmp), "%s/%s", repodir, name);
|
if (!c->arch) return;
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s/%s/%s", repodir, c->arch, name);
|
||||||
lnk = ecore_file_readlink(tmp);
|
lnk = ecore_file_readlink(tmp);
|
||||||
if (!lnk)
|
if (!lnk)
|
||||||
ecore_ipc_client_send(c->client, 10, M_DOWN_START, 0, 0, 0, NULL, 0);
|
ecore_ipc_client_send(c->client, 10, M_DOWN_START, 0, 0, 0, NULL, 0);
|
||||||
|
@ -207,6 +210,54 @@ client_send(Client *c, const char *name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
client_src_send(Client *c, const char *name)
|
||||||
|
{
|
||||||
|
char tmp[4096];
|
||||||
|
char *lnk;
|
||||||
|
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s/src/%s", repodir, name);
|
||||||
|
lnk = ecore_file_readlink(tmp);
|
||||||
|
if (!lnk)
|
||||||
|
ecore_ipc_client_send(c->client, 10, M_SRC_START, 0, 0, 0, NULL, 0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
f = fopen(tmp, "rb");
|
||||||
|
if (!f)
|
||||||
|
ecore_ipc_client_send(c->client, 10, M_SRC_START, 0, 0, 0, NULL, 0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_ipc_client_send(c->client, 10, M_SRC_START, 0, 0, 0, lnk, strlen(lnk));
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
size_t size;
|
||||||
|
char buf[10000];
|
||||||
|
|
||||||
|
size = fread(buf, 1, 10000, f);
|
||||||
|
if (size <= 0) break;
|
||||||
|
ecore_ipc_client_send(c->client, 10, M_SRC_DATA, 0, 0, 0, buf, size);
|
||||||
|
}
|
||||||
|
ecore_ipc_client_send(c->client, 10, M_SRC_END, 0, 0, 0, NULL, 0);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
arch_ok(const char *arch)
|
||||||
|
{
|
||||||
|
if (!strcmp(arch, "x86_64-linux")) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
version_ok(const char *arch)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_ipc_cb_add(void *data, int type, void *event)
|
_ipc_cb_add(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
|
@ -283,6 +334,56 @@ _ipc_cb_dat(void *data, int type, void *event)
|
||||||
}
|
}
|
||||||
// e->data == appname (Terminology, Rage etc.)
|
// e->data == appname (Terminology, Rage etc.)
|
||||||
break;
|
break;
|
||||||
|
case M_QRY_GETSRC:
|
||||||
|
if ((e->size > 0) && (e->size < 1000))
|
||||||
|
{
|
||||||
|
char *name = malloc(e->size + 1);
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
memcpy(name, e->data, e->size);
|
||||||
|
name[e->size] = 0;
|
||||||
|
client_src_send(c, name);
|
||||||
|
free(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// e->data == appname (Terminology, Rage etc.)
|
||||||
|
break;
|
||||||
|
case M_ID_UUID:
|
||||||
|
break;
|
||||||
|
case M_ID_VERSION:
|
||||||
|
if ((e->size > 0) && (e->size < 1000))
|
||||||
|
{
|
||||||
|
char *version = malloc(e->size + 1);
|
||||||
|
if (version)
|
||||||
|
{
|
||||||
|
memcpy(version, e->data, e->size);
|
||||||
|
version[e->size] = 0;
|
||||||
|
if (version_ok(version))
|
||||||
|
{
|
||||||
|
if (c->version) free(c->version);
|
||||||
|
c->version = version;
|
||||||
|
}
|
||||||
|
else free(version);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_ID_ARCH:
|
||||||
|
if ((e->size > 0) && (e->size < 1000))
|
||||||
|
{
|
||||||
|
char *arch = malloc(e->size + 1);
|
||||||
|
if (arch)
|
||||||
|
{
|
||||||
|
memcpy(arch, e->data, e->size);
|
||||||
|
arch[e->size] = 0;
|
||||||
|
if (arch_ok(arch))
|
||||||
|
{
|
||||||
|
if (c->arch) free(c->arch);
|
||||||
|
c->arch = arch;
|
||||||
|
}
|
||||||
|
else free(arch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
129
mrk.c
129
mrk.c
|
@ -1054,6 +1054,15 @@ _ipc_cb_add(void *data, int type, void *event)
|
||||||
Ecore_Ipc_Event_Server_Add *e = event;
|
Ecore_Ipc_Event_Server_Add *e = event;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
|
char tmp[4096];
|
||||||
|
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s-%s", os, arch);
|
||||||
|
ecore_ipc_server_send(ipc, 10, M_ID_ARCH, 0, 0, 0,
|
||||||
|
tmp, strlen(tmp));
|
||||||
|
snprintf(tmp, sizeof(tmp), "%i.%i.%i",
|
||||||
|
eina_version->major, eina_version->minor, eina_version->micro);
|
||||||
|
ecore_ipc_server_send(ipc, 10, M_ID_VERSION, 0, 0, 0,
|
||||||
|
tmp, strlen(tmp));
|
||||||
f = fopen(up_path, "rb");
|
f = fopen(up_path, "rb");
|
||||||
if (f)
|
if (f)
|
||||||
{
|
{
|
||||||
|
@ -1128,6 +1137,15 @@ static Eina_Bool
|
||||||
_ipc2_cb_add(void *data, int type, void *event)
|
_ipc2_cb_add(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
Ecore_Ipc_Event_Server_Add *e = event;
|
Ecore_Ipc_Event_Server_Add *e = event;
|
||||||
|
char tmp[4096];
|
||||||
|
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s-%s", os, arch);
|
||||||
|
ecore_ipc_server_send(ipc, 10, M_ID_ARCH, 0, 0, 0,
|
||||||
|
tmp, strlen(tmp));
|
||||||
|
snprintf(tmp, sizeof(tmp), "%i.%i.%i",
|
||||||
|
eina_version->major, eina_version->minor, eina_version->micro);
|
||||||
|
ecore_ipc_server_send(ipc, 10, M_ID_VERSION, 0, 0, 0,
|
||||||
|
tmp, strlen(tmp));
|
||||||
ecore_ipc_server_send(ipc, 10, M_QRY_GET, 0, 0, 0,
|
ecore_ipc_server_send(ipc, 10, M_QRY_GET, 0, 0, 0,
|
||||||
down_name, strlen(down_name));
|
down_name, strlen(down_name));
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
@ -1220,6 +1238,115 @@ package_down(const char *name)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *downsrc_name = NULL;
|
||||||
|
static char *downsrc_file = NULL;
|
||||||
|
static FILE *downsrc_f = NULL;
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_ipc3_cb_add(void *data, int type, void *event)
|
||||||
|
{
|
||||||
|
Ecore_Ipc_Event_Server_Add *e = event;
|
||||||
|
char tmp[4096];
|
||||||
|
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s-%s", os, arch);
|
||||||
|
ecore_ipc_server_send(ipc, 10, M_ID_ARCH, 0, 0, 0,
|
||||||
|
tmp, strlen(tmp));
|
||||||
|
snprintf(tmp, sizeof(tmp), "%i.%i.%i",
|
||||||
|
eina_version->major, eina_version->minor, eina_version->micro);
|
||||||
|
ecore_ipc_server_send(ipc, 10, M_ID_VERSION, 0, 0, 0,
|
||||||
|
tmp, strlen(tmp));
|
||||||
|
ecore_ipc_server_send(ipc, 10, M_QRY_GET, 0, 0, 0,
|
||||||
|
downsrc_name, strlen(downsrc_name));
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_ipc3_cb_del(void *data, int type, void *event)
|
||||||
|
{
|
||||||
|
Ecore_Ipc_Event_Server_Del *e = event;
|
||||||
|
err("disconnect...");
|
||||||
|
ecore_main_loop_quit();
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_ipc3_cb_dat(void *data, int type, void *event)
|
||||||
|
{
|
||||||
|
Ecore_Ipc_Event_Server_Data *e = event;
|
||||||
|
if (e->major == 10)
|
||||||
|
{
|
||||||
|
switch (e->minor)
|
||||||
|
{
|
||||||
|
case M_SRC_START:
|
||||||
|
if ((e->size > 0) && (e->size <= 1000) && (e->data))
|
||||||
|
{
|
||||||
|
char *file = malloc(e->size + 1);
|
||||||
|
if (file)
|
||||||
|
{
|
||||||
|
memcpy(file, e->data, e->size);
|
||||||
|
file[e->size] = 0;
|
||||||
|
if ((sane_forbidden_path(file, sane_name_veto) &&
|
||||||
|
sane_allowed_path(file, sane_name_ok)))
|
||||||
|
{
|
||||||
|
if (!downsrc_f)
|
||||||
|
{
|
||||||
|
char tmp[4096];
|
||||||
|
|
||||||
|
downsrc_file = file;
|
||||||
|
snprintf(tmp, sizeof(tmp),
|
||||||
|
"%s/Applications/.tmp",
|
||||||
|
getenv("HOME"));
|
||||||
|
ecore_file_mkpath(tmp);
|
||||||
|
snprintf(tmp, sizeof(tmp),
|
||||||
|
"%s/Applications/.tmp/%s",
|
||||||
|
getenv("HOME"), downsrc_file);
|
||||||
|
if (ecore_file_exists(tmp))
|
||||||
|
err("file already exists");
|
||||||
|
downsrc_f = fopen(file, "wb");
|
||||||
|
printf("%s\n", file);
|
||||||
|
}
|
||||||
|
else err("already have download");
|
||||||
|
}
|
||||||
|
else err("mangled filename");
|
||||||
|
}
|
||||||
|
else err("download file not sane");
|
||||||
|
}
|
||||||
|
else err("no such package");
|
||||||
|
break;
|
||||||
|
case M_SRC_DATA:
|
||||||
|
if ((downsrc_f) && (e->data) && (e->size > 0) && (e->size <= 10000))
|
||||||
|
{
|
||||||
|
fwrite(e->data, e->size, 1, downsrc_f);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case M_SRC_END:
|
||||||
|
if (downsrc_f)
|
||||||
|
{
|
||||||
|
fclose(downsrc_f);
|
||||||
|
downsrc_f = NULL;
|
||||||
|
ecore_main_loop_quit();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
package_downsrc(const char *name)
|
||||||
|
{
|
||||||
|
ipc = ecore_ipc_server_connect(ECORE_IPC_REMOTE_SYSTEM, server, server_port, NULL);
|
||||||
|
if (!ipc) return 0;
|
||||||
|
ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_ADD, _ipc3_cb_add, NULL);
|
||||||
|
ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DEL, _ipc3_cb_del, NULL);
|
||||||
|
ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DATA, _ipc3_cb_dat, NULL);
|
||||||
|
downsrc_name = strdup(name);
|
||||||
|
ecore_main_loop_begin();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -1338,6 +1465,8 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
else if (!strcmp(argv[1], "getsrc"))
|
else if (!strcmp(argv[1], "getsrc"))
|
||||||
{
|
{
|
||||||
|
if (argc < 3) err("need package to download");
|
||||||
|
if (!package_downsrc(argv[2])) return 1;
|
||||||
}
|
}
|
||||||
else if (!strcmp(argv[1], "check"))
|
else if (!strcmp(argv[1], "check"))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue