Commit 3af13bb4 authored by Iulia Tamas's avatar Iulia Tamas Committed by Jacob Potter

Command line arguments for Input and Output files printing.

Added support for command line arguments that request that the input
(dependencies) files are printed out, or that the output (to-be-generated)
files are printed out.
parent f46e20e4
......@@ -8,7 +8,7 @@
</extension>
<option name="MAIN_CLASS_NAME" value="djinni.Main" />
<option name="VM_PARAMETERS" value="" />
<option name="PROGRAM_PARAMETERS" value="--java-out ../test-suite/djinni-output-temp/java --java-package com.dropbox.djinni.test --ident-java-field mFooBar --cpp-out ../test-suite/djinni-output-temp/cpp --ident-cpp-enum-type foo_bar --cpp-optional-template std::experimental::optional --cpp-optional-header &lt;experimental/optional&gt; --jni-out ../test-suite/djinni-output-temp/jni --ident-jni-class NativeFooBar --ident-jni-file NativeFooBar --objc-out ../test-suite/djinni-output-temp/objc --objcpp-out ../test-suite/djinni-output-temp/objc --objc-type-prefix DB --idl ../test-suite/djinni/all.djinni" />
<option name="PROGRAM_PARAMETERS" value="--java-out ../test-suite/djinni-output-temp/java --java-package com.dropbox.djinni.test --ident-java-field mFooBar --cpp-out ../test-suite/djinni-output-temp/cpp --ident-cpp-enum-type foo_bar --cpp-optional-template std::experimental::optional --cpp-optional-header &lt;experimental/optional&gt; --jni-out ../test-suite/djinni-output-temp/jni --ident-jni-class NativeFooBar --ident-jni-file NativeFooBar --objc-out ../test-suite/djinni-output-temp/objc --objcpp-out ../test-suite/djinni-output-temp/objc --objc-type-prefix DB --idl ../test-suite/djinni/all.djinni --list-out-files ../test-suite/generated-src/outFileList.txt --list-in-files ../test-suite/generated-src/inFileList.txt" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" value="" />
......
......@@ -16,7 +16,7 @@
package djinni
import java.io.{IOException, FileInputStream, InputStreamReader, File}
import java.io.{IOException, FileInputStream, InputStreamReader, File, BufferedWriter, FileWriter}
import djinni.generatorTools._
......@@ -65,6 +65,9 @@ object Main {
var objcFileIdentStyleOptional: Option[IdentConverter] = None
var objcppNamespace: String = "djinni_generated"
var objcBaseLibIncludePrefix: String = ""
var inFileListPath: Option[File] = None
var outFileListPath: Option[File] = None
var skipGeneration: Boolean = false
val argParser = new scopt.OptionParser[Unit]("djinni") {
......@@ -150,6 +153,12 @@ object Main {
.text("The namespace name to use for generated Objective-C++ classes.")
opt[String]("objc-base-lib-include-prefix").valueName("...").foreach(x => objcBaseLibIncludePrefix = x)
.text("The Objective-C++ base library's include path, relative to the Objective-C++ classes.")
opt[File]("list-in-files").valueName("<list-in-files>").foreach(x => inFileListPath = Some(x))
.text("Optional file in which to write the list of input files parsed.")
opt[File]("list-out-files").valueName("<list-out-files>").foreach(x => outFileListPath = Some(x))
.text("Optional file in which to write the list of output files produced.")
opt[Boolean]("skip-generation").valueName("<true/false>").foreach(x => skipGeneration = x)
.text("Way of specifying if file generation should be skipped (default: false)")
note("\nIdentifier styles (ex: \"FooBar\", \"fooBar\", \"foo_bar\", \"FOO_BAR\", \"m_fooBar\")\n")
identStyle("ident-java-enum", c => { javaIdentStyle = javaIdentStyle.copy(enum = c) })
......@@ -196,14 +205,24 @@ object Main {
// Parse IDL file.
System.out.println("Parsing...")
val inFileListWriter = if (inFileListPath.isDefined) {
Some(new BufferedWriter(new FileWriter(inFileListPath.get)))
} else {
None
}
val idl = try {
(new Parser).parseFile(idlFile)
(new Parser).parseFile(idlFile, inFileListWriter)
}
catch {
case ex: IOException =>
System.err.println("Error reading from --idl file: " + ex.getMessage)
System.exit(1); return
}
finally {
if (inFileListWriter.isDefined) {
inFileListWriter.get.close()
}
}
// Resolve names in IDL file, check types.
System.out.println("Resolving...")
......@@ -214,6 +233,13 @@ object Main {
case _ =>
}
System.out.println("Generating...")
val outFileListWriter = if (outFileListPath.isDefined) {
Some(new BufferedWriter(new FileWriter(outFileListPath.get)))
} else {
None
}
val outSpec = Spec(
javaOutFolder,
javaPackage,
......@@ -252,10 +278,19 @@ object Main {
objcppIncludeCppPrefix,
objcppIncludeObjcPrefix,
objcppNamespace,
objcBaseLibIncludePrefix)
objcBaseLibIncludePrefix,
outFileListWriter,
skipGeneration)
System.out.println("Generating...")
val r = generate(idl, outSpec)
r.foreach(e => System.err.println("Error generating output: " + e))
try {
val r = generate(idl, outSpec)
r.foreach(e => System.err.println("Error generating output: " + e))
}
finally {
if (outFileListWriter.isDefined) {
outFileListWriter.get.close()
}
}
}
}
......@@ -17,7 +17,7 @@
package djinni
import djinni.ast._
import java.io.{OutputStreamWriter, FileOutputStream, File}
import java.io._
import djinni.generatorTools._
import djinni.meta._
import djinni.syntax.Error
......@@ -65,7 +65,9 @@ package object generatorTools {
objcppIncludeCppPrefix: String,
objcppIncludeObjcPrefix: String,
objcppNamespace: String,
objcBaseLibIncludePrefix: String)
objcBaseLibIncludePrefix: String,
outFileListWriter: Option[Writer],
skipGeneration: Boolean)
def preComma(s: String) = {
if (s.isEmpty) s else ", " + s
......@@ -155,25 +157,35 @@ package object generatorTools {
def generate(idl: Seq[TypeDecl], spec: Spec): Option[String] = {
try {
if (spec.cppOutFolder.isDefined) {
createFolder("C++", spec.cppOutFolder.get)
createFolder("C++ header", spec.cppHeaderOutFolder.get)
if (!spec.skipGeneration) {
createFolder("C++", spec.cppOutFolder.get)
createFolder("C++ header", spec.cppHeaderOutFolder.get)
}
new CppGenerator(spec).generate(idl)
}
if (spec.javaOutFolder.isDefined) {
createFolder("Java", spec.javaOutFolder.get)
if (!spec.skipGeneration) {
createFolder("Java", spec.javaOutFolder.get)
}
new JavaGenerator(spec).generate(idl)
}
if (spec.jniOutFolder.isDefined) {
createFolder("JNI C++", spec.jniOutFolder.get)
createFolder("JNI C++ header", spec.jniHeaderOutFolder.get)
if (!spec.skipGeneration) {
createFolder("JNI C++", spec.jniOutFolder.get)
createFolder("JNI C++ header", spec.jniHeaderOutFolder.get)
}
new JNIGenerator(spec).generate(idl)
}
if (spec.objcOutFolder.isDefined) {
createFolder("Objective-C", spec.objcOutFolder.get)
if (!spec.skipGeneration) {
createFolder("Objective-C", spec.objcOutFolder.get)
}
new ObjcGenerator(spec).generate(idl)
}
if (spec.objcppOutFolder.isDefined) {
createFolder("Objective-C++", spec.objcppOutFolder.get)
if (!spec.skipGeneration) {
createFolder("Objective-C++", spec.objcppOutFolder.get)
}
new ObjcppGenerator(spec).generate(idl)
}
None
......@@ -190,10 +202,16 @@ package object generatorTools {
abstract class Generator(spec: Spec)
{
protected val writtenFiles = mutable.HashMap[String,String]()
protected def createFile(folder: File, fileName: String, f: IndentWriter => Unit) {
if (spec.outFileListWriter.isDefined) {
spec.outFileListWriter.get.write(new File(folder, fileName).getPath + "\n")
}
if (spec.skipGeneration) {
return
}
val file = new File(folder, fileName)
val cp = file.getCanonicalPath
writtenFiles.put(cp.toLowerCase, cp) match {
......@@ -206,15 +224,15 @@ abstract class Generator(spec: Spec)
case _ =>
}
val fout = new FileOutputStream(file)
try {
val out = new OutputStreamWriter(fout, "UTF-8")
f(new IndentWriter(out))
out.flush()
}
finally {
fout.close()
}
val fout = new FileOutputStream(file)
try {
val out = new OutputStreamWriter(fout, "UTF-8")
f(new IndentWriter(out))
out.flush()
}
finally {
fout.close()
}
}
implicit def identToString(ident: Ident): String = ident.name
......
......@@ -16,7 +16,7 @@
package djinni
import java.io.{File, InputStreamReader, FileInputStream}
import java.io.{File, InputStreamReader, FileInputStream, Writer}
import djinni.ast.Interface.Method
import djinni.ast.Record.DerivingType.DerivingType
......@@ -206,7 +206,11 @@ def parse(origin: String, in: java.io.Reader): Either[Error,IdlFile] = {
}
}
def parseFile(idlFile: File): Seq[TypeDecl] = {
def parseFile(idlFile: File, inFileListWriter: Option[Writer]): Seq[TypeDecl] = {
if (inFileListWriter.isDefined) {
inFileListWriter.get.write(idlFile + "\n")
}
visitedFiles.add(idlFile)
fileStack.push(idlFile)
val fin = new FileInputStream(idlFile)
......@@ -222,7 +226,7 @@ def parseFile(idlFile: File): Seq[TypeDecl] = {
throw new AssertionError("Circular import detected!")
}
if (!visitedFiles.contains(x)) {
types = parseFile(x) ++ types
types = parseFile(x, inFileListWriter) ++ types
}
})
types
......
../test-suite/djinni/all.djinni
../test-suite/djinni/set.djinni
../test-suite/djinni/derivings.djinni
../test-suite/djinni/nested_collection.djinni
../test-suite/djinni/map.djinni
../test-suite/djinni/primitive_list.djinni
../test-suite/djinni/exception.djinni
../test-suite/djinni/client_interface.djinni
../test-suite/djinni/enum.djinni
../test-suite/djinni/token.djinni
../test-suite/djinni/test.djinni
../test-suite/djinni/primtypes.djinni
../test-suite/djinni/constants.djinni
../test-suite/djinni/date.djinni
../test-suite/djinni-output-temp/cpp/date_record.hpp
../test-suite/djinni-output-temp/cpp/map_date_record.hpp
../test-suite/djinni-output-temp/cpp/constants.hpp
../test-suite/djinni-output-temp/cpp/constants.cpp
../test-suite/djinni-output-temp/cpp/constants_interface.hpp
../test-suite/djinni-output-temp/cpp/constants_interface.cpp
../test-suite/djinni-output-temp/cpp/assorted_primitives.hpp
../test-suite/djinni-output-temp/cpp/assorted_primitives.cpp
../test-suite/djinni-output-temp/cpp/test_helpers.hpp
../test-suite/djinni-output-temp/cpp/token.hpp
../test-suite/djinni-output-temp/cpp/color.hpp
../test-suite/djinni-output-temp/cpp/client_returned_record.hpp
../test-suite/djinni-output-temp/cpp/client_interface.hpp
../test-suite/djinni-output-temp/cpp/cpp_exception.hpp
../test-suite/djinni-output-temp/cpp/primitive_list.hpp
../test-suite/djinni-output-temp/cpp/map_record.hpp
../test-suite/djinni-output-temp/cpp/map_list_record.hpp
../test-suite/djinni-output-temp/cpp/nested_collection.hpp
../test-suite/djinni-output-temp/cpp/record_with_derivings.hpp
../test-suite/djinni-output-temp/cpp/record_with_derivings.cpp
../test-suite/djinni-output-temp/cpp/record_with_nested_derivings.hpp
../test-suite/djinni-output-temp/cpp/record_with_nested_derivings.cpp
../test-suite/djinni-output-temp/cpp/set_record.hpp
../test-suite/djinni-output-temp/java/DateRecord.java
../test-suite/djinni-output-temp/java/MapDateRecord.java
../test-suite/djinni-output-temp/java/Constants.java
../test-suite/djinni-output-temp/java/ConstantsInterface.java
../test-suite/djinni-output-temp/java/AssortedPrimitives.java
../test-suite/djinni-output-temp/java/TestHelpers.java
../test-suite/djinni-output-temp/java/Token.java
../test-suite/djinni-output-temp/java/Color.java
../test-suite/djinni-output-temp/java/ClientReturnedRecord.java
../test-suite/djinni-output-temp/java/ClientInterface.java
../test-suite/djinni-output-temp/java/CppException.java
../test-suite/djinni-output-temp/java/PrimitiveList.java
../test-suite/djinni-output-temp/java/MapRecord.java
../test-suite/djinni-output-temp/java/MapListRecord.java
../test-suite/djinni-output-temp/java/NestedCollection.java
../test-suite/djinni-output-temp/java/RecordWithDerivings.java
../test-suite/djinni-output-temp/java/RecordWithNestedDerivings.java
../test-suite/djinni-output-temp/java/SetRecord.java
../test-suite/djinni-output-temp/jni/NativeDateRecord.hpp
../test-suite/djinni-output-temp/jni/NativeDateRecord.cpp
../test-suite/djinni-output-temp/jni/NativeMapDateRecord.hpp
../test-suite/djinni-output-temp/jni/NativeMapDateRecord.cpp
../test-suite/djinni-output-temp/jni/NativeConstants.hpp
../test-suite/djinni-output-temp/jni/NativeConstants.cpp
../test-suite/djinni-output-temp/jni/NativeConstantsInterface.hpp
../test-suite/djinni-output-temp/jni/NativeConstantsInterface.cpp
../test-suite/djinni-output-temp/jni/NativeAssortedPrimitives.hpp
../test-suite/djinni-output-temp/jni/NativeAssortedPrimitives.cpp
../test-suite/djinni-output-temp/jni/NativeTestHelpers.hpp
../test-suite/djinni-output-temp/jni/NativeTestHelpers.cpp
../test-suite/djinni-output-temp/jni/NativeToken.hpp
../test-suite/djinni-output-temp/jni/NativeToken.cpp
../test-suite/djinni-output-temp/jni/NativeColor.hpp
../test-suite/djinni-output-temp/jni/NativeClientReturnedRecord.hpp
../test-suite/djinni-output-temp/jni/NativeClientReturnedRecord.cpp
../test-suite/djinni-output-temp/jni/NativeClientInterface.hpp
../test-suite/djinni-output-temp/jni/NativeClientInterface.cpp
../test-suite/djinni-output-temp/jni/NativeCppException.hpp
../test-suite/djinni-output-temp/jni/NativeCppException.cpp
../test-suite/djinni-output-temp/jni/NativePrimitiveList.hpp
../test-suite/djinni-output-temp/jni/NativePrimitiveList.cpp
../test-suite/djinni-output-temp/jni/NativeMapRecord.hpp
../test-suite/djinni-output-temp/jni/NativeMapRecord.cpp
../test-suite/djinni-output-temp/jni/NativeMapListRecord.hpp
../test-suite/djinni-output-temp/jni/NativeMapListRecord.cpp
../test-suite/djinni-output-temp/jni/NativeNestedCollection.hpp
../test-suite/djinni-output-temp/jni/NativeNestedCollection.cpp
../test-suite/djinni-output-temp/jni/NativeRecordWithDerivings.hpp
../test-suite/djinni-output-temp/jni/NativeRecordWithDerivings.cpp
../test-suite/djinni-output-temp/jni/NativeRecordWithNestedDerivings.hpp
../test-suite/djinni-output-temp/jni/NativeRecordWithNestedDerivings.cpp
../test-suite/djinni-output-temp/jni/NativeSetRecord.hpp
../test-suite/djinni-output-temp/jni/NativeSetRecord.cpp
../test-suite/djinni-output-temp/objc/DBDateRecord.h
../test-suite/djinni-output-temp/objc/DBDateRecord.mm
../test-suite/djinni-output-temp/objc/DBMapDateRecord.h
../test-suite/djinni-output-temp/objc/DBMapDateRecord.mm
../test-suite/djinni-output-temp/objc/DBConstants.h
../test-suite/djinni-output-temp/objc/DBConstants.mm
../test-suite/djinni-output-temp/objc/DBConstantsInterface.h
../test-suite/djinni-output-temp/objc/DBConstantsInterface.mm
../test-suite/djinni-output-temp/objc/DBAssortedPrimitives.h
../test-suite/djinni-output-temp/objc/DBAssortedPrimitives.mm
../test-suite/djinni-output-temp/objc/DBTestHelpers.h
../test-suite/djinni-output-temp/objc/DBToken.h
../test-suite/djinni-output-temp/objc/DBColor.h
../test-suite/djinni-output-temp/objc/DBClientReturnedRecord.h
../test-suite/djinni-output-temp/objc/DBClientReturnedRecord.mm
../test-suite/djinni-output-temp/objc/DBClientInterface.h
../test-suite/djinni-output-temp/objc/DBCppException.h
../test-suite/djinni-output-temp/objc/DBPrimitiveList.h
../test-suite/djinni-output-temp/objc/DBPrimitiveList.mm
../test-suite/djinni-output-temp/objc/DBMapRecord.h
../test-suite/djinni-output-temp/objc/DBMapRecord.mm
../test-suite/djinni-output-temp/objc/DBMapListRecord.h
../test-suite/djinni-output-temp/objc/DBMapListRecord.mm
../test-suite/djinni-output-temp/objc/DBNestedCollection.h
../test-suite/djinni-output-temp/objc/DBNestedCollection.mm
../test-suite/djinni-output-temp/objc/DBRecordWithDerivings.h
../test-suite/djinni-output-temp/objc/DBRecordWithDerivings.mm
../test-suite/djinni-output-temp/objc/DBRecordWithNestedDerivings.h
../test-suite/djinni-output-temp/objc/DBRecordWithNestedDerivings.mm
../test-suite/djinni-output-temp/objc/DBSetRecord.h
../test-suite/djinni-output-temp/objc/DBSetRecord.mm
../test-suite/djinni-output-temp/objc/DBDateRecord+Private.h
../test-suite/djinni-output-temp/objc/DBDateRecord+Private.mm
../test-suite/djinni-output-temp/objc/DBMapDateRecord+Private.h
../test-suite/djinni-output-temp/objc/DBMapDateRecord+Private.mm
../test-suite/djinni-output-temp/objc/DBConstants+Private.h
../test-suite/djinni-output-temp/objc/DBConstants+Private.mm
../test-suite/djinni-output-temp/objc/DBConstantsInterface+Private.h
../test-suite/djinni-output-temp/objc/DBConstantsInterface+Private.mm
../test-suite/djinni-output-temp/objc/DBAssortedPrimitives+Private.h
../test-suite/djinni-output-temp/objc/DBAssortedPrimitives+Private.mm
../test-suite/djinni-output-temp/objc/DBTestHelpers+Private.h
../test-suite/djinni-output-temp/objc/DBTestHelpers+Private.mm
../test-suite/djinni-output-temp/objc/DBToken+Private.h
../test-suite/djinni-output-temp/objc/DBToken+Private.mm
../test-suite/djinni-output-temp/objc/DBClientReturnedRecord+Private.h
../test-suite/djinni-output-temp/objc/DBClientReturnedRecord+Private.mm
../test-suite/djinni-output-temp/objc/DBClientInterface+Private.h
../test-suite/djinni-output-temp/objc/DBClientInterface+Private.mm
../test-suite/djinni-output-temp/objc/DBCppException+Private.h
../test-suite/djinni-output-temp/objc/DBCppException+Private.mm
../test-suite/djinni-output-temp/objc/DBPrimitiveList+Private.h
../test-suite/djinni-output-temp/objc/DBPrimitiveList+Private.mm
../test-suite/djinni-output-temp/objc/DBMapRecord+Private.h
../test-suite/djinni-output-temp/objc/DBMapRecord+Private.mm
../test-suite/djinni-output-temp/objc/DBMapListRecord+Private.h
../test-suite/djinni-output-temp/objc/DBMapListRecord+Private.mm
../test-suite/djinni-output-temp/objc/DBNestedCollection+Private.h
../test-suite/djinni-output-temp/objc/DBNestedCollection+Private.mm
../test-suite/djinni-output-temp/objc/DBRecordWithDerivings+Private.h
../test-suite/djinni-output-temp/objc/DBRecordWithDerivings+Private.mm
../test-suite/djinni-output-temp/objc/DBRecordWithNestedDerivings+Private.h
../test-suite/djinni-output-temp/objc/DBRecordWithNestedDerivings+Private.mm
../test-suite/djinni-output-temp/objc/DBSetRecord+Private.h
../test-suite/djinni-output-temp/objc/DBSetRecord+Private.mm
......@@ -16,7 +16,6 @@ done
base_dir=$(cd "`dirname "$loc"`" && pwd)
temp_out="$base_dir/djinni-output-temp"
in="$base_dir/djinni/all.djinni"
cpp_out="$base_dir/generated-src/cpp"
......@@ -48,8 +47,8 @@ fi
# Build Djinni.
"$base_dir/../src/build"
[ ! -e "$temp_out" ] || rm -r "$temp_out"
(cd "$base_dir" && \
"$base_dir/../src/run-assume-built" \
--java-out "$temp_out/java" \
--java-package $java_package \
......@@ -70,7 +69,10 @@ fi
--objcpp-out "$temp_out/objc" \
--objc-type-prefix DB \
\
--idl "$in"
--idl "$in" \
--list-in-files "./generated-src/inFileList.txt" \
--list-out-files "./generated-src/outFileList.txt"\
)
# Copy changes from "$temp_output" to final dir.
......
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