@rem Licensed to the Apache Software Foundation (ASF) under one
@rem or more contributor license agreements.  See the NOTICE file
@rem distributed with this work for additional information
@rem regarding copyright ownership.  The ASF licenses this file
@rem to you under the Apache License, Version 2.0 (the
@rem "License"); you may not use this file except in compliance
@rem with the License.  You may obtain a copy of the License at
@rem
@rem   http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing,
@rem software distributed under the License is distributed on an
@rem "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@rem KIND, either express or implied.  See the License for the
@rem specific language governing permissions and limitations
@rem under the License.

@rem Run VsDevCmd.bat to set Visual Studio environment variables for building
@rem on the command line. This is the path for Visual Studio Enterprise 2019

call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=amd64


@rem Install build dependencies with vcpkg

@rem TODO(ianmcook): change --x-manifest-root to --manifest-root after it
@rem changes in vcpkg

vcpkg install ^
    --triplet x64-windows ^
    --x-manifest-root cpp  ^
    --clean-after-build ^
    || exit /B 1


@rem Set environment variables

set ARROW_TEST_DATA=%cd%\testing\data
set PARQUET_TEST_DATA=%cd%\cpp\submodules\parquet-testing\data
set VCPKG_INSTALLED=%cd%\cpp\vcpkg_installed


@rem Build Arrow C++ library

mkdir cpp\build
pushd cpp\build

@rem TODO(ianmcook): test using --parallel %NUMBER_OF_PROCESSORS% with
@rem cmake --build instead of specifying -DARROW_CXXFLAGS="/MP" here
@rem (see https://gitlab.kitware.com/cmake/cmake/-/issues/20564)

@rem TODO(ianmcook): Add -DARROW_BUILD_BENCHMARKS=ON after the issue described
@rem at https://github.com/google/benchmark/issues/1046 is resolved

cmake -G "Visual Studio 16 2019" -A x64 ^
      -DARROW_BOOST_USE_SHARED=ON ^
      -DARROW_BUILD_SHARED=ON ^
      -DARROW_BUILD_STATIC=OFF ^
      -DARROW_BUILD_TESTS=ON ^
      -DARROW_CXXFLAGS="/MP" ^
      -DARROW_DATASET=ON ^
      -DARROW_DEPENDENCY_SOURCE=SYSTEM ^
      -DARROW_FLIGHT=ON ^
      -DARROW_MIMALLOC=ON ^
      -DARROW_PACKAGE_PREFIX="%VCPKG_INSTALLED%\x64-windows" ^
      -DARROW_PARQUET=ON ^
      -DARROW_PYTHON=OFF ^
      -DARROW_WITH_BROTLI=ON ^
      -DARROW_WITH_BZ2=ON ^
      -DARROW_WITH_LZ4=ON ^
      -DARROW_WITH_SNAPPY=ON ^
      -DARROW_WITH_ZLIB=ON ^
      -DARROW_WITH_ZSTD=ON ^
      -DCMAKE_BUILD_TYPE=release ^
      -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" ^
      -DCMAKE_UNITY_BUILD=ON ^
      -DLZ4_MSVC_LIB_PREFIX="" ^
      -DLZ4_MSVC_STATIC_LIB_SUFFIX="" ^
      -D_VCPKG_INSTALLED_DIR="%VCPKG_INSTALLED%" ^
      -DVCPKG_MANIFEST_MODE=ON ^
      -DVCPKG_TARGET_TRIPLET="x64-windows" ^
      -DZSTD_MSVC_LIB_PREFIX="" ^
      .. || exit /B 1

cmake --build . --target INSTALL --config Release || exit /B 1


@rem Test Arrow C++ library

@rem TODO(ianmcook): Troubleshoot two test failures:
@rem  - TestStatisticsSortOrder/0.MinMax
@rem  - TestStatistic.Int32Extremums

ctest --output-on-failure ^
      --parallel %NUMBER_OF_PROCESSORS% ^
      --timeout 300 || exit /B 1

popd
