This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Improve support for building on Windows with mingw-w64.sf.net binaries
authorSteve Hay <steve.m.hay@googlemail.com>
Mon, 9 Jul 2012 08:16:21 +0000 (09:16 +0100)
committerSteve Hay <steve.m.hay@googlemail.com>
Mon, 9 Jul 2012 08:20:01 +0000 (09:20 +0100)
The cross-compiler has headers and libraries in a sub-directory called
x86_64-w64-mingw32\, which is also copied to mingw\ in the automated
builds but not in other builds (e.g. rubenvb's build), so rely on the
folder which is always present.

The DLLs required for op\taint.t to work are nomrally found in \bin\, but
for the cross-compiler are found in the same folder as the libraries since
they are 64-bit DLLs, whereas the compiler binaries themselves are 32-bit.

With these fixes we now support the following MinGW/gcc compilers:

Native 32-bit compilers (WIN64=undef GCCCROSS=undef): mingw.org, rubenvb's
build of mingw-w64.sf.net, Mark Dootson's build of the same (used in
Strawberry Perl).

Native 64-bit compilers (WIN64=define GCCCROSS=undef): rubenvb's build of
mingw-w64.sf.net, Mark Dootson's build of the same (used in Strawberry
Perl).

32-bit cross-compilers producing 64-bit binaries (WIN64=define
GCCCROSS=define): rubenvb's build of mingw-w64.sf.net, the automated build
of the same.

There is currently no automated build of a native 64-bit compiler on
mingw-w64.sf.net, and their automated build of a native 32-bit compiler is
not currently supported since it uses an anomalous naming convention
compared to the other options above.

See http://www.nntp.perl.org/group/perl.perl5.porters/2012/07/msg189461.html
for discussion.

win32/makefile.mk

index c6170f9..077cde2 100644 (file)
@@ -194,11 +194,13 @@ CCHOME            *= $(MSVCDIR)
 #
 
 .IF "$(GCCCROSS)" == "define"
-CCINCDIR *= $(CCHOME)\mingw\include
-CCLIBDIR *= $(CCHOME)\mingw\lib
+CCINCDIR *= $(CCHOME)\x86_64-w64-mingw32\include
+CCLIBDIR *= $(CCHOME)\x86_64-w64-mingw32\lib
+CCDLLDIR *= $(CCLIBDIR)
 .ELSE
 CCINCDIR *= $(CCHOME)\include
 CCLIBDIR *= $(CCHOME)\lib
+CCDLLDIR *= $(CCHOME)\bin
 .ENDIF
 
 #
@@ -1419,11 +1421,9 @@ test-prep : all utils ..\pod\perltoc.pod
 # your compiler, and upon the values of "x".
 # libstdc++-6.dll is copied if it exists as it, too, may then be needed.
 # Without this copying, the op/taint.t test script will fail.
-       if exist $(CCHOME)\bin\libgcc_s_sjlj-1.dll $(XCOPY) $(CCHOME)\bin\libgcc_s_sjlj-1.dll ..\t\$(NULL)
-       if exist $(CCHOME)\bin\libgcc_s_dw2-1.dll $(XCOPY) $(CCHOME)\bin\libgcc_s_dw2-1.dll ..\t\$(NULL)
-       if exist $(CCHOME)\bin\libgcc_s_1.dll $(XCOPY) $(CCHOME)\bin\libgcc_s_1.dll ..\t\$(NULL)
-       if exist $(CCHOME)\bin\w64gcc_s_sjlj-1.dll $(XCOPY) $(CCHOME)\bin\w64gcc_s_sjlj-1.dll ..\t\$(NULL)
-       if exist $(CCHOME)\bin\libstdc++-6.dll $(XCOPY) $(CCHOME)\bin\libstdc++-6.dll ..\t\$(NULL)
+       if exist $(CCDLLDIR)\libgcc_s_sjlj-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_sjlj-1.dll ..\t\$(NULL)
+       if exist $(CCDLLDIR)\libgcc_s_dw2-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_dw2-1.dll ..\t\$(NULL)
+       if exist $(CCDLLDIR)\libstdc++-6.dll $(XCOPY) $(CCDLLDIR)\libstdc++-6.dll ..\t\$(NULL)
 .ENDIF
 
 test : test-prep