[libcamera-devel] [PATCH LIBCAMERA v3 3/6] libcamera: utils: add Libcamera installed & path
Kieran Bingham
kieran.bingham at ideasonboard.com
Wed Mar 18 14:07:12 CET 2020
Hi Kaaira,
Looks like Laurent beat me to the review while I was testing, so I'll
let you work through his comments.
Small additional comment here that the $SUBJECT also has a 'Libcamera'
reference which should be 'libcamera' to match the style used elsewhere.
and going below for the question to me...
On 18/03/2020 12:25, Laurent Pinchart wrote:
> Hi Kaaira,
>
> Thank you for the patch.
>
> On Wed, Mar 18, 2020 at 05:28:43PM +0530, Kaaira Gupta wrote:
>> Add a global functions 'isLibcameraInstalled' to check if libcamera is
>> installed or not, and another global function 'libcameraPath' to return
>> the path of libcamera.so in utils.
>>
>> Signed-off-by: Kaaira Gupta <kgupta at es.iitr.ac.in>
>> ---
>> src/libcamera/include/utils.h | 4 +++
>> src/libcamera/utils.cpp | 48 +++++++++++++++++++++++++++++++++++
>> 2 files changed, 52 insertions(+)
>>
>> diff --git a/src/libcamera/include/utils.h b/src/libcamera/include/utils.h
>> index 9405977..bc96e79 100644
>> --- a/src/libcamera/include/utils.h
>> +++ b/src/libcamera/include/utils.h
>> @@ -143,6 +143,10 @@ private:
>>
>> details::StringSplitter split(const std::string &str, const std::string &delim);
>>
>> +bool isLibcameraInstalled();
>> +
>> +std::string libcameraPath();
>> +
>> } /* namespace utils */
>>
>> } /* namespace libcamera */
>> diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp
>> index f566e88..aeaf163 100644
>> --- a/src/libcamera/utils.cpp
>> +++ b/src/libcamera/utils.cpp
>> @@ -12,12 +12,18 @@
>> #include <stdlib.h>
>> #include <string.h>
>> #include <unistd.h>
>> +#include <dlfcn.h>
>> +#include <elf.h>
>> +#include <link.h>
>
> Could you please keep headers alphabetically sorted ? The header order
> is explained in section "Order of Includes" of
> Documentation/coding-style.rst.
>
>>
>> /**
>> * \file utils.h
>> * \brief Miscellaneous utility functions
>> */
>>
>> +/* musl doesn't declare _DYNAMIC in link.h, declare it manually. */
>> +extern ElfW(Dyn) _DYNAMIC[];
>> +
>> namespace libcamera {
>>
>> namespace utils {
>> @@ -310,6 +316,48 @@ details::StringSplitter split(const std::string &str, const std::string &delim)
>> return details::StringSplitter(str, delim);
>> }
>>
>> +/**
>> + * \brief Checks if Libcamera is installed or not
>
> s/Checks/Check/
>
> (We use the imperative mood for \brief statements through the code)
>
> and
>
> s/Libcamera/libcamera/
>
> "libcamera" is spelled in lower case, with the exception of symbols in
> the code where the camelCase rule forces usage of "Libcamera".
>
>> + *
>> + * Utilises the build_rpath dynamic tag which is stripped out by meson at
>
> s/Utilises/Utilise/ or "This function utilises ...".
>
>> + * install time to determine at runtime if the library currently executing
>> + * has been installed or not.
>> + *
>> + * \return A bool stating if libcamera is installed or not
>
> The usual documentation style would be
>
> * \return True if libcamera is installed, false otherwise
>
>> + */
>> +bool isLibcameraInstalled()
>> +{
>> + /*
>> + * DT_RUNPATH (DT_RPATH when the linker uses old dtags) is removed on
>> + * install.
>> + */
>> + for (const ElfW(Dyn) *dyn = _DYNAMIC; dyn->d_tag != DT_NULL; ++dyn) {
>> + if (dyn->d_tag == DT_RUNPATH || dyn->d_tag == DT_RPATH)
>> + return false;
>> + }
>> +
>> + return true;
>> +}
>> +
>> +/**
>> + * \brief Identifies libcamera path
>
> Maybe "Identify the libcamera.so path" ?
>
>> + *
>> + * Identifies the location by finding the path of the active libcamera.so itself.
>
> Please wrap lines at the 80 columns limit when possible. We have a 120
> columns hard limit and a 80 columns soft limit.
>
> "Path" is a bit ambiguous I think, as it's not clear if it includes
> "libcamera.so" at the end or not. How about clarifying this with
>
> * This function locates the running libcamera.so and returns its full
> * path, including the file name.
>
>> + *
>> + * \return A string stating the path.
>
> To match the documentation style of the rest of libcamera, no period is
> needed at tne end.
>
>> + */
>> +std::string libcameraPath()
>> +{
>> + Dl_info info;
>> +
>> + /* Look up our own symbol. */
>> + int ret = dladdr(reinterpret_cast<void *>(libcameraPath), &info);
>> + if (ret == 0)
>> + return nullptr;
>> +
>> + return info.dli_fname;
>> +}
>
> I wonder if we should merge the two functions into a
> libcameraBuildPath() that would return an empty string if libcamera is
> installed and the path (with the libcamera.so) otherwise, as that's what
> all callers end up doing. This can be done on top of this series if
> desired. Kieran, any opinion ?
It might indeed make sense, but I'm happy to do it on top, so we don't
over complicate this series.
--
Kieran
>> +
>> } /* namespace utils */
>>
>> } /* namespace libcamera */
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list