diff options
author | Jakob Odersky <jodersky@gmail.com> | 2015-12-04 20:50:53 -0800 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2015-12-04 20:50:53 -0800 |
commit | 3e90312b3f2d912bf27e91b454a6ef21a81a2fc5 (patch) | |
tree | af6ad597f45934684f67a2864fbef471fe6851f0 /jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala | |
download | sbt-jni-3e90312b3f2d912bf27e91b454a6ef21a81a2fc5.tar.gz sbt-jni-3e90312b3f2d912bf27e91b454a6ef21a81a2fc5.tar.bz2 sbt-jni-3e90312b3f2d912bf27e91b454a6ef21a81a2fc5.zip |
initial commitv0.1
Diffstat (limited to 'jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala')
-rw-r--r-- | jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala b/jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala new file mode 100644 index 0000000..cd0b363 --- /dev/null +++ b/jni-plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala @@ -0,0 +1,60 @@ +package ch.jodersky.sbt.jni +package build + +import Keys._ +import sbt._ +import sbt.Keys._ +import sbt.Logger +import java.io.File + + +object CMake extends BuildTool { + + val name = "CMake" + + def detect(baseDirectory: File) = baseDirectory.list().contains("CMakeLists.txt") + + object api extends BuildToolApi { + + def clean(baseDirectory: File, log: Logger) = Process("make clean", baseDirectory) ! log + + def library( + baseDirectory: File, + targetDirectory: File, + log: Logger + ): File = { + val out = targetDirectory + val outPath = out.getAbsolutePath + + val configure = Process( + //Disable producing versioned library files, not needed for fat jars. + s"cmake -DCMAKE_INSTALL_PREFIX:PATH=$outPath -DLIB_INSTALL_DIR:PATH=$outPath -DENABLE_VERSIONED_LIB:BOOLEAN=OFF", + baseDirectory + ) + + val make = Process("make", baseDirectory) + + val makeInstall = Process("make install", baseDirectory) + + val ev = configure #&& make #&& makeInstall ! log + if (ev != 0) sys.error(s"Building native library failed. Exit code: ${ev}") + + val products: List[File] = (out ** ("*" -- "*.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 + } + } + } + +} + |