Commit 9463fa9a authored by Yannick Heinrich's avatar Yannick Heinrich Committed by Xianwen Chen

Generate an XCode like bridging header. (#342)

* Generate an XCode like bridging header.

Generates also the version number and name variable.

* Add new generated headers.

* Changes naming accorging to comments.

* Update generated variable names.
parent 0001a3e8
// AUTOGENERATED FILE - DO NOT MODIFY! // AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni // This file generated by Djinni
// TextSort_Bridging_Header.h
// TextSort_Bridging_Header
#import <Foundation/Foundation.h>
//! Project version number for TextSortBridgingHeader.
FOUNDATION_EXPORT double TextSortBridgingHeaderVersionNumber;
//! Project version string for TextSortBridgingHeader.
FOUNDATION_EXPORT const unsigned char TextSortBridgingHeaderVersionString[];
#import "TXSItemList.h" #import "TXSItemList.h"
#import "TXSSortOrder.h" #import "TXSSortOrder.h"
#import "TXSSortItems.h" #import "TXSSortItems.h"
......
...@@ -69,7 +69,7 @@ object Main { ...@@ -69,7 +69,7 @@ object Main {
var objcTypePrefix: String = "" var objcTypePrefix: String = ""
var objcIncludePrefix: String = "" var objcIncludePrefix: String = ""
var objcExtendedRecordIncludePrefix: String = "" var objcExtendedRecordIncludePrefix: String = ""
var objcSwiftBridgingHeader: Option[String] = None var objcSwiftBridgingHeaderName: Option[String] = None
var objcppIncludePrefix: String = "" var objcppIncludePrefix: String = ""
var objcppIncludeCppPrefix: String = "" var objcppIncludeCppPrefix: String = ""
var objcppIncludeObjcPrefixOptional: Option[String] = None var objcppIncludeObjcPrefixOptional: Option[String] = None
...@@ -168,7 +168,7 @@ object Main { ...@@ -168,7 +168,7 @@ object Main {
.text("The prefix for Objective-C data types (usually two or three letters)") .text("The prefix for Objective-C data types (usually two or three letters)")
opt[String]("objc-include-prefix").valueName("<prefix>").foreach(objcIncludePrefix = _) opt[String]("objc-include-prefix").valueName("<prefix>").foreach(objcIncludePrefix = _)
.text("The prefix for #import of header files from Objective-C files.") .text("The prefix for #import of header files from Objective-C files.")
opt[String]("objc-swift-bridging-header").valueName("<name>").foreach(x => objcSwiftBridgingHeader = Some(x)) opt[String]("objc-swift-bridging-header").valueName("<name>").foreach(x => objcSwiftBridgingHeaderName = Some(x))
.text("The name of Objective-C Bridging Header used in XCode's Swift projects.") .text("The name of Objective-C Bridging Header used in XCode's Swift projects.")
note("") note("")
opt[File]("objcpp-out").valueName("<out-folder>").foreach(x => objcppOutFolder = Some(x)) opt[File]("objcpp-out").valueName("<out-folder>").foreach(x => objcppOutFolder = Some(x))
...@@ -288,8 +288,8 @@ object Main { ...@@ -288,8 +288,8 @@ object Main {
} else { } else {
None None
} }
val objcSwiftBridgingHeaderWriter = if (objcSwiftBridgingHeader.isDefined && objcOutFolder.isDefined) { val objcSwiftBridgingHeaderWriter = if (objcSwiftBridgingHeaderName.isDefined && objcOutFolder.isDefined) {
val objcSwiftBridgingHeaderFile = new File(objcOutFolder.get.getPath, objcSwiftBridgingHeader.get + ".h") val objcSwiftBridgingHeaderFile = new File(objcOutFolder.get.getPath, objcSwiftBridgingHeaderName.get + ".h")
if (objcSwiftBridgingHeaderFile.getParentFile != null) if (objcSwiftBridgingHeaderFile.getParentFile != null)
createFolder("output file list", objcSwiftBridgingHeaderFile.getParentFile) createFolder("output file list", objcSwiftBridgingHeaderFile.getParentFile)
Some(new BufferedWriter(new FileWriter(objcSwiftBridgingHeaderFile))) Some(new BufferedWriter(new FileWriter(objcSwiftBridgingHeaderFile)))
...@@ -346,6 +346,7 @@ object Main { ...@@ -346,6 +346,7 @@ object Main {
objcppNamespace, objcppNamespace,
objcBaseLibIncludePrefix, objcBaseLibIncludePrefix,
objcSwiftBridgingHeaderWriter, objcSwiftBridgingHeaderWriter,
objcSwiftBridgingHeaderName,
outFileListWriter, outFileListWriter,
skipGeneration, skipGeneration,
yamlOutFolder, yamlOutFolder,
......
...@@ -38,8 +38,24 @@ class SwiftBridgingHeaderGenerator(spec: Spec) extends Generator(spec) { ...@@ -38,8 +38,24 @@ class SwiftBridgingHeaderGenerator(spec: Spec) extends Generator(spec) {
} }
object SwiftBridgingHeaderGenerator { object SwiftBridgingHeaderGenerator {
def writeAutogenerationWarning(writer: Writer) {
val bridgingHeaderName = (s: String) => s.split('-').mkString("_")
val bridgingHeaderVariables = (s: String) => s.split('-').mkString("")
def writeAutogenerationWarning(name: String, writer: Writer) {
val bridgingHeaderVarName = bridgingHeaderName(name)
writer.write("// AUTOGENERATED FILE - DO NOT MODIFY!\n") writer.write("// AUTOGENERATED FILE - DO NOT MODIFY!\n")
writer.write("// This file generated by Djinni\n\n") writer.write("// This file generated by Djinni\n\n")
writer.write("// " + bridgingHeaderVarName + ".h\n")
writer.write("// " + bridgingHeaderVarName + "\n\n")
}
def writeBridgingVars(name: String, writer: Writer) {
val bridgingHeaderVarName = bridgingHeaderVariables(name)
writer.write("#import <Foundation/Foundation.h>\n\n")
writer.write("//! Project version number for " + bridgingHeaderVarName +".\n")
writer.write("FOUNDATION_EXPORT double " + bridgingHeaderVarName + "VersionNumber;\n\n")
writer.write("//! Project version string for " + bridgingHeaderVarName +".\n")
writer.write("FOUNDATION_EXPORT const unsigned char " + bridgingHeaderVarName + "VersionString[];\n\n")
} }
} }
\ No newline at end of file
...@@ -77,6 +77,7 @@ package object generatorTools { ...@@ -77,6 +77,7 @@ package object generatorTools {
objcppNamespace: String, objcppNamespace: String,
objcBaseLibIncludePrefix: String, objcBaseLibIncludePrefix: String,
objcSwiftBridgingHeaderWriter: Option[Writer], objcSwiftBridgingHeaderWriter: Option[Writer],
objcSwiftBridgingHeaderName: Option[String],
outFileListWriter: Option[Writer], outFileListWriter: Option[Writer],
skipGeneration: Boolean, skipGeneration: Boolean,
yamlOutFolder: Option[File], yamlOutFolder: Option[File],
...@@ -217,7 +218,8 @@ package object generatorTools { ...@@ -217,7 +218,8 @@ package object generatorTools {
new ObjcppGenerator(spec).generate(idl) new ObjcppGenerator(spec).generate(idl)
} }
if (spec.objcSwiftBridgingHeaderWriter.isDefined) { if (spec.objcSwiftBridgingHeaderWriter.isDefined) {
SwiftBridgingHeaderGenerator.writeAutogenerationWarning(spec.objcSwiftBridgingHeaderWriter.get) SwiftBridgingHeaderGenerator.writeAutogenerationWarning(spec.objcSwiftBridgingHeaderName.get, spec.objcSwiftBridgingHeaderWriter.get)
SwiftBridgingHeaderGenerator.writeBridgingVars(spec.objcSwiftBridgingHeaderName.get, spec.objcSwiftBridgingHeaderWriter.get)
new SwiftBridgingHeaderGenerator(spec).generate(idl) new SwiftBridgingHeaderGenerator(spec).generate(idl)
} }
if (spec.yamlOutFolder.isDefined) { if (spec.yamlOutFolder.isDefined) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment