diff --git a/meson.build b/meson.build
index 7b96583..c79cbe7 100644
--- a/meson.build
+++ b/meson.build
@@ -58,6 +58,15 @@ config_data.set_quoted('PACKAGE_URL', calls_homepage)
 config_data.set_quoted('PACKAGE_VERSION', calls_version)
 config_data.set('PACKAGE_URL_RAW', calls_homepage)
 
+run_data = configuration_data()
+run_data.set('ABS_BUILDDIR', meson.current_build_dir())
+run_data.set('ABS_SRCDIR', meson.current_source_dir())
+
+configure_file(
+  input: 'run.in',
+  output: 'run',
+  configuration: run_data)
+
 add_project_arguments([
  '-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_58',
  '-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_64',
diff --git a/run.in b/run.in
new file mode 100755
index 0000000..4bf2e5e
--- /dev/null
+++ b/run.in
@@ -0,0 +1,10 @@
+#!/bin/sh
+set -e
+
+ABS_BUILDDIR='@ABS_BUILDDIR@'
+ABS_SRCDIR='@ABS_SRCDIR@'
+
+export GSETTINGS_SCHEMA_DIR="${ABS_BUILDDIR}/data"
+set -x
+exec "${ABS_BUILDDIR}/src/gnome-calls" "$@"
+