From 4a9f688b804688ff95e256d3412ca932b9972d8a Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Mon, 28 Sep 2015 12:34:53 +0200
Subject: erts: Detect and build on MSYS2 for windows

Allow building win32 on MSYS2.
Avoid msys2 path conversion which does not work.
And print the real windows command when something fails.
---
 erts/etc/win32/msys_tools/vc/cc.sh     | 10 ++++++++--
 erts/etc/win32/msys_tools/vc/emu_cc.sh |  1 +
 erts/etc/win32/msys_tools/vc/mc.sh     |  7 ++++++-
 erts/etc/win32/msys_tools/vc/rc.sh     |  7 ++++++-
 erts/etc/win32/nsis/Makefile           | 10 ++++++++--
 5 files changed, 29 insertions(+), 6 deletions(-)

(limited to 'erts')

diff --git a/erts/etc/win32/msys_tools/vc/cc.sh b/erts/etc/win32/msys_tools/vc/cc.sh
index ad05e5375b..ac89aac34e 100644
--- a/erts/etc/win32/msys_tools/vc/cc.sh
+++ b/erts/etc/win32/msys_tools/vc/cc.sh
@@ -242,7 +242,7 @@ for x in $SOURCES; do
     if [ $PREPROCESSING = true ]; then
 	output_flag="-E"
     else
-	output_flag="-c -Fo`cmd //C echo ${output_filename}`"
+	output_flag="-FS -c -Fo`cmd //C echo ${output_filename}`"
     fi
     params="$COMMON_CFLAGS $MD $DEBUG_FLAGS $OPTIMIZE_FLAGS \
 	    $CMD ${output_flag} $MPATH"
@@ -250,6 +250,8 @@ for x in $SOURCES; do
 	echo cc.sh "$SAVE" >>$CC_SH_DEBUG_LOG
 	echo cl.exe $params >>$CC_SH_DEBUG_LOG
     fi
+    # MSYS2 (currently) converts the paths wrong, avoid it
+    export MSYS2_ARG_CONV_EXCL=-FoC
     eval cl.exe $params >$MSG_FILE 2>$ERR_FILE
     RES=$?
     if test $PREPROCESSING = false; then
@@ -274,6 +276,7 @@ for x in $SOURCES; do
     fi
     rm -f $ERR_FILE $MSG_FILE
     if [ $RES != 0 ]; then
+	echo Failed: cl.exe $params
 	rm -rf $TMPOBJDIR
 	exit $RES
     fi
@@ -312,7 +315,10 @@ if [ $LINKING = true ]; then
 	    stdlib="-lLIBMTD";;
     esac
     # And finally call the next script to do the linking...
-    params="$out_spec $LINKCMD $stdlib" 
+    params="$out_spec $LINKCMD $stdlib"
+    if [ "X$CC_SH_DEBUG_LOG" != "X" ]; then
+	echo ld.sh $ACCUM_OBJECTS $params
+    fi
     eval ld.sh $ACCUM_OBJECTS $params
     RES=$?
 fi
diff --git a/erts/etc/win32/msys_tools/vc/emu_cc.sh b/erts/etc/win32/msys_tools/vc/emu_cc.sh
index 01f75b2468..10d59214ea 100644
--- a/erts/etc/win32/msys_tools/vc/emu_cc.sh
+++ b/erts/etc/win32/msys_tools/vc/emu_cc.sh
@@ -29,6 +29,7 @@ WTOOLDIR0=`win2msys_path.sh "$TOOLDIR"`
 WTOOLDIR=`cmd //C echo $WTOOLDIR0`
 # Do primitive 'make'
 newer_exe=`find $TOOLDIR -newer $COFFIX.c -name coffix.exe -print`
+export MSYS2_ARG_CONV_EXCL="-FeC"
 if [ -z $newer_exe ]; then
     echo recompiling $COFFIX.exe
     cl.exe -Fe${WTOOLDIR}/coffix.exe ${WTOOLDIR}/coffix.c
diff --git a/erts/etc/win32/msys_tools/vc/mc.sh b/erts/etc/win32/msys_tools/vc/mc.sh
index e9ea9ff9a9..14b5ebaa8f 100644
--- a/erts/etc/win32/msys_tools/vc/mc.sh
+++ b/erts/etc/win32/msys_tools/vc/mc.sh
@@ -80,9 +80,14 @@ if [ -n "$OUTPUT_DIRNAME" ]; then
 	exit $RES
     fi
 fi
+# MSYS2 (currently) converts the paths wrong, avoid it
+export MSYS2_ARG_CONV_EXCL=
 eval $MCC "$CMD"  >/tmp/mc.exe.${p}.1 2>/tmp/mc.exe.${p}.2
 RES=$?
-tail +2 /tmp/mc.exe.${p}.2 >&2
+if [ $RES != 0 ]; then
+    echo Failed: $MCC "$CMD" 
+fi
+tail -n +2 /tmp/mc.exe.${p}.2 >&2
 cat /tmp/mc.exe.${p}.1
 rm -f /tmp/mc.exe.${p}.2 /tmp/mc.exe.${p}.1
 exit $RES
diff --git a/erts/etc/win32/msys_tools/vc/rc.sh b/erts/etc/win32/msys_tools/vc/rc.sh
index 1b3b1c85bd..1f8ade17cb 100644
--- a/erts/etc/win32/msys_tools/vc/rc.sh
+++ b/erts/etc/win32/msys_tools/vc/rc.sh
@@ -79,9 +79,14 @@ if [ "X$RC_SH_DEBUG_LOG" != "X" ]; then
     echo rc.sh "$SAVE" >>$RC_SH_DEBUG_LOG
     echo rc.exe $CMD >>$RC_SH_DEBUG_LOG
 fi
+# MSYS2 (currently) converts the paths wrong, avoid it
+export MSYS2_ARG_CONV_EXCL=-Fo
 eval $RCC "$CMD"  >/tmp/rc.exe.${p}.1 2>/tmp/rc.exe.${p}.2
 RES=$?
-tail +2 /tmp/rc.exe.${p}.2 >&2
+if [ $RES != 0 ]; then
+    echo Failed: $RCC "$CMD" 
+fi
+tail -n +2 /tmp/rc.exe.${p}.2 >&2
 cat /tmp/rc.exe.${p}.1
 rm -f /tmp/rc.exe.${p}.2 /tmp/rc.exe.${p}.1
 exit $RES
diff --git a/erts/etc/win32/nsis/Makefile b/erts/etc/win32/nsis/Makefile
index 49d835170a..64f44ff86d 100644
--- a/erts/etc/win32/nsis/Makefile
+++ b/erts/etc/win32/nsis/Makefile
@@ -42,7 +42,13 @@ include $(ERL_TOP)/make/otp_release_targets.mk
 
 TARGET_DIR = $(RELEASE_PATH)
 
-ifeq ($(MSYSTEM),MINGW32)
+ifdef MSYSTEM
+ ifeq ($(MSYSTEM),$(filter $(MSYSTEM),MSYS MINGW32 MINGW64))
+  USEMSYS := true
+ endif
+endif
+
+ifeq ($(USEMSYS),true)
 
   MAKENSISFLAGS = //V2
   WTESTROOT=$(shell (msys2win_path.sh "$(RELEASE_PATH)"))
@@ -63,7 +69,7 @@ else
 endif
 
 REDIST_FILE=$(shell (sh ./find_redist.sh || echo ""))
-ifeq ($(MSYSTEM),MINGW32)
+ifeq ($(USEMSYS),true)
 	NICEREDISTFILE=$(shell (msys2win_path.sh -m "$(REDIST_FILE)" 2>/dev/null || echo ""))
 else
 	NICEREDISTFILE=$(shell (cygpath -d -m "$(REDIST_FILE)" 2>/dev/null || echo ""))
-- 
cgit v1.2.3