diff --git a/.gitignore b/.gitignore
index 468d90c58e..5c4855fb54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,22 @@
 *build*/
+gst-devtools
+gst-editing-services
+gst-libav
+gst-plugins-bad
+gst-plugins-base
+gst-plugins-good
+gst-plugins-ugly
+gst-python
+gstreamer
+__pycache__
+meson/
+subprojects/gst-devtools/
+subprojects/gst-editing-services/
+subprojects/gst-libav/
+subprojects/gst-plugins-bad/
+subprojects/gst-plugins-base/
+subprojects/gst-plugins-good/
+subprojects/gst-plugins-ugly/
+subprojects/gst-python/
+subprojects/gstreamer/
+subprojects/glib/
diff --git a/gst-uninstalled.py b/gst-uninstalled.py
index a698bf9cf8..16986570fe 100755
--- a/gst-uninstalled.py
+++ b/gst-uninstalled.py
@@ -56,7 +56,7 @@ def get_subprocess_env(options):
 
         prepend_env_var(env, "GST_PLUGIN_PATH", projpath)
 
-    env["CURRENT_GST"] = os.path.normpath(SCRIPTDIR + "/subprojects")
+    env["CURRENT_GST"] = os.path.normpath(SCRIPTDIR)
     env["GST_VALIDATE_SCENARIOS_PATH"] = os.path.normpath(
         "%s/subprojects/gst-devtools/validate/data/scenarios" % SCRIPTDIR)
     env["GST_VALIDATE_PLUGIN_PATH"] = os.path.normpath(
diff --git a/meson.build b/meson.build
index 3ca302a033..a5bf87834b 100644
--- a/meson.build
+++ b/meson.build
@@ -41,8 +41,22 @@ if get_option('enable_python')
     subprojects += ['gst-python']
 endif
 
+python3 = find_program('python3')
+symlink = '''
+import os
+
+os.symlink(os.path.join('@1@', 'subprojects', '@0@'),
+    os.path.join('@1@', '@0@'))
+'''
 foreach subproj: subprojects
     subproject(subproj, version: gst_version)
+
+    cmdres = run_command(python3, '-c', symlink.format(subproj, meson.current_source_dir()))
+    if cmdres.returncode() == 0
+       message('Created symlink to ' + subproj)
+    else
+       message('Could not create symlink to @0@'.format(subproj))
+    endif
 endforeach
 
 setenv = find_program('gst-uninstalled.py')