add a real primitive new handler for mrk
This commit is contained in:
parent
ae0277944b
commit
a765645b45
168
mrk.c
168
mrk.c
|
@ -1420,6 +1420,163 @@ package_qry(int op, const char *opdat)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
package_file_isbin(const char *file)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
p = strchr(file, '.');
|
||||||
|
if (p)
|
||||||
|
{
|
||||||
|
if (!strcasecmp(p, ".png")) return 1;
|
||||||
|
if (!strcasecmp(p, ".jpg")) return 1;
|
||||||
|
if (!strcasecmp(p, ".edj")) return 1;
|
||||||
|
if (!strcasecmp(p, ".gif")) return 1;
|
||||||
|
if (!strcasecmp(p, ".bmp")) return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
string_rep(const Eina_Hash *hash, const void *key, void *data, void *fdata)
|
||||||
|
{
|
||||||
|
eina_strbuf_replace_all(fdata, key, data);
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
package_dir_dup(const char *src, const char *dst, Eina_Hash *vars)
|
||||||
|
{
|
||||||
|
char tmp[4096];
|
||||||
|
char tmp2[4096];
|
||||||
|
Eina_Strbuf *dstsbuf;
|
||||||
|
|
||||||
|
dstsbuf = eina_strbuf_new();
|
||||||
|
if (!dstsbuf) return 0;
|
||||||
|
eina_strbuf_append(dstsbuf, dst);
|
||||||
|
eina_hash_foreach(vars, string_rep, dstsbuf);
|
||||||
|
if (ecore_file_is_dir(src))
|
||||||
|
{
|
||||||
|
Eina_List *files;
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
ecore_file_mkdir(eina_strbuf_string_get(dstsbuf));
|
||||||
|
files = ecore_file_ls(src);
|
||||||
|
EINA_LIST_FREE(files, s)
|
||||||
|
{
|
||||||
|
if (s[0] != '.')
|
||||||
|
{
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s/%s", src, s);
|
||||||
|
snprintf(tmp2, sizeof(tmp2), "%s/%s", eina_strbuf_string_get(dstsbuf), s);
|
||||||
|
package_dir_dup(tmp, tmp2, vars);
|
||||||
|
}
|
||||||
|
free(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (package_file_isbin(src))
|
||||||
|
ecore_file_cp(src, eina_strbuf_string_get(dstsbuf));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FILE *fsrc, *fdst;
|
||||||
|
|
||||||
|
fsrc = fopen(src, "rb");
|
||||||
|
fdst = fopen(eina_strbuf_string_get(dstsbuf), "wb");
|
||||||
|
if ((fsrc) && (fdst))
|
||||||
|
{
|
||||||
|
long size;
|
||||||
|
|
||||||
|
fseek(fsrc, 0, SEEK_END);
|
||||||
|
size = ftell(fsrc);
|
||||||
|
fseek(fsrc, 0, SEEK_SET);
|
||||||
|
if (size > 0)
|
||||||
|
{
|
||||||
|
char *buf = malloc(size + 1);
|
||||||
|
|
||||||
|
if (buf)
|
||||||
|
{
|
||||||
|
Eina_Strbuf *tmpsbuf;
|
||||||
|
|
||||||
|
tmpsbuf = eina_strbuf_new();
|
||||||
|
if (tmpsbuf)
|
||||||
|
{
|
||||||
|
fread(buf, size, 1, fsrc);
|
||||||
|
buf[size] = 0;
|
||||||
|
eina_strbuf_append(tmpsbuf, buf);
|
||||||
|
eina_hash_foreach(vars, string_rep, tmpsbuf);
|
||||||
|
fwrite(eina_strbuf_string_get(tmpsbuf),
|
||||||
|
eina_strbuf_length_get(tmpsbuf),
|
||||||
|
1, fdst);
|
||||||
|
eina_strbuf_free(tmpsbuf);
|
||||||
|
}
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (fsrc) fclose(fsrc);
|
||||||
|
if (fdst) fclose(fdst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
eina_strbuf_free(dstsbuf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
package_gen(const char *tmpldir, const char *tmpl, Eina_Hash *vars)
|
||||||
|
{
|
||||||
|
char tmp[4096];
|
||||||
|
char tmp2[4096];
|
||||||
|
const char *domain;
|
||||||
|
|
||||||
|
domain = eina_hash_find(vars, "@APPDOM@");
|
||||||
|
ecore_file_mkdir(domain);
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s/apps/%s", tmpldir, tmpl);
|
||||||
|
package_dir_dup(tmp, domain, vars);
|
||||||
|
snprintf(tmp, sizeof(tmp), "%s/licenses/%s",
|
||||||
|
tmpldir, eina_hash_find(vars, "@APPCOPY@"));
|
||||||
|
snprintf(tmp2, sizeof(tmp2), "%s/COPYING", domain);
|
||||||
|
ecore_file_cp(tmp, tmp2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
package_new(void)
|
||||||
|
{
|
||||||
|
Eina_Hash *vars = eina_hash_string_superfast_new(NULL);
|
||||||
|
char tmp[4096];
|
||||||
|
|
||||||
|
if (!vars) return 0;
|
||||||
|
printf("App Name: (e.g. Hello)\n");
|
||||||
|
if (scanf("%500s", tmp) <= 0) return 0;
|
||||||
|
eina_hash_add(vars, "@APPNAME@", eina_stringshare_add(tmp));
|
||||||
|
printf("App Domain: (e.g. hello)\n");
|
||||||
|
if (scanf("%500s", tmp) <= 0) return 0;
|
||||||
|
eina_hash_add(vars, "@APPDOM@", eina_stringshare_add(tmp));
|
||||||
|
printf("App Version: (e.g. 1.0.0)\n");
|
||||||
|
if (scanf("%150s", tmp) <= 0) return 0;
|
||||||
|
eina_hash_add(vars, "@APPVER@", eina_stringshare_add(tmp));
|
||||||
|
printf("App License: (e.g. BSD-2 | GPL2 | APACHE | GPL3)\n");
|
||||||
|
if (scanf("%20s", tmp) <= 0) return 0;
|
||||||
|
eina_hash_add(vars, "@APPCOPY@", eina_stringshare_add(tmp));
|
||||||
|
printf("App Brief Description: (1 line)\n");
|
||||||
|
if (scanf("%400s", tmp) <= 0) return 0;
|
||||||
|
eina_hash_add(vars, "@APPDESC@", eina_stringshare_add(tmp));
|
||||||
|
printf("App Categories: (e.g. media)\n");
|
||||||
|
if (scanf("%1000s", tmp) <= 0) return 0;
|
||||||
|
eina_hash_add(vars, "@APPCATEGORIES@", eina_stringshare_add(tmp));
|
||||||
|
printf("App Tags: (e.g. video audio media film movies music player)\n");
|
||||||
|
if (scanf("%4000s", tmp) <= 0) return 0;
|
||||||
|
eina_hash_add(vars, "@APPTAGS@", eina_stringshare_add(tmp));
|
||||||
|
printf("Developer Name + E-Mail: Bob Jones <bob@bob.com>\n");
|
||||||
|
if (scanf("%1000s", tmp) <= 0) return 0;
|
||||||
|
eina_hash_add(vars, "@DEVMAIL@", eina_stringshare_add(tmp));
|
||||||
|
printf("App EFL Minimum Version: (e.g. 1.11)\n");
|
||||||
|
if (scanf("%50s", tmp) <= 0) return 0;
|
||||||
|
eina_hash_add(vars, "@EFLVER@", eina_stringshare_add(tmp));
|
||||||
|
package_gen("/home/raster/C/marrakesh/tmpl", "default", vars);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -1432,21 +1589,21 @@ main(int argc, char **argv)
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
{
|
{
|
||||||
printf("sub commands:\n"
|
printf("sub commands:\n"
|
||||||
|
" new\n"
|
||||||
" build\n"
|
" build\n"
|
||||||
" src\n"
|
|
||||||
" bin\n"
|
" bin\n"
|
||||||
|
" check\n"
|
||||||
|
" src\n"
|
||||||
" extract FILE\n"
|
" extract FILE\n"
|
||||||
" inst FILE\n"
|
" inst FILE\n"
|
||||||
" clean\n"
|
|
||||||
" rm PKGNAME\n"
|
" rm PKGNAME\n"
|
||||||
" rel [FILE]\n"
|
" rel [FILE]\n"
|
||||||
" down PKGNAME\n"
|
" down PKGNAME\n"
|
||||||
" get PKGNAME\n"
|
" get PKGNAME\n"
|
||||||
|
" getsrc PKGNAME\n"
|
||||||
|
" clean\n"
|
||||||
" list [CATEGORY]\n"
|
" list [CATEGORY]\n"
|
||||||
" search KEY1 [KEY2] [KEY3] [...]\n"
|
" search KEY1 [KEY2] [KEY3] [...]\n"
|
||||||
// " new\n"
|
|
||||||
// " getsrc\n"
|
|
||||||
" check\n"
|
|
||||||
"\n");
|
"\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -1562,6 +1719,7 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
else if (!strcmp(argv[1], "new"))
|
else if (!strcmp(argv[1], "new"))
|
||||||
{
|
{
|
||||||
|
package_new();
|
||||||
}
|
}
|
||||||
else if (!strcmp(argv[1], "getsrc"))
|
else if (!strcmp(argv[1], "getsrc"))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue