@@ -189,6 +189,8 @@ DEFAULT_INC_EXCLUDES_DOT := define
189189# CCTYPE := MSVC140
190190# Visual C++ 2015 Express Edition (aka Visual C++ 14.0) (free version)
191191# CCTYPE := MSVC140FREE
192+ # Visual C++ 2017 (aka Visual C++ 14.1) (all versions)
193+ # CCTYPE := MSVC141
192194# MinGW or mingw-w64 with gcc-3.4.5 or later
193195# CCTYPE := GCC
194196
@@ -248,11 +250,9 @@ DEFAULT_INC_EXCLUDES_DOT := define
248250# ALL_STATIC := define
249251
250252#
251- # set the install locations of the compiler include/libraries
252- # Running VCVARS32.BAT is *required* when using Visual C.
253- # Some versions of Visual C don't define MSVCDIR in the environment,
254- # so you may have to set CCHOME explicitly (spaces in the path name should
255- # not be quoted)
253+ # set the install locations of the compiler
254+ # Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using
255+ # Visual C++.
256256#
257257# CCHOME := C:\MinGW
258258
@@ -368,31 +368,27 @@ CCTYPE := MSVC$(MSVCVER)0
368368endif
369369endif
370370
371+ # Versions of Visual C++ up to VC++ 7.1 define $(MSVCDir); versions since then
372+ # define $(VCINSTALLDIR) instead, but for VC++ 14.1 we need the subfolder given
373+ # by $(VCToolsInstallDir).
371374ifeq ($(CCHOME ) ,)
372375ifeq ($(CCTYPE ) ,GCC)
373376# C:\MinGW only for 32bit, strawberry has a better abstraction and is easier to setup
374377CCHOME := C:\strawberry\c
378+ # CCHOME := C:\MinGW
379+ else ifeq ($(CCTYPE),MSVC60)
380+ CCHOME := $(MSVCDir )
381+ else ifeq ($(CCTYPE),MSVC70)
382+ CCHOME := $(MSVCDir )
383+ else ifeq ($(CCTYPE),MSVC70FREE)
384+ CCHOME := $(MSVCDir )
385+ else ifeq ($(CCTYPE),MSVC141)
386+ CCHOME := $(VCToolsInstallDir )
375387else
376- CCHOME := $(MSVCDIR )
388+ CCHOME := $(VCINSTALLDIR )
377389endif
378390endif
379391
380- #
381- # Following sets $Config{incpath} and $Config{libpth}
382- #
383-
384- ifneq ($(GCCCROSS ) ,)
385- CCINCDIR := $(CCHOME ) \$(GCCCROSS ) \include
386- CCLIBDIR := $(CCHOME ) \$(GCCCROSS ) \lib
387- CCDLLDIR := $(CCLIBDIR )
388- ARCHPREFIX := $(GCCCROSS ) -
389- else
390- CCINCDIR := $(CCHOME ) \include
391- CCLIBDIR := $(CCHOME ) \lib
392- CCDLLDIR := $(CCHOME ) \bin
393- ARCHPREFIX :=
394- endif
395-
396392ifeq ($(CCTYPE ) ,GCC)
397393ifeq ($(GCCTARGET ) ,x86_64-w64-mingw32)
398394WIN64 := define
@@ -485,6 +481,35 @@ ifeq ($(USE_LONG_DOUBLE),define)
485481ARCHNAME := $(ARCHNAME ) -ld
486482endif
487483
484+ # Set the install location of the compiler headers/libraries.
485+ # These are saved into $Config{incpath} and $Config{libpth}.
486+ ifneq ($(GCCCROSS ) ,)
487+ CCINCDIR := $(CCHOME ) \$(GCCCROSS ) \include
488+ CCLIBDIR := $(CCHOME ) \$(GCCCROSS ) \lib
489+ ARCHPREFIX := $(GCCCROSS ) -
490+ else
491+ CCINCDIR := $(CCHOME ) \include
492+ ifeq ($(CCTYPE ) ,MSVC141)
493+ ifeq ($(WIN64 ) ,define)
494+ CCLIBDIR := $(CCHOME ) \lib\x64
495+ else
496+ CCLIBDIR := $(CCHOME ) \lib\x86
497+ endif
498+ else
499+ CCLIBDIR := $(CCHOME ) \lib
500+ endif
501+ ARCHPREFIX :=
502+ endif
503+
504+ # Set DLL location for GCC compilers.
505+ ifeq ($(CCTYPE ) ,GCC)
506+ ifneq ($(GCCCROSS ) ,)
507+ CCDLLDIR := $(CCLIBDIR )
508+ else
509+ CCDLLDIR := $(CCHOME ) \bin
510+ endif
511+ endif
512+
488513ARCHDIR = ..\lib\$(ARCHNAME )
489514COREDIR = ..\lib\CORE
490515AUTODIR = ..\lib\auto
@@ -495,7 +520,6 @@ CPANDIR = ..\cpan
495520PODDIR = ..\pod
496521HTMLDIR = .\html
497522
498- #
499523INST_SCRIPT = $(INST_TOP )$(INST_VER ) \bin
500524INST_BIN = $(INST_SCRIPT )$(INST_ARCH )
501525INST_LIB = $(INST_TOP )$(INST_VER ) \lib
@@ -649,6 +673,8 @@ ifeq ($(CCTYPE),MSVC140)
649673LIBC = ucrt.lib
650674else ifeq ($(CCTYPE),MSVC140FREE)
651675LIBC = ucrt.lib
676+ else ifeq ($(CCTYPE),MSVC141)
677+ LIBC = ucrt.lib
652678else
653679LIBC = msvcrt.lib
654680endif
@@ -664,6 +690,8 @@ ifeq ($(CCTYPE),MSVC140)
664690LIBC = ucrtd.lib
665691else ifeq ($(CCTYPE),MSVC140FREE)
666692LIBC = ucrtd.lib
693+ else ifeq ($(CCTYPE),MSVC141)
694+ LIBC = ucrtd.lib
667695else
668696LIBC = msvcrtd.lib
669697endif
@@ -701,9 +729,11 @@ endif
701729
702730# Likewise for deprecated Winsock APIs in VC++ 14.0 for now.
703731ifeq ($(CCTYPE ) ,MSVC140)
704- DEFINES = $( DEFINES ) -D_WINSOCK_DEPRECATED_NO_WARNINGS
732+ DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
705733else ifeq ($(CCTYPE),MSVC140FREE)
706- DEFINES = $(DEFINES ) -D_WINSOCK_DEPRECATED_NO_WARNINGS
734+ DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
735+ else ifeq ($(CCTYPE),MSVC141)
736+ DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
707737endif
708738
709739# In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
@@ -737,6 +767,12 @@ LIBBASEFILES += msvcrtd.lib vcruntimed.lib
737767else
738768LIBBASEFILES += msvcrt.lib vcruntime.lib
739769endif
770+ else ifeq ($(CCTYPE),MSVC141)
771+ ifeq ($(CFG ) ,DebugFull)
772+ LIBBASEFILES += msvcrtd.lib vcruntimed.lib
773+ else
774+ LIBBASEFILES += msvcrt.lib vcruntime.lib
775+ endif
740776endif
741777
742778# Avoid __intel_new_proc_init link error for libircmt.
786822RSC_FLAGS = -DINCLUDE_MANIFEST
787823endif
788824
825+ # VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates)
789826
790827# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm
791828# LINK_FLAGS else subsystem is only needed for EXE building, not XS DLL building
@@ -1314,20 +1351,30 @@ ifeq ($(CCTYPE),MSVC140)
13141351 echo #undef FILE_cnt&& \
13151352 echo #undef FILE_base&& \
13161353 echo #undef FILE_bufsiz&& \
1317- echo #define FILE_ptr(fp) PERLIO_FILE_ptr(fp)&& \
1318- echo #define FILE_cnt(fp) PERLIO_FILE_cnt(fp)&& \
1319- echo #define FILE_base(fp) PERLIO_FILE_base(fp)&& \
1320- echo #define FILE_bufsiz(fp) (PERLIO_FILE_cnt(fp) + PERLIO_FILE_ptr(fp) - PERLIO_FILE_base(fp) )&& \
1354+ echo #define FILE_ptr^ (fp^ ) PERLIO_FILE_ptr^ (fp^ )&& \
1355+ echo #define FILE_cnt^ (fp^ ) PERLIO_FILE_cnt^ (fp^ )&& \
1356+ echo #define FILE_base^ (fp^ ) PERLIO_FILE_base^ (fp^ )&& \
1357+ echo #define FILE_bufsiz^ (fp^) ^ (PERLIO_FILE_cnt^ (fp^ ) + PERLIO_FILE_ptr^ (fp^ ) - PERLIO_FILE_base^ (fp^)^ )&& \
13211358 echo #define I_STDBOOL)>> config.h
13221359else ifeq ($(CCTYPE),MSVC140FREE)
13231360 @(echo # undef FILE_ptr&& \
13241361 echo #undef FILE_cnt&& \
13251362 echo #undef FILE_base&& \
13261363 echo #undef FILE_bufsiz&& \
1327- echo #define FILE_ptr(fp) PERLIO_FILE_ptr(fp)&& \
1328- echo #define FILE_cnt(fp) PERLIO_FILE_cnt(fp)&& \
1329- echo #define FILE_base(fp) PERLIO_FILE_base(fp)&& \
1330- echo #define FILE_bufsiz(fp) (PERLIO_FILE_cnt(fp) + PERLIO_FILE_ptr(fp) - PERLIO_FILE_base(fp))&& \
1364+ echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
1365+ echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
1366+ echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
1367+ echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
1368+ echo #define I_STDBOOL)>> config.h
1369+ else ifeq ($(CCTYPE),MSVC141)
1370+ @(echo # undef FILE_ptr&& \
1371+ echo #undef FILE_cnt&& \
1372+ echo #undef FILE_base&& \
1373+ echo #undef FILE_bufsiz&& \
1374+ echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
1375+ echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
1376+ echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
1377+ echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
13311378 echo #define I_STDBOOL)>> config.h
13321379endif
13331380ifeq ($(USE_LARGE_FILES ) ,define)
0 commit comments