aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-02-21 13:39:36 -0800
committerGitHub <noreply@github.com>2017-02-21 13:39:36 -0800
commit7d4df89c1dfff0b2bad0165ac4579f6352935a94 (patch)
tree8b87d29fb74fb24984d5aff9b021f14d95afb5ab /scripts
parentd9462fdf490d3396cac58b1a935b1b8a982b3a72 (diff)
parentb921dce5fc17bd4c1c206b79eb0a7b8758dcf5bf (diff)
downloadvcpkg-7d4df89c1dfff0b2bad0165ac4579f6352935a94.tar.gz
vcpkg-7d4df89c1dfff0b2bad0165ac4579f6352935a94.zip
Merge branch 'master' into master
Diffstat (limited to 'scripts')
-rw-r--r--scripts/bootstrap.ps13
-rw-r--r--scripts/cmake/vcpkg_apply_patches.cmake2
-rw-r--r--scripts/cmake/vcpkg_build_cmake.cmake10
-rw-r--r--scripts/cmake/vcpkg_common_functions.cmake4
-rw-r--r--scripts/cmake/vcpkg_configure_cmake.cmake14
-rw-r--r--scripts/cmake/vcpkg_configure_meson.cmake72
-rw-r--r--scripts/cmake/vcpkg_find_acquire_program.cmake52
-rw-r--r--scripts/cmake/vcpkg_get_program_files_32_bit.cmake7
-rw-r--r--scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake7
-rw-r--r--scripts/cmake/vcpkg_install_cmake.cmake17
-rw-r--r--scripts/cmake/vcpkg_install_meson.cmake23
-rw-r--r--scripts/fetchDependency.ps157
-rw-r--r--scripts/findAnyMSBuildWithCppPlatformToolset.ps165
-rw-r--r--scripts/findTargetPlatformVersion.ps142
-rw-r--r--scripts/findVisualStudioInstallationInstances.ps14
-rw-r--r--scripts/getProgramFiles32bit.ps111
-rw-r--r--scripts/getProgramFilesPlatformBitness.ps111
-rw-r--r--scripts/templates/portfile.in.cmake1
18 files changed, 343 insertions, 59 deletions
diff --git a/scripts/bootstrap.ps1 b/scripts/bootstrap.ps1
index 98ccb40ad..9907e31fb 100644
--- a/scripts/bootstrap.ps1
+++ b/scripts/bootstrap.ps1
@@ -26,7 +26,8 @@ try{
$msbuildExeWithPlatformToolset = & $scriptsDir\findAnyMSBuildWithCppPlatformToolset.ps1
$msbuildExe = $msbuildExeWithPlatformToolset[0]
$platformToolset = $msbuildExeWithPlatformToolset[1]
- & $msbuildExe "/p:VCPKG_VERSION=-$gitHash" "/p:DISABLE_METRICS=$disableMetrics" /p:Configuration=Release /p:Platform=x86 /p:PlatformToolset=$platformToolset /m dirs.proj
+ $targetPlatformVersion = & $scriptsDir\findTargetPlatformVersion.ps1
+ & $msbuildExe "/p:VCPKG_VERSION=-$gitHash" "/p:DISABLE_METRICS=$disableMetrics" /p:Configuration=Release /p:Platform=x86 /p:PlatformToolset=$platformToolset /p:TargetPlatformVersion=$targetPlatformVersion /m dirs.proj
Write-Verbose("Placing vcpkg.exe in the correct location")
diff --git a/scripts/cmake/vcpkg_apply_patches.cmake b/scripts/cmake/vcpkg_apply_patches.cmake
index e17d53b08..1ef138a1e 100644
--- a/scripts/cmake/vcpkg_apply_patches.cmake
+++ b/scripts/cmake/vcpkg_apply_patches.cmake
@@ -22,7 +22,7 @@
function(vcpkg_apply_patches)
cmake_parse_arguments(_ap "QUIET" "SOURCE_PATH" "PATCHES" ${ARGN})
- find_program(GIT git)
+ find_program(GIT NAMES git git.cmd)
set(PATCHNUM 0)
foreach(PATCH ${_ap_PATCHES})
message(STATUS "Applying patch ${PATCH}")
diff --git a/scripts/cmake/vcpkg_build_cmake.cmake b/scripts/cmake/vcpkg_build_cmake.cmake
index 3e8363a2c..18e2a8b00 100644
--- a/scripts/cmake/vcpkg_build_cmake.cmake
+++ b/scripts/cmake/vcpkg_build_cmake.cmake
@@ -17,9 +17,15 @@ function(vcpkg_build_cmake)
list(APPEND MSVC_EXTRA_ARGS "/m")
endif()
+ if(EXISTS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/build.ninja)
+ set(BUILD_ARGS -v) # verbose output
+ else()
+ set(BUILD_ARGS ${MSVC_EXTRA_ARGS})
+ endif()
+
message(STATUS "Build ${TARGET_TRIPLET}-rel")
vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${MSVC_EXTRA_ARGS}
+ COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${BUILD_ARGS}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
LOGNAME build-${TARGET_TRIPLET}-rel
)
@@ -27,7 +33,7 @@ function(vcpkg_build_cmake)
message(STATUS "Build ${TARGET_TRIPLET}-dbg")
vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} --build . --config Debug -- ${MSVC_EXTRA_ARGS}
+ COMMAND ${CMAKE_COMMAND} --build . --config Debug -- ${BUILD_ARGS}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
LOGNAME build-${TARGET_TRIPLET}-dbg
)
diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake
index 6e60bf2bc..50c4ed2dc 100644
--- a/scripts/cmake/vcpkg_common_functions.cmake
+++ b/scripts/cmake/vcpkg_common_functions.cmake
@@ -7,8 +7,12 @@ include(vcpkg_build_cmake)
include(vcpkg_build_msbuild)
include(vcpkg_build_qmake)
include(vcpkg_install_cmake)
+include(vcpkg_install_meson)
include(vcpkg_configure_cmake)
+include(vcpkg_configure_meson)
include(vcpkg_configure_qmake)
include(vcpkg_apply_patches)
include(vcpkg_copy_pdbs)
include(vcpkg_copy_tool_dependencies)
+include(vcpkg_get_program_files_32_bit)
+include(vcpkg_get_program_files_platform_bitness)
diff --git a/scripts/cmake/vcpkg_configure_cmake.cmake b/scripts/cmake/vcpkg_configure_cmake.cmake
index fbebe13a4..85a67a401 100644
--- a/scripts/cmake/vcpkg_configure_cmake.cmake
+++ b/scripts/cmake/vcpkg_configure_cmake.cmake
@@ -1,6 +1,5 @@
-find_program(vcpkg_configure_cmake_NINJA ninja)
function(vcpkg_configure_cmake)
- cmake_parse_arguments(_csc "" "SOURCE_PATH;GENERATOR" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ARGN})
+ cmake_parse_arguments(_csc "PREFER_NINJA" "SOURCE_PATH;GENERATOR" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ARGN})
if(NOT VCPKG_PLATFORM_TOOLSET)
message(FATAL_ERROR "Vcpkg has been updated with VS2017 support, however you need to rebuild vcpkg.exe by re-running bootstrap.ps1\n powershell -exec bypass scripts\\bootstrap.ps1\n")
@@ -8,14 +7,14 @@ function(vcpkg_configure_cmake)
if(_csc_GENERATOR)
set(GENERATOR ${_csc_GENERATOR})
+ elseif(_csc_PREFER_NINJA AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ set(GENERATOR "Ninja")
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND TRIPLET_SYSTEM_ARCH MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
set(GENERATOR "Visual Studio 14 2015")
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND TRIPLET_SYSTEM_ARCH MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
set(GENERATOR "Visual Studio 14 2015 Win64")
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND TRIPLET_SYSTEM_ARCH MATCHES "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
set(GENERATOR "Visual Studio 14 2015 ARM")
- # elseif(NOT vcpkg_configure_cmake_NINJA MATCHES "NOTFOUND")
- # set(GENERATOR "Ninja")
elseif(TRIPLET_SYSTEM_ARCH MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
set(GENERATOR "Visual Studio 14 2015")
elseif(TRIPLET_SYSTEM_ARCH MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
@@ -36,6 +35,13 @@ function(vcpkg_configure_cmake)
elseif(TRIPLET_SYSTEM_ARCH MATCHES "arm")
set(GENERATOR "Visual Studio 15 2017 ARM" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141")
endif()
+
+ # If we use Ninja, make sure it's on PATH
+ if(GENERATOR STREQUAL "Ninja")
+ vcpkg_find_acquire_program(NINJA)
+ get_filename_component(NINJA_PATH ${NINJA} DIRECTORY)
+ set(ENV{PATH} "$ENV{PATH};${NINJA_PATH}")
+ endif()
file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
diff --git a/scripts/cmake/vcpkg_configure_meson.cmake b/scripts/cmake/vcpkg_configure_meson.cmake
new file mode 100644
index 000000000..277f91e11
--- /dev/null
+++ b/scripts/cmake/vcpkg_configure_meson.cmake
@@ -0,0 +1,72 @@
+function(vcpkg_configure_meson)
+ cmake_parse_arguments(_vcm "" "SOURCE_PATH" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ARGN})
+
+ file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+
+ # use the same compiler options as in vcpkg_configure_cmake
+ set(MESON_COMMON_CFLAGS "${MESON_COMMON_CFLAGS} /DWIN32 /D_WINDOWS /W3 /utf-8")
+ set(MESON_COMMON_CXXFLAGS "${MESON_COMMON_CXXFLAGS} /DWIN32 /D_WINDOWS /W3 /utf-8 /GR /EHsc")
+
+ if(DEFINED VCPKG_CRT_LINKAGE AND VCPKG_CRT_LINKAGE STREQUAL dynamic)
+ set(MESON_DEBUG_CFLAGS "${MESON_DEBUG_CFLAGS} /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1")
+ set(MESON_DEBUG_CXXFLAGS "${MESON_DEBUG_CXXFLAGS} /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1")
+
+ set(MESON_RELEASE_CFLAGS "${MESON_RELEASE_CFLAGS} /MD /O2 /Oi /Gy /DNDEBUG /Zi")
+ set(MESON_RELEASE_CXXFLAGS "${MESON_RELEASE_CXXFLAGS} /MD /O2 /Oi /Gy /DNDEBUG /Zi")
+ elseif(DEFINED VCPKG_CRT_LINKAGE AND VCPKG_CRT_LINKAGE STREQUAL static)
+ set(MESON_DEBUG_CFLAGS "${MESON_DEBUG_CFLAGS} /D_DEBUG /MTd /Zi /Ob0 /Od /RTC1")
+ set(MESON_DEBUG_CXXFLAGS "${MESON_DEBUG_CXXFLAGS} /D_DEBUG /MTd /Zi /Ob0 /Od /RTC1")
+
+ set(MESON_RELEASE_CFLAGS "${MESON_RELEASE_CFLAGS} /MT /O2 /Oi /Gy /DNDEBUG /Zi")
+ set(MESON_RELEASE_CXXFLAGS "${MESON_RELEASE_CXXFLAGS} /MT /O2 /Oi /Gy /DNDEBUG /Zi")
+ endif()
+
+ set(MESON_COMMON_LDFLAGS "${MESON_COMMON_LDFLAGS} /DEBUG")
+ set(MESON_RELEASE_LDFLAGS "${MESON_RELEASE_LDFLAGS} /INCREMENTAL:NO /OPT:REF /OPT:ICF")
+
+ # select meson cmd-line options
+ list(APPEND _vcm_OPTIONS --buildtype plain --backend ninja)
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ list(APPEND _vcm_OPTIONS --default-library shared)
+ else()
+ list(APPEND _vcm_OPTIONS --default-library static)
+ endif()
+
+ list(APPEND _vcm_OPTIONS_DEBUG --prefix ${CURRENT_PACKAGES_DIR}/debug --includedir ../include)
+ list(APPEND _vcm_OPTIONS_RELEASE --prefix ${CURRENT_PACKAGES_DIR})
+
+ vcpkg_find_acquire_program(MESON)
+ vcpkg_find_acquire_program(NINJA)
+ get_filename_component(NINJA_PATH ${NINJA} DIRECTORY)
+ set(ENV{PATH} "$ENV{PATH};${NINJA_PATH}")
+
+ # configure release
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ set(ENV{CFLAGS} "${MESON_COMMON_CFLAGS} ${MESON_RELEASE_CFLAGS}")
+ set(ENV{CXXFLAGS} "${MESON_COMMON_CXXFLAGS} ${MESON_RELEASE_CXXFLAGS}")
+ set(ENV{LDFLAGS} "${MESON_COMMON_LDFLAGS} ${MESON_RELEASE_LDFLAGS}")
+ set(ENV{CPPFLAGS} "${MESON_COMMON_CPPFLAGS} ${MESON_RELEASE_CPPFLAGS}")
+ vcpkg_execute_required_process(
+ COMMAND ${MESON} ${_vcm_OPTIONS} ${_vcm_OPTIONS_RELEASE} ${_vcm_SOURCE_PATH}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME config-${TARGET_TRIPLET}-rel
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel done")
+
+ # configure debug
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ set(ENV{CFLAGS} "${MESON_COMMON_CFLAGS} ${MESON_DEBUG_CFLAGS}")
+ set(ENV{CXXFLAGS} "${MESON_COMMON_CXXFLAGS} ${MESON_DEBUG_CXXFLAGS}")
+ set(ENV{LDFLAGS} "${MESON_COMMON_LDFLAGS} ${MESON_DEBUG_LDFLAGS}")
+ set(ENV{CPPFLAGS} "${MESON_COMMON_CPPFLAGS} ${MESON_DEBUG_CPPFLAGS}")
+ vcpkg_execute_required_process(
+ COMMAND ${MESON} ${_vcm_OPTIONS} ${_vcm_OPTIONS_DEBUG} ${_vcm_SOURCE_PATH}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME config-${TARGET_TRIPLET}-dbg
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done")
+
+endfunction()
diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake
index cd4a554f4..7e4f1ba9c 100644
--- a/scripts/cmake/vcpkg_find_acquire_program.cmake
+++ b/scripts/cmake/vcpkg_find_acquire_program.cmake
@@ -4,6 +4,11 @@ function(vcpkg_find_acquire_program VAR)
endif()
unset(NOEXTRACT)
+ unset(SUBDIR)
+ unset(REQUIRED_INTERPRETER)
+
+ vcpkg_get_program_files_platform_bitness(PROGRAM_FILES_PLATFORM_BITNESS)
+ vcpkg_get_program_files_32_bit(PROGRAM_FILES_32_BIT)
if(VAR MATCHES "PERL")
set(PROGNAME perl)
@@ -13,10 +18,10 @@ function(vcpkg_find_acquire_program VAR)
set(HASH a6e685ea24376f50db5f06c5b46075f1d3be25168fa1f27fa9b02e2ac017826cee62a2b43562f9b6c989337a231ba914416c110075457764de2d11f99d5e0f26)
elseif(VAR MATCHES "NASM")
set(PROGNAME nasm)
- set(PATHS ${DOWNLOADS}/tools/nasm/nasm-2.11.08)
- set(URL "http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/win32/nasm-2.11.08-win32.zip")
- set(ARCHIVE "nasm-2.11.08-win32.zip")
- set(HASH cd80b540530d3995d15dc636e97673f1d34f471baadf1dac993165232c61efefe7f8ec10625f8f718fc89f0dd3dcb6a4595e0cf40c5fd7cbac1b71672b644d2d)
+ set(PATHS ${DOWNLOADS}/tools/nasm/nasm-2.12.02)
+ set(URL "http://www.nasm.us/pub/nasm/releasebuilds/2.12.02/win32/nasm-2.12.02-win32.zip")
+ set(ARCHIVE "nasm-2.12.02-win32.zip")
+ set(HASH df7aaba094e17832688c88993997612a2e2c96cc3dc14ca3e8347b44c7762115f5a7fc6d7f20be402553aaa4c9e43ddfcf6228f581cfe89289bae550de151b36)
elseif(VAR MATCHES "YASM")
set(PROGNAME yasm)
set(PATHS ${DOWNLOADS}/tools/yasm)
@@ -59,29 +64,54 @@ function(vcpkg_find_acquire_program VAR)
set(HASH 23a26dc7e29979bec5dcd3bfcabf76397b93ace64f5d46f2254d6420158bac5eff1c1a8454e3427e7a2fe2c233c5f2cffc87b376772399e12e40b51be2c065f4)
elseif(VAR MATCHES "7Z")
set(PROGNAME 7z)
- set(PATHS "C:/Program Files/7-Zip" ${DOWNLOADS}/tools/7z/Files/7-Zip)
+ set(PATHS "${PROGRAM_FILES_PLATFORM_BITNESS}/7-Zip" "${PROGRAM_FILES_32_BIT}/7-Zip" ${DOWNLOADS}/tools/7z/Files/7-Zip)
set(URL "http://7-zip.org/a/7z1604.msi")
set(ARCHIVE "7z1604.msi")
set(HASH 556f95f7566fe23704d136239e4cf5e2a26f939ab43b44145c91b70d031a088d553e5c21301f1242a2295dcde3143b356211f0108c68e65eef8572407618326d)
+ elseif(VAR MATCHES "NINJA")
+ set(PROGNAME ninja)
+ set(SUBDIR "ninja-1.7.2")
+ set(PATHS ${DOWNLOADS}/tools/ninja/${SUBDIR})
+ set(URL "https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip")
+ set(ARCHIVE "ninja-win.zip")
+ set(HASH cccab9281b274c564f9ad77a2115be1f19be67d7b2ee14a55d1db1b27f3b68db8e76076e4f804b61eb8e573e26a8ecc9985675a8dcf03fd7a77b7f57234f1393)
+ elseif(VAR MATCHES "MESON")
+ set(PROGNAME meson)
+ set(REQUIRED_INTERPRETER PYTHON3)
+ set(SCRIPTNAME meson.py)
+ set(PATHS ${DOWNLOADS}/tools/meson/meson-0.38.1)
+ set(URL "https://github.com/mesonbuild/meson/archive/0.38.1.zip")
+ set(ARCHIVE "meson-0.38.1.zip")
+ set(HASH 89642b1d976af7e29e9ca2b1a378510ce286ebd90a8234e898f3dd9dd7151538fdfc61fba770681605dad843b77b344fee94f992f18328655669d5f603c7fee5)
else()
message(FATAL "unknown tool ${VAR} -- unable to acquire.")
endif()
- find_program(${VAR} ${PROGNAME} PATHS ${PATHS})
+ macro(do_find)
+ if(NOT DEFINED REQUIRED_INTERPRETER)
+ find_program(${VAR} ${PROGNAME} PATHS ${PATHS})
+ else()
+ vcpkg_find_acquire_program(${REQUIRED_INTERPRETER})
+ find_file(SCIRPT ${SCRIPTNAME} PATHS ${PATHS})
+ set(${VAR} ${${REQUIRED_INTERPRETER}} ${SCIRPT})
+ endif()
+ endmacro()
+
+ do_find()
if(${VAR} MATCHES "-NOTFOUND")
file(DOWNLOAD ${URL} ${DOWNLOADS}/${ARCHIVE}
EXPECTED_HASH SHA512=${HASH}
SHOW_PROGRESS
)
- file(MAKE_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME})
+ file(MAKE_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR})
if(DEFINED NOEXTRACT)
- file(COPY ${DOWNLOADS}/${ARCHIVE} DESTINATION ${DOWNLOADS}/tools/${PROGNAME})
+ file(COPY ${DOWNLOADS}/${ARCHIVE} DESTINATION ${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR})
else()
get_filename_component(ARCHIVE_EXTENSION ${ARCHIVE} EXT)
string(TOLOWER "${ARCHIVE_EXTENSION}" ARCHIVE_EXTENSION)
if(${ARCHIVE_EXTENSION} STREQUAL ".msi")
file(TO_NATIVE_PATH "${DOWNLOADS}/${ARCHIVE}" ARCHIVE_NATIVE_PATH)
- file(TO_NATIVE_PATH "${DOWNLOADS}/tools/${PROGNAME}" DESTINATION_NATIVE_PATH)
+ file(TO_NATIVE_PATH "${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR}" DESTINATION_NATIVE_PATH)
execute_process(
COMMAND msiexec /a ${ARCHIVE_NATIVE_PATH} /qn TARGETDIR=${DESTINATION_NATIVE_PATH}
WORKING_DIRECTORY ${DOWNLOADS}
@@ -89,12 +119,12 @@ function(vcpkg_find_acquire_program VAR)
else()
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xzf ${DOWNLOADS}/${ARCHIVE}
- WORKING_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME}
+ WORKING_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR}
)
endif()
endif()
- find_program(${VAR} ${PROGNAME} PATHS ${PATHS})
+ do_find()
endif()
set(${VAR} ${${VAR}} PARENT_SCOPE)
diff --git a/scripts/cmake/vcpkg_get_program_files_32_bit.cmake b/scripts/cmake/vcpkg_get_program_files_32_bit.cmake
new file mode 100644
index 000000000..386e59c75
--- /dev/null
+++ b/scripts/cmake/vcpkg_get_program_files_32_bit.cmake
@@ -0,0 +1,7 @@
+function(vcpkg_get_program_files_32_bit ret)
+ if(DEFINED ENV{ProgramFiles\(X86\)})
+ set(${ret} $ENV{ProgramFiles\(X86\)} PARENT_SCOPE)
+ else()
+ set(${ret} $ENV{PROGRAMFILES} PARENT_SCOPE)
+ endif()
+endfunction() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake b/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake
new file mode 100644
index 000000000..44fba4d62
--- /dev/null
+++ b/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake
@@ -0,0 +1,7 @@
+function(vcpkg_get_program_files_platform_bitness ret)
+ if(DEFINED ENV{ProgramW6432})
+ set(${ret} $ENV{ProgramW6432} PARENT_SCOPE)
+ else()
+ set(${ret} $ENV{PROGRAMFILES} PARENT_SCOPE)
+ endif()
+endfunction() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_install_cmake.cmake b/scripts/cmake/vcpkg_install_cmake.cmake
index f29f3ce5d..0ebff6961 100644
--- a/scripts/cmake/vcpkg_install_cmake.cmake
+++ b/scripts/cmake/vcpkg_install_cmake.cmake
@@ -1,9 +1,14 @@
function(vcpkg_install_cmake)
cmake_parse_arguments(_bc "MSVC_64_TOOLSET;DISABLE_PARALLEL" "" "" ${ARGN})
- set(MSVC_EXTRA_ARGS)
+ set(MSVC_EXTRA_ARGS
+ "/p:VCPkgLocalAppDataDisabled=true"
+ "/p:UseIntelMKL=No"
+ )
# Specifies the architecture of the toolset, NOT the architecture of the produced binary
+ # This can help libraries that cause the linker to run out of memory.
+ # https://support.microsoft.com/en-us/help/2891057/linker-fatal-error-lnk1102-out-of-memory
if (_bc_MSVC_64_TOOLSET)
list(APPEND MSVC_EXTRA_ARGS "/p:PreferredToolArchitecture=x64")
endif()
@@ -11,10 +16,16 @@ function(vcpkg_install_cmake)
if (NOT _bc_DISABLE_PARALLEL)
list(APPEND MSVC_EXTRA_ARGS "/m")
endif()
+
+ if(EXISTS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/build.ninja)
+ set(BUILD_ARGS -v) # verbose output
+ else()
+ set(BUILD_ARGS ${MSVC_EXTRA_ARGS})
+ endif()
message(STATUS "Package ${TARGET_TRIPLET}-rel")
vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} --build . --config Release --target install -- /p:VCPkgLocalAppDataDisabled=true ${MSVC_EXTRA_ARGS}
+ COMMAND ${CMAKE_COMMAND} --build . --config Release --target install -- ${BUILD_ARGS}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
LOGNAME package-${TARGET_TRIPLET}-rel
)
@@ -22,7 +33,7 @@ function(vcpkg_install_cmake)
message(STATUS "Package ${TARGET_TRIPLET}-dbg")
vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} --build . --config Debug --target install -- /p:VCPkgLocalAppDataDisabled=true ${MSVC_EXTRA_ARGS}
+ COMMAND ${CMAKE_COMMAND} --build . --config Debug --target install -- ${BUILD_ARGS}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
LOGNAME package-${TARGET_TRIPLET}-dbg
)
diff --git a/scripts/cmake/vcpkg_install_meson.cmake b/scripts/cmake/vcpkg_install_meson.cmake
new file mode 100644
index 000000000..f6d49288c
--- /dev/null
+++ b/scripts/cmake/vcpkg_install_meson.cmake
@@ -0,0 +1,23 @@
+function(vcpkg_install_meson)
+
+ vcpkg_find_acquire_program(NINJA)
+
+ unset(ENV{DESTDIR}) # installation directory was already specified with '--prefix' option
+
+ message(STATUS "Package ${TARGET_TRIPLET}-rel")
+ vcpkg_execute_required_process(
+ COMMAND ${NINJA} install -v
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME package-${TARGET_TRIPLET}-rel
+ )
+ message(STATUS "Package ${TARGET_TRIPLET}-rel done")
+
+ message(STATUS "Package ${TARGET_TRIPLET}-dbg")
+ vcpkg_execute_required_process(
+ COMMAND ${NINJA} install -v
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME package-${TARGET_TRIPLET}-dbg
+ )
+ message(STATUS "Package ${TARGET_TRIPLET}-dbg done")
+
+endfunction()
diff --git a/scripts/fetchDependency.ps1 b/scripts/fetchDependency.ps1
index 8d31b0edb..6a40c9758 100644
--- a/scripts/fetchDependency.ps1
+++ b/scripts/fetchDependency.ps1
@@ -1,8 +1,14 @@
[CmdletBinding()]
param(
- [string]$Dependency
+ [string]$Dependency,
+ [ValidateNotNullOrEmpty()]
+ [string]$downloadPromptOverride = "0"
)
+$downloadPromptOverride_NO_OVERRIDE= 0
+$downloadPromptOverride_DO_NOT_PROMPT = 1
+$downloadPromptOverride_ALWAYS_PROMPT = 2
+
Import-Module BitsTransfer
$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
@@ -12,9 +18,13 @@ $downloadsDir = "$vcpkgRootDir\downloads"
function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
{
- function promptForDownload([string]$title, [string]$message, [string]$yesDescription, [string]$noDescription)
+ function promptForDownload([string]$title, [string]$message, [string]$yesDescription, [string]$noDescription, [string]$downloadPromptOverride)
{
- if ((Test-Path "$downloadsDir\AlwaysAllowEverything") -Or (Test-Path "$downloadsDir\AlwaysAllowDownloads"))
+ $do_not_prompt = ($downloadPromptOverride -eq $downloadPromptOverride_DO_NOT_PROMPT) -Or
+ (Test-Path "$downloadsDir\AlwaysAllowEverything") -Or
+ (Test-Path "$downloadsDir\AlwaysAllowDownloads")
+
+ if (($downloadPromptOverride -ne $downloadPromptOverride_ALWAYS_PROMPT) -And $do_not_prompt)
{
return $true
}
@@ -57,7 +67,7 @@ function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
$yesDescription = "Downloads " + $Dependency + " v" + $downloadVersion +" app-locally."
$noDescription = "Does not download " + $Dependency + "."
- $userAllowedDownload = promptForDownload $title $message $yesDescription $noDescription
+ $userAllowedDownload = promptForDownload $title $message $yesDescription $noDescription $downloadPromptOverride
if (!$userAllowedDownload)
{
throw [System.IO.FileNotFoundException] ("Could not detect suitable version of " + $Dependency + " and download not allowed")
@@ -113,8 +123,11 @@ function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
function Expand-ZIPFile($file, $destination)
{
- Write-Host($file)
- Write-Host($destination)
+ if (!(Test-Path $destination))
+ {
+ New-Item -ItemType Directory -Path $destination | Out-Null
+ }
+
$shell = new-object -com shell.application
$zip = $shell.NameSpace($file)
foreach($item in $zip.items())
@@ -126,13 +139,14 @@ function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
if($Dependency -eq "cmake")
{
- $requiredVersion = "3.7.2"
- $downloadVersion = "3.7.2"
- $url = "https://cmake.org/files/v3.7/cmake-3.7.2-win32-x86.zip"
- $downloadPath = "$downloadsDir\cmake-3.7.2-win32-x86.zip"
- $expectedDownloadedFileHash = "ec5e299d412e0272e01d4de5bf07718f42c96361f83d51cc39f91bf49cc3e5c3"
- $executableFromDownload = "$downloadsDir\cmake-3.7.2-win32-x86\bin\cmake.exe"
+ $requiredVersion = "3.8.0"
+ $downloadVersion = "3.8.0"
+ $url = "https://cmake.org/files/v3.8/cmake-3.8.0-rc1-win32-x86.zip"
+ $downloadPath = "$downloadsDir\cmake-3.8.0-rc1-win32-x86.zip"
+ $expectedDownloadedFileHash = "ccdbd92fbfb548aa35a545e4e45ff19fd6d13c88c90370acdf940c3cf464e9c9"
+ $executableFromDownload = "$downloadsDir\cmake-3.8.0-rc1-win32-x86\bin\cmake.exe"
$extractionType = $ExtractionType_ZIP
+ $extractionFolder = $downloadsDir
}
elseif($Dependency -eq "nuget")
{
@@ -147,14 +161,15 @@ function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
elseif($Dependency -eq "git")
{
$requiredVersion = "2.0.0"
- $downloadVersion = "2.11.0"
- $url = "https://github.com/git-for-windows/git/releases/download/v2.11.0.windows.3/PortableGit-2.11.0.3-32-bit.7z.exe" # We choose the 32-bit version
- $downloadPath = "$downloadsDir\PortableGit-2.11.0.3-32-bit.7z.exe"
- $expectedDownloadedFileHash = "8bf3769c37945e991903dd1b988c6b1d97bbf0f3afc9851508974f38bf94dc01"
- # There is another copy of git.exe in PortableGit\bin. However, an installed version of git add the cmd dir to the PATH.
+ $downloadVersion = "2.11.1"
+ $url = "https://github.com/git-for-windows/git/releases/download/v2.11.1.windows.1/MinGit-2.11.1-32-bit.zip" # We choose the 32-bit version
+ $downloadPath = "$downloadsDir\MinGit-2.11.1-32-bit.zip"
+ $expectedDownloadedFileHash = "6ca79af09015625f350ef4ad74a75cfb001b340aec095b6963be9d45becb3bba"
+ # There is another copy of git.exe in MinGit\bin. However, an installed version of git add the cmd dir to the PATH.
# Therefore, choosing the cmd dir here as well.
- $executableFromDownload = "$downloadsDir\PortableGit\cmd\git.exe"
- $extractionType = $ExtractionType_SELF_EXTRACTING_7Z
+ $executableFromDownload = "$downloadsDir\MinGit-2.11.1-32-bit\cmd\git.exe"
+ $extractionType = $ExtractionType_ZIP
+ $extractionFolder = "$downloadsDir\MinGit-2.11.1-32-bit"
}
else
{
@@ -188,8 +203,8 @@ function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
{
if (-not (Test-Path $executableFromDownload)) # consider renaming the extraction folder to make sure the extraction finished
{
- # Expand-Archive $downloadPath -dest "$downloadsDir" -Force # Requires powershell 5+
- Expand-ZIPFile -File $downloadPath -Destination $downloadsDir
+ # Expand-Archive $downloadPath -dest "$extractionFolder" -Force # Requires powershell 5+
+ Expand-ZIPFile -File $downloadPath -Destination $extractionFolder
}
}
elseif($extractionType -eq $ExtractionType_SELF_EXTRACTING_7Z)
diff --git a/scripts/findAnyMSBuildWithCppPlatformToolset.ps1 b/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
index 1be4a4e6d..72155b4f5 100644
--- a/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
+++ b/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
@@ -1,32 +1,69 @@
[CmdletBinding()]
param(
+ [Parameter(Mandatory=$False)]
+ [switch]$DisableVS2017 = $False,
+ [Parameter(Mandatory=$False)]
+ [switch]$DisableVS2015 = $False
)
$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
-# VS2017
-$VisualStudio2017InstallationInstances = & $scriptsDir\findVisualStudioInstallationInstances.ps1
-foreach ($instance in $VisualStudio2017InstallationInstances)
+if (-not $DisableVS2017)
{
- $VCFolder= "$instance\VC\Tools\MSVC\"
-
- if (Test-Path $VCFolder)
+ # VS2017
+ $VisualStudio2017InstallationInstances = & $scriptsDir\findVisualStudioInstallationInstances.ps1
+ foreach ($instance in $VisualStudio2017InstallationInstances)
{
- return "$instance\MSBuild\15.0\Bin\MSBuild.exe","v141"
+ $VCFolder= "$instance\VC\Tools\MSVC\"
+
+ if (Test-Path $VCFolder)
+ {
+ return "$instance\MSBuild\15.0\Bin\MSBuild.exe","v141"
+ }
}
}
-# VS2015
-$CandidateProgramFiles = "${env:PROGRAMFILES(X86)}", "${env:PROGRAMFILES}"
-foreach ($ProgramFiles in $CandidateProgramFiles)
+if (-not $DisableVS2015)
{
- $clExe= "$ProgramFiles\Microsoft Visual Studio 14.0\\VC\bin\cl.exe"
+ # Try to locate VS2015 through the Registry
+ try
+ {
+ # First ensure the compiler was installed (optional in 2015)
+ # In 64-bit systems, this is under the Wow6432Node.
+ try
+ {
+ $VS14InstallDir = $(gp Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\visualstudio\14.0 InstallDir -erroraction Stop | % { $_.InstallDir })
+ Write-Verbose "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\visualstudio\14.0 - Found"
+ }
+ catch
+ {
+ $VS14InstallDir = $(gp Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\visualstudio\14.0 InstallDir -erroraction Stop | % { $_.InstallDir })
+ Write-Verbose "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\visualstudio\14.0 - Found"
+ }
+ if (!(Test-Path "${VS14InstallDir}..\..\VC\bin\cl.exe")) { throw }
+ Write-Verbose "${VS14InstallDir}..\..\VC\bin\cl.exe - Found"
- if (Test-Path $clExe)
+
+ try
+ {
+ $MSBuild14 = $(gp Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\msbuild\toolsversions\14.0 MSBuildToolsPath -erroraction Stop | % { $_.MSBuildToolsPath })
+ Write-Verbose "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\msbuild\toolsversions\14.0 - Found"
+ }
+ catch
+ {
+ $MSBuild14 = $(gp Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\msbuild\toolsversions\14.0 MSBuildToolsPath -erroraction Stop | % { $_.MSBuildToolsPath })
+ Write-Verbose "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\msbuild\toolsversions\14.0 - Found"
+ }
+ if (!(Test-Path "${MSBuild14}MSBuild.exe")) { throw }
+ Write-Verbose "${MSBuild14}MSBuild.exe - Found"
+
+ return "${MSBuild14}MSBuild.exe","v140"
+ }
+ catch
{
- return "$ProgramFiles\MSBuild\14.0\Bin\MSBuild.exe","v140"
+ Write-Verbose "Unable to locate a VS2015 installation with C++ support"
}
}
-throw "Could not find MSBuild with C++ support. VS2015 or above with C++ support need to be installed." \ No newline at end of file
+throw "Could not find MSBuild version with C++ support. VS2015 or VS2017 (with C++) needs to be installed." \ No newline at end of file
diff --git a/scripts/findTargetPlatformVersion.ps1 b/scripts/findTargetPlatformVersion.ps1
new file mode 100644
index 000000000..650e0b4ed
--- /dev/null
+++ b/scripts/findTargetPlatformVersion.ps1
@@ -0,0 +1,42 @@
+[CmdletBinding()]
+param(
+
+)
+
+$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
+$programFiles32 = & $scriptsDir\getProgramFiles32bit.ps1
+$programFilesP = & $scriptsDir\getProgramFilesPlatformBitness.ps1
+$CandidateProgramFiles = $programFiles32, $programFilesP
+
+# Windows 10 SDK
+foreach ($ProgramFiles in $CandidateProgramFiles)
+{
+ $folder = "$ProgramFiles\Windows Kits\10\Include"
+ if (!(Test-Path $folder))
+ {
+ continue
+ }
+
+ $win10sdkVersions = @(Get-ChildItem $folder | Where-Object {$_.Name -match "^10"} | Sort-Object)
+ [array]::Reverse($win10sdkVersions) # Newest SDK first
+
+ foreach ($win10sdkV in $win10sdkVersions)
+ {
+ if (Test-Path "$folder\$win10sdkV\um\windows.h")
+ {
+ return $win10sdkV.ToString()
+ }
+ }
+}
+
+# Windows 8.1 SDK
+foreach ($ProgramFiles in $CandidateProgramFiles)
+{
+ $folder = "$ProgramFiles\Windows Kits\8.1\Include"
+ if (Test-Path $folder)
+ {
+ return "8.1"
+ }
+}
+
+throw "Could not detect a Windows SDK / TargetPlatformVersion" \ No newline at end of file
diff --git a/scripts/findVisualStudioInstallationInstances.ps1 b/scripts/findVisualStudioInstallationInstances.ps1
index 951975758..8937c6fed 100644
--- a/scripts/findVisualStudioInstallationInstances.ps1
+++ b/scripts/findVisualStudioInstallationInstances.ps1
@@ -10,11 +10,11 @@ $vcpkgRootDir = & $scriptsDir\findFileRecursivelyUp.ps1 $scriptsDir .vcpkg-root
$downloadsDir = "$vcpkgRootDir\downloads"
-$nugetexe = & $scriptsDir\fetchDependency.ps1 "nuget"
+$nugetexe = & $scriptsDir\fetchDependency.ps1 "nuget" 1
$nugetPackageDir = "$downloadsDir\nuget-packages"
$SetupAPIVersion = "1.5.125-rc"
-$nugetOutput = & $nugetexe install Microsoft.VisualStudio.Setup.Configuration.Native -Version $SetupAPIVersion -OutputDirectory $nugetPackageDir -nocache 2>&1
+$nugetOutput = & $nugetexe install Microsoft.VisualStudio.Setup.Configuration.Native -Version $SetupAPIVersion -OutputDirectory $nugetPackageDir -Source "https://api.nuget.org/v3/index.json" -nocache 2>&1
$SetupConsoleExe = "$nugetPackageDir\Microsoft.VisualStudio.Setup.Configuration.Native.$SetupAPIVersion\tools\x86\Microsoft.VisualStudio.Setup.Configuration.Console.exe"
diff --git a/scripts/getProgramFiles32bit.ps1 b/scripts/getProgramFiles32bit.ps1
new file mode 100644
index 000000000..fd7167191
--- /dev/null
+++ b/scripts/getProgramFiles32bit.ps1
@@ -0,0 +1,11 @@
+[CmdletBinding()]
+param(
+
+)
+
+if (Test-Path env:PROGRAMFILES`(X86`))
+{
+ return ${env:PROGRAMFILES(X86)}
+}
+
+return ${env:PROGRAMFILES} \ No newline at end of file
diff --git a/scripts/getProgramFilesPlatformBitness.ps1 b/scripts/getProgramFilesPlatformBitness.ps1
new file mode 100644
index 000000000..6d0a513ca
--- /dev/null
+++ b/scripts/getProgramFilesPlatformBitness.ps1
@@ -0,0 +1,11 @@
+[CmdletBinding()]
+param(
+
+)
+
+if (Test-Path env:ProgramW6432)
+{
+ return ${env:ProgramW6432}
+}
+
+return ${env:PROGRAMFILES} \ No newline at end of file
diff --git a/scripts/templates/portfile.in.cmake b/scripts/templates/portfile.in.cmake
index c848b6445..ef72431ff 100644
--- a/scripts/templates/portfile.in.cmake
+++ b/scripts/templates/portfile.in.cmake
@@ -17,6 +17,7 @@ vcpkg_extract_source_archive(${ARCHIVE})
vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA # Disable this option if project cannot be built with Ninja
# OPTIONS -DUSE_THIS_IN_ALL_BUILDS=1 -DUSE_THIS_TOO=2
# OPTIONS_RELEASE -DOPTIMIZE=1
# OPTIONS_DEBUG -DDEBUGGABLE=1