On 9/16/16 5:07 PM, Patrick Pelletier wrote:
I'm not quite sure how it's supposed to know that the Frege-generated Java files are in src/frege, so I tried adding:

    sourceSets {
        main {
            java.srcDirs.add 'src/frege'
        }
    }

but that didn't seem to do anything.

Well, this was me not understanding Gradle/Groovy. It turns out the correct incantation was:

    sourceSets {
        main {
            java.srcDirs += 'src/frege'
        }
    }

With this change, it worked! I now have a successful example of an Android app that calls Frege code. It is available at this point in my repository:

https://github.com/ppelleti/frege-on-android/tree/3e4685f078cdce3f8b704b779d0b05e72d6cffe6

However, I didn't want to leave it there. I wanted my Frege code to be able to call the Android API. So, I took a look at the FregeAndroid repository:

https://github.com/trilogysci/FregeAndroid
http://permalink.gmane.org/gmane.comp.lang.frege.general/177

It doesn't have any build instructions, so I just added it as a submodule of my repository, and added code to my build.gradle to build FregeAndroid along with my own Frege code:

project.afterEvaluate {
    extensions.compileFrege = {
        mkdir 'src/frege'
        description = 'Compile Frege to Java'
        def tree = fileTree(dir: 'FregeAndroid/src', include: '**/*.fr')
        tree += fileTree(dir: 'src/main/frege', include: '**/*.fr')
        tree.each { file ->
            javaexec {
                configurations.compile.resolve().each {
                    //println it.toString()
                    classpath += files(it.toString())
                }
                main = 'frege.compiler.Main'
args '-inline', '-d', 'src/frege', '-make', '-sp', 'src/main/frege', "$file.path"
            }
        }
//        delete fileTree('src/frege') {
//            include '**/*.java'
//        }
    }

Although I'm still sketchy on Groovy, I think this is doing what I want, in terms of trying to build the FregeAndroid files. However, the files don't actually build. I get:

:compileDebugJavaWithJavac
E /Users/ppelleti/programming/android/example/FregeAndroid/src/frege/android/animation/TimeInterpolator.fr:4: `android.animation.TimeInterpolator` is not a known java class Android.animation.TimeInterpolator: build failed because of compilation errors.
Build failed.
runtime 2.801 wallclock seconds.
:compileDebugJavaWithJavac FAILED

FAILURE: Build failed with an exception.

So, I think the problem is that the Frege compiler isn't seeing the Android API classes. I guess I need to somehow put the Android API on the Frege compiler's classpath? I'll look into this, but I wanted to post what I have so far, in case anyone has any ideas:

https://github.com/ppelleti/frege-on-android/tree/f92becc38c23129ea0e424909e96354fb8ceea2e

Thanks,

--Patrick


--
You received this message because you are subscribed to the Google Groups "Frege 
Programming Language" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to frege-programming-language+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to