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;
|
||||
}
|
||||
|
||||
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
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
|
@ -1432,21 +1589,21 @@ main(int argc, char **argv)
|
|||
if (argc < 2)
|
||||
{
|
||||
printf("sub commands:\n"
|
||||
" new\n"
|
||||
" build\n"
|
||||
" src\n"
|
||||
" bin\n"
|
||||
" check\n"
|
||||
" src\n"
|
||||
" extract FILE\n"
|
||||
" inst FILE\n"
|
||||
" clean\n"
|
||||
" rm PKGNAME\n"
|
||||
" rel [FILE]\n"
|
||||
" down PKGNAME\n"
|
||||
" get PKGNAME\n"
|
||||
" getsrc PKGNAME\n"
|
||||
" clean\n"
|
||||
" list [CATEGORY]\n"
|
||||
" search KEY1 [KEY2] [KEY3] [...]\n"
|
||||
// " new\n"
|
||||
// " getsrc\n"
|
||||
" check\n"
|
||||
"\n");
|
||||
return -1;
|
||||
}
|
||||
|
@ -1562,6 +1719,7 @@ main(int argc, char **argv)
|
|||
}
|
||||
else if (!strcmp(argv[1], "new"))
|
||||
{
|
||||
package_new();
|
||||
}
|
||||
else if (!strcmp(argv[1], "getsrc"))
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue