Message ID | 20220707142744.8801-1-dwagner@suse.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [RFC,v2] libtracefs: Add initial support for meson | expand |
On Thu, 7 Jul 2022 16:27:44 +0200 Daniel Wagner <dwagner@suse.de> wrote: > Add support for building the project with meson. It's not complete > yet, for example building and installing the documentation is missing. > > Obviously, meson is not make and there are some changes in how to use > this build system. The meson documentation is outstanding good and > usually has good tips and tricks to solve problems. But sure there is > learning curve but hopefully not so step. > > Anyway, as pure user the build steps are (in source tree builds are > not supported): > > # configure using .build as build directory and install destination > # /tmp/test > meson .build --prefix=/tmp/test > > # trigger the build > ninja -C .build > > # install the library > ninja -C .build install > > I am using an alias for 'ninja -C .build' which is called 'ni'. This > makes way more convenient to use. > > Signed-off-by: Daniel Wagner <dwagner@suse.de> > --- > > v2: > - updated commit message > - dropped the include path patch, the pkg-config > from libtraceevent is including them > > v1: > - initial version > > include/meson.build | 9 ++++++++ > meson.build | 32 +++++++++++++++++++++++++++ > src/meson.build | 53 +++++++++++++++++++++++++++++++++++++++++++++ > utest/meson.build | 14 ++++++++++++ > 4 files changed, 108 insertions(+) > create mode 100644 include/meson.build > create mode 100644 meson.build > create mode 100644 src/meson.build > create mode 100644 utest/meson.build > > diff --git a/include/meson.build b/include/meson.build > new file mode 100644 > index 000000000000..1bbfe8afb280 > --- /dev/null > +++ b/include/meson.build > @@ -0,0 +1,9 @@ > +# SPDX-License-Identifier: LGPL-2.1 > + > +headers = [ > + 'tracefs.h', > +] > + > +foreach h : headers > + install_headers(h, subdir : 'libtracefs') > +endforeach > diff --git a/meson.build b/meson.build > new file mode 100644 > index 000000000000..2138d2f149f1 > --- /dev/null > +++ b/meson.build > @@ -0,0 +1,32 @@ > +# SPDX-License-Identifier: LGPL-2.1 > + > +project( > + 'libtracefs', ['c'], > + meson_version: '>= 0.47.0', > + license: 'LGPL-2.1', > + version: '1.4.0', > + default_options: [ > + 'c_std=gnu99', > + 'buildtype=release', > + 'prefix=/usr', > + 'warning_level=1', > + ] > +) > + > +library_version = meson.project_version() > + > +libtraceevent_dep = dependency('libtraceevent', required: true) Can the dependency also include a version? It will be needed here and in trace-cmd. -- Steve > +cunit_dep = dependency('cunit', required : false) > + > +add_project_arguments( > + [ > + '-D_GNU_SOURCE', > + ], > + language : 'c', > +) > + > +incdir = include_directories(['include']) > + > +subdir('src') > +subdir('include') > +subdir('utest') > diff --git a/src/meson.build b/src/meson.build > new file mode 100644 > index 000000000000..36d3be359fae > --- /dev/null > +++ b/src/meson.build > @@ -0,0 +1,53 @@ > +# SPDX-License-Identifier: LGPL-2.1 > + > +sources= [ > + 'tracefs-dynevents.c', > + 'tracefs-eprobes.c', > + 'tracefs-events.c', > + 'tracefs-filter.c', > + 'tracefs-hist.c', > + 'tracefs-instance.c', > + 'tracefs-kprobes.c', > + 'tracefs-marker.c', > + 'tracefs-sqlhist.c', > + 'tracefs-tools.c', > + 'tracefs-uprobes.c', > + 'tracefs-utils.c', > +] > + > +flex = find_program('flex', required: true) > +bison = find_program('bison', required: true) > + > +lgen = generator(flex, > +output : '@PLAINNAME@.yy.c', > +arguments : ['-o', '@OUTPUT@', '@INPUT@']) > + > +pgen = generator(bison, > +output : ['@BASENAME@.tab.c', '@BASENAME@.tab.h'], > +arguments : ['@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@']) > + > +lfiles = lgen.process('sqlhist.l') > +pfiles = pgen.process('sqlhist.y') > + > +libtracefs = library( > + 'tracefs', > + sources, lfiles, pfiles, > + version: library_version, > + dependencies: [libtraceevent_dep], > + include_directories: [incdir], > + install: true, > +) > + > +pkg = import('pkgconfig') > +pkg.generate(libtracefs, > + filebase: meson.project_name(), > + name: meson.project_name(), > + version: meson.project_version(), > + description: 'Manage trace fs', > + url: 'https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/', > +) > + > +libtracefs_dep = declare_dependency( > + include_directories: ['.'], > + link_with: libtracefs, > +) > diff --git a/utest/meson.build b/utest/meson.build > new file mode 100644 > index 000000000000..07058afb5f9b > --- /dev/null > +++ b/utest/meson.build > @@ -0,0 +1,14 @@ > +# SPDX-License-Identifier: LGPL-2.1 > + > +source = [ > + 'trace-utest.c', > + 'tracefs-utest.c', > +] > + > +e = executable( > + 'trace-utest', > + source, > + include_directories: [incdir], > + dependencies: [libtracefs_dep, libtraceevent_dep, cunit_dep]) > + > +test('trace-utest', e)
On Fri, Nov 25, 2022 at 09:19:46PM -0500, Steven Rostedt wrote: > > +libtraceevent_dep = dependency('libtraceevent', required: true) > > Can the dependency also include a version? It will be needed here and > in trace-cmd. Sure, that is no problem, e.g. libtraceevent_dep = dependency('libtraceevent', version: '1.3', required: true)
diff --git a/include/meson.build b/include/meson.build new file mode 100644 index 000000000000..1bbfe8afb280 --- /dev/null +++ b/include/meson.build @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: LGPL-2.1 + +headers = [ + 'tracefs.h', +] + +foreach h : headers + install_headers(h, subdir : 'libtracefs') +endforeach diff --git a/meson.build b/meson.build new file mode 100644 index 000000000000..2138d2f149f1 --- /dev/null +++ b/meson.build @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: LGPL-2.1 + +project( + 'libtracefs', ['c'], + meson_version: '>= 0.47.0', + license: 'LGPL-2.1', + version: '1.4.0', + default_options: [ + 'c_std=gnu99', + 'buildtype=release', + 'prefix=/usr', + 'warning_level=1', + ] +) + +library_version = meson.project_version() + +libtraceevent_dep = dependency('libtraceevent', required: true) +cunit_dep = dependency('cunit', required : false) + +add_project_arguments( + [ + '-D_GNU_SOURCE', + ], + language : 'c', +) + +incdir = include_directories(['include']) + +subdir('src') +subdir('include') +subdir('utest') diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 000000000000..36d3be359fae --- /dev/null +++ b/src/meson.build @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: LGPL-2.1 + +sources= [ + 'tracefs-dynevents.c', + 'tracefs-eprobes.c', + 'tracefs-events.c', + 'tracefs-filter.c', + 'tracefs-hist.c', + 'tracefs-instance.c', + 'tracefs-kprobes.c', + 'tracefs-marker.c', + 'tracefs-sqlhist.c', + 'tracefs-tools.c', + 'tracefs-uprobes.c', + 'tracefs-utils.c', +] + +flex = find_program('flex', required: true) +bison = find_program('bison', required: true) + +lgen = generator(flex, +output : '@PLAINNAME@.yy.c', +arguments : ['-o', '@OUTPUT@', '@INPUT@']) + +pgen = generator(bison, +output : ['@BASENAME@.tab.c', '@BASENAME@.tab.h'], +arguments : ['@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@']) + +lfiles = lgen.process('sqlhist.l') +pfiles = pgen.process('sqlhist.y') + +libtracefs = library( + 'tracefs', + sources, lfiles, pfiles, + version: library_version, + dependencies: [libtraceevent_dep], + include_directories: [incdir], + install: true, +) + +pkg = import('pkgconfig') +pkg.generate(libtracefs, + filebase: meson.project_name(), + name: meson.project_name(), + version: meson.project_version(), + description: 'Manage trace fs', + url: 'https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/', +) + +libtracefs_dep = declare_dependency( + include_directories: ['.'], + link_with: libtracefs, +) diff --git a/utest/meson.build b/utest/meson.build new file mode 100644 index 000000000000..07058afb5f9b --- /dev/null +++ b/utest/meson.build @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: LGPL-2.1 + +source = [ + 'trace-utest.c', + 'tracefs-utest.c', +] + +e = executable( + 'trace-utest', + source, + include_directories: [incdir], + dependencies: [libtracefs_dep, libtraceevent_dep, cunit_dep]) + +test('trace-utest', e)
Add support for building the project with meson. It's not complete yet, for example building and installing the documentation is missing. Obviously, meson is not make and there are some changes in how to use this build system. The meson documentation is outstanding good and usually has good tips and tricks to solve problems. But sure there is learning curve but hopefully not so step. Anyway, as pure user the build steps are (in source tree builds are not supported): # configure using .build as build directory and install destination # /tmp/test meson .build --prefix=/tmp/test # trigger the build ninja -C .build # install the library ninja -C .build install I am using an alias for 'ninja -C .build' which is called 'ni'. This makes way more convenient to use. Signed-off-by: Daniel Wagner <dwagner@suse.de> --- v2: - updated commit message - dropped the include path patch, the pkg-config from libtraceevent is including them v1: - initial version include/meson.build | 9 ++++++++ meson.build | 32 +++++++++++++++++++++++++++ src/meson.build | 53 +++++++++++++++++++++++++++++++++++++++++++++ utest/meson.build | 14 ++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 include/meson.build create mode 100644 meson.build create mode 100644 src/meson.build create mode 100644 utest/meson.build