Fix outside-of-project check when project path is not canonical.

The issue happens on Silverblue where /home is a symlink to /var/home.
With this element-path is something like
/var/home/user/project/elements, when the project path is
/home/usr/project. Comparing canonical paths solves the issue.

Fixes #673
diff --git a/buildstream/_yaml.py b/buildstream/_yaml.py
index 66500fb..4ee12a1 100644
--- a/buildstream/_yaml.py
+++ b/buildstream/_yaml.py
@@ -467,7 +467,7 @@
                         "{}: Specified path '{}' does not exist"
                         .format(provenance, path_str))
 
-    is_inside = project_dir_path in full_resolved_path.parents or (
+    is_inside = project_dir_path.resolve() in full_resolved_path.parents or (
         full_resolved_path == project_dir_path)
 
     if path.is_absolute() or not is_inside:
diff --git a/tests/format/project.py b/tests/format/project.py
index df1a236..a27f3a5 100644
--- a/tests/format/project.py
+++ b/tests/format/project.py
@@ -181,3 +181,15 @@
 
     # Assert that the cache keys are different
     assert result1.output != result2.output
+
+
+@pytest.mark.datafiles(os.path.join(DATA_DIR, 'element-path'))
+def test_element_path_project_path_contains_symlinks(cli, datafiles, tmpdir):
+    real_project = str(datafiles)
+    linked_project = os.path.join(str(tmpdir), 'linked')
+    os.symlink(real_project, linked_project)
+    os.makedirs(os.path.join(real_project, 'elements'), exist_ok=True)
+    with open(os.path.join(real_project, 'elements', 'element.bst'), 'w') as f:
+        f.write("kind: manual\n")
+    result = cli.run(project=linked_project, args=['show', 'element.bst'])
+    result.assert_success()