xref: /freebsd/contrib/pkgconf/doc/libpkgconf-fragment.rst (revision a3cefe7f2b4df0f70ff92d4570ce18e517af43ec)
1*a3cefe7fSPierre Pronchery
2*a3cefe7fSPierre Proncherylibpkgconf `fragment` module
3*a3cefe7fSPierre Pronchery============================
4*a3cefe7fSPierre Pronchery
5*a3cefe7fSPierre ProncheryThe `fragment` module provides low-level management and rendering of fragment lists.  A
6*a3cefe7fSPierre Pronchery`fragment list` contains various `fragments` of text (such as ``-I /usr/include``) in a matter
7*a3cefe7fSPierre Proncherywhich is composable, mergeable and reorderable.
8*a3cefe7fSPierre Pronchery
9*a3cefe7fSPierre Pronchery.. c:function:: void pkgconf_fragment_add(const pkgconf_client_t *client, pkgconf_list_t *list, const char *string, unsigned int flags)
10*a3cefe7fSPierre Pronchery
11*a3cefe7fSPierre Pronchery   Adds a `fragment` of text to a `fragment list`, possibly modifying the fragment if a sysroot is set.
12*a3cefe7fSPierre Pronchery
13*a3cefe7fSPierre Pronchery   :param pkgconf_client_t* client: The pkgconf client being accessed.
14*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* list: The fragment list.
15*a3cefe7fSPierre Pronchery   :param char* string: The string of text to add as a fragment to the fragment list.
16*a3cefe7fSPierre Pronchery   :param uint flags: Parsing-related flags for the package.
17*a3cefe7fSPierre Pronchery   :return: nothing
18*a3cefe7fSPierre Pronchery
19*a3cefe7fSPierre Pronchery.. c:function:: bool pkgconf_fragment_has_system_dir(const pkgconf_client_t *client, const pkgconf_fragment_t *frag)
20*a3cefe7fSPierre Pronchery
21*a3cefe7fSPierre Pronchery   Checks if a `fragment` contains a `system path`.  System paths are detected at compile time and optionally overridden by
22*a3cefe7fSPierre Pronchery   the ``PKG_CONFIG_SYSTEM_INCLUDE_PATH`` and ``PKG_CONFIG_SYSTEM_LIBRARY_PATH`` environment variables.
23*a3cefe7fSPierre Pronchery
24*a3cefe7fSPierre Pronchery   :param pkgconf_client_t* client: The pkgconf client object the fragment belongs to.
25*a3cefe7fSPierre Pronchery   :param pkgconf_fragment_t* frag: The fragment being checked.
26*a3cefe7fSPierre Pronchery   :return: true if the fragment contains a system path, else false
27*a3cefe7fSPierre Pronchery   :rtype: bool
28*a3cefe7fSPierre Pronchery
29*a3cefe7fSPierre Pronchery.. c:function:: void pkgconf_fragment_copy(const pkgconf_client_t *client, pkgconf_list_t *list, const pkgconf_fragment_t *base, bool is_private)
30*a3cefe7fSPierre Pronchery
31*a3cefe7fSPierre Pronchery   Copies a `fragment` to another `fragment list`, possibly removing a previous copy of the `fragment`
32*a3cefe7fSPierre Pronchery   in a process known as `mergeback`.
33*a3cefe7fSPierre Pronchery
34*a3cefe7fSPierre Pronchery   :param pkgconf_client_t* client: The pkgconf client being accessed.
35*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* list: The list the fragment is being added to.
36*a3cefe7fSPierre Pronchery   :param pkgconf_fragment_t* base: The fragment being copied.
37*a3cefe7fSPierre Pronchery   :param bool is_private: Whether the fragment list is a `private` fragment list (static linking).
38*a3cefe7fSPierre Pronchery   :return: nothing
39*a3cefe7fSPierre Pronchery
40*a3cefe7fSPierre Pronchery.. c:function:: void pkgconf_fragment_copy_list(const pkgconf_client_t *client, pkgconf_list_t *list, const pkgconf_list_t *base)
41*a3cefe7fSPierre Pronchery
42*a3cefe7fSPierre Pronchery   Copies a `fragment list` to another `fragment list`, possibly removing a previous copy of the fragments
43*a3cefe7fSPierre Pronchery   in a process known as `mergeback`.
44*a3cefe7fSPierre Pronchery
45*a3cefe7fSPierre Pronchery   :param pkgconf_client_t* client: The pkgconf client being accessed.
46*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* list: The list the fragments are being added to.
47*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* base: The list the fragments are being copied from.
48*a3cefe7fSPierre Pronchery   :return: nothing
49*a3cefe7fSPierre Pronchery
50*a3cefe7fSPierre Pronchery.. c:function:: void pkgconf_fragment_filter(const pkgconf_client_t *client, pkgconf_list_t *dest, pkgconf_list_t *src, pkgconf_fragment_filter_func_t filter_func)
51*a3cefe7fSPierre Pronchery
52*a3cefe7fSPierre Pronchery   Copies a `fragment list` to another `fragment list` which match a user-specified filtering function.
53*a3cefe7fSPierre Pronchery
54*a3cefe7fSPierre Pronchery   :param pkgconf_client_t* client: The pkgconf client being accessed.
55*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* dest: The destination list.
56*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* src: The source list.
57*a3cefe7fSPierre Pronchery   :param pkgconf_fragment_filter_func_t filter_func: The filter function to use.
58*a3cefe7fSPierre Pronchery   :param void* data: Optional data to pass to the filter function.
59*a3cefe7fSPierre Pronchery   :return: nothing
60*a3cefe7fSPierre Pronchery
61*a3cefe7fSPierre Pronchery.. c:function:: size_t pkgconf_fragment_render_len(const pkgconf_list_t *list, bool escape, const pkgconf_fragment_render_ops_t *ops)
62*a3cefe7fSPierre Pronchery
63*a3cefe7fSPierre Pronchery   Calculates the required memory to store a `fragment list` when rendered as a string.
64*a3cefe7fSPierre Pronchery
65*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* list: The `fragment list` being rendered.
66*a3cefe7fSPierre Pronchery   :param bool escape: Whether or not to escape special shell characters (deprecated).
67*a3cefe7fSPierre Pronchery   :param pkgconf_fragment_render_ops_t* ops: An optional ops structure to use for custom renderers, else ``NULL``.
68*a3cefe7fSPierre Pronchery   :return: the amount of bytes required to represent the `fragment list` when rendered
69*a3cefe7fSPierre Pronchery   :rtype: size_t
70*a3cefe7fSPierre Pronchery
71*a3cefe7fSPierre Pronchery.. c:function:: void pkgconf_fragment_render_buf(const pkgconf_list_t *list, char *buf, size_t buflen, bool escape, const pkgconf_fragment_render_ops_t *ops)
72*a3cefe7fSPierre Pronchery
73*a3cefe7fSPierre Pronchery   Renders a `fragment list` into a buffer.
74*a3cefe7fSPierre Pronchery
75*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* list: The `fragment list` being rendered.
76*a3cefe7fSPierre Pronchery   :param char* buf: The buffer to render the fragment list into.
77*a3cefe7fSPierre Pronchery   :param size_t buflen: The length of the buffer.
78*a3cefe7fSPierre Pronchery   :param bool escape: Whether or not to escape special shell characters (deprecated).
79*a3cefe7fSPierre Pronchery   :param pkgconf_fragment_render_ops_t* ops: An optional ops structure to use for custom renderers, else ``NULL``.
80*a3cefe7fSPierre Pronchery   :return: nothing
81*a3cefe7fSPierre Pronchery
82*a3cefe7fSPierre Pronchery.. c:function:: char *pkgconf_fragment_render(const pkgconf_list_t *list)
83*a3cefe7fSPierre Pronchery
84*a3cefe7fSPierre Pronchery   Allocate memory and render a `fragment list` into it.
85*a3cefe7fSPierre Pronchery
86*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* list: The `fragment list` being rendered.
87*a3cefe7fSPierre Pronchery   :param bool escape: Whether or not to escape special shell characters (deprecated).
88*a3cefe7fSPierre Pronchery   :param pkgconf_fragment_render_ops_t* ops: An optional ops structure to use for custom renderers, else ``NULL``.
89*a3cefe7fSPierre Pronchery   :return: An allocated string containing the rendered `fragment list`.
90*a3cefe7fSPierre Pronchery   :rtype: char *
91*a3cefe7fSPierre Pronchery
92*a3cefe7fSPierre Pronchery.. c:function:: void pkgconf_fragment_delete(pkgconf_list_t *list, pkgconf_fragment_t *node)
93*a3cefe7fSPierre Pronchery
94*a3cefe7fSPierre Pronchery   Delete a `fragment node` from a `fragment list`.
95*a3cefe7fSPierre Pronchery
96*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* list: The `fragment list` to delete from.
97*a3cefe7fSPierre Pronchery   :param pkgconf_fragment_t* node: The `fragment node` to delete.
98*a3cefe7fSPierre Pronchery   :return: nothing
99*a3cefe7fSPierre Pronchery
100*a3cefe7fSPierre Pronchery.. c:function:: void pkgconf_fragment_free(pkgconf_list_t *list)
101*a3cefe7fSPierre Pronchery
102*a3cefe7fSPierre Pronchery   Delete an entire `fragment list`.
103*a3cefe7fSPierre Pronchery
104*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* list: The `fragment list` to delete.
105*a3cefe7fSPierre Pronchery   :return: nothing
106*a3cefe7fSPierre Pronchery
107*a3cefe7fSPierre Pronchery.. c:function:: bool pkgconf_fragment_parse(const pkgconf_client_t *client, pkgconf_list_t *list, pkgconf_list_t *vars, const char *value)
108*a3cefe7fSPierre Pronchery
109*a3cefe7fSPierre Pronchery   Parse a string into a `fragment list`.
110*a3cefe7fSPierre Pronchery
111*a3cefe7fSPierre Pronchery   :param pkgconf_client_t* client: The pkgconf client being accessed.
112*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* list: The `fragment list` to add the fragment entries to.
113*a3cefe7fSPierre Pronchery   :param pkgconf_list_t* vars: A list of variables to use for variable substitution.
114*a3cefe7fSPierre Pronchery   :param uint flags: Any parsing flags to be aware of.
115*a3cefe7fSPierre Pronchery   :param char* value: The string to parse into fragments.
116*a3cefe7fSPierre Pronchery   :return: true on success, false on parse error
117