[libcamera-devel] [PATCH] libcamera: Auto-generate libcamera.h

Kieran Bingham kieran.bingham at ideasonboard.com
Wed May 22 17:34:08 CEST 2019


Hi Laurent,

On 22/05/2019 15:26, Laurent Pinchart wrote:
> Hi Kieran,
> 
> On Wed, May 22, 2019 at 02:25:59PM +0100, Kieran Bingham wrote:
>> On 21/05/2019 17:45, Laurent Pinchart wrote:
>>> As shown by two missing includes, keeping the libcamera.h file in sync
>>> when adding or removing headers is an error-prone manual process.
>>> Automate it by generating the header automatically.
>>>
>>> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>>> ---
>>>  include/libcamera/gen-header.sh | 26 ++++++++++++++++++++++++++
>>>  include/libcamera/libcamera.h   | 20 --------------------
>>>  include/libcamera/meson.build   | 10 +++++++++-
>>>  3 files changed, 35 insertions(+), 21 deletions(-)
>>>  create mode 100755 include/libcamera/gen-header.sh
>>>  delete mode 100644 include/libcamera/libcamera.h
>>>
>>> diff --git a/include/libcamera/gen-header.sh b/include/libcamera/gen-header.sh
>>> new file mode 100755
>>> index 000000000000..ea5b79a62520
>>> --- /dev/null
>>> +++ b/include/libcamera/gen-header.sh
>>> @@ -0,0 +1,26 @@
>>> +#!/bin/sh
>>> +
>>> +src_dir=$1
>>> +dst_file=$2
>>> +
>>> +cat <<EOF > $dst_file
>>> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
>>> +/* This file is auto-generated, do not edit! */
>>> +/*
>>> + * Copyright (C) 2018, Google Inc.
>>> + *
>>> + * libcamera.h - libcamera public API
>>> + */
>>> +#ifndef __LIBCAMERA_LIBCAMERA_H__
>>> +#define __LIBCAMERA_LIBCAMERA_H__
>>> +
>>> +EOF
>>> +
>>> +for header in $src_dir/*.h ; do
>>> +	echo "#include <libcamera/$(basename $header)>" >> $dst_file
>>> +done
>>> +
>>> +cat <<EOF >> $dst_file
>>> +
>>> +#endif /* __LIBCAMERA_LIBCAMERA_H__ */
>>> +EOF
>>> diff --git a/include/libcamera/libcamera.h b/include/libcamera/libcamera.h
>>> deleted file mode 100644
>>> index dda576e906fb..000000000000
>>> --- a/include/libcamera/libcamera.h
>>> +++ /dev/null
>>> @@ -1,20 +0,0 @@
>>> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
>>> -/*
>>> - * Copyright (C) 2018, Google Inc.
>>> - *
>>> - * libcamera.h - libcamera public API
>>> - */
>>> -#ifndef __LIBCAMERA_LIBCAMERA_H__
>>> -#define __LIBCAMERA_LIBCAMERA_H__
>>> -
>>> -#include <libcamera/buffer.h>
>>> -#include <libcamera/camera.h>
>>> -#include <libcamera/camera_manager.h>
>>> -#include <libcamera/event_dispatcher.h>
>>> -#include <libcamera/event_notifier.h>
>>> -#include <libcamera/request.h>
>>> -#include <libcamera/signal.h>
>>> -#include <libcamera/stream.h>
>>> -#include <libcamera/timer.h>
>>> -
>>> -#endif /* __LIBCAMERA_LIBCAMERA_H__ */
>>> diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
>>> index 83d226ac5078..46aff0b6bc2f 100644
>>> --- a/include/libcamera/meson.build
>>> +++ b/include/libcamera/meson.build
>>> @@ -5,7 +5,6 @@ libcamera_api = files([
>>>      'event_dispatcher.h',
>>>      'event_notifier.h',
>>>      'geometry.h',
>>> -    'libcamera.h',
>>>      'object.h',
>>>      'request.h',
>>>      'signal.h',
>>> @@ -13,5 +12,14 @@ libcamera_api = files([
>>>      'timer.h',
>>>  ])
>>>  
>>> +gen_header = join_paths(meson.current_source_dir(), 'gen-header.sh')
>>> +
>>> +custom_target('gen-header',
>>> +	      input: meson.current_source_dir(),
>>> +              output: 'libcamera.h',
>>> +	      command: [gen_header, '@INPUT@', '@OUTPUT@'],
>>> +	      install: true,
>>> +	      install_dir: 'include/libcamera')
>>> +
>>
>> Hrm... should this rebuild if libcamera_api changes at all ?
> 
> It should, but from my tests this is already ensured indirectly.
> Changing libcamera_api changes meson.build, which triggers a
> regeneration of all the related ninja files. As the timestamp of the
> ninja files changes, they rebuild all the rules they contain.

OK - that sounds fine then.


>> Also - Note that the following warning has appeared in my build with
>> this patch applied:
>>
>>
>> WARNING: Custom target input '.../libcamera/include/libcamera' can't be
>> converted to File object(s).
>> This will become a hard error in the future.
> 
> Which version of meson are you using ?


$ meson --version
0.49.0


> 
>>>  install_headers(libcamera_api,
>>>                  subdir : 'libcamera')
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list