diff options
author | Jakob Odersky <jodersky@gmail.com> | 2015-12-06 17:03:08 -0800 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2015-12-06 17:09:40 -0800 |
commit | e2505d1d9e2e49554057a8cd5fb71b0ac0e3ba63 (patch) | |
tree | f4fec79ba707aa9b2dec903d54a164f357961f19 /jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala | |
parent | 3e90312b3f2d912bf27e91b454a6ef21a81a2fc5 (diff) | |
download | sbt-jni-e2505d1d9e2e49554057a8cd5fb71b0ac0e3ba63.tar.gz sbt-jni-e2505d1d9e2e49554057a8cd5fb71b0ac0e3ba63.tar.bz2 sbt-jni-e2505d1d9e2e49554057a8cd5fb71b0ac0e3ba63.zip |
Use separate project for native libraries
Diffstat (limited to 'jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala')
-rw-r--r-- | jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala b/jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala new file mode 100644 index 0000000..97011ed --- /dev/null +++ b/jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala @@ -0,0 +1,49 @@ +package ch.jodersky.sbt.jni +package build + +import java.io.File +import sbt._ + +/** Native build tools relying on a standard 'configure && make && make install' process */ +trait ConfigureMakeInstall extends BuildToolApi { + + override def clean(baseDirectory: File, log: Logger) = Process("make clean", baseDirectory) ! log + + def configure(baseDirectory: File, buildDirectory: File, targetDirectory: File): ProcessBuilder + + def make(baseDirectory: File, buildDirectory: File, targetDirectory: File): ProcessBuilder = Process("make", buildDirectory) + + def install(baseDirectory: File, buildDirectory: File, targetDirectory: File): ProcessBuilder = Process("make install", buildDirectory) + + override def library( + baseDirectory: File, + buildDirectory: File, + targetDirectory: File, + log: Logger + ): File = { + + val ev = ( + configure(baseDirectory, buildDirectory, targetDirectory) #&& + make(baseDirectory, buildDirectory, targetDirectory) #&& + install(baseDirectory, buildDirectory, targetDirectory) + ) ! log + + if (ev != 0) sys.error(s"Building native library failed. Exit code: ${ev}") + + val products: List[File] = (targetDirectory ** ("*" -- "*.la")).get.filter(_.isFile).toList + + //only one produced library is expected + products match { + case Nil => + sys.error("No files were created during compilation, " + + "something went wrong with the autotools configuration.") + case head :: Nil => + head + case head :: tail => + log.warn("More than one file was created during compilation, " + + s"only the first one (${head.getAbsolutePath}) will be used.") + head + } + } +} + |