[libcamera-devel,v1] libcamera: tracing: fix header generation when built as subproject
diff mbox series

Message ID mailman.114.1668011787.939.libcamera-devel@lists.libcamera.org
State Accepted
Headers show
Series
  • [libcamera-devel,v1] libcamera: tracing: fix header generation when built as subproject
Related show

Commit Message

Barnabás Pőcze Nov. 9, 2022, 4:36 p.m. UTC
The previously used

  path = output.replace('include/', '', 1)

logic is not sufficient to correctly determine the proper path
when libcamera is built as a subproject. Fix it by using Python's
pathlib to calculate the relative path of the output file with
respect to the "include" directory of libcamera.

Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
---
 include/libcamera/internal/meson.build |  2 +-
 include/meson.build                    |  2 ++
 utils/tracepoints/gen-tp-header.py     | 13 +++++++------
 3 files changed, 10 insertions(+), 7 deletions(-)

--
2.38.1

Comments

Paul Elder Nov. 10, 2022, 3:27 a.m. UTC | #1
On Wed, Nov 09, 2022 at 04:36:14PM +0000, Barnabás Pőcze via libcamera-devel wrote:
> Date: Wed, 09 Nov 2022 16:36:14 +0000
> From: Barnabás Pőcze <pobrn@protonmail.com>
> To: libcamera-devel@lists.libcamera.org
> Subject: [PATCH v1] libcamera: tracing: fix header generation when built as
>  subproject
> 
> The previously used
> 
>   path = output.replace('include/', '', 1)
> 
> logic is not sufficient to correctly determine the proper path
> when libcamera is built as a subproject. Fix it by using Python's
> pathlib to calculate the relative path of the output file with
> respect to the "include" directory of libcamera.
> 
> Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

> ---
>  include/libcamera/internal/meson.build |  2 +-
>  include/meson.build                    |  2 ++
>  utils/tracepoints/gen-tp-header.py     | 13 +++++++------
>  3 files changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
> index 7a780d48ee57..f8be86e040c5 100644
> --- a/include/libcamera/internal/meson.build
> +++ b/include/libcamera/internal/meson.build
> @@ -6,7 +6,7 @@ libcamera_tracepoint_header = custom_target(
>      'tp_header',
>      input: ['tracepoints.h.in', tracepoint_files],
>      output: 'tracepoints.h',
> -    command: [gen_tracepoints_header, '@OUTPUT@', '@INPUT@'],
> +    command: [gen_tracepoints_header, include_build_dir, '@OUTPUT@', '@INPUT@'],
>  )
> 
>  libcamera_internal_headers = files([
> diff --git a/include/meson.build b/include/meson.build
> index 27ce2f41c534..19b93a7bd753 100644
> --- a/include/meson.build
> +++ b/include/meson.build
> @@ -1,4 +1,6 @@
>  # SPDX-License-Identifier: CC0-1.0
> 
> +include_build_dir = meson.current_build_dir()
> +
>  subdir('android')
>  subdir('libcamera')
> diff --git a/utils/tracepoints/gen-tp-header.py b/utils/tracepoints/gen-tp-header.py
> index bbd472d972d0..a454615e4625 100755
> --- a/utils/tracepoints/gen-tp-header.py
> +++ b/utils/tracepoints/gen-tp-header.py
> @@ -8,22 +8,23 @@
> 
>  import datetime
>  import jinja2
> +import pathlib
>  import os
>  import sys
> 
>  def main(argv):
> -    if len(argv) < 3:
> -        print(f'Usage: {argv[0]} output template tp_files...')
> +    if len(argv) < 4:
> +        print(f'Usage: {argv[0]} include_build_dir output template tp_files...')
>          return 1
> 
> -    output = argv[1]
> -    template = argv[2]
> +    output = argv[2]
> +    template = argv[3]
> 
>      year = datetime.datetime.now().year
> -    path = output.replace('include/', '', 1)
> +    path = pathlib.Path(output).absolute().relative_to(argv[1])
> 
>      source = ''
> -    for fname in argv[3:]:
> +    for fname in argv[4:]:
>          source += open(fname, 'r', encoding='utf-8').read() + '\n\n'
> 
>      template = jinja2.Template(open(template, 'r', encoding='utf-8').read())
> --
> 2.38.1
> 
>
Kieran Bingham Nov. 14, 2022, 3:56 p.m. UTC | #2
Quoting Paul Elder via libcamera-devel (2022-11-10 03:27:36)
> On Wed, Nov 09, 2022 at 04:36:14PM +0000, Barnabás Pőcze via libcamera-devel wrote:
> > Date: Wed, 09 Nov 2022 16:36:14 +0000
> > From: Barnabás Pőcze <pobrn@protonmail.com>
> > To: libcamera-devel@lists.libcamera.org
> > Subject: [PATCH v1] libcamera: tracing: fix header generation when built as
> >  subproject
> > 
> > The previously used
> > 
> >   path = output.replace('include/', '', 1)
> > 
> > logic is not sufficient to correctly determine the proper path
> > when libcamera is built as a subproject. Fix it by using Python's
> > pathlib to calculate the relative path of the output file with
> > respect to the "include" directory of libcamera.
> > 
> > Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
> 
> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

This looks ok to me, and doesn't break the builds for my integration
tests - but I haven't easily tested as a submodule yet.

However, given that I expect that has been tested by Barnabás,

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> 
> > ---
> >  include/libcamera/internal/meson.build |  2 +-
> >  include/meson.build                    |  2 ++
> >  utils/tracepoints/gen-tp-header.py     | 13 +++++++------
> >  3 files changed, 10 insertions(+), 7 deletions(-)
> > 
> > diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
> > index 7a780d48ee57..f8be86e040c5 100644
> > --- a/include/libcamera/internal/meson.build
> > +++ b/include/libcamera/internal/meson.build
> > @@ -6,7 +6,7 @@ libcamera_tracepoint_header = custom_target(
> >      'tp_header',
> >      input: ['tracepoints.h.in', tracepoint_files],
> >      output: 'tracepoints.h',
> > -    command: [gen_tracepoints_header, '@OUTPUT@', '@INPUT@'],
> > +    command: [gen_tracepoints_header, include_build_dir, '@OUTPUT@', '@INPUT@'],
> >  )
> > 
> >  libcamera_internal_headers = files([
> > diff --git a/include/meson.build b/include/meson.build
> > index 27ce2f41c534..19b93a7bd753 100644
> > --- a/include/meson.build
> > +++ b/include/meson.build
> > @@ -1,4 +1,6 @@
> >  # SPDX-License-Identifier: CC0-1.0
> > 
> > +include_build_dir = meson.current_build_dir()
> > +
> >  subdir('android')
> >  subdir('libcamera')
> > diff --git a/utils/tracepoints/gen-tp-header.py b/utils/tracepoints/gen-tp-header.py
> > index bbd472d972d0..a454615e4625 100755
> > --- a/utils/tracepoints/gen-tp-header.py
> > +++ b/utils/tracepoints/gen-tp-header.py
> > @@ -8,22 +8,23 @@
> > 
> >  import datetime
> >  import jinja2
> > +import pathlib
> >  import os
> >  import sys
> > 
> >  def main(argv):
> > -    if len(argv) < 3:
> > -        print(f'Usage: {argv[0]} output template tp_files...')
> > +    if len(argv) < 4:
> > +        print(f'Usage: {argv[0]} include_build_dir output template tp_files...')
> >          return 1
> > 
> > -    output = argv[1]
> > -    template = argv[2]
> > +    output = argv[2]
> > +    template = argv[3]
> > 
> >      year = datetime.datetime.now().year
> > -    path = output.replace('include/', '', 1)
> > +    path = pathlib.Path(output).absolute().relative_to(argv[1])
> > 
> >      source = ''
> > -    for fname in argv[3:]:
> > +    for fname in argv[4:]:
> >          source += open(fname, 'r', encoding='utf-8').read() + '\n\n'
> > 
> >      template = jinja2.Template(open(template, 'r', encoding='utf-8').read())
> > --
> > 2.38.1
> > 
> >
Barnabás Pőcze Nov. 14, 2022, 4:12 p.m. UTC | #3
Hi


> Quoting Paul Elder via libcamera-devel (2022-11-10 03:27:36)
> > On Wed, Nov 09, 2022 at 04:36:14PM +0000, Barnabás Pőcze via libcamera-devel wrote:
> > > Date: Wed, 09 Nov 2022 16:36:14 +0000
> > > From: Barnabás Pőcze <pobrn@protonmail.com>
> > > To: libcamera-devel@lists.libcamera.org
> > > Subject: [PATCH v1] libcamera: tracing: fix header generation when built as
> > >  subproject
> > >
> > > The previously used
> > >
> > >   path = output.replace('include/', '', 1)
> > >
> > > logic is not sufficient to correctly determine the proper path
> > > when libcamera is built as a subproject. Fix it by using Python's
> > > pathlib to calculate the relative path of the output file with
> > > respect to the "include" directory of libcamera.
> > >
> > > Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
> >
> > Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
> 
> This looks ok to me, and doesn't break the builds for my integration
> tests - but I haven't easily tested as a submodule yet.
> 
> However, given that I expect that has been tested by Barnabás,
> 
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 

I am using this with pipewire. For non-subproject builds it should generate
the exact same path that was previously generated.

I did not elaborate in the commit message but the issue is that when built as a
subproject, the value of `path` would be

  'subprojects/libcamera/include/libcamera/internal/tracepoints.h'.replace('include/', '', 1)

which evaluates to

  'subprojects/libcamera/libcamera/internal/tracepoints.h'

so the tracepoints.h header file will try to include:

  #define TRACEPOINT_INCLUDE "subprojects/libcamera/libcamera/internal/tracepoints.h"

which will fail.

My understanding of the previous logic was that it tried to set `path` to
the path of the output file relative to the libcamera include directory.

The

  pathlib.Path(output).absolute().relative_to(argv[1])

expression is supposed to do the same.


Regards,
Barnabás Pőcze

> >
> > > ---
> > >  include/libcamera/internal/meson.build |  2 +-
> > >  include/meson.build                    |  2 ++
> > >  utils/tracepoints/gen-tp-header.py     | 13 +++++++------
> > >  3 files changed, 10 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
> > > index 7a780d48ee57..f8be86e040c5 100644
> > > --- a/include/libcamera/internal/meson.build
> > > +++ b/include/libcamera/internal/meson.build
> > > @@ -6,7 +6,7 @@ libcamera_tracepoint_header = custom_target(
> > >      'tp_header',
> > >      input: ['tracepoints.h.in', tracepoint_files],
> > >      output: 'tracepoints.h',
> > > -    command: [gen_tracepoints_header, '@OUTPUT@', '@INPUT@'],
> > > +    command: [gen_tracepoints_header, include_build_dir, '@OUTPUT@', '@INPUT@'],
> > >  )
> > >
> > >  libcamera_internal_headers = files([
> > > diff --git a/include/meson.build b/include/meson.build
> > > index 27ce2f41c534..19b93a7bd753 100644
> > > --- a/include/meson.build
> > > +++ b/include/meson.build
> > > @@ -1,4 +1,6 @@
> > >  # SPDX-License-Identifier: CC0-1.0
> > >
> > > +include_build_dir = meson.current_build_dir()
> > > +
> > >  subdir('android')
> > >  subdir('libcamera')
> > > diff --git a/utils/tracepoints/gen-tp-header.py b/utils/tracepoints/gen-tp-header.py
> > > index bbd472d972d0..a454615e4625 100755
> > > --- a/utils/tracepoints/gen-tp-header.py
> > > +++ b/utils/tracepoints/gen-tp-header.py
> > > @@ -8,22 +8,23 @@
> > >
> > >  import datetime
> > >  import jinja2
> > > +import pathlib
> > >  import os
> > >  import sys
> > >
> > >  def main(argv):
> > > -    if len(argv) < 3:
> > > -        print(f'Usage: {argv[0]} output template tp_files...')
> > > +    if len(argv) < 4:
> > > +        print(f'Usage: {argv[0]} include_build_dir output template tp_files...')
> > >          return 1
> > >
> > > -    output = argv[1]
> > > -    template = argv[2]
> > > +    output = argv[2]
> > > +    template = argv[3]
> > >
> > >      year = datetime.datetime.now().year
> > > -    path = output.replace('include/', '', 1)
> > > +    path = pathlib.Path(output).absolute().relative_to(argv[1])
> > >
> > >      source = ''
> > > -    for fname in argv[3:]:
> > > +    for fname in argv[4:]:
> > >          source += open(fname, 'r', encoding='utf-8').read() + '\n\n'
> > >
> > >      template = jinja2.Template(open(template, 'r', encoding='utf-8').read())
> > > --
> > > 2.38.1
> > >
> > >
>
Laurent Pinchart Nov. 14, 2022, 4:16 p.m. UTC | #4
Hi Barnabás,

On Mon, Nov 14, 2022 at 04:12:23PM +0000, Barnabás Pőcze via libcamera-devel wrote:
> On Mon, 14 Nov 2022 16:12:23 +0000, Kieran Bingham wrote:
> > Quoting Paul Elder via libcamera-devel (2022-11-10 03:27:36)
> > > On Wed, Nov 09, 2022 at 04:36:14PM +0000, Barnabás Pőcze via libcamera-devel wrote:
> > > > Date: Wed, 09 Nov 2022 16:36:14 +0000
> > > > From: Barnabás Pőcze <pobrn@protonmail.com>
> > > > To: libcamera-devel@lists.libcamera.org
> > > > Subject: [PATCH v1] libcamera: tracing: fix header generation when built as
> > > >  subproject
> > > >
> > > > The previously used
> > > >
> > > >   path = output.replace('include/', '', 1)
> > > >
> > > > logic is not sufficient to correctly determine the proper path
> > > > when libcamera is built as a subproject. Fix it by using Python's
> > > > pathlib to calculate the relative path of the output file with
> > > > respect to the "include" directory of libcamera.
> > > >
> > > > Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
> > >
> > > Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
> > 
> > This looks ok to me, and doesn't break the builds for my integration
> > tests - but I haven't easily tested as a submodule yet.
> > 
> > However, given that I expect that has been tested by Barnabás,
> > 
> > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 
> I am using this with pipewire. For non-subproject builds it should generate
> the exact same path that was previously generated.
> 
> I did not elaborate in the commit message but the issue is that when built as a
> subproject, the value of `path` would be
> 
>   'subprojects/libcamera/include/libcamera/internal/tracepoints.h'.replace('include/', '', 1)
> 
> which evaluates to
> 
>   'subprojects/libcamera/libcamera/internal/tracepoints.h'
> 
> so the tracepoints.h header file will try to include:
> 
>   #define TRACEPOINT_INCLUDE "subprojects/libcamera/libcamera/internal/tracepoints.h"
> 
> which will fail.

Thank you for the explanation, I was wondering what was wrong with the
previous logic. Kieran, could you record this in the commit message when
pushing ?

> My understanding of the previous logic was that it tried to set `path` to
> the path of the output file relative to the libcamera include directory.
> 
> The
> 
>   pathlib.Path(output).absolute().relative_to(argv[1])
> 
> expression is supposed to do the same.
> 
> > > > ---
> > > >  include/libcamera/internal/meson.build |  2 +-
> > > >  include/meson.build                    |  2 ++
> > > >  utils/tracepoints/gen-tp-header.py     | 13 +++++++------
> > > >  3 files changed, 10 insertions(+), 7 deletions(-)
> > > >
> > > > diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
> > > > index 7a780d48ee57..f8be86e040c5 100644
> > > > --- a/include/libcamera/internal/meson.build
> > > > +++ b/include/libcamera/internal/meson.build
> > > > @@ -6,7 +6,7 @@ libcamera_tracepoint_header = custom_target(
> > > >      'tp_header',
> > > >      input: ['tracepoints.h.in', tracepoint_files],
> > > >      output: 'tracepoints.h',
> > > > -    command: [gen_tracepoints_header, '@OUTPUT@', '@INPUT@'],
> > > > +    command: [gen_tracepoints_header, include_build_dir, '@OUTPUT@', '@INPUT@'],
> > > >  )
> > > >
> > > >  libcamera_internal_headers = files([
> > > > diff --git a/include/meson.build b/include/meson.build
> > > > index 27ce2f41c534..19b93a7bd753 100644
> > > > --- a/include/meson.build
> > > > +++ b/include/meson.build
> > > > @@ -1,4 +1,6 @@
> > > >  # SPDX-License-Identifier: CC0-1.0
> > > >
> > > > +include_build_dir = meson.current_build_dir()
> > > > +
> > > >  subdir('android')
> > > >  subdir('libcamera')
> > > > diff --git a/utils/tracepoints/gen-tp-header.py b/utils/tracepoints/gen-tp-header.py
> > > > index bbd472d972d0..a454615e4625 100755
> > > > --- a/utils/tracepoints/gen-tp-header.py
> > > > +++ b/utils/tracepoints/gen-tp-header.py
> > > > @@ -8,22 +8,23 @@
> > > >
> > > >  import datetime
> > > >  import jinja2
> > > > +import pathlib
> > > >  import os
> > > >  import sys
> > > >
> > > >  def main(argv):
> > > > -    if len(argv) < 3:
> > > > -        print(f'Usage: {argv[0]} output template tp_files...')
> > > > +    if len(argv) < 4:
> > > > +        print(f'Usage: {argv[0]} include_build_dir output template tp_files...')
> > > >          return 1
> > > >
> > > > -    output = argv[1]
> > > > -    template = argv[2]
> > > > +    output = argv[2]
> > > > +    template = argv[3]
> > > >
> > > >      year = datetime.datetime.now().year
> > > > -    path = output.replace('include/', '', 1)
> > > > +    path = pathlib.Path(output).absolute().relative_to(argv[1])
> > > >
> > > >      source = ''
> > > > -    for fname in argv[3:]:
> > > > +    for fname in argv[4:]:
> > > >          source += open(fname, 'r', encoding='utf-8').read() + '\n\n'
> > > >
> > > >      template = jinja2.Template(open(template, 'r', encoding='utf-8').read())

Patch
diff mbox series

diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
index 7a780d48ee57..f8be86e040c5 100644
--- a/include/libcamera/internal/meson.build
+++ b/include/libcamera/internal/meson.build
@@ -6,7 +6,7 @@  libcamera_tracepoint_header = custom_target(
     'tp_header',
     input: ['tracepoints.h.in', tracepoint_files],
     output: 'tracepoints.h',
-    command: [gen_tracepoints_header, '@OUTPUT@', '@INPUT@'],
+    command: [gen_tracepoints_header, include_build_dir, '@OUTPUT@', '@INPUT@'],
 )

 libcamera_internal_headers = files([
diff --git a/include/meson.build b/include/meson.build
index 27ce2f41c534..19b93a7bd753 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -1,4 +1,6 @@ 
 # SPDX-License-Identifier: CC0-1.0

+include_build_dir = meson.current_build_dir()
+
 subdir('android')
 subdir('libcamera')
diff --git a/utils/tracepoints/gen-tp-header.py b/utils/tracepoints/gen-tp-header.py
index bbd472d972d0..a454615e4625 100755
--- a/utils/tracepoints/gen-tp-header.py
+++ b/utils/tracepoints/gen-tp-header.py
@@ -8,22 +8,23 @@ 

 import datetime
 import jinja2
+import pathlib
 import os
 import sys

 def main(argv):
-    if len(argv) < 3:
-        print(f'Usage: {argv[0]} output template tp_files...')
+    if len(argv) < 4:
+        print(f'Usage: {argv[0]} include_build_dir output template tp_files...')
         return 1

-    output = argv[1]
-    template = argv[2]
+    output = argv[2]
+    template = argv[3]

     year = datetime.datetime.now().year
-    path = output.replace('include/', '', 1)
+    path = pathlib.Path(output).absolute().relative_to(argv[1])

     source = ''
-    for fname in argv[3:]:
+    for fname in argv[4:]:
         source += open(fname, 'r', encoding='utf-8').read() + '\n\n'

     template = jinja2.Template(open(template, 'r', encoding='utf-8').read())