Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-22 10:47:19

0001 /*
0002  * libpkgconf.h
0003  * Global include file for everything in libpkgconf.
0004  *
0005  * Copyright (c) 2011, 2015 pkgconf authors (see AUTHORS).
0006  *
0007  * Permission to use, copy, modify, and/or distribute this software for any
0008  * purpose with or without fee is hereby granted, provided that the above
0009  * copyright notice and this permission notice appear in all copies.
0010  *
0011  * This software is provided 'as is' and without any warranty, express or
0012  * implied.  In no event shall the authors be liable for any damages arising
0013  * from the use of this software.
0014  */
0015 
0016 #ifndef LIBPKGCONF__LIBPKGCONF_H
0017 #define LIBPKGCONF__LIBPKGCONF_H
0018 
0019 #include <inttypes.h>
0020 #include <stdio.h>
0021 #include <stdarg.h>
0022 #include <stddef.h>
0023 #include <stdbool.h>
0024 #include <stdint.h>
0025 #include <libpkgconf/libpkgconf-api.h>
0026 #include <libpkgconf/iter.h>
0027 #include <libpkgconf/bsdstubs.h>
0028 
0029 #ifdef __cplusplus
0030 extern "C" {
0031 #endif
0032 
0033 /* pkg-config uses ';' on win32 as ':' is part of path */
0034 #ifdef _WIN32
0035 #define PKG_CONFIG_PATH_SEP_S   ";"
0036 #else
0037 #define PKG_CONFIG_PATH_SEP_S   ":"
0038 #endif
0039 
0040 #ifdef _WIN32
0041 #define PKG_DIR_SEP_S   '\\'
0042 #else
0043 #define PKG_DIR_SEP_S   '/'
0044 #endif
0045 
0046 #ifdef _WIN32
0047 #define realpath(N,R) _fullpath((R),(N),_MAX_PATH)
0048 #endif
0049 
0050 #define PKGCONF_BUFSIZE (65535)
0051 
0052 typedef enum {
0053     PKGCONF_CMP_NOT_EQUAL,
0054     PKGCONF_CMP_ANY,
0055     PKGCONF_CMP_LESS_THAN,
0056     PKGCONF_CMP_LESS_THAN_EQUAL,
0057     PKGCONF_CMP_EQUAL,
0058     PKGCONF_CMP_GREATER_THAN,
0059     PKGCONF_CMP_GREATER_THAN_EQUAL
0060 } pkgconf_pkg_comparator_t;
0061 
0062 #define PKGCONF_CMP_COUNT 7
0063 
0064 typedef struct pkgconf_pkg_ pkgconf_pkg_t;
0065 typedef struct pkgconf_dependency_ pkgconf_dependency_t;
0066 typedef struct pkgconf_tuple_ pkgconf_tuple_t;
0067 typedef struct pkgconf_fragment_ pkgconf_fragment_t;
0068 typedef struct pkgconf_path_ pkgconf_path_t;
0069 typedef struct pkgconf_client_ pkgconf_client_t;
0070 typedef struct pkgconf_cross_personality_ pkgconf_cross_personality_t;
0071 typedef struct pkgconf_queue_ pkgconf_queue_t;
0072 
0073 #define PKGCONF_ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
0074 
0075 #define PKGCONF_FOREACH_LIST_ENTRY(head, value) \
0076     for ((value) = (head); (value) != NULL; (value) = (value)->next)
0077 
0078 #define PKGCONF_FOREACH_LIST_ENTRY_SAFE(head, nextiter, value) \
0079     for ((value) = (head), (nextiter) = (head) != NULL ? (head)->next : NULL; (value) != NULL; (value) = (nextiter), (nextiter) = (nextiter) != NULL ? (nextiter)->next : NULL)
0080 
0081 #define PKGCONF_FOREACH_LIST_ENTRY_REVERSE(tail, value) \
0082     for ((value) = (tail); (value) != NULL; (value) = (value)->prev)
0083 
0084 #define LIBPKGCONF_VERSION  20200
0085 #define LIBPKGCONF_VERSION_STR  "2.2.0"
0086 
0087 struct pkgconf_queue_ {
0088     pkgconf_node_t iter;
0089     char *package;
0090 };
0091 
0092 struct pkgconf_fragment_ {
0093     pkgconf_node_t iter;
0094 
0095     char type;
0096     char *data;
0097 
0098     bool merged;
0099 };
0100 
0101 struct pkgconf_dependency_ {
0102     pkgconf_node_t iter;
0103 
0104     char *package;
0105     pkgconf_pkg_comparator_t compare;
0106     char *version;
0107     pkgconf_pkg_t *parent;
0108     pkgconf_pkg_t *match;
0109 
0110     unsigned int flags;
0111 
0112     int refcount;
0113     pkgconf_client_t *owner;
0114 };
0115 
0116 struct pkgconf_tuple_ {
0117     pkgconf_node_t iter;
0118 
0119     char *key;
0120     char *value;
0121 
0122     unsigned int flags;
0123 };
0124 
0125 #define PKGCONF_PKG_TUPLEF_OVERRIDE     0x1
0126 
0127 struct pkgconf_path_ {
0128     pkgconf_node_t lnode;
0129 
0130     char *path;
0131     void *handle_path;
0132     void *handle_device;
0133 };
0134 
0135 #define PKGCONF_PKG_PROPF_NONE          0x00
0136 #define PKGCONF_PKG_PROPF_STATIC        0x01
0137 #define PKGCONF_PKG_PROPF_CACHED        0x02
0138 #define PKGCONF_PKG_PROPF_UNINSTALLED       0x08
0139 #define PKGCONF_PKG_PROPF_VIRTUAL       0x10
0140 #define PKGCONF_PKG_PROPF_ANCESTOR      0x20
0141 #define PKGCONF_PKG_PROPF_VISITED_PRIVATE   0x40
0142 
0143 struct pkgconf_pkg_ {
0144     int refcount;
0145     char *id;
0146     char *filename;
0147     char *realname;
0148     char *version;
0149     char *description;
0150     char *url;
0151     char *pc_filedir;
0152     char *license;
0153     char *maintainer;
0154     char *copyright;
0155     char *why;
0156 
0157     pkgconf_list_t libs;
0158     pkgconf_list_t libs_private;
0159     pkgconf_list_t cflags;
0160     pkgconf_list_t cflags_private;
0161 
0162     pkgconf_list_t required;        /* this used to be requires but that is now a reserved keyword */
0163     pkgconf_list_t requires_private;
0164     pkgconf_list_t conflicts;
0165     pkgconf_list_t provides;
0166 
0167     pkgconf_list_t vars;
0168 
0169     unsigned int flags;
0170 
0171     pkgconf_client_t *owner;
0172 
0173     /* these resources are owned by the package and do not need special management,
0174      * under no circumstance attempt to allocate or free objects belonging to these pointers
0175      */
0176     pkgconf_tuple_t *orig_prefix;
0177     pkgconf_tuple_t *prefix;
0178 
0179     uint64_t serial;
0180     uint64_t identifier;
0181 };
0182 
0183 typedef bool (*pkgconf_pkg_iteration_func_t)(const pkgconf_pkg_t *pkg, void *data);
0184 typedef void (*pkgconf_pkg_traverse_func_t)(pkgconf_client_t *client, pkgconf_pkg_t *pkg, void *data);
0185 typedef bool (*pkgconf_queue_apply_func_t)(pkgconf_client_t *client, pkgconf_pkg_t *world, void *data, int maxdepth);
0186 typedef bool (*pkgconf_error_handler_func_t)(const char *msg, const pkgconf_client_t *client, void *data);
0187 
0188 struct pkgconf_client_ {
0189     pkgconf_list_t dir_list;
0190 
0191     pkgconf_list_t filter_libdirs;
0192     pkgconf_list_t filter_includedirs;
0193 
0194     pkgconf_list_t global_vars;
0195 
0196     void *error_handler_data;
0197     void *warn_handler_data;
0198     void *trace_handler_data;
0199 
0200     pkgconf_error_handler_func_t error_handler;
0201     pkgconf_error_handler_func_t warn_handler;
0202     pkgconf_error_handler_func_t trace_handler;
0203 
0204     FILE *auditf;
0205 
0206     char *sysroot_dir;
0207     char *buildroot_dir;
0208 
0209     unsigned int flags;
0210 
0211     char *prefix_varname;
0212 
0213     bool already_sent_notice;
0214 
0215     uint64_t serial;
0216     uint64_t identifier;
0217 
0218     pkgconf_pkg_t **cache_table;
0219     size_t cache_count;
0220 };
0221 
0222 struct pkgconf_cross_personality_ {
0223     const char *name;
0224 
0225     pkgconf_list_t dir_list;
0226 
0227     pkgconf_list_t filter_libdirs;
0228     pkgconf_list_t filter_includedirs;
0229 
0230     char *sysroot_dir;
0231 
0232     bool want_default_static;
0233     bool want_default_pure;
0234 };
0235 
0236 /* client.c */
0237 PKGCONF_API void pkgconf_client_init(pkgconf_client_t *client, pkgconf_error_handler_func_t error_handler, void *error_handler_data, const pkgconf_cross_personality_t *personality);
0238 PKGCONF_API pkgconf_client_t * pkgconf_client_new(pkgconf_error_handler_func_t error_handler, void *error_handler_data, const pkgconf_cross_personality_t *personality);
0239 PKGCONF_API void pkgconf_client_deinit(pkgconf_client_t *client);
0240 PKGCONF_API void pkgconf_client_free(pkgconf_client_t *client);
0241 PKGCONF_API const char *pkgconf_client_get_sysroot_dir(const pkgconf_client_t *client);
0242 PKGCONF_API void pkgconf_client_set_sysroot_dir(pkgconf_client_t *client, const char *sysroot_dir);
0243 PKGCONF_API const char *pkgconf_client_get_buildroot_dir(const pkgconf_client_t *client);
0244 PKGCONF_API void pkgconf_client_set_buildroot_dir(pkgconf_client_t *client, const char *buildroot_dir);
0245 PKGCONF_API unsigned int pkgconf_client_get_flags(const pkgconf_client_t *client);
0246 PKGCONF_API void pkgconf_client_set_flags(pkgconf_client_t *client, unsigned int flags);
0247 PKGCONF_API const char *pkgconf_client_get_prefix_varname(const pkgconf_client_t *client);
0248 PKGCONF_API void pkgconf_client_set_prefix_varname(pkgconf_client_t *client, const char *prefix_varname);
0249 PKGCONF_API pkgconf_error_handler_func_t pkgconf_client_get_warn_handler(const pkgconf_client_t *client);
0250 PKGCONF_API void pkgconf_client_set_warn_handler(pkgconf_client_t *client, pkgconf_error_handler_func_t warn_handler, void *warn_handler_data);
0251 PKGCONF_API pkgconf_error_handler_func_t pkgconf_client_get_error_handler(const pkgconf_client_t *client);
0252 PKGCONF_API void pkgconf_client_set_error_handler(pkgconf_client_t *client, pkgconf_error_handler_func_t error_handler, void *error_handler_data);
0253 PKGCONF_API pkgconf_error_handler_func_t pkgconf_client_get_trace_handler(const pkgconf_client_t *client);
0254 PKGCONF_API void pkgconf_client_set_trace_handler(pkgconf_client_t *client, pkgconf_error_handler_func_t trace_handler, void *trace_handler_data);
0255 PKGCONF_API void pkgconf_client_dir_list_build(pkgconf_client_t *client, const pkgconf_cross_personality_t *personality);
0256 
0257 /* personality.c */
0258 PKGCONF_API pkgconf_cross_personality_t *pkgconf_cross_personality_default(void);
0259 PKGCONF_API pkgconf_cross_personality_t *pkgconf_cross_personality_find(const char *triplet);
0260 PKGCONF_API void pkgconf_cross_personality_deinit(pkgconf_cross_personality_t *personality);
0261 
0262 #define PKGCONF_IS_MODULE_SEPARATOR(c) ((c) == ',' || isspace ((unsigned char)(c)))
0263 #define PKGCONF_IS_OPERATOR_CHAR(c) ((c) == '<' || (c) == '>' || (c) == '!' || (c) == '=')
0264 
0265 #define PKGCONF_PKG_PKGF_NONE               0x0000
0266 #define PKGCONF_PKG_PKGF_SEARCH_PRIVATE         0x0001
0267 #define PKGCONF_PKG_PKGF_ENV_ONLY           0x0002
0268 #define PKGCONF_PKG_PKGF_NO_UNINSTALLED         0x0004
0269 #define PKGCONF_PKG_PKGF_SKIP_ROOT_VIRTUAL      0x0008
0270 #define PKGCONF_PKG_PKGF_MERGE_PRIVATE_FRAGMENTS    0x0010
0271 #define PKGCONF_PKG_PKGF_SKIP_CONFLICTS         0x0020
0272 #define PKGCONF_PKG_PKGF_NO_CACHE           0x0040
0273 #define PKGCONF_PKG_PKGF_SKIP_ERRORS            0x0080
0274 #define PKGCONF_PKG_PKGF_ITER_PKG_IS_PRIVATE        0x0100
0275 #define PKGCONF_PKG_PKGF_SKIP_PROVIDES          0x0200
0276 #define PKGCONF_PKG_PKGF_REDEFINE_PREFIX        0x0400
0277 #define PKGCONF_PKG_PKGF_DONT_RELOCATE_PATHS        0x0800
0278 #define PKGCONF_PKG_PKGF_SIMPLIFY_ERRORS        0x1000
0279 #define PKGCONF_PKG_PKGF_DONT_FILTER_INTERNAL_CFLAGS    0x2000
0280 #define PKGCONF_PKG_PKGF_DONT_MERGE_SPECIAL_FRAGMENTS   0x4000
0281 #define PKGCONF_PKG_PKGF_FDO_SYSROOT_RULES      0x8000
0282 #define PKGCONF_PKG_PKGF_PKGCONF1_SYSROOT_RULES         0x10000
0283 
0284 #define PKGCONF_PKG_DEPF_INTERNAL       0x1
0285 #define PKGCONF_PKG_DEPF_PRIVATE        0x2
0286 
0287 #define PKGCONF_PKG_ERRF_OK         0x0
0288 #define PKGCONF_PKG_ERRF_PACKAGE_NOT_FOUND  0x1
0289 #define PKGCONF_PKG_ERRF_PACKAGE_VER_MISMATCH   0x2
0290 #define PKGCONF_PKG_ERRF_PACKAGE_CONFLICT   0x4
0291 #define PKGCONF_PKG_ERRF_DEPGRAPH_BREAK     0x8
0292 
0293 #if defined(__GNUC__) || defined(__INTEL_COMPILER)
0294 #define PRINTFLIKE(fmtarg, firstvararg) \
0295         __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
0296 #define DEPRECATED \
0297         __attribute__((deprecated))
0298 #else
0299 #define PRINTFLIKE(fmtarg, firstvararg)
0300 #define DEPRECATED
0301 #endif /* defined(__INTEL_COMPILER) || defined(__GNUC__) */
0302 
0303 /* parser.c */
0304 typedef void (*pkgconf_parser_operand_func_t)(void *data, const size_t lineno, const char *key, const char *value);
0305 typedef void (*pkgconf_parser_warn_func_t)(void *data, const char *fmt, ...);
0306 
0307 PKGCONF_API void pkgconf_parser_parse(FILE *f, void *data, const pkgconf_parser_operand_func_t *ops, const pkgconf_parser_warn_func_t warnfunc, const char *filename);
0308 
0309 /* pkg.c */
0310 PKGCONF_API bool pkgconf_error(const pkgconf_client_t *client, const char *format, ...) PRINTFLIKE(2, 3);
0311 PKGCONF_API bool pkgconf_warn(const pkgconf_client_t *client, const char *format, ...) PRINTFLIKE(2, 3);
0312 PKGCONF_API bool pkgconf_trace(const pkgconf_client_t *client, const char *filename, size_t lineno, const char *funcname, const char *format, ...) PRINTFLIKE(5, 6);
0313 PKGCONF_API bool pkgconf_default_error_handler(const char *msg, const pkgconf_client_t *client, void *data);
0314 
0315 #ifndef PKGCONF_LITE
0316 #if defined(__GNUC__) || defined(__INTEL_COMPILER)
0317 #define PKGCONF_TRACE(client, ...) do { \
0318         pkgconf_trace(client, __FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__); \
0319     } while (0)
0320 #else
0321 #define PKGCONF_TRACE(client, ...) do { \
0322         pkgconf_trace(client, __FILE__, __LINE__, __func__, __VA_ARGS__); \
0323     } while (0)
0324 #endif
0325 #else
0326 #define PKGCONF_TRACE(client, ...)
0327 #endif
0328 
0329 PKGCONF_API pkgconf_pkg_t *pkgconf_pkg_ref(pkgconf_client_t *client, pkgconf_pkg_t *pkg);
0330 PKGCONF_API void pkgconf_pkg_unref(pkgconf_client_t *client, pkgconf_pkg_t *pkg);
0331 PKGCONF_API void pkgconf_pkg_free(pkgconf_client_t *client, pkgconf_pkg_t *pkg);
0332 PKGCONF_API pkgconf_pkg_t *pkgconf_pkg_find(pkgconf_client_t *client, const char *name);
0333 PKGCONF_API unsigned int pkgconf_pkg_traverse(pkgconf_client_t *client, pkgconf_pkg_t *root, pkgconf_pkg_traverse_func_t func, void *data, int maxdepth, unsigned int skip_flags);
0334 PKGCONF_API unsigned int pkgconf_pkg_verify_graph(pkgconf_client_t *client, pkgconf_pkg_t *root, int depth);
0335 PKGCONF_API pkgconf_pkg_t *pkgconf_pkg_verify_dependency(pkgconf_client_t *client, pkgconf_dependency_t *pkgdep, unsigned int *eflags);
0336 PKGCONF_API const char *pkgconf_pkg_get_comparator(const pkgconf_dependency_t *pkgdep);
0337 PKGCONF_API unsigned int pkgconf_pkg_cflags(pkgconf_client_t *client, pkgconf_pkg_t *root, pkgconf_list_t *list, int maxdepth);
0338 PKGCONF_API unsigned int pkgconf_pkg_libs(pkgconf_client_t *client, pkgconf_pkg_t *root, pkgconf_list_t *list, int maxdepth);
0339 PKGCONF_API pkgconf_pkg_comparator_t pkgconf_pkg_comparator_lookup_by_name(const char *name);
0340 PKGCONF_API pkgconf_pkg_t *pkgconf_builtin_pkg_get(const char *name);
0341 
0342 PKGCONF_API int pkgconf_compare_version(const char *a, const char *b);
0343 PKGCONF_API pkgconf_pkg_t *pkgconf_scan_all(pkgconf_client_t *client, void *ptr, pkgconf_pkg_iteration_func_t func);
0344 
0345 /* parse.c */
0346 PKGCONF_API pkgconf_pkg_t *pkgconf_pkg_new_from_file(pkgconf_client_t *client, const char *path, FILE *f, unsigned int flags);
0347 PKGCONF_API void pkgconf_dependency_parse_str(pkgconf_client_t *client, pkgconf_list_t *deplist_head, const char *depends, unsigned int flags);
0348 PKGCONF_API void pkgconf_dependency_parse(pkgconf_client_t *client, pkgconf_pkg_t *pkg, pkgconf_list_t *deplist_head, const char *depends, unsigned int flags);
0349 PKGCONF_API void pkgconf_dependency_append(pkgconf_list_t *list, pkgconf_dependency_t *tail);
0350 PKGCONF_API void pkgconf_dependency_free(pkgconf_list_t *list);
0351 PKGCONF_API void pkgconf_dependency_free_one(pkgconf_dependency_t *dep);
0352 PKGCONF_API pkgconf_dependency_t *pkgconf_dependency_add(pkgconf_client_t *client, pkgconf_list_t *list, const char *package, const char *version, pkgconf_pkg_comparator_t compare, unsigned int flags);
0353 PKGCONF_API pkgconf_dependency_t *pkgconf_dependency_ref(pkgconf_client_t *client, pkgconf_dependency_t *dep);
0354 PKGCONF_API void pkgconf_dependency_unref(pkgconf_client_t *client, pkgconf_dependency_t *dep);
0355 PKGCONF_API pkgconf_dependency_t *pkgconf_dependency_copy(pkgconf_client_t *client, const pkgconf_dependency_t *dep);
0356 
0357 /* argvsplit.c */
0358 PKGCONF_API int pkgconf_argv_split(const char *src, int *argc, char ***argv);
0359 PKGCONF_API void pkgconf_argv_free(char **argv);
0360 
0361 /* fragment.c */
0362 typedef struct pkgconf_fragment_render_ops_ {
0363     size_t (*render_len)(const pkgconf_list_t *list, bool escape);
0364     void (*render_buf)(const pkgconf_list_t *list, char *buf, size_t len, bool escape);
0365 } pkgconf_fragment_render_ops_t;
0366 
0367 typedef bool (*pkgconf_fragment_filter_func_t)(const pkgconf_client_t *client, const pkgconf_fragment_t *frag, void *data);
0368 PKGCONF_API bool pkgconf_fragment_parse(const pkgconf_client_t *client, pkgconf_list_t *list, pkgconf_list_t *vars, const char *value, unsigned int flags);
0369 PKGCONF_API void pkgconf_fragment_add(const pkgconf_client_t *client, pkgconf_list_t *list, const char *string, unsigned int flags);
0370 PKGCONF_API void pkgconf_fragment_copy(const pkgconf_client_t *client, pkgconf_list_t *list, const pkgconf_fragment_t *base, bool is_private);
0371 PKGCONF_API void pkgconf_fragment_copy_list(const pkgconf_client_t *client, pkgconf_list_t *list, const pkgconf_list_t *base);
0372 PKGCONF_API void pkgconf_fragment_delete(pkgconf_list_t *list, pkgconf_fragment_t *node);
0373 PKGCONF_API void pkgconf_fragment_free(pkgconf_list_t *list);
0374 PKGCONF_API void pkgconf_fragment_filter(const pkgconf_client_t *client, pkgconf_list_t *dest, pkgconf_list_t *src, pkgconf_fragment_filter_func_t filter_func, void *data);
0375 PKGCONF_API size_t pkgconf_fragment_render_len(const pkgconf_list_t *list, bool escape, const pkgconf_fragment_render_ops_t *ops);
0376 PKGCONF_API void pkgconf_fragment_render_buf(const pkgconf_list_t *list, char *buf, size_t len, bool escape, const pkgconf_fragment_render_ops_t *ops);
0377 PKGCONF_API char *pkgconf_fragment_render(const pkgconf_list_t *list, bool escape, const pkgconf_fragment_render_ops_t *ops);
0378 PKGCONF_API bool pkgconf_fragment_has_system_dir(const pkgconf_client_t *client, const pkgconf_fragment_t *frag);
0379 
0380 /* fileio.c */
0381 PKGCONF_API char *pkgconf_fgetline(char *line, size_t size, FILE *stream);
0382 
0383 /* tuple.c */
0384 PKGCONF_API pkgconf_tuple_t *pkgconf_tuple_add(const pkgconf_client_t *client, pkgconf_list_t *parent, const char *key, const char *value, bool parse, unsigned int flags);
0385 PKGCONF_API char *pkgconf_tuple_find(const pkgconf_client_t *client, pkgconf_list_t *list, const char *key);
0386 PKGCONF_API char *pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *list, const char *value, unsigned int flags);
0387 PKGCONF_API void pkgconf_tuple_free(pkgconf_list_t *list);
0388 PKGCONF_API void pkgconf_tuple_free_entry(pkgconf_tuple_t *tuple, pkgconf_list_t *list);
0389 PKGCONF_API void pkgconf_tuple_add_global(pkgconf_client_t *client, const char *key, const char *value);
0390 PKGCONF_API char *pkgconf_tuple_find_global(const pkgconf_client_t *client, const char *key);
0391 PKGCONF_API void pkgconf_tuple_free_global(pkgconf_client_t *client);
0392 PKGCONF_API void pkgconf_tuple_define_global(pkgconf_client_t *client, const char *kv);
0393 
0394 /* queue.c */
0395 PKGCONF_API void pkgconf_queue_push(pkgconf_list_t *list, const char *package);
0396 PKGCONF_API bool pkgconf_queue_compile(pkgconf_client_t *client, pkgconf_pkg_t *world, pkgconf_list_t *list);
0397 PKGCONF_API bool pkgconf_queue_solve(pkgconf_client_t *client, pkgconf_list_t *list, pkgconf_pkg_t *world, int maxdepth);
0398 PKGCONF_API void pkgconf_queue_free(pkgconf_list_t *list);
0399 PKGCONF_API bool pkgconf_queue_apply(pkgconf_client_t *client, pkgconf_list_t *list, pkgconf_queue_apply_func_t func, int maxdepth, void *data);
0400 PKGCONF_API bool pkgconf_queue_validate(pkgconf_client_t *client, pkgconf_list_t *list, int maxdepth);
0401 PKGCONF_API void pkgconf_solution_free(pkgconf_client_t *client, pkgconf_pkg_t *world);
0402 
0403 /* cache.c */
0404 PKGCONF_API pkgconf_pkg_t *pkgconf_cache_lookup(pkgconf_client_t *client, const char *id);
0405 PKGCONF_API void pkgconf_cache_add(pkgconf_client_t *client, pkgconf_pkg_t *pkg);
0406 PKGCONF_API void pkgconf_cache_remove(pkgconf_client_t *client, pkgconf_pkg_t *pkg);
0407 PKGCONF_API void pkgconf_cache_free(pkgconf_client_t *client);
0408 
0409 /* audit.c */
0410 PKGCONF_API void pkgconf_audit_set_log(pkgconf_client_t *client, FILE *auditf);
0411 PKGCONF_API void pkgconf_audit_log(pkgconf_client_t *client, const char *format, ...) PRINTFLIKE(2, 3);
0412 PKGCONF_API void pkgconf_audit_log_dependency(pkgconf_client_t *client, const pkgconf_pkg_t *dep, const pkgconf_dependency_t *depnode);
0413 
0414 /* path.c */
0415 PKGCONF_API void pkgconf_path_add(const char *text, pkgconf_list_t *dirlist, bool filter);
0416 PKGCONF_API void pkgconf_path_prepend(const char *text, pkgconf_list_t *dirlist, bool filter);
0417 PKGCONF_API size_t pkgconf_path_split(const char *text, pkgconf_list_t *dirlist, bool filter);
0418 PKGCONF_API size_t pkgconf_path_build_from_environ(const char *envvarname, const char *fallback, pkgconf_list_t *dirlist, bool filter);
0419 PKGCONF_API bool pkgconf_path_match_list(const char *path, const pkgconf_list_t *dirlist);
0420 PKGCONF_API void pkgconf_path_free(pkgconf_list_t *dirlist);
0421 PKGCONF_API bool pkgconf_path_relocate(char *buf, size_t buflen);
0422 PKGCONF_API void pkgconf_path_copy_list(pkgconf_list_t *dst, const pkgconf_list_t *src);
0423 
0424 #ifdef __cplusplus
0425 }
0426 #endif
0427 
0428 #endif