# SPDX-License-Identifier: CC0-1.0 doc_install_dir = join_paths(get_option('datadir'), 'doc', 'libcamera-@0@'.format(libcamera_version)) # # Doxygen # doxygen = find_program('doxygen', required : get_option('documentation')) dot = find_program('dot', required : get_option('documentation')) if doxygen.found() and dot.found() cdata = configuration_data() cdata.set('VERSION', 'v@0@'.format(libcamera_git_version)) cdata.set('TOP_SRCDIR', meson.source_root()) cdata.set('TOP_BUILDDIR', meson.build_root()) doxyfile = configure_file(input : 'Doxyfile.in', output : 'Doxyfile', configuration : cdata) custom_target('doxygen', input : [ doxyfile, libcamera_internal_headers, libcamera_ipa_headers, libcamera_public_headers, libcamera_sources, libipa_headers, libipa_sources, ], output : 'api-html', command : [doxygen, doxyfile], install : true, install_dir : doc_install_dir) endif # # Sphinx # sphinx = find_program('sphinx-build-3', required : false) if not sphinx.found() sphinx = find_program('sphinx-build', required : get_option('documentation')) endif if sphinx.found() docs_sources = [ '../README.rst', 'coding-style.rst', 'conf.py', 'contributing.rst', 'docs.rst', 'index.rst', 'guides/introduction.rst', 'guides/application-developer.rst', 'guides/pipeline-handler.rst', ] release = 'release=v' + libcamera_git_version custom_target('documentation', command : [sphinx, '-D', release, '-q', '-W', '-b', 'html', meson.current_source_dir(), '@OUTPUT@'], input : docs_sources, output : 'html', build_by_default : true, install : true, install_dir : doc_install_dir) custom_target('documentation-linkcheck', command: [sphinx, '-W', '-b', 'linkcheck', meson.current_source_dir(), '@OUTPUT@'], build_always_stale: true, input: docs_sources, output: 'linkcheck') endif -free-run-upstreaming Jacopo Mondi's clone of libcameragit repository hosting on libcamera.org
summaryrefslogtreecommitdiff
path: root/src/libcamera/utils.cpp
blob: ef365366f29b426e9e0524813a95f6140be799dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2019, Google Inc.
 *
 * utils.cpp - Miscellaneous utility functions
 */

#include "utils.h"

#include <stdlib.h>
#include <string.h>
#include <unistd.h>

/**
 * \file utils.h
 * \brief Miscellaneous utility functions
 */

namespace libcamera {

namespace utils {

/**
 * \def ARRAY_SIZE(array)
 * \brief Determine the number of elements in the static array.
 */

/**
 * \brief Strip the directory prefix from the path
 * \param[in] path The path to process
 *
 * basename is implemented differently across different C libraries. This
 * implementation matches the one provided by the GNU libc, and does not
 * modify its input parameter.
 *
 * \return A pointer within the given path without any leading directory
 * components.
 */
const char *basename(const char *path)
{
       const char *base = strrchr(path, '/');
       return base ? base + 1 : path;
}

/**
 * \brief Get an environment variable
 * \param[in] name The name of the variable to return
 *
 * The environment list is searched to find the variable 'name', and the
 * corresponding string is returned.
 *
 * If 'secure execution' is required then this function always returns NULL to
 * avoid vulnerabilities that could occur if set-user-ID or set-group-ID
 * programs accidentally trust the environment.
 *
 * \returns A pointer to the value in the environment or NULL if the requested
 * environment variable doesn't exist or if secure execution is required.
 */
char *secure_getenv(const char *name)
{
#if HAVE_SECURE_GETENV
	return ::secure_getenv(name);
#else
	if (issetugid())
		return NULL;

	return getenv(name);
#endif
}

/**
 * \fn libcamera::utils::make_unique(Args &&... args)
 * \brief Constructs an object of type T and wraps it in a std::unique_ptr.
 */

/**