diff --git a/src/ipa/meson.build b/src/ipa/meson.build
index 5a5de267c147..41625ed471bc 100644
--- a/src/ipa/meson.build
+++ b/src/ipa/meson.build
@@ -1,19 +1,17 @@
 # SPDX-License-Identifier: CC0-1.0
 
-ipa_install_dir = join_paths(get_option('libdir'), 'libcamera')
-ipa_data_dir = join_paths(get_option('datadir'), 'libcamera', 'ipa')
-ipa_sysconf_dir = join_paths(get_option('sysconfdir'), 'libcamera', 'ipa')
-
 ipa_includes = [
     libcamera_includes,
 ]
 
-config_h.set('IPA_CONFIG_DIR',
-             '"' + join_paths(get_option('prefix'), ipa_sysconf_dir) +
-             ':' + join_paths(get_option('prefix'), ipa_data_dir) + '"')
+ipa_install_dir = libcamera_libdir
+ipa_data_dir = libcamera_datadir / 'ipa'
+ipa_sysconf_dir = libcamera_sysconfdir / 'ipa'
+
+config_h.set('IPA_CONFIG_DIR', '"' + prefix / ipa_sysconf_dir +
+                               ':' + prefix / ipa_data_dir + '"')
 
-config_h.set('IPA_MODULE_DIR',
-             '"' + join_paths(get_option('prefix'), ipa_install_dir) + '"')
+config_h.set('IPA_MODULE_DIR', '"' + prefix / ipa_install_dir + '"')
 
 subdir('libipa')
 
@@ -22,6 +20,9 @@ ipa_sign = files('ipa-sign.sh')
 ipas = ['raspberrypi', 'rkisp1', 'vimc']
 ipa_names = []
 
+# The ipa-sign-install.sh script which uses the ipa_names variable will itself
+# prepend MESON_INSTALL_DESTDIR_PREFIX to each ipa module name, therefore we
+# must not include the prefix string here.
 foreach pipeline : get_option('pipelines')
     if ipas.contains(pipeline)
         subdir(pipeline)
diff --git a/src/meson.build b/src/meson.build
index 4b75f05878bc..f98fcede203b 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,5 +1,19 @@
 # SPDX-License-Identifier: CC0-1.0
 
+# Handle system paths
+datadir = get_option('datadir')
+libdir = get_option('libdir')
+prefix = get_option('prefix')
+sysconfdir = get_option('sysconfdir')
+
+libcamera_datadir = datadir / 'libcamera'
+libcamera_libdir = libdir / 'libcamera'
+libcamera_sysconfdir = sysconfdir / 'libcamera'
+
+config_h.set('LIBCAMERA_DATA_DIR', '"' + prefix / libcamera_datadir + '"')
+config_h.set('LIBCAMERA_SYSCONF_DIR', '"' + prefix / libcamera_sysconfdir + '"')
+
+# Module Signing
 openssl = find_program('openssl', required : true)
 if openssl.found()
     ipa_priv_key = custom_target('ipa-priv-key',
