meson.build                 |  4 ++--
 pkgconfig/libpipewire.pc.in | 11 -----------
 pkgconfig/libspa.pc.in      |  7 -------
 pkgconfig/meson.build       | 25 -------------------------
 spa/meson.build             |  6 ++++++
 src/pipewire/meson.build    | 11 ++++++++++-
 6 files changed, 18 insertions(+), 46 deletions(-)

diff --git c/meson.build i/meson.build
index 443da44c..bcbe35e9 100644
--- c/meson.build
+++ i/meson.build
@@ -1,6 +1,6 @@
 project('pipewire', 'c',
   version : '0.2.3',
-  meson_version : '>= 0.36.0',
+  meson_version : '>= 0.42.0',
   default_options : [ 'warning_level=1',
                       'c_std=gnu99',
                       'buildtype=debugoptimized' ])
@@ -34,6 +34,7 @@ modules_install_dir = join_paths(pipewire_libdir, 'pipewire-@0@'.format(apiversi
 spa_plugindir = join_paths(pipewire_libdir, 'spa')
 
 gnome = import('gnome')
+pkgconfig = import('pkgconfig')
 
 cc = meson.get_compiler('c')
 
@@ -164,7 +165,6 @@ endif
 
 subdir('spa')
 subdir('src')
-subdir('pkgconfig')
 
 if get_option('docs')
   doxygen = find_program('doxygen', required : false)
diff --git c/pkgconfig/libpipewire.pc.in i/pkgconfig/libpipewire.pc.in
deleted file mode 100644
index ca302fbe..00000000
--- c/pkgconfig/libpipewire.pc.in
+++ /dev/null
@@ -1,11 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@/
-moduledir=@moduledir@
-
-Name: libpipewire
-Description: PipeWire Interface
-Version: @VERSION@
-Libs: -L${libdir} -lpipewire-@PIPEWIRE_API_VERSION@
-Cflags: -I${includedir} -D_REENTRANT
diff --git c/pkgconfig/libspa.pc.in i/pkgconfig/libspa.pc.in
deleted file mode 100644
index e5878d2d..00000000
--- c/pkgconfig/libspa.pc.in
+++ /dev/null
@@ -1,7 +0,0 @@
-prefix=@prefix@
-includedir=@includedir@/
-
-Name: libspa
-Description: Simple Plugin API
-Version: @VERSION@
-Cflags: -I${includedir} -D_REENTRANT
diff --git c/pkgconfig/meson.build i/pkgconfig/meson.build
deleted file mode 100644
index 9d575784..00000000
--- c/pkgconfig/meson.build
+++ /dev/null
@@ -1,25 +0,0 @@
-pkgconf = configuration_data()
-
-pkgconf.set('prefix', get_option('prefix'))
-pkgconf.set('exec_prefix', '${prefix}')
-pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
-pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
-pkgconf.set('moduledir', '${prefix}/@0@'.format(modules_install_dir))
-pkgconf.set('PIPEWIRE_API_VERSION', apiversion)
-pkgconf.set('VERSION', pipewire_version)
-
-pkg_install_dir = '@0@/pkgconfig'.format(get_option('libdir'))
-
-pkg_files = [
-  [ 'libpipewire', apiversion ],
-  [ 'libspa', spaversion ],
-]
-
-foreach p : pkg_files
-  infile = p.get(0) + '.pc.in'
-  outfile = p.get(0) + '-@0@.pc'.format(p.get(1))
-  configure_file(input : infile,
-    output : outfile,
-    configuration : pkgconf,
-    install_dir : pkg_install_dir)
-endforeach
diff --git c/spa/meson.build i/spa/meson.build
index 09e1c2f0..d190b9b2 100644
--- c/spa/meson.build
+++ i/spa/meson.build
@@ -24,3 +24,9 @@ subdir('include')
 subdir('plugins')
 subdir('tools')
 subdir('tests')
+
+pkgconfig.generate(filebase : 'libspa-@0@'.format(spaversion),
+  name : 'libspa',
+  description : 'Simple Plugin API',
+  version : pipewire_version,
+  extra_cflags : '-D_REENTRANT')
diff --git c/src/pipewire/meson.build i/src/pipewire/meson.build
index 8aeb6f57..d2d75b84 100644
--- c/src/pipewire/meson.build
+++ i/src/pipewire/meson.build
@@ -74,16 +74,25 @@ libpipewire_c_args = [
   '-D_POSIX_C_SOURCE',
 ]
 
-libpipewire = shared_library('pipewire-@0@'.format(apiversion), pipewire_sources,
+libpipewire_name = 'pipewire-@0@'.format(apiversion)
+libpipewire = shared_library(libpipewire_name, pipewire_sources,
   version : libversion,
   soversion : soversion,
   c_args : libpipewire_c_args,
   include_directories : [pipewire_inc, configinc, spa_inc],
   install : true,
   dependencies : [dl_lib, mathlib, pthread_lib],
 )
 
 pipewire_dep = declare_dependency(link_with : libpipewire,
   include_directories : [pipewire_inc, configinc, spa_inc],
   dependencies : [pthread_lib],
 )
+
+pkgconfig.generate(filebase : 'lib@0@'.format(libpipewire_name),
+  libraries : [libpipewire],
+  name : 'libpipewire',
+  description : 'PipeWire Interface',
+  version : pipewire_version,
+  extra_cflags : '-D_REENTRANT',
+  variables : ['moduledir=${libdir}/@0@'.format(libpipewire_name)])
