[libcamera-devel,RFC,1/8] meson: Simplify pkg_mod.generate
diff mbox series

Message ID 20201123164319.152742-2-kieran.bingham@ideasonboard.com
State Changes Requested
Headers show
Series
  • Configuration files and parsing
Related show

Commit Message

Kieran Bingham Nov. 23, 2020, 4:43 p.m. UTC
Later versions of meson allow for the first positional argument to
specificy the defaults.  Specify the libcamera library as the first
argument, and remove the filebase.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 meson.build | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Laurent Pinchart Dec. 1, 2020, 4:50 p.m. UTC | #1
Hi Kieran,

Thank you for the patch.

On Mon, Nov 23, 2020 at 04:43:12PM +0000, Kieran Bingham wrote:
> Later versions of meson allow for the first positional argument to
> specificy the defaults.  Specify the libcamera library as the first
> argument, and remove the filebase.
> 
> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> ---
>  meson.build | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/meson.build b/meson.build
> index 55cf36e15f57..ced4afa7d726 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -146,10 +146,9 @@ run_command('ln', '-fsT', meson.source_root(),
>  configure_file(output : 'config.h', configuration : config_h)
>  
>  pkg_mod = import('pkgconfig')
> -pkg_mod.generate(libraries : libcamera,
> +pkg_mod.generate(libcamera,
>                   version : '1.0',
>                   name : 'libcamera',
> -                 filebase : 'camera',
>                   description : 'Complex Camera Support Library',
>                   subdirs : 'libcamera')
>  

The documentation states

Since 0.46 a StaticLibrary or SharedLibrary object can optionally be
passed as first positional argument. If one is provided a default value
will be provided for all required fields of the pc file:

- install_dir is set to pkgconfig folder in the same location than the
  provided library.
- description is set to the project's name followed by the library's
  name.
- name is set to the library's name.


Is it the "name" argument that can be dropped, not "filebase" ? filebase
seems to default to name, so it would be set to "libcamera", not
"camera". If we drop the name argument then name will default to the
shared library name, which is "camera", and filebase will then default
to name. There thus seems to be a change of behaviour, which should be
documented in the commit message (and verified to ensure it's correct).
Kieran Bingham Dec. 1, 2020, 4:56 p.m. UTC | #2
Hi Laurent,

On 01/12/2020 16:50, Laurent Pinchart wrote:
> Hi Kieran,
> 
> Thank you for the patch.
> 
> On Mon, Nov 23, 2020 at 04:43:12PM +0000, Kieran Bingham wrote:
>> Later versions of meson allow for the first positional argument to
>> specificy the defaults.  Specify the libcamera library as the first
>> argument, and remove the filebase.
>>
>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
>> ---
>>  meson.build | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/meson.build b/meson.build
>> index 55cf36e15f57..ced4afa7d726 100644
>> --- a/meson.build
>> +++ b/meson.build
>> @@ -146,10 +146,9 @@ run_command('ln', '-fsT', meson.source_root(),
>>  configure_file(output : 'config.h', configuration : config_h)
>>  
>>  pkg_mod = import('pkgconfig')
>> -pkg_mod.generate(libraries : libcamera,
>> +pkg_mod.generate(libcamera,
>>                   version : '1.0',
>>                   name : 'libcamera',
>> -                 filebase : 'camera',
>>                   description : 'Complex Camera Support Library',
>>                   subdirs : 'libcamera')
>>  
> 
> The documentation states
> 
> Since 0.46 a StaticLibrary or SharedLibrary object can optionally be
> passed as first positional argument. If one is provided a default value
> will be provided for all required fields of the pc file:
> 
> - install_dir is set to pkgconfig folder in the same location than the
>   provided library.
> - description is set to the project's name followed by the library's
>   name.
> - name is set to the library's name.
> 
> 
> Is it the "name" argument that can be dropped, not "filebase" ? filebase
> seems to default to name, so it would be set to "libcamera", not
> "camera". If we drop the name argument then name will default to the
> shared library name, which is "camera", and filebase will then default
> to name. There thus seems to be a change of behaviour, which should be
> documented in the commit message (and verified to ensure it's correct).


I'll have to check, but this was a patch I had stuck around for ages,
which I created upon a recommendation from one of the meson devs.

I haven't seen any change in behaviour, but I'll double check again
later, meanwhile: an install from this build seems to show everything
still correctly named 'libcamera' ...

/tmp/libcamera-build-prefix/usr/share/libcamera
/tmp/libcamera-build-prefix/usr/share/doc/libcamera-0.0.11
/tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/libcamera.so
/tmp/libcamera-build-prefix/usr/include/libcamera/libcamera/version.h
Laurent Pinchart Dec. 1, 2020, 4:58 p.m. UTC | #3
Hi Kieran,

On Tue, Dec 01, 2020 at 04:56:56PM +0000, Kieran Bingham wrote:
> On 01/12/2020 16:50, Laurent Pinchart wrote:
> > On Mon, Nov 23, 2020 at 04:43:12PM +0000, Kieran Bingham wrote:
> >> Later versions of meson allow for the first positional argument to
> >> specificy the defaults.  Specify the libcamera library as the first
> >> argument, and remove the filebase.
> >>
> >> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> >> ---
> >>  meson.build | 3 +--
> >>  1 file changed, 1 insertion(+), 2 deletions(-)
> >>
> >> diff --git a/meson.build b/meson.build
> >> index 55cf36e15f57..ced4afa7d726 100644
> >> --- a/meson.build
> >> +++ b/meson.build
> >> @@ -146,10 +146,9 @@ run_command('ln', '-fsT', meson.source_root(),
> >>  configure_file(output : 'config.h', configuration : config_h)
> >>  
> >>  pkg_mod = import('pkgconfig')
> >> -pkg_mod.generate(libraries : libcamera,
> >> +pkg_mod.generate(libcamera,
> >>                   version : '1.0',
> >>                   name : 'libcamera',
> >> -                 filebase : 'camera',
> >>                   description : 'Complex Camera Support Library',
> >>                   subdirs : 'libcamera')
> >>  
> > 
> > The documentation states
> > 
> > Since 0.46 a StaticLibrary or SharedLibrary object can optionally be
> > passed as first positional argument. If one is provided a default value
> > will be provided for all required fields of the pc file:
> > 
> > - install_dir is set to pkgconfig folder in the same location than the
> >   provided library.
> > - description is set to the project's name followed by the library's
> >   name.
> > - name is set to the library's name.
> > 
> > 
> > Is it the "name" argument that can be dropped, not "filebase" ? filebase
> > seems to default to name, so it would be set to "libcamera", not
> > "camera". If we drop the name argument then name will default to the
> > shared library name, which is "camera", and filebase will then default
> > to name. There thus seems to be a change of behaviour, which should be
> > documented in the commit message (and verified to ensure it's correct).
> 
> 
> I'll have to check, but this was a patch I had stuck around for ages,
> which I created upon a recommendation from one of the meson devs.
> 
> I haven't seen any change in behaviour, but I'll double check again
> later, meanwhile: an install from this build seems to show everything
> still correctly named 'libcamera' ...
> 
> /tmp/libcamera-build-prefix/usr/share/libcamera
> /tmp/libcamera-build-prefix/usr/share/doc/libcamera-0.0.11
> /tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/libcamera.so
> /tmp/libcamera-build-prefix/usr/include/libcamera/libcamera/version.h

I expect this patch to only affect the .pc file generation :-) Could you
diff its contents, and check if its name changes ?
Kieran Bingham Dec. 1, 2020, 5:01 p.m. UTC | #4
Hi Laurent,

On 01/12/2020 16:58, Laurent Pinchart wrote:
> Hi Kieran,
> 
> On Tue, Dec 01, 2020 at 04:56:56PM +0000, Kieran Bingham wrote:
>> On 01/12/2020 16:50, Laurent Pinchart wrote:
>>> On Mon, Nov 23, 2020 at 04:43:12PM +0000, Kieran Bingham wrote:
>>>> Later versions of meson allow for the first positional argument to
>>>> specificy the defaults.  Specify the libcamera library as the first
>>>> argument, and remove the filebase.
>>>>
>>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
>>>> ---
>>>>  meson.build | 3 +--
>>>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>>>
>>>> diff --git a/meson.build b/meson.build
>>>> index 55cf36e15f57..ced4afa7d726 100644
>>>> --- a/meson.build
>>>> +++ b/meson.build
>>>> @@ -146,10 +146,9 @@ run_command('ln', '-fsT', meson.source_root(),
>>>>  configure_file(output : 'config.h', configuration : config_h)
>>>>  
>>>>  pkg_mod = import('pkgconfig')
>>>> -pkg_mod.generate(libraries : libcamera,
>>>> +pkg_mod.generate(libcamera,
>>>>                   version : '1.0',
>>>>                   name : 'libcamera',
>>>> -                 filebase : 'camera',
>>>>                   description : 'Complex Camera Support Library',
>>>>                   subdirs : 'libcamera')
>>>>  
>>>
>>> The documentation states
>>>
>>> Since 0.46 a StaticLibrary or SharedLibrary object can optionally be
>>> passed as first positional argument. If one is provided a default value
>>> will be provided for all required fields of the pc file:
>>>
>>> - install_dir is set to pkgconfig folder in the same location than the
>>>   provided library.
>>> - description is set to the project's name followed by the library's
>>>   name.
>>> - name is set to the library's name.
>>>
>>>
>>> Is it the "name" argument that can be dropped, not "filebase" ? filebase
>>> seems to default to name, so it would be set to "libcamera", not
>>> "camera". If we drop the name argument then name will default to the
>>> shared library name, which is "camera", and filebase will then default
>>> to name. There thus seems to be a change of behaviour, which should be
>>> documented in the commit message (and verified to ensure it's correct).
>>
>>
>> I'll have to check, but this was a patch I had stuck around for ages,
>> which I created upon a recommendation from one of the meson devs.
>>
>> I haven't seen any change in behaviour, but I'll double check again
>> later, meanwhile: an install from this build seems to show everything
>> still correctly named 'libcamera' ...
>>
>> /tmp/libcamera-build-prefix/usr/share/libcamera
>> /tmp/libcamera-build-prefix/usr/share/doc/libcamera-0.0.11
>> /tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/libcamera.so
>> /tmp/libcamera-build-prefix/usr/include/libcamera/libcamera/version.h
> 
> I expect this patch to only affect the .pc file generation :-) Could you
> diff its contents, and check if its name changes ?
> 

diff
/tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/pkgconfig/libcamera.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/libcamera.pc

<blank> ;-)
Laurent Pinchart Dec. 1, 2020, 5:12 p.m. UTC | #5
On Tue, Dec 01, 2020 at 05:01:46PM +0000, Kieran Bingham wrote:
> Hi Laurent,
> 
> On 01/12/2020 16:58, Laurent Pinchart wrote:
> > Hi Kieran,
> > 
> > On Tue, Dec 01, 2020 at 04:56:56PM +0000, Kieran Bingham wrote:
> >> On 01/12/2020 16:50, Laurent Pinchart wrote:
> >>> On Mon, Nov 23, 2020 at 04:43:12PM +0000, Kieran Bingham wrote:
> >>>> Later versions of meson allow for the first positional argument to
> >>>> specificy the defaults.  Specify the libcamera library as the first
> >>>> argument, and remove the filebase.
> >>>>
> >>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> >>>> ---
> >>>>  meson.build | 3 +--
> >>>>  1 file changed, 1 insertion(+), 2 deletions(-)
> >>>>
> >>>> diff --git a/meson.build b/meson.build
> >>>> index 55cf36e15f57..ced4afa7d726 100644
> >>>> --- a/meson.build
> >>>> +++ b/meson.build
> >>>> @@ -146,10 +146,9 @@ run_command('ln', '-fsT', meson.source_root(),
> >>>>  configure_file(output : 'config.h', configuration : config_h)
> >>>>  
> >>>>  pkg_mod = import('pkgconfig')
> >>>> -pkg_mod.generate(libraries : libcamera,
> >>>> +pkg_mod.generate(libcamera,
> >>>>                   version : '1.0',
> >>>>                   name : 'libcamera',
> >>>> -                 filebase : 'camera',
> >>>>                   description : 'Complex Camera Support Library',
> >>>>                   subdirs : 'libcamera')
> >>>>  
> >>>
> >>> The documentation states
> >>>
> >>> Since 0.46 a StaticLibrary or SharedLibrary object can optionally be
> >>> passed as first positional argument. If one is provided a default value
> >>> will be provided for all required fields of the pc file:
> >>>
> >>> - install_dir is set to pkgconfig folder in the same location than the
> >>>   provided library.
> >>> - description is set to the project's name followed by the library's
> >>>   name.
> >>> - name is set to the library's name.
> >>>
> >>>
> >>> Is it the "name" argument that can be dropped, not "filebase" ? filebase
> >>> seems to default to name, so it would be set to "libcamera", not
> >>> "camera". If we drop the name argument then name will default to the
> >>> shared library name, which is "camera", and filebase will then default
> >>> to name. There thus seems to be a change of behaviour, which should be
> >>> documented in the commit message (and verified to ensure it's correct).
> >>
> >>
> >> I'll have to check, but this was a patch I had stuck around for ages,
> >> which I created upon a recommendation from one of the meson devs.
> >>
> >> I haven't seen any change in behaviour, but I'll double check again
> >> later, meanwhile: an install from this build seems to show everything
> >> still correctly named 'libcamera' ...
> >>
> >> /tmp/libcamera-build-prefix/usr/share/libcamera
> >> /tmp/libcamera-build-prefix/usr/share/doc/libcamera-0.0.11
> >> /tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/libcamera.so
> >> /tmp/libcamera-build-prefix/usr/include/libcamera/libcamera/version.h
> > 
> > I expect this patch to only affect the .pc file generation :-) Could you
> > diff its contents, and check if its name changes ?
> 
> diff
> /tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/pkgconfig/libcamera.pc
> /usr/lib/x86_64-linux-gnu/pkgconfig/libcamera.pc
> 
> <blank> ;-)

That's strange, here I have

diff -Nur a/usr/local/lib64/pkgconfig/camera.pc b/usr/local/lib64/pkgconfig/camera.pc
--- a/usr/local/lib64/pkgconfig/camera.pc       2020-12-01 17:37:07.077026434 +0200
+++ b/usr/local/lib64/pkgconfig/camera.pc       1970-01-01 02:00:00.000000000 +0200
@@ -1,9 +0,0 @@
-prefix=/usr/local
-libdir=${prefix}/lib64
-includedir=${prefix}/include
-
-Name: libcamera
-Description: Complex Camera Support Library
-Version: 1.0
-Libs: -L${libdir} -lcamera
-Cflags: -I${includedir}/libcamera
diff -Nur a/usr/local/lib64/pkgconfig/libcamera.pc b/usr/local/lib64/pkgconfig/libcamera.pc
--- a/usr/local/lib64/pkgconfig/libcamera.pc    1970-01-01 02:00:00.000000000 +0200
+++ b/usr/local/lib64/pkgconfig/libcamera.pc    2020-12-01 19:04:21.415247132 +0200
@@ -0,0 +1,9 @@
+prefix=/usr/local
+libdir=${prefix}/lib64
+includedir=${prefix}/include
+
+Name: libcamera
+Description: Complex Camera Support Library
+Version: 1.0
+Libs: -L${libdir} -lcamera
+Cflags: -I${includedir}/libcamera

Contents are the same, but the .pc file got renamed from camera.pc to
libcamera.pc. No necessarily an issue, but pkg-config will need to be
run with an updated name, requiring an update to simple-cam I believe.

If we additionally drop the name argument, the file name is preserved,
but its contents change to

--- a/usr/local/lib64/pkgconfig/camera.pc	2020-12-01 17:37:07.077026434 +0200
+++ b/usr/local/lib64/pkgconfig/camera.pc	2020-12-01 19:09:47.299260873 +0200
@@ -2,7 +2,7 @@
 libdir=${prefix}/lib64
 includedir=${prefix}/include
 
-Name: libcamera
+Name: camera
 Description: Complex Camera Support Library
 Version: 1.0
 Libs: -L${libdir} -lcamera


I'm not a pkg-config expert so I don't know if we should include the lib
prefix in the file name and/or the Name.
Kieran Bingham Dec. 7, 2020, 3:31 p.m. UTC | #6
Hi Laurent,

On 01/12/2020 17:12, Laurent Pinchart wrote:
> On Tue, Dec 01, 2020 at 05:01:46PM +0000, Kieran Bingham wrote:
>> Hi Laurent,
>>
>> On 01/12/2020 16:58, Laurent Pinchart wrote:
>>> Hi Kieran,
>>>
>>> On Tue, Dec 01, 2020 at 04:56:56PM +0000, Kieran Bingham wrote:
>>>> On 01/12/2020 16:50, Laurent Pinchart wrote:
>>>>> On Mon, Nov 23, 2020 at 04:43:12PM +0000, Kieran Bingham wrote:
>>>>>> Later versions of meson allow for the first positional argument to
>>>>>> specificy the defaults.  Specify the libcamera library as the first
>>>>>> argument, and remove the filebase.
>>>>>>
>>>>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
>>>>>> ---
>>>>>>  meson.build | 3 +--
>>>>>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>>>>>
>>>>>> diff --git a/meson.build b/meson.build
>>>>>> index 55cf36e15f57..ced4afa7d726 100644
>>>>>> --- a/meson.build
>>>>>> +++ b/meson.build
>>>>>> @@ -146,10 +146,9 @@ run_command('ln', '-fsT', meson.source_root(),
>>>>>>  configure_file(output : 'config.h', configuration : config_h)
>>>>>>  
>>>>>>  pkg_mod = import('pkgconfig')
>>>>>> -pkg_mod.generate(libraries : libcamera,
>>>>>> +pkg_mod.generate(libcamera,
>>>>>>                   version : '1.0',
>>>>>>                   name : 'libcamera',
>>>>>> -                 filebase : 'camera',
>>>>>>                   description : 'Complex Camera Support Library',
>>>>>>                   subdirs : 'libcamera')
>>>>>>  
>>>>>
>>>>> The documentation states
>>>>>
>>>>> Since 0.46 a StaticLibrary or SharedLibrary object can optionally be
>>>>> passed as first positional argument. If one is provided a default value
>>>>> will be provided for all required fields of the pc file:
>>>>>
>>>>> - install_dir is set to pkgconfig folder in the same location than the
>>>>>   provided library.
>>>>> - description is set to the project's name followed by the library's
>>>>>   name.
>>>>> - name is set to the library's name.
>>>>>
>>>>>
>>>>> Is it the "name" argument that can be dropped, not "filebase" ? filebase
>>>>> seems to default to name, so it would be set to "libcamera", not
>>>>> "camera". If we drop the name argument then name will default to the
>>>>> shared library name, which is "camera", and filebase will then default
>>>>> to name. There thus seems to be a change of behaviour, which should be
>>>>> documented in the commit message (and verified to ensure it's correct).
>>>>
>>>>
>>>> I'll have to check, but this was a patch I had stuck around for ages,
>>>> which I created upon a recommendation from one of the meson devs.
>>>>
>>>> I haven't seen any change in behaviour, but I'll double check again
>>>> later, meanwhile: an install from this build seems to show everything
>>>> still correctly named 'libcamera' ...
>>>>
>>>> /tmp/libcamera-build-prefix/usr/share/libcamera
>>>> /tmp/libcamera-build-prefix/usr/share/doc/libcamera-0.0.11
>>>> /tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/libcamera.so
>>>> /tmp/libcamera-build-prefix/usr/include/libcamera/libcamera/version.h
>>>
>>> I expect this patch to only affect the .pc file generation :-) Could you
>>> diff its contents, and check if its name changes ?
>>
>> diff
>> /tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/pkgconfig/libcamera.pc
>> /usr/lib/x86_64-linux-gnu/pkgconfig/libcamera.pc
>>
>> <blank> ;-)
> 
> That's strange, here I have

I must have installed a 'patched' version at some point which broke my
comparison.

Anyway, this patch is a distraction - so I've split out the meson fixes
to a new series and dropped this patch for now.

There's no bug/issue here - it was only a recommendation from meson
developers.

We can always revisit it later.



> diff -Nur a/usr/local/lib64/pkgconfig/camera.pc b/usr/local/lib64/pkgconfig/camera.pc
> --- a/usr/local/lib64/pkgconfig/camera.pc       2020-12-01 17:37:07.077026434 +0200
> +++ b/usr/local/lib64/pkgconfig/camera.pc       1970-01-01 02:00:00.000000000 +0200
> @@ -1,9 +0,0 @@
> -prefix=/usr/local
> -libdir=${prefix}/lib64
> -includedir=${prefix}/include
> -
> -Name: libcamera
> -Description: Complex Camera Support Library
> -Version: 1.0
> -Libs: -L${libdir} -lcamera
> -Cflags: -I${includedir}/libcamera
> diff -Nur a/usr/local/lib64/pkgconfig/libcamera.pc b/usr/local/lib64/pkgconfig/libcamera.pc
> --- a/usr/local/lib64/pkgconfig/libcamera.pc    1970-01-01 02:00:00.000000000 +0200
> +++ b/usr/local/lib64/pkgconfig/libcamera.pc    2020-12-01 19:04:21.415247132 +0200
> @@ -0,0 +1,9 @@
> +prefix=/usr/local
> +libdir=${prefix}/lib64
> +includedir=${prefix}/include
> +
> +Name: libcamera
> +Description: Complex Camera Support Library
> +Version: 1.0
> +Libs: -L${libdir} -lcamera
> +Cflags: -I${includedir}/libcamera
> 
> Contents are the same, but the .pc file got renamed from camera.pc to
> libcamera.pc. No necessarily an issue, but pkg-config will need to be

I see, I must have missed that, as the builds will have still found the
old version.

Personally, I'd actually rather see the library specified as 'libcamera'
to pkg-config, as that's our name though.



> run with an updated name, requiring an update to simple-cam I believe.
> 
> If we additionally drop the name argument, the file name is preserved,
> but its contents change to
> 
> --- a/usr/local/lib64/pkgconfig/camera.pc	2020-12-01 17:37:07.077026434 +0200
> +++ b/usr/local/lib64/pkgconfig/camera.pc	2020-12-01 19:09:47.299260873 +0200
> @@ -2,7 +2,7 @@
>  libdir=${prefix}/lib64
>  includedir=${prefix}/include
>  
> -Name: libcamera
> +Name: camera

Ok, so we don't want that bit though ;-)

>  Description: Complex Camera Support Library
>  Version: 1.0
>  Libs: -L${libdir} -lcamera
> 
> 
> I'm not a pkg-config expert so I don't know if we should include the lib
> prefix in the file name and/or the Name.

I think that's up to us isn't it ?

However I suspect most libraries do not prefix with 'lib' ... but most
libraries do not have 'lib' in their name. (Except for the fact that
they are libraries).

We're a bit different because we are 'libcamera' as opposed to say
'gtk', which is not known widely as 'libgtk', that's just it's library.
Laurent Pinchart Dec. 7, 2020, 5:04 p.m. UTC | #7
Hi Kieran,

On Mon, Dec 07, 2020 at 03:31:55PM +0000, Kieran Bingham wrote:
> On 01/12/2020 17:12, Laurent Pinchart wrote:
> > On Tue, Dec 01, 2020 at 05:01:46PM +0000, Kieran Bingham wrote:
> >> On 01/12/2020 16:58, Laurent Pinchart wrote:
> >>> On Tue, Dec 01, 2020 at 04:56:56PM +0000, Kieran Bingham wrote:
> >>>> On 01/12/2020 16:50, Laurent Pinchart wrote:
> >>>>> On Mon, Nov 23, 2020 at 04:43:12PM +0000, Kieran Bingham wrote:
> >>>>>> Later versions of meson allow for the first positional argument to
> >>>>>> specificy the defaults.  Specify the libcamera library as the first
> >>>>>> argument, and remove the filebase.
> >>>>>>
> >>>>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> >>>>>> ---
> >>>>>>  meson.build | 3 +--
> >>>>>>  1 file changed, 1 insertion(+), 2 deletions(-)
> >>>>>>
> >>>>>> diff --git a/meson.build b/meson.build
> >>>>>> index 55cf36e15f57..ced4afa7d726 100644
> >>>>>> --- a/meson.build
> >>>>>> +++ b/meson.build
> >>>>>> @@ -146,10 +146,9 @@ run_command('ln', '-fsT', meson.source_root(),
> >>>>>>  configure_file(output : 'config.h', configuration : config_h)
> >>>>>>  
> >>>>>>  pkg_mod = import('pkgconfig')
> >>>>>> -pkg_mod.generate(libraries : libcamera,
> >>>>>> +pkg_mod.generate(libcamera,
> >>>>>>                   version : '1.0',
> >>>>>>                   name : 'libcamera',
> >>>>>> -                 filebase : 'camera',
> >>>>>>                   description : 'Complex Camera Support Library',
> >>>>>>                   subdirs : 'libcamera')
> >>>>>>  
> >>>>>
> >>>>> The documentation states
> >>>>>
> >>>>> Since 0.46 a StaticLibrary or SharedLibrary object can optionally be
> >>>>> passed as first positional argument. If one is provided a default value
> >>>>> will be provided for all required fields of the pc file:
> >>>>>
> >>>>> - install_dir is set to pkgconfig folder in the same location than the
> >>>>>   provided library.
> >>>>> - description is set to the project's name followed by the library's
> >>>>>   name.
> >>>>> - name is set to the library's name.
> >>>>>
> >>>>>
> >>>>> Is it the "name" argument that can be dropped, not "filebase" ? filebase
> >>>>> seems to default to name, so it would be set to "libcamera", not
> >>>>> "camera". If we drop the name argument then name will default to the
> >>>>> shared library name, which is "camera", and filebase will then default
> >>>>> to name. There thus seems to be a change of behaviour, which should be
> >>>>> documented in the commit message (and verified to ensure it's correct).
> >>>>
> >>>>
> >>>> I'll have to check, but this was a patch I had stuck around for ages,
> >>>> which I created upon a recommendation from one of the meson devs.
> >>>>
> >>>> I haven't seen any change in behaviour, but I'll double check again
> >>>> later, meanwhile: an install from this build seems to show everything
> >>>> still correctly named 'libcamera' ...
> >>>>
> >>>> /tmp/libcamera-build-prefix/usr/share/libcamera
> >>>> /tmp/libcamera-build-prefix/usr/share/doc/libcamera-0.0.11
> >>>> /tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/libcamera.so
> >>>> /tmp/libcamera-build-prefix/usr/include/libcamera/libcamera/version.h
> >>>
> >>> I expect this patch to only affect the .pc file generation :-) Could you
> >>> diff its contents, and check if its name changes ?
> >>
> >> diff
> >> /tmp/libcamera-build-prefix/usr/lib/x86_64-linux-gnu/pkgconfig/libcamera.pc
> >> /usr/lib/x86_64-linux-gnu/pkgconfig/libcamera.pc
> >>
> >> <blank> ;-)
> > 
> > That's strange, here I have
> 
> I must have installed a 'patched' version at some point which broke my
> comparison.
> 
> Anyway, this patch is a distraction - so I've split out the meson fixes
> to a new series and dropped this patch for now.
> 
> There's no bug/issue here - it was only a recommendation from meson
> developers.
> 
> We can always revisit it later.
> 
> > diff -Nur a/usr/local/lib64/pkgconfig/camera.pc b/usr/local/lib64/pkgconfig/camera.pc
> > --- a/usr/local/lib64/pkgconfig/camera.pc       2020-12-01 17:37:07.077026434 +0200
> > +++ b/usr/local/lib64/pkgconfig/camera.pc       1970-01-01 02:00:00.000000000 +0200
> > @@ -1,9 +0,0 @@
> > -prefix=/usr/local
> > -libdir=${prefix}/lib64
> > -includedir=${prefix}/include
> > -
> > -Name: libcamera
> > -Description: Complex Camera Support Library
> > -Version: 1.0
> > -Libs: -L${libdir} -lcamera
> > -Cflags: -I${includedir}/libcamera
> > diff -Nur a/usr/local/lib64/pkgconfig/libcamera.pc b/usr/local/lib64/pkgconfig/libcamera.pc
> > --- a/usr/local/lib64/pkgconfig/libcamera.pc    1970-01-01 02:00:00.000000000 +0200
> > +++ b/usr/local/lib64/pkgconfig/libcamera.pc    2020-12-01 19:04:21.415247132 +0200
> > @@ -0,0 +1,9 @@
> > +prefix=/usr/local
> > +libdir=${prefix}/lib64
> > +includedir=${prefix}/include
> > +
> > +Name: libcamera
> > +Description: Complex Camera Support Library
> > +Version: 1.0
> > +Libs: -L${libdir} -lcamera
> > +Cflags: -I${includedir}/libcamera
> > 
> > Contents are the same, but the .pc file got renamed from camera.pc to
> > libcamera.pc. No necessarily an issue, but pkg-config will need to be
> 
> I see, I must have missed that, as the builds will have still found the
> old version.
> 
> Personally, I'd actually rather see the library specified as 'libcamera'
> to pkg-config, as that's our name though.
> 
> > run with an updated name, requiring an update to simple-cam I believe.
> > 
> > If we additionally drop the name argument, the file name is preserved,
> > but its contents change to
> > 
> > --- a/usr/local/lib64/pkgconfig/camera.pc	2020-12-01 17:37:07.077026434 +0200
> > +++ b/usr/local/lib64/pkgconfig/camera.pc	2020-12-01 19:09:47.299260873 +0200
> > @@ -2,7 +2,7 @@
> >  libdir=${prefix}/lib64
> >  includedir=${prefix}/include
> >  
> > -Name: libcamera
> > +Name: camera
> 
> Ok, so we don't want that bit though ;-)
> 
> >  Description: Complex Camera Support Library
> >  Version: 1.0
> >  Libs: -L${libdir} -lcamera
> > 
> > 
> > I'm not a pkg-config expert so I don't know if we should include the lib
> > prefix in the file name and/or the Name.
> 
> I think that's up to us isn't it ?

I think so. I would expect there are best practice rules, but maybe it's
only cargo cult programming :-)

> However I suspect most libraries do not prefix with 'lib' ... but most
> libraries do not have 'lib' in their name. (Except for the fact that
> they are libraries).
> 
> We're a bit different because we are 'libcamera' as opposed to say
> 'gtk', which is not known widely as 'libgtk', that's just it's library.

Patch
diff mbox series

diff --git a/meson.build b/meson.build
index 55cf36e15f57..ced4afa7d726 100644
--- a/meson.build
+++ b/meson.build
@@ -146,10 +146,9 @@  run_command('ln', '-fsT', meson.source_root(),
 configure_file(output : 'config.h', configuration : config_h)
 
 pkg_mod = import('pkgconfig')
-pkg_mod.generate(libraries : libcamera,
+pkg_mod.generate(libcamera,
                  version : '1.0',
                  name : 'libcamera',
-                 filebase : 'camera',
                  description : 'Complex Camera Support Library',
                  subdirs : 'libcamera')