djinni icon indicating copy to clipboard operation
djinni copied to clipboard

Please add a section to the README explaining how to install djinni

Open jfirebaugh opened this issue 7 years ago • 4 comments

The README doesn't indicate how to obtain, install, or build djinni from source. I recommend you include a section in the README that describes the best way to install djinni, including any prerequisites such as a Java runtime. This will reduce the friction for potential new users.

For example, I have not been successful in using it. I poked around using guesswork, but ran into issues.

  1. I cloned the repository, created a simple .djinni file, and tried to use src/run:
    $ src/run --idl test.djinni 
    src/run: line 17: /Users/john/Development/djinni/src
    /Users/john/Development/djinni/src/build: No such file or directory
    
  2. Okay, I guess I need to build it first? Let's try make:
    $ make djinni
    cd src && ./build
    /Users/john/Development/djinni/src
    Building Djinni...
    No Java runtime present, requesting install.
    make: *** [djinni] Error 1
    
  3. Okay, I need a Java runtime. I ran brew install caskroom/cask/java.
  4. Try make again:
    $ make djinni
    cd src && ./build
    /Users/john/Development/djinni/src
    Building Djinni...
    Getting org.scala-sbt sbt 0.13.5 ...
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by org.apache.ivy.util.url.IvyAuthenticator (file:/Users/john/Development/djinni/src/support/sbt-launch.jar) to field java.net.Authenticator.theAuthenticator
    WARNING: Please consider reporting this to the maintainers of org.apache.ivy.util.url.IvyAuthenticator
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.5/jars/sbt.jar ...
    [snip]
        :: retrieving :: org.scala-sbt#boot-scala
    	confs: [default]
    	5 artifacts copied, 0 already retrieved (24459kB/34ms)
    error: error while loading package, Missing dependency 'object java.lang.Object in compiler mirror', required by /Users/john/.sbt/boot/scala-2.10.4/lib/scala-library.jar(scala/package.class)
    error: error while loading package, Missing dependency 'object java.lang.Object in compiler mirror', required by /Users/john/.sbt/boot/scala-2.10.4/lib/scala-library.jar(scala/runtime/package.class)
    scala.reflect.internal.MissingRequirementError: object java.lang.Object in compiler mirror not found.
    	at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:16)
    	at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:17)
    	at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48)
    	at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:40)
    	at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:40)
    	at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:61)
    	at scala.reflect.internal.Mirrors$RootsBase.getClassByName(Mirrors.scala:99)
    	at scala.reflect.internal.Mirrors$RootsBase.getRequiredClass(Mirrors.scala:102)
    	at scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass$lzycompute(Definitions.scala:264)
    	at scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass(Definitions.scala:264)
    	at scala.reflect.internal.Definitions$DefinitionsClass.AnyRefClass$lzycompute(Definitions.scala:263)
    	at scala.reflect.internal.Definitions$DefinitionsClass.AnyRefClass(Definitions.scala:263)
    	at scala.reflect.internal.Definitions$DefinitionsClass.specialPolyClass(Definitions.scala:1120)
    	at scala.reflect.internal.Definitions$DefinitionsClass.RepeatedParamClass$lzycompute(Definitions.scala:407)
    	at scala.reflect.internal.Definitions$DefinitionsClass.RepeatedParamClass(Definitions.scala:407)
    	at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses$lzycompute(Definitions.scala:1154)
    	at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses(Definitions.scala:1152)
    	at scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode$lzycompute(Definitions.scala:1196)
    	at scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode(Definitions.scala:1196)
    	at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1261)
    	at scala.tools.nsc.Global$Run.<init>(Global.scala:1290)
    	at sbt.compiler.Eval$$anon$1.<init>(Eval.scala:124)
    	at sbt.compiler.Eval.run$lzycompute$1(Eval.scala:124)
    	at sbt.compiler.Eval.run$1(Eval.scala:124)
    	at sbt.compiler.Eval.unlinkAll$1(Eval.scala:127)
    	at sbt.compiler.Eval.evalCommon(Eval.scala:136)
    	at sbt.compiler.Eval.eval(Eval.scala:86)
    	at sbt.EvaluateConfigurations$.evaluateSetting(EvaluateConfigurations.scala:144)
    	at sbt.EvaluateConfigurations$$anonfun$9.apply(EvaluateConfigurations.scala:106)
    	at sbt.EvaluateConfigurations$$anonfun$9.apply(EvaluateConfigurations.scala:105)
    	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    	at scala.collection.immutable.List.foreach(List.scala:318)
    	at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    	at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    	at sbt.EvaluateConfigurations$.evaluateSbtFile(EvaluateConfigurations.scala:105)
    	at sbt.Load$.sbt$Load$$loadSettingsFile$1(Load.scala:507)
    	at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile$1$1.apply(Load.scala:502)
    	at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile$1$1.apply(Load.scala:501)
    	at scala.Option.getOrElse(Option.scala:120)
    	at sbt.Load$.sbt$Load$$memoLoadSettingsFile$1(Load.scala:501)
    	at sbt.Load$$anonfun$loadSettings$1$2.apply(Load.scala:500)
    	at sbt.Load$$anonfun$loadSettings$1$2.apply(Load.scala:500)
    	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    	at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    	at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
    	at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    	at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    	at sbt.Load$.loadSettings$1(Load.scala:500)
    	at sbt.Load$.sbt$Load$$expand$1(Load.scala:523)
    	at sbt.Load$.loadSettings(Load.scala:528)
    	at sbt.Load$.sbt$Load$$loadSbtFiles$1(Load.scala:464)
    	at sbt.Load$.defaultLoad$1(Load.scala:475)
    	at sbt.Load$.loadTransitive(Load.scala:478)
    	at sbt.Load$.loadProjects$1(Load.scala:418)
    	at sbt.Load$.loadUnit(Load.scala:419)
    	at sbt.Load$$anonfun$15$$anonfun$apply$11.apply(Load.scala:256)
    	at sbt.Load$$anonfun$15$$anonfun$apply$11.apply(Load.scala:256)
    	at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:93)
    	at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:92)
    	at sbt.BuildLoader.apply(BuildLoader.scala:143)
    	at sbt.Load$.loadAll(Load.scala:312)
    	at sbt.Load$.loadURI(Load.scala:264)
    	at sbt.Load$.load(Load.scala:260)
    	at sbt.Load$.load(Load.scala:251)
    	at sbt.Load$.apply(Load.scala:134)
    	at sbt.Load$.buildPluginDefinition(Load.scala:613)
    	at sbt.Load$.buildPlugins(Load.scala:579)
    	at sbt.Load$.plugins(Load.scala:567)
    	at sbt.Load$.loadUnit(Load.scala:411)
    	at sbt.Load$$anonfun$15$$anonfun$apply$11.apply(Load.scala:256)
    	at sbt.Load$$anonfun$15$$anonfun$apply$11.apply(Load.scala:256)
    	at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:93)
    	at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:92)
    	at sbt.BuildLoader.apply(BuildLoader.scala:143)
    	at sbt.Load$.loadAll(Load.scala:312)
    	at sbt.Load$.loadURI(Load.scala:264)
    	at sbt.Load$.load(Load.scala:260)
    	at sbt.Load$.load(Load.scala:251)
    	at sbt.Load$.apply(Load.scala:134)
    	at sbt.Load$.defaultLoad(Load.scala:37)
    	at sbt.BuiltinCommands$.doLoadProject(Main.scala:473)
    	at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:467)
    	at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:467)
    	at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:60)
    	at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:60)
    	at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:62)
    	at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:62)
    	at sbt.Command$.process(Command.scala:95)
    	at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:100)
    	at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:100)
    	at sbt.State$$anon$1.process(State.scala:179)
    	at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:100)
    	at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:100)
    	at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    	at sbt.MainLoop$.next(MainLoop.scala:100)
    	at sbt.MainLoop$.run(MainLoop.scala:93)
    	at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:71)
    	at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:66)
    	at sbt.Using.apply(Using.scala:25)
    	at sbt.MainLoop$.runWithNewLog(MainLoop.scala:66)
    	at sbt.MainLoop$.runAndClearLast(MainLoop.scala:49)
    	at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:33)
    	at sbt.MainLoop$.runLogged(MainLoop.scala:25)
    	at sbt.StandardMain$.runManaged(Main.scala:57)
    	at sbt.xMain.run(Main.scala:29)
    	at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:57)
    	at xsbt.boot.Launch$.withContextLoader(Launch.scala:77)
    	at xsbt.boot.Launch$.run(Launch.scala:57)
    	at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:45)
    	at xsbt.boot.Launch$.launch(Launch.scala:65)
    	at xsbt.boot.Launch$.apply(Launch.scala:16)
    	at xsbt.boot.Boot$.runImpl(Boot.scala:32)
    	at xsbt.boot.Boot$.main(Boot.scala:21)
    	at xsbt.boot.Boot.main(Boot.scala)
    [error] scala.reflect.internal.MissingRequirementError: object java.lang.Object in compiler mirror not found.
    [error] Use 'last' for the full log.
    Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? r
    

If you have any specific suggestions for resolving the error I ran into, those are very welcome as well. Thank you!

jfirebaugh avatar Mar 08 '18 14:03 jfirebaugh

I think the issue I'm running into is that:

jfirebaugh avatar Mar 08 '18 15:03 jfirebaugh

Sorry, SBT has always been a bit of black magic, which pre-dates my time as maintainer, so I've always done my best not to mess with it. Now that you've debugged the issue I wouldn't mind a PR to update the SBT version. Looks like JDK 9 compatibility might require upgrading the Scala version too, based on the link you shared.

artwyman avatar Mar 08 '18 23:03 artwyman

Yeah, I got it working eventually and can submit a PR once Mapbox legal signs off on the CLA.

jfirebaugh avatar Mar 08 '18 23:03 jfirebaugh

Great, thanks.

artwyman avatar Mar 08 '18 23:03 artwyman