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!
// 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 "TXSSortOrder.h"
#import "TXSSortItems.h"
......
......@@ -69,7 +69,7 @@ object Main {
var objcTypePrefix: String = ""
var objcIncludePrefix: String = ""
var objcExtendedRecordIncludePrefix: String = ""
var objcSwiftBridgingHeader: Option[String] = None
var objcSwiftBridgingHeaderName: Option[String] = None
var objcppIncludePrefix: String = ""
var objcppIncludeCppPrefix: String = ""
var objcppIncludeObjcPrefixOptional: Option[String] = None
......@@ -168,7 +168,7 @@ object Main {
.text("The prefix for Objective-C data types (usually two or three letters)")
opt[String]("objc-include-prefix").valueName("<prefix>").foreach(objcIncludePrefix = _)
.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.")
note("")
opt[File]("objcpp-out").valueName("<out-folder>").foreach(x => objcppOutFolder = Some(x))
......@@ -288,8 +288,8 @@ object Main {
} else {
None
}
val objcSwiftBridgingHeaderWriter = if (objcSwiftBridgingHeader.isDefined && objcOutFolder.isDefined) {
val objcSwiftBridgingHeaderFile = new File(objcOutFolder.get.getPath, objcSwiftBridgingHeader.get + ".h")
val objcSwiftBridgingHeaderWriter = if (objcSwiftBridgingHeaderName.isDefined && objcOutFolder.isDefined) {
val objcSwiftBridgingHeaderFile = new File(objcOutFolder.get.getPath, objcSwiftBridgingHeaderName.get + ".h")
if (objcSwiftBridgingHeaderFile.getParentFile != null)
createFolder("output file list", objcSwiftBridgingHeaderFile.getParentFile)
Some(new BufferedWriter(new FileWriter(objcSwiftBridgingHeaderFile)))
......@@ -346,6 +346,7 @@ object Main {
objcppNamespace,
objcBaseLibIncludePrefix,
objcSwiftBridgingHeaderWriter,
objcSwiftBridgingHeaderName,
outFileListWriter,
skipGeneration,
yamlOutFolder,
......
......@@ -38,8 +38,24 @@ class SwiftBridgingHeaderGenerator(spec: Spec) extends Generator(spec) {
}
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("// 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 {
objcppNamespace: String,
objcBaseLibIncludePrefix: String,
objcSwiftBridgingHeaderWriter: Option[Writer],
objcSwiftBridgingHeaderName: Option[String],
outFileListWriter: Option[Writer],
skipGeneration: Boolean,
yamlOutFolder: Option[File],
......@@ -217,7 +218,8 @@ package object generatorTools {
new ObjcppGenerator(spec).generate(idl)
}
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)
}
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