
trigger:
  paths:
    include:
      - '*'
    exclude:
      - '.azure/azure-pipelines-android.yml'
      - '.azure/cmake-android.yml'
      - '.azure/azure-pipelines-mac.yml'
      - '.azure/azure-pipelines-win.yml'
      - '.circleci/config.yml'
      - '.github/workflows/linux.yml'
      - '.github/workflows/sonarcloud.yml'
      - '.cirrus.yml'
      - 'README.md'

parameters:
- name: UseCache
  displayName: Use Dependency Cache
  type: boolean
  default: true

schedules:
- cron: "0 0 * * 1"
  displayName: 'Weekly Monday Midnight build without caching'
  branches:
    include:
    - master
  always: true

variables:
  toolset: 'v142'
  generator: 'Visual Studio 16 2019'
  configuration: 'RelWithDebInfo'
  VCPKG_REVISION: 'acc3bcf76b84ae5041c86ab55fe138ae7b8255c7'

jobs:
- job: vcpkg
  workspace:
    clean: all
  strategy:
    matrix:
      ARM:
        platform: 'arm'
        cmake_platform: 'ARM'
      ARM64:
        platform: 'arm64'
        cmake_platform: 'ARM64'
      x86:
        platform: 'x86'
        cmake_platform: 'Win32'
      x64:
        platform: 'x64'
        cmake_platform: 'x64'
  pool:
    vmImage: 'windows-2019'
  steps:
    - task: Cache@2
      displayName: "Cache vcpkg's packages"
      condition: and(not(in(variables['Build.Reason'], 'Schedule')), ${{ parameters.useCache }})
      inputs:
        key: $(VCPKG_REVISION) | "$(platform)"
        path: '$(VCPKG_INSTALLATION_ROOT)\installed'
        cacheHitVar: CACHE_RESTORED
    - bash: |
        set -ex
        echo $(generator)
        echo $(toolset)
        # choco upgrade ninja -y
        # ninja --version
        cmake --version
        rm -rf C:/Strawberry/perl/bin/pkg-config*
        choco install --svc --sdc -i pkgconfiglite
        # chocoTask=$!
        # manually update vcpkg
        cd $VCPKG_INSTALLATION_ROOT
        # git checkout master
        git remote -v
        git fetch --tags --prune --progress origin
        git checkout --force $(VCPKG_REVISION)
        sed -i 's/arm64/arm/g' ports/glib/portfile.cmake
        ./bootstrap-vcpkg.sh
        # wait $chocoTask
        which pkg-config
      displayName: 'Update vcpkg'
    - task: DownloadBuildArtifacts@0
      inputs:
        buildType: specific
        # https://dev.azure.com/tommbrt/_apis/projects?api-version=5.0
        project: 'd3638885-de4a-4ce7-afe7-f237ae461c07'
        pipeline: 1
        artifactName: libinstpatch-$(cmake_platform)
        downloadPath: '$(Agent.TempDirectory)'
      displayName: 'Get libinstpatch'
      condition: and(succeeded(), and(ne(variables['platform'], 'arm'), ne(variables['platform'], 'arm64')))
    - task: CopyFiles@2
      inputs:
        SourceFolder: '$(Agent.TempDirectory)\libinstpatch-$(cmake_platform)'
        Contents: '**'
        TargetFolder: '$(VCPKG_INSTALLATION_ROOT)\installed\$(platform)-windows'
      displayName: 'Install libinstpatch'
      condition: and(succeeded(), and(ne(variables['platform'], 'arm'), ne(variables['platform'], 'arm64')))
    - bash: |
        set -ex
        vcpkg install glib:$(platform)-windows libsndfile:$(platform)-windows
      displayName: 'vcpkg build Dependencies'
      condition: and(succeeded(), ne(variables.CACHE_RESTORED, 'true'))
    - bash: |
        set -ex
        cd $VCPKG_INSTALLATION_ROOT/installed/$(platform)-windows/
        pwd
        rm -rf include/FLAC* include/ffi* include/iconv* include/opus tools share
        ls -Rg .
        pkg-config --list-all
        pkg-config --cflags libinstpatch-1.0 || true
      displayName: 'Cleanup dependencies'
      condition: and(succeeded(), ne(variables.CACHE_RESTORED, 'true'))
    - bash: |
        set -ex
        mkdir build
        cd build
        cmake -Werror=dev -G "$(generator)" -A "$(cmake_platform)" -T "$(toolset)" -Denable-readline=0 -DCMAKE_TOOLCHAIN_FILE=$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake -DCMAKE_INSTALL_PREFIX=$VCPKG_INSTALLATION_ROOT/installed/$(platform)-windows -DCMAKE_VERBOSE_MAKEFILE=1 -DNO_GUI=1 ..
        cmake --build . --config $(configuration) --parallel 3
      displayName: 'Compile fluidsynth'
    - bash: |
        set -ex
        cmake --build build --config $(configuration) --target check --parallel 3
      displayName: 'Execute Unittests'
      condition: and(succeeded(), and(ne(variables['platform'], 'arm'), ne(variables['platform'], 'arm64')))
    - bash: |
        set -ex
        cmake --build build --config $(configuration) --target demo --parallel 3
      displayName: 'Compile demos'
    - script: |
        @ECHO ON
        cd build
        cmake --build . --config $(configuration) --target install || exit -1
        REM del bin\concrt*.dll
        REM del $(Build.ArtifactStagingDirectory)\bin\vcruntime*.dll
        REM del $(Build.ArtifactStagingDirectory)\bin\msvcp*.dll
        REM del $(Build.ArtifactStagingDirectory)\lib\instpatch*.lib
        REM del $(Build.ArtifactStagingDirectory)\lib\pkgconfig\libinstpatch*.pc
        REM rd $(Build.ArtifactStagingDirectory)\include\libinstpatch-2 /s /q
      displayName: 'fluidsynth install'
    - task: CopyFiles@2
      inputs:
        SourceFolder: '$(VCPKG_INSTALLATION_ROOT)/installed/$(platform)-windows/'
        Contents: '**'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
        CleanTargetFolder: true
      displayName: 'Copy Binaries to Artifact Dir'
    - task: PublishBuildArtifacts@1
      inputs:
          pathtoPublish: $(Build.ArtifactStagingDirectory)
          artifactName: fluidsynth-vcpkg-$(platform)
