diff options
author | Baptiste Daroussin <bapt@FreeBSD.org> | 2012-07-29 09:56:03 +0000 |
---|---|---|
committer | Baptiste Daroussin <bapt@FreeBSD.org> | 2012-07-29 09:56:03 +0000 |
commit | c75a54293871fc84978f2c6755f4b06253c6982b (patch) | |
tree | eac5faa0904fe0a4d1145748aa10c582267d3f91 /devel/pkgconf/files/patch-pkg.c | |
parent | - fix pkg-plist for option SHARED disabled (diff) |
- import patches from upstream
- changes:
* add support for --list-all
* --version now shows pkg-config compatibility version (no need to modify
anymore buggy configures that do check for --version instead of
--modversion pkg-conf)
* new --about to show the version of pkgconf
Obtained from: pkgconf git repository
Notes
Notes:
svn path=/head/; revision=301681
Diffstat (limited to 'devel/pkgconf/files/patch-pkg.c')
-rw-r--r-- | devel/pkgconf/files/patch-pkg.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/devel/pkgconf/files/patch-pkg.c b/devel/pkgconf/files/patch-pkg.c new file mode 100644 index 000000000000..128a5ef69123 --- /dev/null +++ b/devel/pkgconf/files/patch-pkg.c @@ -0,0 +1,101 @@ +--- ./pkg.c.orig 2012-07-29 11:35:32.856917000 +0200 ++++ ./pkg.c 2012-07-29 11:31:53.000000000 +0200 +@@ -142,11 +142,18 @@ + { + pkg_t *pkg; + char readbuf[PKG_BUFSIZE]; ++ char *idptr; + + pkg = calloc(sizeof(pkg_t), 1); + pkg->filename = strdup(filename); + pkg->vars = pkg_tuple_add(pkg->vars, "pcfiledir", pkg_get_parent_dir(pkg)); + ++ /* make module id */ ++ pkg->id = strdup(basename(pkg->filename)); ++ idptr = strrchr(pkg->id, '.'); ++ if (idptr) ++ *idptr = '\0'; ++ + while (pkg_fgetline(readbuf, PKG_BUFSIZE, f) != NULL) + { + char op, *p, *key = NULL, *value = NULL; +@@ -274,6 +281,79 @@ + return pkg; + } + ++static void ++pkg_scan_dir(const char *path, pkg_iteration_func_t func) ++{ ++ DIR *dir; ++ struct dirent *dirent; ++ ++ dir = opendir(path); ++ if (dir == NULL) ++ return; ++ ++ for (dirent = readdir(dir); dirent != NULL; dirent = readdir(dir)) ++ { ++ static char filebuf[PKG_BUFSIZE]; ++ pkg_t *pkg; ++ FILE *f; ++ struct stat st; ++ ++ strlcpy(filebuf, path, sizeof filebuf); ++ strlcat(filebuf, "/", sizeof filebuf); ++ strlcat(filebuf, dirent->d_name, sizeof filebuf); ++ ++ stat(filebuf, &st); ++ if (!(S_ISREG(st.st_mode))) ++ continue; ++ ++ f = fopen(filebuf, "r"); ++ if (f == NULL) ++ continue; ++ ++ pkg = pkg_new_from_file(filebuf, f); ++ if (pkg != NULL) ++ { ++ func(pkg); ++ pkg_free(pkg); ++ } ++ } ++ ++ closedir(dir); ++} ++ ++void ++pkg_scan(const char *search_path, pkg_iteration_func_t func) ++{ ++ char **path = NULL; ++ size_t count = 0, iter = 0; ++ ++ /* PKG_CONFIG_PATH has to take precedence */ ++ if (search_path == NULL) ++ return; ++ ++ count = path_split(search_path, &path); ++ ++ for (iter = 0; iter < count; iter++) ++ pkg_scan_dir(path[iter], func); ++ ++ path_free(path, count); ++} ++ ++void ++pkg_scan_all(pkg_iteration_func_t func) ++{ ++ char *path; ++ ++ path = getenv("PKG_CONFIG_PATH"); ++ if (path) ++ { ++ pkg_scan(path, func); ++ return; ++ } ++ ++ pkg_scan(get_pkgconfig_path(), func); ++} ++ + #ifdef _WIN32 + pkg_t * + pkg_find_in_registry_key(HKEY hkey, const char *name, unsigned int flags) |