pkg: add support for munging tuples based on $(pc_sysrootdir) if requested
parent
bea204fa63
commit
01c2d1d44c
23
pkg.c
23
pkg.c
|
@ -143,12 +143,12 @@ pkg_get_parent_dir(pkg_t *pkg)
|
||||||
static pkg_t *pkg_cache = NULL;
|
static pkg_t *pkg_cache = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pkg_new_from_file(filename, file)
|
* pkg_new_from_file(filename, file, flags)
|
||||||
*
|
*
|
||||||
* Parse a .pc file into a pkg_t object structure.
|
* Parse a .pc file into a pkg_t object structure.
|
||||||
*/
|
*/
|
||||||
pkg_t *
|
pkg_t *
|
||||||
pkg_new_from_file(const char *filename, FILE *f)
|
pkg_new_from_file(const char *filename, FILE *f, unsigned int flags)
|
||||||
{
|
{
|
||||||
pkg_t *pkg;
|
pkg_t *pkg;
|
||||||
char readbuf[PKG_BUFSIZE];
|
char readbuf[PKG_BUFSIZE];
|
||||||
|
@ -221,7 +221,18 @@ pkg_new_from_file(const char *filename, FILE *f)
|
||||||
pkg->conflicts = pkg_dependency_parse(pkg, value);
|
pkg->conflicts = pkg_dependency_parse(pkg, value);
|
||||||
break;
|
break;
|
||||||
case '=':
|
case '=':
|
||||||
|
if (!(flags & PKGF_MUNGE_SYSROOT_PREFIX) || strcasecmp(key, "prefix"))
|
||||||
pkg->vars = pkg_tuple_add(pkg->vars, key, value);
|
pkg->vars = pkg_tuple_add(pkg->vars, key, value);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char mungebuf[PKG_BUFSIZE];
|
||||||
|
char *sysroot_dir = pkg_tuple_find_global("pc_sysrootdir");
|
||||||
|
|
||||||
|
strlcpy(mungebuf, sysroot_dir, sizeof mungebuf);
|
||||||
|
strlcat(mungebuf, value, sizeof mungebuf);
|
||||||
|
|
||||||
|
pkg->vars = pkg_tuple_add(pkg->vars, key, mungebuf);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -294,11 +305,11 @@ pkg_try_specific_path(const char *path, const char *name, unsigned int flags)
|
||||||
|
|
||||||
if (!(flags & PKGF_NO_UNINSTALLED) && (f = fopen(uninst_locbuf, "r")) != NULL)
|
if (!(flags & PKGF_NO_UNINSTALLED) && (f = fopen(uninst_locbuf, "r")) != NULL)
|
||||||
{
|
{
|
||||||
pkg = pkg_new_from_file(uninst_locbuf, f);
|
pkg = pkg_new_from_file(uninst_locbuf, f, flags);
|
||||||
pkg->uninstalled = true;
|
pkg->uninstalled = true;
|
||||||
}
|
}
|
||||||
else if ((f = fopen(locbuf, "r")) != NULL)
|
else if ((f = fopen(locbuf, "r")) != NULL)
|
||||||
pkg = pkg_new_from_file(locbuf, f);
|
pkg = pkg_new_from_file(locbuf, f, flags);
|
||||||
|
|
||||||
return pkg;
|
return pkg;
|
||||||
}
|
}
|
||||||
|
@ -332,7 +343,7 @@ pkg_scan_dir(const char *path, pkg_iteration_func_t func)
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
pkg = pkg_new_from_file(filebuf, f);
|
pkg = pkg_new_from_file(filebuf, f, 0);
|
||||||
if (pkg != NULL)
|
if (pkg != NULL)
|
||||||
{
|
{
|
||||||
func(pkg);
|
func(pkg);
|
||||||
|
@ -427,7 +438,7 @@ pkg_find(const char *name, unsigned int flags)
|
||||||
if (str_has_suffix(name, PKG_CONFIG_EXT))
|
if (str_has_suffix(name, PKG_CONFIG_EXT))
|
||||||
{
|
{
|
||||||
if ((f = fopen(name, "r")) != NULL)
|
if ((f = fopen(name, "r")) != NULL)
|
||||||
return pkg_new_from_file(name, f);
|
return pkg_new_from_file(name, f, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check cache */
|
/* check cache */
|
||||||
|
|
3
pkg.h
3
pkg.h
|
@ -118,6 +118,7 @@ struct pkg_ {
|
||||||
#define PKGF_MERGE_PRIVATE_FRAGMENTS 0x10
|
#define PKGF_MERGE_PRIVATE_FRAGMENTS 0x10
|
||||||
#define PKGF_SKIP_CONFLICTS 0x20
|
#define PKGF_SKIP_CONFLICTS 0x20
|
||||||
#define PKGF_NO_CACHE 0x40
|
#define PKGF_NO_CACHE 0x40
|
||||||
|
#define PKGF_MUNGE_SYSROOT_PREFIX 0x80
|
||||||
|
|
||||||
#define PKG_ERRF_OK 0x0
|
#define PKG_ERRF_OK 0x0
|
||||||
#define PKG_ERRF_PACKAGE_NOT_FOUND 0x1
|
#define PKG_ERRF_PACKAGE_NOT_FOUND 0x1
|
||||||
|
@ -144,7 +145,7 @@ int pkg_libs(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flag
|
||||||
pkg_comparator_t pkg_comparator_lookup_by_name(const char *name);
|
pkg_comparator_t pkg_comparator_lookup_by_name(const char *name);
|
||||||
|
|
||||||
/* parse.c */
|
/* parse.c */
|
||||||
pkg_t *pkg_new_from_file(const char *path, FILE *f);
|
pkg_t *pkg_new_from_file(const char *path, FILE *f, unsigned int flags);
|
||||||
pkg_dependency_t *pkg_dependency_parse_str(pkg_dependency_t *deplist_head, const char *depends);
|
pkg_dependency_t *pkg_dependency_parse_str(pkg_dependency_t *deplist_head, const char *depends);
|
||||||
pkg_dependency_t *pkg_dependency_parse(pkg_t *pkg, const char *depends);
|
pkg_dependency_t *pkg_dependency_parse(pkg_t *pkg, const char *depends);
|
||||||
pkg_dependency_t *pkg_dependency_append(pkg_dependency_t *head, pkg_dependency_t *tail);
|
pkg_dependency_t *pkg_dependency_append(pkg_dependency_t *head, pkg_dependency_t *tail);
|
||||||
|
|
Loading…
Reference in New Issue