From a7c4c84d683735339abd221739577dbdbf64d35b Mon Sep 17 00:00:00 2001
From: Niels Lohmann <mail@nlohmann.me>
Date: Wed, 22 Jul 2020 12:03:37 +0200
Subject: [PATCH] :white_check_mark: add regression test for #2281

---
 .../cmake_target_include_directories/project/Bar.cpp |  3 +++
 .../cmake_target_include_directories/project/Bar.hpp |  4 ++++
 .../project/CMakeLists.txt                           | 12 ++++++++++++
 .../cmake_target_include_directories/project/Foo.cpp |  3 +++
 .../cmake_target_include_directories/project/Foo.hpp |  4 ++++
 5 files changed, 26 insertions(+)
 create mode 100644 test/cmake_target_include_directories/project/Bar.cpp
 create mode 100644 test/cmake_target_include_directories/project/Bar.hpp
 create mode 100644 test/cmake_target_include_directories/project/Foo.cpp
 create mode 100644 test/cmake_target_include_directories/project/Foo.hpp

diff --git a/test/cmake_target_include_directories/project/Bar.cpp b/test/cmake_target_include_directories/project/Bar.cpp
new file mode 100644
index 00000000..ed39e284
--- /dev/null
+++ b/test/cmake_target_include_directories/project/Bar.cpp
@@ -0,0 +1,3 @@
+#include "Bar.hpp"
+
+class Bar;
diff --git a/test/cmake_target_include_directories/project/Bar.hpp b/test/cmake_target_include_directories/project/Bar.hpp
new file mode 100644
index 00000000..bdb1d9b5
--- /dev/null
+++ b/test/cmake_target_include_directories/project/Bar.hpp
@@ -0,0 +1,4 @@
+#include <nlohmann/json.hpp>
+#include "Foo.hpp"
+
+class Bar : public Foo{};
diff --git a/test/cmake_target_include_directories/project/CMakeLists.txt b/test/cmake_target_include_directories/project/CMakeLists.txt
index 20e971a0..36f3da0c 100644
--- a/test/cmake_target_include_directories/project/CMakeLists.txt
+++ b/test/cmake_target_include_directories/project/CMakeLists.txt
@@ -9,3 +9,15 @@ set_target_properties(with_private_target PROPERTIES CXX_STANDARD 11)
 add_executable(with_private_system_target main.cpp)
 target_include_directories(with_private_system_target PRIVATE SYSTEM ${nlohmann_json_source}/include)
 set_target_properties(with_private_system_target PROPERTIES CXX_STANDARD 11)
+
+# regression from https://github.com/nlohmann/json/discussions/2281
+add_library(Foo SHARED)
+target_sources(Foo PRIVATE Foo.cpp Bar.cpp)
+target_include_directories(Foo PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${nlohmann_json_source}/include)
+set_target_properties(Foo PROPERTIES CXX_STANDARD 11)
+
+add_library(Bar SHARED)
+target_sources(Bar PRIVATE Bar.cpp)
+target_link_libraries(Bar PRIVATE Foo)
+target_include_directories(Bar PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${nlohmann_json_source}/include)
+set_target_properties(Bar PROPERTIES CXX_STANDARD 11)
diff --git a/test/cmake_target_include_directories/project/Foo.cpp b/test/cmake_target_include_directories/project/Foo.cpp
new file mode 100644
index 00000000..6a2ff91a
--- /dev/null
+++ b/test/cmake_target_include_directories/project/Foo.cpp
@@ -0,0 +1,3 @@
+#include "Foo.hpp"
+
+class Foo;
diff --git a/test/cmake_target_include_directories/project/Foo.hpp b/test/cmake_target_include_directories/project/Foo.hpp
new file mode 100644
index 00000000..fd6b1ffa
--- /dev/null
+++ b/test/cmake_target_include_directories/project/Foo.hpp
@@ -0,0 +1,4 @@
+#pragma once
+#include <nlohmann/json.hpp>
+
+class Foo{};