From 80346399802ad06dace8095c5a3188147edb88ce Mon Sep 17 00:00:00 2001 From: Artem Shershen Date: Thu, 29 Aug 2019 11:10:40 +0300 Subject: [PATCH] add support of symbols export define in cpp interfaces --- src/source/CppGenerator.scala | 8 +++++++- src/source/Main.scala | 8 ++++++++ src/source/generator.scala | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/source/CppGenerator.scala b/src/source/CppGenerator.scala index 09f3be3e1..2ecfcba35 100644 --- a/src/source/CppGenerator.scala +++ b/src/source/CppGenerator.scala @@ -324,11 +324,17 @@ class CppGenerator(spec: Spec) extends Generator(spec) { val self = marshal.typename(ident, i) val methodNamesInScope = i.methods.map(m => idCpp.method(m.ident)) + val exportDefine = spec.cppExportDefine.getOrElse("") + + spec.cppExportDefineHeader match { + case Some(defineHeader) => refs.hpp.add("#include " + defineHeader) + case _ => + } writeHppFile(ident, origin, refs.hpp, refs.hppFwds, w => { writeDoc(w, doc) writeCppTypeParams(w, typeParams) - w.w(s"class $self").bracedSemi { + w.w(s"class $exportDefine $self").bracedSemi { w.wlOutdent("public:") // Destructor w.wl(s"virtual ~$self() {}") diff --git a/src/source/Main.scala b/src/source/Main.scala index fd083c5e5..42f3a4516 100644 --- a/src/source/Main.scala +++ b/src/source/Main.scala @@ -37,6 +37,8 @@ object Main { var cppNnType: Option[String] = None var cppNnCheckExpression: Option[String] = None var cppUseWideStrings: Boolean = false + var cppExportDefine: Option[String] = None + var cppExportDefineHeader: Option[String] = None var javaOutFolder: Option[File] = None var javaPackage: Option[String] = None var javaClassAccessModifier: JavaAccessModifier.Value = JavaAccessModifier.Public @@ -150,6 +152,10 @@ object Main { .text("The expression to use for building non-nullable pointers") opt[Boolean]( "cpp-use-wide-strings").valueName("").foreach(x => cppUseWideStrings = x) .text("Use wide strings in C++ code (default: false)") + opt[String]("cpp-export-define").valueName("
").foreach(x => cppExportDefine = Some(x)) + .text("The export define name for interfaces") + opt[String]("cpp-export-define-header").valueName("
").foreach(x => cppExportDefineHeader = Some(x)) + .text("The header which defines export define") note("") opt[File]("jni-out").valueName("").foreach(x => jniOutFolder = Some(x)) .text("The folder for the JNI C++ output files (Generator disabled if unspecified).") @@ -329,6 +335,8 @@ object Main { cppNnType, cppNnCheckExpression, cppUseWideStrings, + cppExportDefine, + cppExportDefineHeader, jniOutFolder, jniHeaderOutFolder, jniIncludePrefix, diff --git a/src/source/generator.scala b/src/source/generator.scala index db5aed2d9..60180f566 100644 --- a/src/source/generator.scala +++ b/src/source/generator.scala @@ -54,6 +54,8 @@ package object generatorTools { cppNnType: Option[String], cppNnCheckExpression: Option[String], cppUseWideStrings: Boolean, + cppExportDefine: Option[String], + cppExportDefineHeader: Option[String], jniOutFolder: Option[File], jniHeaderOutFolder: Option[File], jniIncludePrefix: String,