Index: otp/aclocal.m4 =================================================================== --- otp.orig/aclocal.m4 2014-02-02 15:52:25.000000000 +0200 +++ otp/aclocal.m4 2014-02-02 15:53:49.875023500 +0200 @@ -124,6 +124,17 @@ [ MIXED_CYGWIN=no MIXED_MSYS=no +MIXED_CYGWIN_MINGW=no +MIXED_MSYS_MINGW=no + +AC_MSG_CHECKING(for MinGW headers) +AC_CHECK_HEADERS([_mingw.h w32api.h], + [MINGW=yes + AC_MSG_RESULT([_mingw.h found]) + AC_DEFINE(HAVE_MINGW, [1], [Define 1 if you have MinGW runtime])], + [MINGW=no + AC_MSG_RESULT([_mingw.h or w32api.h missing])], + []) AC_MSG_CHECKING(for mixed cygwin or msys and native VC++ environment) if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then @@ -160,25 +171,30 @@ if test "x$MIXED_MSYS" != "xyes"; then AC_MSG_CHECKING(for mixed cygwin and native MinGW environment) - if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then + if test "X$host" = "Xwin32" -a "$MINGW" = "yes"; then if test -x /usr/bin/cygpath; then CFLAGS="-O2" MIXED_CYGWIN=yes AC_MSG_RESULT([yes]) MIXED_CYGWIN_MINGW=yes CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" + elif test -x /usr/bin/msysinfo; then + CFLAGS="-O2" + MIXED_MSYS=yes + AC_MSG_RESULT([MSYS and MingGW]) + MIXED_CYGWIN_MINGW=yes + MIXED_MSYS_MINGW=yes + CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" else AC_MSG_RESULT([undeterminable]) AC_MSG_ERROR(Seems to be mixed windows but not with cygwin, cannot handle this!) fi else AC_MSG_RESULT([no]) - MIXED_CYGWIN_MINGW=no fi -else - MIXED_CYGWIN_MINGW=no fi AC_SUBST(MIXED_CYGWIN_MINGW) +AC_SUBST(MIXED_MSYS_MINGW) AC_MSG_CHECKING(if we mix cygwin with any native compiler) if test "X$MIXED_CYGWIN" = "Xyes"; then Index: otp/erts/aclocal.m4 =================================================================== --- otp.orig/erts/aclocal.m4 2014-02-02 15:52:25.000000000 +0200 +++ otp/erts/aclocal.m4 2014-02-02 15:53:49.981690500 +0200 @@ -124,6 +124,17 @@ [ MIXED_CYGWIN=no MIXED_MSYS=no +MIXED_CYGWIN_MINGW=no +MIXED_MSYS_MINGW=no + +AC_MSG_CHECKING(for MinGW headers) +AC_CHECK_HEADERS([_mingw.h w32api.h], + [MINGW=yes + AC_MSG_RESULT([_mingw.h found]) + AC_DEFINE(HAVE_MINGW, [1], [Define 1 if you have MinGW runtime])], + [MINGW=no + AC_MSG_RESULT([_mingw.h or w32api.h missing])], + []) AC_MSG_CHECKING(for mixed cygwin or msys and native VC++ environment) if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then @@ -160,25 +171,30 @@ if test "x$MIXED_MSYS" != "xyes"; then AC_MSG_CHECKING(for mixed cygwin and native MinGW environment) - if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then + if test "X$host" = "Xwin32" -a "$MINGW" = "yes"; then if test -x /usr/bin/cygpath; then CFLAGS="-O2" MIXED_CYGWIN=yes AC_MSG_RESULT([yes]) MIXED_CYGWIN_MINGW=yes CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" + elif test -x /usr/bin/msysinfo; then + CFLAGS="-O2" + MIXED_MSYS=yes + AC_MSG_RESULT([MSYS and MingGW]) + MIXED_CYGWIN_MINGW=yes + MIXED_MSYS_MINGW=yes + CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" else AC_MSG_RESULT([undeterminable]) AC_MSG_ERROR(Seems to be mixed windows but not with cygwin, cannot handle this!) fi else AC_MSG_RESULT([no]) - MIXED_CYGWIN_MINGW=no fi -else - MIXED_CYGWIN_MINGW=no fi AC_SUBST(MIXED_CYGWIN_MINGW) +AC_SUBST(MIXED_MSYS_MINGW) AC_MSG_CHECKING(if we mix cygwin with any native compiler) if test "X$MIXED_CYGWIN" = "Xyes"; then Index: otp/erts/configure.in =================================================================== --- otp.orig/erts/configure.in 2014-02-02 15:52:32.000000000 +0200 +++ otp/erts/configure.in 2014-02-02 15:53:50.068357400 +0200 @@ -1890,7 +1890,7 @@ [Define to 1 if you have the `sendfilev' function.])) ;; win32) - LIBS="$LIBS -lmswsock" + LIBS="$LIBS -lmswsock -lws2_32" ;; *) ;; @@ -2134,6 +2134,23 @@ [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ + #include + #include + #include + ]], + [[printf("%d", in6addr_any.s6_addr[16]);]] + )], + [erts_cv_have_in6addr_any=yes], + [] + )] +) + +AC_CACHE_CHECK( + [whether in6addr_any is declared], + [erts_cv_have_in6addr_any], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ #include #include #include @@ -2157,6 +2174,23 @@ [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ + #include + #include + #include + ]], + [[printf("%d", in6addr_loopback.s6_addr[16]);]] + )], + [erts_cv_have_in6addr_loopback=yes], + [] + )] +) + +AC_CACHE_CHECK( + [whether in6addr_loopback is declared], + [erts_cv_have_in6addr_loopback], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ #include #include #include @@ -2176,9 +2210,17 @@ AC_CHECK_DECLS([IN6ADDR_ANY_INIT, IN6ADDR_LOOPBACK_INIT, IPV6_V6ONLY], [], [], [ - #include - #include - #include + #ifdef __WIN32__ + # ifndef WINDOWS_H_INCLUDES_WINSOCK2_H + # include + # endif + # include + # include + #else + # include + # include + # include + #endif ]) dnl ---------------------------------------------------------------------- @@ -3695,9 +3737,15 @@ DED_LD_FLAG_RUNTIME_LIBRARY_PATH="-R" case $host_os in win32) - DED_LD="ld.sh" - DED_LDFLAGS="-dll" - DED_LD_FLAG_RUNTIME_LIBRARY_PATH= + if test "X$MIXED_MSYS_MINGW" = "Xyes" ; then + DED_LD="$CC" + DED_LDFLAGS="-shared" + DED_LD_FLAG_RUNTIME_LIBRARY_PATH= + else + DED_LD="ld.sh" + DED_LDFLAGS="-dll" + DED_LD_FLAG_RUNTIME_LIBRARY_PATH= + fi ;; solaris2*|sysv4*) DED_LDFLAGS="-G" @@ -4135,6 +4183,16 @@ elif test -f "$dir/lib/openssl.lib"; then SSL_RUNTIME_LIBDIR="$rdir/lib" SSL_LIBDIR="$dir/lib" + elif test -f "$dir/lib/libssl.a" -a \ + -f "$dir/lib/libcrypto.a"; then + SSL_LIBDIR="$dir/lib" + SSL_CRYPTO_LIBNAME=crypto + SSL_SSL_LIBNAME=ssl + elif test -f "$dir/lib/libeay32.a" -a \ + -f "$dir/lib/libssl32.a"; then + SSL_LIBDIR="$dir/lib" + SSL_CRYPTO_LIBNAME=eay32 + SSL_SSL_LIBNAME=ssl32 else is_real_ssl=no fi Index: otp/erts/emulator/Makefile.in =================================================================== --- otp.orig/erts/emulator/Makefile.in 2014-02-02 15:53:18.061609800 +0200 +++ otp/erts/emulator/Makefile.in 2014-02-02 15:53:50.198357700 +0200 @@ -245,6 +245,10 @@ ifeq ($(TARGET),win32) LIB_PREFIX= LIB_SUFFIX=.lib +ifeq ($(USING_MINGW), yes) +LIB_PREFIX=lib +LIB_SUFFIX=.a +endif else LIB_PREFIX=lib LIB_SUFFIX=.a @@ -273,20 +277,20 @@ endif endif UNROLL_FLG = -funroll-loops +ifeq ($(USING_MINGW), yes) +RC=windres +RES_EXT = @OBJEXT@ +MAKE_PRELOAD_EXTRA += -windres -msys +endif else ifeq ($(TARGET), win32) GEN_OPT_FLGS = $(OPT_LEVEL) UNROLL_FLG = RC=rc.sh +RES_EXT=res ifeq ($(MIXED_MSYS), yes) MAKE_PRELOAD_EXTRA = -msys endif -ifeq ($(USING_MINGW), yes) -RES_EXT = @OBJEXT@ -MAKE_PRELOAD_EXTRA += " -windres" -else -RES_EXT=res -endif else GEN_OPT_FLGS = UNROLL_FLG = @@ -294,7 +298,6 @@ endif endif - ifdef PURIFY_CHILD_SETUP CS_PURIFY = $(PURIFY) CS_TYPE_FLAGS = $(TYPE_FLAGS) @@ -313,6 +316,9 @@ CS_LIBS = -L../lib/internal/$(TARGET) -lerts_internal$(TYPEMARKER) @ERTS_INTERNAL_X_LIBS@ LIBS += @TERMCAP_LIB@ -L../lib/internal/$(TARGET) @ERTS_INTERNAL_X_LIBS@ +ifeq ($(USING_MINGW),yes) +LIBS += -lws2_32 -lcomctl32 -liphlpapi +endif ifdef Z_LIB # Use shared zlib library @@ -329,7 +335,11 @@ endif ifeq ($(TARGET),win32) +ifeq ($(USING_MINGW),yes) +LIBS += $(ERL_TOP)/erts/emulator/pcre/obj/$(TARGET)/$(TYPE)/$(LIB_PREFIX)epcre$(LIB_SUFFIX) +else LIBS += -L$(ERL_TOP)/erts/emulator/pcre/obj/$(TARGET)/$(TYPE) -lepcre +endif else LIBS += $(ERL_TOP)/erts/emulator/pcre/obj/$(TARGET)/$(TYPE)/$(LIB_PREFIX)epcre$(LIB_SUFFIX) endif @@ -983,10 +993,19 @@ ifeq ($(TARGET), win32) # Only the basic erlang to begin with eh? +ifeq ($(USING_MINGW), yes) +$(BINDIR)/$(EMULATOR_EXECUTABLE): $(INIT_OBJS) $(OBJS) $(DEPLIBS) + $(ld_verbose)$(PURIFY) $(LD) -mwindows -shared -Xlinker --out-implib \ + -Xlinker $(BINDIR)/erl_dll.a -o $(BINDIR)/$(EMULATOR_EXECUTABLE) \ + sys/$(ERLANG_OSTYPE)/erl.def \ + $(LDFLAGS) $(DEXPORT) $(INIT_OBJS) $(OBJS) $(STATIC_NIF_LIBS) \ + $(STATIC_DRIVER_LIBS) $(LIBS) +else $(BINDIR)/$(EMULATOR_EXECUTABLE): $(INIT_OBJS) $(OBJS) $(DEPLIBS) $(ld_verbose)$(PURIFY) $(LD) -dll -def:sys/$(ERLANG_OSTYPE)/erl.def -implib:$(BINDIR)/erl_dll.lib -o $(BINDIR)/$(EMULATOR_EXECUTABLE) \ $(LDFLAGS) $(DEXPORT) $(INIT_OBJS) $(OBJS) $(STATIC_NIF_LIBS) \ $(STATIC_DRIVER_LIBS) $(LIBS) +endif else $(BINDIR)/$(EMULATOR_EXECUTABLE): $(INIT_OBJS) $(OBJS) $(DEPLIBS) echo $(DEPLIBS) @@ -1015,8 +1034,12 @@ SED_REPL_TTF_COMP_FLAGS=s|\([^/]\)erl_compile_flags\.h|\1$$(TTF_DIR)/erl_compile_flags\.h|g ifeq ($(TARGET),win32) +ifeq ($(USING_MINGW), yes) +SED_PREFIX= +else #SED_PREFIX=$(SED_REPL_WIN_DRIVE); SED_PREFIX= +endif else SED_PREFIX= endif Index: otp/erts/emulator/pcre/pcre.mk =================================================================== --- otp.orig/erts/emulator/pcre/pcre.mk 2014-02-02 15:52:34.000000000 +0200 +++ otp/erts/emulator/pcre/pcre.mk 2014-02-02 15:53:50.315024700 +0200 @@ -51,8 +51,14 @@ PCRE_CFLAGS = $(filter-out -DDEBUG,$(CFLAGS)) -DERLANG_INTEGRATION ifeq ($(TARGET), win32) +ifeq ($(USING_MINGW), yes) +$(EPCRE_LIB): $(PCRE_OBJS) + $(V_AR) $(ARFLAGS) $@ $(PCRE_OBJS) + -@ ($(RANLIB) $@ || true) 2>/dev/null +else $(EPCRE_LIB): $(PCRE_OBJS) $(V_AR) -out:$@ $(PCRE_OBJS) +endif else $(EPCRE_LIB): $(PCRE_OBJS) $(V_AR) $(ARFLAGS) $@ $(PCRE_OBJS) Index: otp/erts/emulator/zlib/zlib.mk =================================================================== --- otp.orig/erts/emulator/zlib/zlib.mk 2014-02-02 15:52:25.000000000 +0200 +++ otp/erts/emulator/zlib/zlib.mk 2014-02-02 15:53:50.428358300 +0200 @@ -41,7 +41,11 @@ ZLIB_SRC = $(ZLIB_FILES:%=zlib/%.c) ifeq ($(TARGET), win32) +ifeq ($(USING_MINGW), yes) +ZLIB_LIBRARY = $(ZLIB_OBJDIR)/libz.a +else ZLIB_LIBRARY = $(ZLIB_OBJDIR)/z.lib +endif else ZLIB_LIBRARY = $(ZLIB_OBJDIR)/libz.a endif @@ -62,8 +66,14 @@ endif # gcov ifeq ($(TARGET), win32) +ifeq ($(USING_MINGW), yes) +$(ZLIB_LIBRARY): $(ZLIB_OBJS) + $(V_AR) crv $@ $(ZLIB_OBJS) + $(RANLIB) $@ +else $(ZLIB_LIBRARY): $(ZLIB_OBJS) $(V_AR) -out:$@ $(ZLIB_OBJS) +endif else $(ZLIB_LIBRARY): $(ZLIB_OBJS) $(V_AR) $(ARFLAGS) $@ $(ZLIB_OBJS) Index: otp/erts/epmd/src/Makefile.in =================================================================== --- otp.orig/erts/epmd/src/Makefile.in 2014-02-02 15:52:25.000000000 +0200 +++ otp/erts/epmd/src/Makefile.in 2014-02-02 15:53:50.541691900 +0200 @@ -86,6 +86,7 @@ # The targets ifeq ($(findstring win32,$(TARGET)),win32) EPMD = epmd.exe +LIBS += -lws2_32 else EPMD = epmd endif Index: otp/erts/etc/common/Makefile.in =================================================================== --- otp.orig/erts/etc/common/Makefile.in 2014-02-02 15:52:25.000000000 +0200 +++ otp/erts/etc/common/Makefile.in 2014-02-02 15:53:50.681692300 +0200 @@ -24,6 +24,7 @@ USING_MINGW=@MIXED_CYGWIN_MINGW@ USING_VC=@MIXED_VC@ +BITS64=@BITS64@ ifeq ($(TYPE),debug) PURIFY = @@ -133,6 +134,8 @@ $(OBJDIR)/erlsrv_logmess.o MC_OUTPUTS=$(OBJDIR)/erlsrv_logmess.h $(OBJDIR)/erlsrv_logmess.res MT_FLAG="-MD" +RC=windres +MC=mc.sh endif INET_GETHOST = $(BINDIR)/inet_gethost.exe INSTALL_EMBEDDED_PROGS += $(BINDIR)/typer.exe $(BINDIR)/dialyzer.exe $(BINDIR)/erlc.exe $(BINDIR)/start_erl.exe $(BINDIR)/escript.exe $(BINDIR)/ct_run.exe @@ -159,7 +162,13 @@ WINDSOCK = -lws2_32 endif PORT_ENTRY_POINT=erl_port_entry +ifeq ($(USING_MINGW), yes) +ifneq ($(BITS64), yes) +ENTRY_LDFLAGS=-Xlinker --thumb-entry=$(PORT_ENTRY_POINT) +endif +else ENTRY_LDFLAGS=-entry:$(PORT_ENTRY_POINT) +endif else # UNIX (!win32) ENTRY_LDFLAGS= @@ -249,24 +258,45 @@ ifeq ($(TARGET),win32) +ifeq ($(USING_MINGW), yes) +$(BINDIR)/$(ERLEXEC): $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) + $(V_LD) -shared $(LDFLAGS) -o $@ $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) $(ERTS_INTERNAL_LIBS) +else $(BINDIR)/$(ERLEXEC): $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) $(ERTS_LIB) $(V_LD) -dll $(LDFLAGS) -o $@ $(OBJDIR)/erlexec.o $(OBJDIR)/win_erlexec.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) $(ERTS_INTERNAL_LIBS) +endif $(BINDIR)/erl@EXEEXT@: $(OBJDIR)/erl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) - $(V_LD) $(LDFLAGS) -o $@ $(OBJDIR)/erl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) +ifeq ($(USING_MINGW), yes) + $(V_LD) $(LDFLAGS) -municode -o $@ $(OBJDIR)/erl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) +else + $(V_LD) $(LDFLAGS) -o $@ $(OBJDIR)/erl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) +endif $(BINDIR)/werl@EXEEXT@: $(OBJDIR)/werl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) - $(V_LD) $(LDFLAGS) -o $@ $(OBJDIR)/werl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) +ifeq ($(USING_MINGW), yes) + $(V_LD) $(LDFLAGS) -municode -o $@ $(OBJDIR)/werl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) +else + $(V_LD) $(LDFLAGS) -o $@ $(OBJDIR)/werl.o $(OBJDIR)/init_file.o $(OBJDIR)/$(ERLRES_OBJ) +endif -$(BINDIR)/start_erl@EXEEXT@: $(OBJDIR)/start_erl.o +$(BINDIR)/start_erl@EXEEXT@: $(OBJDIR)/start_erl.o $(V_LD) $(LDFLAGS) -o $@ $(OBJDIR)/start_erl.o $(BINDIR)/Install@EXEEXT@: $(OBJDIR)/Install.o $(OBJDIR)/init_file.o +ifeq ($(USING_MINGW), yes) + $(V_LD) $(LDFLAGS) -municode -o $@ $(OBJDIR)/Install.o $(OBJDIR)/init_file.o +else $(V_LD) $(LDFLAGS) -o $@ $(OBJDIR)/Install.o $(OBJDIR)/init_file.o +endif # The service expects to be compiled with $(MT_FLAG) flag. $(BINDIR)/erlsrv@EXEEXT@: $(ERLSRV_OBJECTS) +ifeq ($(USING_MINGW), yes) + $(V_LD) -municode $(LDFLAGS) $(MT_FLAG) -o $@ $(ERLSRV_OBJECTS) +else $(V_LD) $(LDFLAGS) $(MT_FLAG) -o $@ $(ERLSRV_OBJECTS) +endif # To fix a spooky parallel make build problem on Windows there are some # false dependencies on the $(MC), $(RC) and .o rules. The theory behind @@ -280,9 +310,16 @@ LOGMESS_GENERATED = $(OBJDIR)/LOGMESS-GENERATED $(MC_OUTPUTS): $(LOGMESS_GENERATED) +ifeq ($(USING_MINGW), yes) +$(OBJDIR)/erlsrv_logmess.rc: $(WINETC)/erlsrv/erlsrv_logmess.mc + wmc -i -o $(OBJDIR)/erlsrv_logmess.rc -H $(OBJDIR)/erlsrv_logmess.h $(WINETC)/erlsrv/erlsrv_logmess.mc +$(LOGMESS_GENERATED): $(OBJDIR)/erlsrv_logmess.rc + echo $? >$(LOGMESS_GENERATED) +else $(LOGMESS_GENERATED): $(WINETC)/erlsrv/erlsrv_logmess.mc $(V_MC) -o $(OBJDIR) $(WINETC)/erlsrv/erlsrv_logmess.mc && \ echo $? >$(LOGMESS_GENERATED) +endif $(OBJDIR)/$(ERLRES_OBJ): $(WINETC)/erl.rc $(WINETC)/erlang.ico \ $(WINETC)/erl_icon.ico $(WINETC)/hrl_icon.ico \ @@ -294,6 +331,10 @@ $(RC_GENERATED): $(OBJDIR)/erlsrv_logmess.rc $(OBJDIR)/$(ERLRES_OBJ) $(V_RC) -o $(OBJDIR)/erlsrv_logmess.res -I$(OBJDIR) $(OBJDIR)/erlsrv_logmess.rc else +ifeq ($(USING_MINGW), yes) +$(OBJDIR)/erlsrv_logmess.res: $(OBJDIR)/erlsrv_logmess.rc $(OBJDIR)/$(ERLRES_OBJ) + wrc -o $@ -i $< +endif RC_GENERATED = $(OBJDIR)/erlsrv_logmess.o $(RC_GENERATED): $(OBJDIR)/erlsrv_logmess.res $(OBJDIR)/$(ERLRES_OBJ) $(V_RC) -o $(OBJDIR)/erlsrv_logmess.o -I$(OBJDIR) $(OBJDIR)/erlsrv_logmess.res @@ -371,7 +412,7 @@ $(V_CC) $(CFLAGS) -o $@ -c inet_gethost.c $(BINDIR)/inet_gethost@EXEEXT@: $(OBJDIR)/inet_gethost.o $(ENTRY_OBJ) $(ERTS_LIB) - $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) $(ENTRY_LDFLAGS) -o $@ $(OBJDIR)/inet_gethost.o $(ENTRY_OBJ) $(LIBS) $(ERTS_INTERNAL_LIBS) + $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) $(ENTRY_LDFLAGS) -o $@ $(OBJDIR)/inet_gethost.o $(ENTRY_OBJ) $(LIBS) $(ERTS_INTERNAL_LIBS) $(WINDSOCK) $(BINDIR)/run_erl: $(OBJDIR)/safe_string.o $(OBJDIR)/run_erl.o $(V_LD) $(LDFLAGS) -o $@ $(OBJDIR)/safe_string.o $(OBJDIR)/run_erl.o $(LIBS) @@ -402,31 +443,51 @@ $(V_CC) -I$(EMUDIR) $(CFLAGS) -o $@ -c $(ERLEXECDIR)/$(ERLEXEC).c endif $(BINDIR)/erlc@EXEEXT@: $(OBJDIR)/erlc.o $(ERTS_LIB) +ifeq ($(USING_MINGW), yes) + $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) -municode -o $@ $(OBJDIR)/erlc.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +else $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) -o $@ $(OBJDIR)/erlc.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +endif $(OBJDIR)/erlc.o: erlc.c $(RC_GENERATED) $(V_CC) $(CFLAGS) -o $@ -c erlc.c $(BINDIR)/dialyzer@EXEEXT@: $(OBJDIR)/dialyzer.o $(ERTS_LIB) +ifeq ($(USING_MINGW), yes) + $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) -municode -o $@ $(OBJDIR)/dialyzer.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +else $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) -o $@ $(OBJDIR)/dialyzer.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +endif $(OBJDIR)/dialyzer.o: dialyzer.c $(RC_GENERATED) $(V_CC) $(CFLAGS) -o $@ -c dialyzer.c $(BINDIR)/typer@EXEEXT@: $(OBJDIR)/typer.o $(ERTS_LIB) +ifeq ($(USING_MINGW), yes) + $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) -municode -o $@ $(OBJDIR)/typer.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +else $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) -o $@ $(OBJDIR)/typer.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +endif $(OBJDIR)/typer.o: typer.c $(RC_GENERATED) $(V_CC) $(CFLAGS) -o $@ -c typer.c $(BINDIR)/escript@EXEEXT@: $(OBJDIR)/escript.o $(ERTS_LIB) +ifeq ($(USING_MINGW), yes) + $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) -municode -o $@ $(OBJDIR)/escript.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +else $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) -o $@ $(OBJDIR)/escript.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +endif $(OBJDIR)/escript.o: escript.c $(RC_GENERATED) $(V_CC) $(CFLAGS) -o $@ -c escript.c $(BINDIR)/ct_run@EXEEXT@: $(OBJDIR)/ct_run.o $(ERTS_LIB) +ifeq ($(USING_MINGW), yes) + $(ld_verbose)$(PURIFY) $(LD) -municode $(LDFLAGS) -o $@ $(OBJDIR)/ct_run.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +else $(ld_verbose)$(PURIFY) $(LD) $(LDFLAGS) -o $@ $(OBJDIR)/ct_run.o -L$(OBJDIR) $(LIBS) $(ERTS_INTERNAL_LIBS) +endif $(OBJDIR)/ct_run.o: ct_run.c $(RC_GENERATED) $(V_CC) $(CFLAGS) -o $@ -c ct_run.c Index: otp/erts/etc/win32/nsis/Makefile =================================================================== --- otp.orig/erts/etc/win32/nsis/Makefile 2014-02-02 15:52:25.000000000 +0200 +++ otp/erts/etc/win32/nsis/Makefile 2014-02-02 15:53:50.848359400 +0200 @@ -23,7 +23,7 @@ VERSION_HEADER = erlang.nsh MAKENSIS = makensis -MAKENSISFLAGS = /V2 +MAKENSISFLAGS = CUSTOM_MODERN=custom_modern.exe # This is not the way we usually do in our makefiles, Index: otp/erts/etc/win32/nsis/erlang20.nsi =================================================================== --- otp.orig/erts/etc/win32/nsis/erlang20.nsi 2014-02-02 15:52:25.000000000 +0200 +++ otp/erts/etc/win32/nsis/erlang20.nsi 2014-02-02 15:53:50.931692900 +0200 @@ -39,7 +39,7 @@ ;-------------------------------- ;Configuration - SetCompressor bzip2 + SetCompressor /SOLID lzma Var MYTEMP ;Var MUI_TEMP Index: otp/erts/lib_src/Makefile.in =================================================================== --- otp.orig/erts/lib_src/Makefile.in 2014-02-02 15:52:35.000000000 +0200 +++ otp/erts/lib_src/Makefile.in 2014-02-02 15:53:51.058359900 +0200 @@ -555,8 +555,12 @@ SED_REPL_TARGET=s|$(TARGET)/|$$(TARGET)/|g ifeq ($(TARGET),win32) +ifeq ($(USING_MINGW), yes) +SED_PREFIX= +else #SED_PREFIX=$(SED_REPL_WIN_DRIVE); SED_PREFIX= +endif DEP_FLAGS=$(subst -O3,,$(subst -O2,,$(CFLAGS))) $(INCLUDES) else SED_PREFIX= Index: otp/lib/crypto/c_src/Makefile.in =================================================================== --- otp.orig/lib/crypto/c_src/Makefile.in 2014-02-02 15:52:36.000000000 +0200 +++ otp/lib/crypto/c_src/Makefile.in 2014-02-02 15:53:51.238360400 +0200 @@ -26,6 +26,8 @@ include ../vsn.mk VSN=$(CRYPTO_VSN) +USING_MINGW=@MIXED_CYGWIN_MINGW@ + # ---------------------------------------------------- # The following variables differ between systems. # Set by configure. Index: otp/lib/erl_interface/aclocal.m4 =================================================================== --- otp.orig/lib/erl_interface/aclocal.m4 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/erl_interface/aclocal.m4 2014-02-02 15:53:51.355027300 +0200 @@ -124,6 +124,17 @@ [ MIXED_CYGWIN=no MIXED_MSYS=no +MIXED_CYGWIN_MINGW=no +MIXED_MSYS_MINGW=no + +AC_MSG_CHECKING(for MinGW headers) +AC_CHECK_HEADERS([_mingw.h w32api.h], + [MINGW=yes + AC_MSG_RESULT([_mingw.h found]) + AC_DEFINE(HAVE_MINGW, [1], [Define 1 if you have MinGW runtime])], + [MINGW=no + AC_MSG_RESULT([_mingw.h or w32api.h missing])], + []) AC_MSG_CHECKING(for mixed cygwin or msys and native VC++ environment) if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then @@ -160,25 +171,30 @@ if test "x$MIXED_MSYS" != "xyes"; then AC_MSG_CHECKING(for mixed cygwin and native MinGW environment) - if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then + if test "X$host" = "Xwin32" -a "$MINGW" = "yes"; then if test -x /usr/bin/cygpath; then CFLAGS="-O2" MIXED_CYGWIN=yes AC_MSG_RESULT([yes]) MIXED_CYGWIN_MINGW=yes CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" + elif test -x /usr/bin/msysinfo; then + CFLAGS="-O2" + MIXED_MSYS=yes + AC_MSG_RESULT([MSYS and MingGW]) + MIXED_CYGWIN_MINGW=yes + MIXED_MSYS_MINGW=yes + CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" else AC_MSG_RESULT([undeterminable]) AC_MSG_ERROR(Seems to be mixed windows but not with cygwin, cannot handle this!) fi else AC_MSG_RESULT([no]) - MIXED_CYGWIN_MINGW=no fi -else - MIXED_CYGWIN_MINGW=no fi AC_SUBST(MIXED_CYGWIN_MINGW) +AC_SUBST(MIXED_MSYS_MINGW) AC_MSG_CHECKING(if we mix cygwin with any native compiler) if test "X$MIXED_CYGWIN" = "Xyes"; then Index: otp/lib/erl_interface/configure.in =================================================================== --- otp.orig/lib/erl_interface/configure.in 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/erl_interface/configure.in 2014-02-02 15:53:51.418360800 +0200 @@ -250,7 +250,7 @@ ;; win32_threads) EI_THREADS="true" - THR_DEFS="$THR_DEFS -D_WIN32_WINNT=0x0500 -DWINVER=0x0500" + THR_DEFS="$THR_DEFS -D_WIN32_WINNT=0x0501 -DWINVER=0x0501" ;; pthread) EI_THREADS="true" Index: otp/lib/erl_interface/src/Makefile.in =================================================================== --- otp.orig/lib/erl_interface/src/Makefile.in 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/erl_interface/src/Makefile.in 2014-02-02 15:53:51.508361100 +0200 @@ -238,7 +238,7 @@ else -ifeq ($USING_MINGW,yes) +ifeq ($(USING_MINGW), yes) TARGETS = \ $(OBJ_TARGETS) \ $(EXE_TARGETS) @@ -606,7 +606,15 @@ ifeq ($(TARGET),win32) # Windows archive creation +ifeq ($(USING_MINGW), yes) +$(MD_EILIB) : $(MD_EIOBJECTS) + $(AR) crv $@ $(MD_EIOBJECTS) + $(RANLIB) $@ +$(MD_ERLLIB) : $(MD_ERLOBJECTS) + $(AR) crv $@ $(MD_ERLOBJECTS) + $(RANLIB) $@ +else $(ST_EILIB) : $(ST_EIOBJECTS) $(V_AR) -out:$@ $(ST_EIOBJECTS) $(V_RANLIB) $@ @@ -638,7 +646,7 @@ $(MDD_ERLLIB) : $(MDD_ERLOBJECTS) $(V_AR) -out:$@ $(MDD_ERLOBJECTS) $(V_RANLIB) $@ - +endif else # Unix archive creation @@ -678,9 +686,15 @@ ########################################################################### ifeq ($(TARGET),win32) +ifeq ($(USING_MINGW), yes) +$(ERL_CALL): $(ERLCALL) ../include/ei.h $(MD_EILIB) + $(ld_verbose)$(PURIFY) $(CC) -lmsvcrt $(PROG_CFLAGS) $(THR_DEFS) -o $@ $(ERLCALL) \ + -L$(OBJDIR) -lei_md $(THR_LIBS) $(LIBS) -lws2_32 +else $(ERL_CALL): $(ERLCALL) ../include/ei.h $(MD_EILIB) $(ld_verbose)$(PURIFY) $(CC) -MD $(PROG_CFLAGS) $(THR_DEFS) -o $@ $(ERLCALL) \ -L$(OBJDIR) -lei_md $(THR_LIBS) $(LIBS) -lsocket +endif else ifeq ($(findstring vxworks,$(TARGET)),vxworks) $(ERL_CALL): $(ST_OBJDIR)/erl_call.o $(ST_OBJDIR)/erl_start.o ../include/ei.h $(ST_EILIB) Index: otp/lib/gs/tcl/Makefile.in =================================================================== --- otp.orig/lib/gs/tcl/Makefile.in 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/gs/tcl/Makefile.in 2014-02-02 15:53:51.658361500 +0200 @@ -33,11 +33,7 @@ # be set for that system only. # ---------------------------------------------------- -ifeq ($(TARGET),win32) -TCL_TAR = binaries/win32.tar.gz -else TCL_TAR = @TCL_TAR@ -endif CONFIGURE_FILES = ../configure ../configure.in Index: otp/lib/ic/java_src/com/ericsson/otp/ic/Makefile =================================================================== --- otp.orig/lib/ic/java_src/com/ericsson/otp/ic/Makefile 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/ic/java_src/com/ericsson/otp/ic/Makefile 2014-02-02 15:53:51.911695400 +0200 @@ -99,7 +99,7 @@ debug opt: $(JAVA_DEST_ROOT)$(JARFILE) $(JAVA_DEST_ROOT)$(JARFILE): $(TARGET_FILES) - @(cd $(JAVA_DEST_ROOT) ; $(JAR) $(JARFLAGS) $(JARFILE) $(JAVA_CLASS_SUBDIR)) + @(cd $(JAVA_DEST_ROOT) ; $(JAR) $(JARFLAGS) $(JARFILE) $(JAVA_CLASS_SUBDIR)/*.class) clean: rm -f $(TARGET_FILES) *~ Index: otp/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile =================================================================== --- otp.orig/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile 2014-02-02 15:53:52.218362900 +0200 @@ -85,7 +85,7 @@ $(V_at)if [ ! -d "$(JAVA_DEST_ROOT)" ];then mkdir "$(JAVA_DEST_ROOT)"; fi $(JAVA_DEST_ROOT)$(JARFILE): $(TARGET_FILES) - @(cd $(JAVA_DEST_ROOT) ; $(JAR) $(JARFLAGS) $(JARFILE) $(JAVA_CLASS_SUBDIR)) + @(cd $(JAVA_DEST_ROOT) ; $(JAR) $(JARFLAGS) $(JARFILE) $(JAVA_CLASS_SUBDIR)/*.class) clean: $(V_at)rm -f $(TARGET_FILES) *~ Index: otp/lib/megaco/aclocal.m4 =================================================================== --- otp.orig/lib/megaco/aclocal.m4 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/megaco/aclocal.m4 2014-02-02 15:53:52.331696500 +0200 @@ -124,6 +124,17 @@ [ MIXED_CYGWIN=no MIXED_MSYS=no +MIXED_CYGWIN_MINGW=no +MIXED_MSYS_MINGW=no + +AC_MSG_CHECKING(for MinGW headers) +AC_CHECK_HEADERS([_mingw.h w32api.h], + [MINGW=yes + AC_MSG_RESULT([_mingw.h found]) + AC_DEFINE(HAVE_MINGW, [1], [Define 1 if you have MinGW runtime])], + [MINGW=no + AC_MSG_RESULT([_mingw.h or w32api.h missing])], + []) AC_MSG_CHECKING(for mixed cygwin or msys and native VC++ environment) if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then @@ -160,25 +171,30 @@ if test "x$MIXED_MSYS" != "xyes"; then AC_MSG_CHECKING(for mixed cygwin and native MinGW environment) - if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then + if test "X$host" = "Xwin32" -a "$MINGW" = "yes"; then if test -x /usr/bin/cygpath; then CFLAGS="-O2" MIXED_CYGWIN=yes AC_MSG_RESULT([yes]) MIXED_CYGWIN_MINGW=yes CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" + elif test -x /usr/bin/msysinfo; then + CFLAGS="-O2" + MIXED_MSYS=yes + AC_MSG_RESULT([MSYS and MingGW]) + MIXED_CYGWIN_MINGW=yes + MIXED_MSYS_MINGW=yes + CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" else AC_MSG_RESULT([undeterminable]) AC_MSG_ERROR(Seems to be mixed windows but not with cygwin, cannot handle this!) fi else AC_MSG_RESULT([no]) - MIXED_CYGWIN_MINGW=no fi -else - MIXED_CYGWIN_MINGW=no fi AC_SUBST(MIXED_CYGWIN_MINGW) +AC_SUBST(MIXED_MSYS_MINGW) AC_MSG_CHECKING(if we mix cygwin with any native compiler) if test "X$MIXED_CYGWIN" = "Xyes"; then Index: otp/lib/odbc/aclocal.m4 =================================================================== --- otp.orig/lib/odbc/aclocal.m4 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/odbc/aclocal.m4 2014-02-02 15:53:52.425030100 +0200 @@ -124,6 +124,17 @@ [ MIXED_CYGWIN=no MIXED_MSYS=no +MIXED_CYGWIN_MINGW=no +MIXED_MSYS_MINGW=no + +AC_MSG_CHECKING(for MinGW headers) +AC_CHECK_HEADERS([_mingw.h w32api.h], + [MINGW=yes + AC_MSG_RESULT([_mingw.h found]) + AC_DEFINE(HAVE_MINGW, [1], [Define 1 if you have MinGW runtime])], + [MINGW=no + AC_MSG_RESULT([_mingw.h or w32api.h missing])], + []) AC_MSG_CHECKING(for mixed cygwin or msys and native VC++ environment) if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then @@ -160,25 +171,30 @@ if test "x$MIXED_MSYS" != "xyes"; then AC_MSG_CHECKING(for mixed cygwin and native MinGW environment) - if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then + if test "X$host" = "Xwin32" -a "$MINGW" = "yes"; then if test -x /usr/bin/cygpath; then CFLAGS="-O2" MIXED_CYGWIN=yes AC_MSG_RESULT([yes]) MIXED_CYGWIN_MINGW=yes CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" + elif test -x /usr/bin/msysinfo; then + CFLAGS="-O2" + MIXED_MSYS=yes + AC_MSG_RESULT([MSYS and MingGW]) + MIXED_CYGWIN_MINGW=yes + MIXED_MSYS_MINGW=yes + CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" else AC_MSG_RESULT([undeterminable]) AC_MSG_ERROR(Seems to be mixed windows but not with cygwin, cannot handle this!) fi else AC_MSG_RESULT([no]) - MIXED_CYGWIN_MINGW=no fi -else - MIXED_CYGWIN_MINGW=no fi AC_SUBST(MIXED_CYGWIN_MINGW) +AC_SUBST(MIXED_MSYS_MINGW) AC_MSG_CHECKING(if we mix cygwin with any native compiler) if test "X$MIXED_CYGWIN" = "Xyes"; then Index: otp/lib/odbc/c_src/Makefile.in =================================================================== --- otp.orig/lib/odbc/c_src/Makefile.in 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/odbc/c_src/Makefile.in 2014-02-02 15:53:52.521697000 +0200 @@ -21,6 +21,8 @@ include $(ERL_TOP)/make/target.mk include $(ERL_TOP)/make/$(TARGET)/otp.mk +USING_MINGW=@MIXED_CYGWIN_MINGW@ + ifeq ($(TYPE),debug) TYPEMARKER = .debug TYPEFLAGS = -g @@ -56,7 +58,11 @@ EI_LIB = -lerl_interface_md -lei_md ENTRY_OBJ=$(ERL_TOP)/erts/obj/$(TARGET)/port_entry.o PORT_ENTRY_POINT=erl_port_entry +ifeq ($(USING_MINGW), yes) +ENTRY_LDFLAGS=-Xlinker --thumb-entry=$(PORT_ENTRY_POINT) +else ENTRY_LDFLAGS=-entry:$(PORT_ENTRY_POINT) +endif WIN32_TARGET = $(WIN_BIN_DIR)/odbcserver.exe EXE_TARGET = $(WIN32_TARGET) else @@ -81,8 +87,8 @@ CFLAGS = $(TYPEFLAGS) @CFLAGS@ @THR_DEFS@ @DEFS@ EI_LDFLAGS = -L$(EI_ROOT)/obj$(TYPEMARKER)/$(TARGET) LD = @LD@ -LDFLAGS = $(ODBC_LIB) $(EI_LDFLAGS) -LIBS = @LIBS@ @THR_LIBS@ $(EI_LIB) +LDFLAGS = $(EI_LDFLAGS) +LIBS = @LIBS@ @THR_LIBS@ $(EI_LIB) $(ODBC_LIB) INCLUDES = -I. $(ODBC_INCLUDE) $(EI_INCLUDE) TARGET_FLAGS = @TARGET_FLAGS@ @@ -112,10 +118,16 @@ endif ifdef WIN32_TARGET +ifeq ($(USING_MINGW), yes) +$(WIN32_TARGET): $(OBJ_DIR)/odbcserver.o + $(V_CC) $(LDFLAGS) -o $@ $(OBJ_DIR)/odbcserver.o $(ENTRY_OBJ) \ + $(LIBS) $(ENTRY_LDFLAGS) +else $(WIN32_TARGET): $(OBJ_DIR)/odbcserver.o $(V_LD) $(LDFLAGS) -o $@ $(OBJ_DIR)/odbcserver.o $(ENTRY_OBJ) \ $(LIBS) $(ENTRY_LDFLAGS) endif +endif $(OBJ_DIR)/odbcserver.o: odbcserver.c $(V_CC) $(CFLAGS) $(INCLUDES) $(TARGET_FLAGS) -o $@ -c odbcserver.c Index: otp/lib/os_mon/c_src/Makefile.in =================================================================== --- otp.orig/lib/os_mon/c_src/Makefile.in 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/os_mon/c_src/Makefile.in 2014-02-02 15:53:52.668364100 +0200 @@ -19,6 +19,9 @@ include $(ERL_TOP)/make/target.mk include $(ERL_TOP)/make/$(TARGET)/otp.mk +USING_MINGW=@MIXED_CYGWIN_MINGW@ +BITS64=@BITS64@ + CC = @CC@ LD = @LD@ LIBS = @LIBS@ @@ -61,7 +64,13 @@ ENTRY_OBJ=$(ERL_TOP)/erts/obj/$(TARGET)/port_entry.o PORT_ENTRY_POINT=erl_port_entry +ifeq ($(USING_MINGW), yes) +ifneq ($(BITS64), yes) +ENTRY_LDFLAGS=-Xlinker --thumb-entry=$(PORT_ENTRY_POINT) +endif +else ENTRY_LDFLAGS=-entry:$(PORT_ENTRY_POINT) +endif else PROGRAMS = \ memsup @os_mon_programs@ Index: otp/lib/runtime_tools/c_src/Makefile.in =================================================================== --- otp.orig/lib/runtime_tools/c_src/Makefile.in 2014-02-02 15:52:43.000000000 +0200 +++ otp/lib/runtime_tools/c_src/Makefile.in 2014-02-02 15:53:52.798364400 +0200 @@ -40,6 +40,10 @@ DTRACE_LIBNAME = dyntrace +ifeq ($(TARGET),win32) +LIBS += -lws2_32 +endif + SYSINCLUDE = $(DED_SYS_INCLUDE) TRACE_DRV_INCLUDES = $(SYSINCLUDE) Index: otp/lib/tools/c_src/Makefile.in =================================================================== --- otp.orig/lib/tools/c_src/Makefile.in 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/tools/c_src/Makefile.in 2014-02-02 15:53:52.938364800 +0200 @@ -132,6 +132,10 @@ EMEM_ETHR_LIBS=$(subst -l$(ETHR_LIB_NAME),-l$(ETHR_LIB_NAME)$(TYPEMARKER),$(subst -lerts_internal_r,-lerts_internal_r$(TYPEMARKER),$(ETHR_LIBS))) +ifeq ($(TARGET),win32) +LIBS += -lws2_32 +endif + EMEM_LIBS = $(LIBS) \ -L$(ERL_TOP)/erts/lib/$(TARGET) \ -L$(ERL_TOP)/erts/lib/internal/$(TARGET) \ Index: otp/lib/wx/aclocal.m4 =================================================================== --- otp.orig/lib/wx/aclocal.m4 2014-02-02 15:52:25.000000000 +0200 +++ otp/lib/wx/aclocal.m4 2014-02-02 15:53:53.038365000 +0200 @@ -124,6 +124,17 @@ [ MIXED_CYGWIN=no MIXED_MSYS=no +MIXED_CYGWIN_MINGW=no +MIXED_MSYS_MINGW=no + +AC_MSG_CHECKING(for MinGW headers) +AC_CHECK_HEADERS([_mingw.h w32api.h], + [MINGW=yes + AC_MSG_RESULT([_mingw.h found]) + AC_DEFINE(HAVE_MINGW, [1], [Define 1 if you have MinGW runtime])], + [MINGW=no + AC_MSG_RESULT([_mingw.h or w32api.h missing])], + []) AC_MSG_CHECKING(for mixed cygwin or msys and native VC++ environment) if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then @@ -160,25 +171,30 @@ if test "x$MIXED_MSYS" != "xyes"; then AC_MSG_CHECKING(for mixed cygwin and native MinGW environment) - if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then + if test "X$host" = "Xwin32" -a "$MINGW" = "yes"; then if test -x /usr/bin/cygpath; then CFLAGS="-O2" MIXED_CYGWIN=yes AC_MSG_RESULT([yes]) MIXED_CYGWIN_MINGW=yes CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" + elif test -x /usr/bin/msysinfo; then + CFLAGS="-O2" + MIXED_MSYS=yes + AC_MSG_RESULT([MSYS and MingGW]) + MIXED_CYGWIN_MINGW=yes + MIXED_MSYS_MINGW=yes + CPPFLAGS="$CPPFLAGS -DERTS_MIXED_CYGWIN_MINGW" else AC_MSG_RESULT([undeterminable]) AC_MSG_ERROR(Seems to be mixed windows but not with cygwin, cannot handle this!) fi else AC_MSG_RESULT([no]) - MIXED_CYGWIN_MINGW=no fi -else - MIXED_CYGWIN_MINGW=no fi AC_SUBST(MIXED_CYGWIN_MINGW) +AC_SUBST(MIXED_MSYS_MINGW) AC_MSG_CHECKING(if we mix cygwin with any native compiler) if test "X$MIXED_CYGWIN" = "Xyes"; then Index: otp/lib/wx/c_src/Makefile.in =================================================================== --- otp.orig/lib/wx/c_src/Makefile.in 2014-02-02 15:52:53.000000000 +0200 +++ otp/lib/wx/c_src/Makefile.in 2014-02-02 15:55:07.338562300 +0200 @@ -113,6 +113,10 @@ OBJC_CC_O = $(OBJC_CC) -c $(CFLAGS) $(OBJC_CFLAGS) $(WX_CFLAGS) $(COMMON_CFLAGS) CPP_O = $(V_CPP) -c $(CXX_FLAGS) $(WX_CXX_FLAGS) $(COMMON_CFLAGS) +ifeq ($(SYS_TYPE),win32) +GL_LIBS = -lopengl32 -lglu32 +endif + # Targets opt: $(TARGET_DIR)/wxe_driver$(SO_EXT) $(TARGET_DIR)/erl_gl$(SO_EXT) @@ -165,11 +169,11 @@ $(TARGET_DIR)/wxe_driver$(SO_EXT): $(WX_OBJECTS) $(V_at)mkdir -p $(TARGET_DIR) - $(V_LD) $(LDFLAGS) $(WX_OBJECTS) $(WX_LIBS) -o $@ + $(V_CXX) $(LDFLAGS) $(WX_OBJECTS) $(WX_LIBS) $(GL_LIBS) -o $@ $(TARGET_DIR)/erl_gl$(SO_EXT): $(GL_OBJECTS) $(V_at)mkdir -p $(TARGET_DIR) - $(V_CC) $(LDFLAGS) $(GL_OBJECTS) $(GL_LIBS) -o $@ + $(V_CXX) $(LDFLAGS) $(GL_OBJECTS) $(GL_LIBS) -o $@ # ---------------------------------------------------- Index: otp/lib/wx/configure.in =================================================================== --- otp.orig/lib/wx/configure.in 2014-02-02 15:52:53.000000000 +0200 +++ otp/lib/wx/configure.in 2014-02-02 15:53:53.251698900 +0200 @@ -163,14 +163,14 @@ CPPFLAGS="$CPPFLAGS -D_MACOSX $PTHR_CFLAGS" ;; mingw32) - CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0500 -D_WINDOWS -D_UNICODE -DUNICODE" - CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0500" + CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0501 -D_WINDOWS -D_UNICODE -DUNICODE" + CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0501" AC_MSG_WARN([Reverting to 32-bit time_t]) CPPFLAGS="$CPPFLAGS -D_USE_32BIT_TIME_T" ;; win32) - CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0500 -D_WINDOWS -D_UNICODE -DUNICODE" - CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0500" + CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0501 -D_WINDOWS -D_UNICODE -DUNICODE" + CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0501" ;; *) CFLAGS="$CFLAGS -Wno-deprecated-declarations" @@ -191,8 +191,13 @@ GL_LIBS="-framework OpenGL" ;; win32) - LDFLAGS="-dll $LDFLAGS" GL_LIBS="-lglu32 -lOpengl32" + if test "X$GCC" = "Xyes" ; then + DED_LD="$CC" + LDFLAGS="-shared -fPIC" + else + LDFLAGS="-dll $LDFLAGS" + fi ;; mingw32) LDFLAGS="-shared -fPIC $LDFLAGS" @@ -330,7 +335,7 @@ if test "$cross_compiling" = "yes"; then echo "Cross compilation of the wx driver is not supported yet, wx will NOT be usable" > ./CONF_INFO WXERL_CAN_BUILD_DRIVER=false -elif test X"$MIXED_CYGWIN_VC" = X"no" -a X"$MIXED_MSYS_VC" = X"no"; then +elif test X"$MIXED_CYGWIN_VC" = X"no" -a X"$MIXED_MSYS_VC" = X"no" || test X"$MIXED_MSYS_MINGW" = X"no" ; then WX_VERSION=`wx-config --version` case $WX_VERSION in 2.8.*) @@ -617,6 +622,8 @@ if test X"$WX_HAVE_STATIC_LIBS" = X"true" ; then LIBS=$WX_LIBS_STATIC +else + LIBS=$WX_LIBS fi AC_LINK_IFELSE([AC_LANG_SOURCE([ Index: otp/otp_build =================================================================== --- otp.orig/otp_build 2014-02-02 15:52:54.015625000 +0200 +++ otp/otp_build 2014-02-02 15:53:53.325032400 +0200 @@ -71,6 +71,8 @@ echo " Note that env_win32 x64 gives the same result, Windows 7 64bit" echo " env_mingw32 - echo environment settings for win32 with MinGW, use with eval" echo " - experimental!" + echo " env_msys_mingw32 - echo environment settings for MinGW with msys, use with eval" + echo " env_msys_mingw64 - echo environment settings for MinGW with msys, use with eval" echo " env_msys64 - echo environment settings for win32 with visual C++ running " echo " msys and mingw, use with eval" echo " - experimental!" @@ -199,7 +201,7 @@ if [ "$*" = "$XX" ]; then CONFIG_FLAGS="--disable-dynamic-ssl-lib $CONFIG_FLAGS" fi - CONFIG_FLAGS="--build=$BUILDSYS build_alias=win32 --host=win32 --target=win32 $CONFIG_FLAGS" + CONFIG_FLAGS="--build=$BUILDSYS build_alias=win32 --host=win32 --target=win32 $CONFIG_FLAGS --without-termcap" fi @@ -869,7 +871,6 @@ fi WIN32_WRAPPER_PATH="$ERL_TOP/erts/etc/win32/cygwin_tools/mingw:$ERL_TOP/erts/etc/win32/cygwin_tools" - echo_setenv OVERRIDE_TARGET win32 ';' echo_setenv MINGW_EXE_PATH $found ';' echo_setenv WINE_EXE_PATH $found2 ';' @@ -1055,6 +1056,71 @@ } +echo_env_msys_mingw32 () +{ + #echo_envinfo + if [ X"$SHELL" = X"" ]; then + echo "You need to export the shell variable first," \ + "for bourne-like shells, type:" >&2 + echo 'export SHELL' >&2 + echo "and for csh-like shells, type:" >&2 + echo 'setenv SHELL $SHELL' >&2 + echo " - then try again." >&2 + exit 1 + fi + echo_env_erltop + + WIN32_WRAPPER_PATH="$ERL_TOP/erts/etc/win32/msys_tools/mingw:$ERL_TOP/erts/etc/win32/msys_tools" + P2=`echo $WIN32_WRAPPER_PATH:$PATH | \ + sed 's,",,g;s,:\.:,:,g;s,:\([a-zA-Z]\):/,:/\1/,g;'` + + echo_setenv OVERRIDE_TARGET win32 ';' + echo_setenv BUILD_ENVIRONMENT msys ';' + echo_setenv RANLIB ranlib ';' + echo_setenv PATH "$P2" + + if [ -f "$ERL_TOP/erts/autoconf/mingw32.config.cache.static" ]; then + echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/erts/autoconf/mingw32.config.cache.static" ';' + fi + + echo_setenv WIN32_WRAPPER_PATH "$WIN32_WRAPPER_PATH" ';' + echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/mingw32.config.cache" ';' + echo_envinfo +} + +echo_env_msys_mingw64 () +{ + #echo_envinfo + if [ X"$SHELL" = X"" ]; then + echo "You need to export the shell variable first," \ + "for bourne-like shells, type:" >&2 + echo 'export SHELL' >&2 + echo "and for csh-like shells, type:" >&2 + echo 'setenv SHELL $SHELL' >&2 + echo " - then try again." >&2 + exit 1 + fi + echo_env_erltop + + WIN32_WRAPPER_PATH="$ERL_TOP/erts/etc/win32/msys_tools/mingw:$ERL_TOP/erts/etc/win32/msys_tools" + P2=`echo $WIN32_WRAPPER_PATH:$PATH | \ + sed 's,",,g;s,:\.:,:,g;s,:\([a-zA-Z]\):/,:/\1/,g;'` + + echo_setenv OVERRIDE_TARGET win32 ';' + echo_setenv CONFIG_SUBTYPE win64 ';' + echo_setenv BUILD_ENVIRONMENT msys ';' + echo_setenv RANLIB ranlib ';' + echo_setenv PATH "$P2" + + if [ -f "$ERL_TOP/erts/autoconf/mingw64.config.cache.static" ]; then + echo_setenv OVERRIDE_CONFIG_CACHE_STATIC "$ERL_TOP/erts/autoconf/mingw64.config.cache.static" ';' + fi + + echo_setenv WIN32_WRAPPER_PATH "$WIN32_WRAPPER_PATH" ';' + echo_setenv OVERRIDE_CONFIG_CACHE "$ERL_TOP/erts/autoconf/mingw64.config.cache" ';' + echo_envinfo +} + lookup_prog_in_path () { PROG=$1 @@ -1335,7 +1401,7 @@ fi fi;; *-mingw32) - if [ X"$OVERRIDE_TARGET" = X"" -a X"$1" != X"env_win32" -a X"$1" != X"env_msys32" -a X"$1" != X"env_msys64" ];then + if [ X"$OVERRIDE_TARGET" = X"" -a X"$1" != X"env_win32" -a X"$1" != X"env_msys32" -a X"$1" != X"env_msys64" -a X"$1" != X"env_msys_mingw32" -a X"$1" != X"env_msys_mingw64" ];then echo "Building for windows, you should do the " \ "following first:" >&2 echo 'eval `./otp_build env_win32`' >&2 @@ -1492,6 +1558,10 @@ echo_env_win64;; env_msys64) echo_env_msys64;; + env_msys_mingw32) + echo_env_msys_mingw32;; + env_msys_mingw64) + echo_env_msys_mingw64;; env_vxworks) echo_env_vxworks "$2";; env_cross) Index: otp/make/output.mk.in =================================================================== --- otp.orig/make/output.mk.in 2014-02-02 15:52:25.625000000 +0200 +++ otp/make/output.mk.in 2014-02-02 15:56:44.835517300 +0200 @@ -69,6 +69,10 @@ cpp_verbose = $(cpp_verbose_$(V)) V_CPP = $(cpp_verbose)$(CPP) +cxx_verbose_0 = @echo " CXX "$@; +cxx_verbose = $(cxx_verbose_$(V)) +V_CXX = $(cxx_verbose)$(CXX) + # For the diameter compiler. dia_verbose_0 = @echo " DIA "$@; dia_verbose = $(dia_verbose_$(V))