From 628debc2a1d04dc367e5e76858b754f1ddb6141f Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sun, 1 Nov 2015 21:07:12 -0800 Subject: Enable build for Cygwin --- flow-native/configure.ac | 15 +++++++++++++++ flow-native/src/Makefile.am | 8 +++++--- project/native.scala | 26 +++++++++++++++++++++++--- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/flow-native/configure.ac b/flow-native/configure.ac index 1b622c4..4841b67 100644 --- a/flow-native/configure.ac +++ b/flow-native/configure.ac @@ -43,6 +43,21 @@ AC_ARG_ENABLE([versioned-lib], AM_CONDITIONAL([ENABLE_VERSIONED_LIB], [test "$enable_versioned_lib" = "yes"]) +EXTRA_CFLAGS="" +EXTRA_LDFLAGS="" + +case "$host_os" in + cygwin*) + EXTRA_CFLAGS="-D __int64=int64_t" + EXTRA_LDFLAGS="-no-undefined" + ;; + *) + ;; +esac + +AC_SUBST([EXTRA_CFLAGS]) +AC_SUBST([EXTRA_LDFLAGS]) + AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([src/Makefile]) AC_OUTPUT diff --git a/flow-native/src/Makefile.am b/flow-native/src/Makefile.am index 9fefbd1..da5989f 100644 --- a/flow-native/src/Makefile.am +++ b/flow-native/src/Makefile.am @@ -3,7 +3,9 @@ lib_LTLIBRARIES = libflow3.la libflow3_la_SOURCES = flow_jni.c platform/posix/flow.c flow.h com_github_jodersky_flow_internal_NativeSerial.h if ENABLE_VERSIONED_LIB -libflow3_la_LDFLAGS = -version-info 0:1:0 +libflow3_la_LDFLAGS = -version-info 0:1:0 $(EXTRA_LDFLAGS) else -libflow3_la_LDFLAGS = -avoid-version -endif \ No newline at end of file +libflow3_la_LDFLAGS = -avoid-version $(EXTRA_LDFLAGS) +endif + +AM_CFLAGS = $(EXTRA_CFLAGS) diff --git a/project/native.scala b/project/native.scala index b6e4c19..5fb87ce 100644 --- a/project/native.scala +++ b/project/native.scala @@ -48,6 +48,26 @@ object NativeKeys { } +//windows, as usual, needs special treatment +object CygwinUtil { + + def onCygwin: Boolean = { + val uname = Process("uname").lines.headOption + uname map { + _.toLowerCase.startsWith("cygwin") + } getOrElse { + false + } + } + + def toUnixPath(path: String): String = if (onCygwin) { + Process(s"cygpath ${path}").lines.head + } else { + path + } + +} + /** Provides implementations of wrapper tasks suitable for projects using Autotools */ object Autotools { import NativeKeys._ @@ -64,14 +84,14 @@ object Autotools { val log = streams.value.log val src = (sourceDirectory in Native).value val out = (target in Native).value - val outPath = out.getAbsolutePath + val outPath = CygwinUtil.toUnixPath(out.getAbsolutePath) val configure = if ((src / "config.status").exists) { - Process("./config.status", src) + Process("sh ./config.status", src) } else { Process( //Disable producing versioned library files, not needed for fat jars. - s"./configure --prefix=$outPath --libdir=$outPath --disable-versioned-lib", + s"sh ./configure --prefix=$outPath --libdir=$outPath --disable-versioned-lib", src ) } -- cgit v1.2.3