From dc2493e7525bb7633f697ef10f72b72b46222249 Mon Sep 17 00:00:00 2001
From: Andy Belle-Isle <drumsetmonkey@gmail.com>
Date: Fri, 30 Aug 2019 00:45:36 -0400
Subject: Forget what I said, I just need to change git attributes to mark for
 vendor

---
 .../include/my_object/my_object.hpp                | 28 ++++++++++++++++++++++
 .../include/my_object/my_object_api.hpp            | 27 +++++++++++++++++++++
 2 files changed, 55 insertions(+)
 create mode 100644 lib/sol2/examples/require_dll_example/include/my_object/my_object.hpp
 create mode 100644 lib/sol2/examples/require_dll_example/include/my_object/my_object_api.hpp

(limited to 'lib/sol2/examples/require_dll_example/include')

diff --git a/lib/sol2/examples/require_dll_example/include/my_object/my_object.hpp b/lib/sol2/examples/require_dll_example/include/my_object/my_object.hpp
new file mode 100644
index 0000000..f8ec5e5
--- /dev/null
+++ b/lib/sol2/examples/require_dll_example/include/my_object/my_object.hpp
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <my_object/my_object_api.hpp>
+
+// forward declare as a C struct 
+// so a pointer to lua_State can be part of a signature
+extern "C" {
+	struct lua_State;
+}
+// you can replace the above if you're fine with including 
+// <sol.hpp> earlier than absolutely necessary
+
+namespace my_object {
+
+	struct test {
+		int value;
+
+		test() = default;
+		test(int val) : value(val) {}
+	};
+
+} // namespace my_object
+
+// this function needs to be exported from your
+// dll. "extern 'C'" should do the trick, but
+// we're including platform-specific stuff here to help
+// see my_object_api.hpp for details
+extern "C" MY_OBJECT_API int luaopen_my_object(lua_State* L);
diff --git a/lib/sol2/examples/require_dll_example/include/my_object/my_object_api.hpp b/lib/sol2/examples/require_dll_example/include/my_object/my_object_api.hpp
new file mode 100644
index 0000000..6af5f42
--- /dev/null
+++ b/lib/sol2/examples/require_dll_example/include/my_object/my_object_api.hpp
@@ -0,0 +1,27 @@
+#pragma once
+
+namespace my_object {
+
+#if defined _MSC_VER
+	#define MY_OBJECT_VC
+#elif defined __GNUC__
+	#define MY_OBJECT_GCC
+#elif defined __clang__
+	#define MY_OBJECT_CLANG
+#endif
+
+#if defined MY_OBJECT_VC
+	#if defined MY_OBJECT_DLL
+		#if defined MY_OBJECT_BUILD
+			#define MY_OBJECT_API __declspec(dllexport)
+		#else
+			#define MY_OBJECT_API __declspec(dllexport)
+		#endif // MY_OBJECT_BUILD - Building the Library vs. Using the Library
+	#else
+		#define MY_OBJECT_API 
+	#endif // Building a DLL vs. Static Library
+#else // g++ / clang++
+	#define MY_OBJECT_API __attribute__ ((visibility ("default")))
+#endif // MY_OBJECT_BUILD
+
+} // namespace my_object
-- 
cgit v1.2.3