aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes2
-rw-r--r--azure-pipelines.yml49
-rw-r--r--ci/azure-steps.yml94
-rwxr-xr-xrun_cross_test.py2
-rwxr-xr-xrun_project_tests.py2
-rwxr-xr-xrun_tests.py2
-rwxr-xr-xrun_unittests.py8
-rwxr-xr-xskip_ci.py4
-rw-r--r--test cases/csharp/1 basic/installed_files.txt1
-rw-r--r--test cases/csharp/2 library/installed_files.txt5
-rw-r--r--test cases/frameworks/17 mpi/meson.build6
11 files changed, 164 insertions, 11 deletions
diff --git a/.gitattributes b/.gitattributes
index de66d2b..5c53af9 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,3 +1,3 @@
.gitignore export-ignore
.gitattributes export-ignore
-
+* text eol=lf
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
new file mode 100644
index 0000000..8c36abd
--- /dev/null
+++ b/azure-pipelines.yml
@@ -0,0 +1,49 @@
+name: $(BuildID)
+
+trigger:
+ branches:
+ include:
+ - 'master'
+
+variables:
+ MESON_FIXED_NINJA: 1
+ CI: 1
+
+jobs:
+#- job: vs2015
+# pool:
+# vmImage: vs2015-win2012r2
+#
+# strategy:
+# maxParallel: 10
+# matrix:
+# vc2015x86ninja:
+# arch: x86
+# compiler: msvc2015
+# backend: ninja
+# vc2015x86vs:
+# arch: x86
+# compiler: msvc2015
+# backend: vs2015
+#
+# steps:
+# - template: ci/azure-steps.yml
+
+- job: vs2017
+ pool:
+ vmImage: VS2017-Win2016
+
+ strategy:
+ maxParallel: 10
+ matrix:
+ vc2017x64ninja:
+ arch: x64
+ compiler: msvc2017
+ backend: ninja
+ vc2017x64vs:
+ arch: x64
+ compiler: msvc2017
+ backend: vs2017
+
+ steps:
+ - template: ci/azure-steps.yml
diff --git a/ci/azure-steps.yml b/ci/azure-steps.yml
new file mode 100644
index 0000000..4cb6ac8
--- /dev/null
+++ b/ci/azure-steps.yml
@@ -0,0 +1,94 @@
+steps:
+- powershell: |
+ # test_find_program exercises some behaviour which relies on .py being in PATHEXT
+ $env:PATHEXT += ';.py'
+
+ where.exe python
+
+ python ./skip_ci.py --base-branch-env=SYSTEM_PULLREQUEST_TARGETBRANCH --is-pull-env=SYSTEM_PULLREQUEST_PULLREQUESTID --base-branch-origin
+ if ($LastExitCode -ne 0) {
+ throw ('error in skip_ci.py')
+ }
+
+ # remove MinGW from path, so we don't find gfortran and try to use it
+ $env:Path = ($env:Path.Split(';') | Where-Object { $_ -notlike '*mingw*' }) -join ';'
+
+ # download and install prerequisites
+ function DownloadFile([String] $Source, [String] $Destination) {
+ $retries = 10
+ for ($i = 1; $i -le $retries; $i++) {
+ try {
+ (New-Object net.webclient).DownloadFile($Source, $Destination)
+ break # succeeded
+ } catch [net.WebException] {
+ if ($i -eq $retries) {
+ throw # fail on last retry
+ }
+ $backoff = (10 * $i) # backoff 10s, 20s, 30s...
+ echo ('{0}: {1}' -f $Source, $_.Exception.Message)
+ echo ('Retrying in {0}s...' -f $backoff)
+ Start-Sleep -m ($backoff * 1000)
+ }
+ }
+ }
+
+ DownloadFile -Source 'https://github.com/mesonbuild/cidata/raw/master/ninja.exe' -Destination $(System.WorkFolder)\ninja.exe
+ DownloadFile -Source 'http://nirbheek.in/files/binaries/pkg-config/win32/pkg-config.exe' -Destination $(System.WorkFolder)\pkg-config.exe
+ DownloadFile -Source 'https://download.microsoft.com/download/D/B/B/DBB64BA1-7B51-43DB-8BF1-D1FB45EACF7A/msmpisdk.msi' -Destination msmpisdk.msi
+ DownloadFile -Source 'https://download.microsoft.com/download/D/B/B/DBB64BA1-7B51-43DB-8BF1-D1FB45EACF7A/MSMpiSetup.exe' -Destination MSMpiSetup.exe
+ Start-Process msiexec.exe -ArgumentList '/i msmpisdk.msi /quiet' -Wait
+ Start-Process .\MSMpiSetup.exe -ArgumentList '-unattend -full' -Wait
+
+ # import ms-mpi env vars (set by installer)
+ foreach ($p in "MSMPI_INC", "MSMPI_LIB32", "MSMPI_LIB64") {
+ $v = [Environment]::GetEnvironmentVariable($p, "Machine")
+ Set-Content "env:$p" "$v"
+ }
+
+ # add downloads to PATH
+ $env:Path = "$env:SYSTEM_WORKFOLDER;$env:Path"
+
+ # import visual studio variables
+ Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
+ Install-Module Pscx -Scope CurrentUser -AllowClobber
+ Install-Module VSSetup -Scope CurrentUser
+ $vsver = $env:compiler.Replace('msvc', '')
+ Import-VisualStudioVars -VisualStudioVersion $vsver -Architecture $(arch)
+
+ # add .NET framework tools to path for resgen for C# tests
+ # (always use 32-bit tool, as there doesn't seem to be a 64-bit tool)
+ if ((Get-Command "resgen.exe" -ErrorAction SilentlyContinue) -eq $null) {
+ $env:Path = "$env:WindowsSDK_ExecutablePath_x86;$env:Path"
+ }
+
+ if ($env:backend -eq 'ninja') {
+ ninja --version
+ } else {
+ MSBuild /version
+ }
+
+ python run_tests.py --backend $(backend)
+
+ echo "##vso[task.setvariable variable=test_status]$LastExitCode"
+
+ continueOnError: true
+
+- task: PublishTestResults@2
+ inputs:
+ testResultsFiles: meson-test-run.xml
+ testRunTitle: $(System.JobName)
+ publishRunAttachments: true
+
+- task: CopyFiles@2
+ inputs:
+ contents: 'meson-test-run.*'
+ targetFolder: $(Build.ArtifactStagingDirectory)
+
+- task: PublishBuildArtifacts@1
+ inputs:
+ artifactName: $(System.JobName)
+
+- powershell: |
+ # after publishing test results, even if some failed
+ # exit with the test status
+ exit $(test_status)
diff --git a/run_cross_test.py b/run_cross_test.py
index 6e04fa2..b2ef6be 100755
--- a/run_cross_test.py
+++ b/run_cross_test.py
@@ -40,7 +40,7 @@ def runtests(cross_file, failfast):
print('\nTotal passed cross tests:', passing_tests)
print('Total failed cross tests:', failing_tests)
print('Total skipped cross tests:', skipped_tests)
- if failing_tests > 0 and ('TRAVIS' in os.environ or 'APPVEYOR' in os.environ):
+ if failing_tests > 0 and ('CI' in os.environ):
print('\nMesonlogs of failing tests\n')
for log in failing_logs:
print(log, '\n')
diff --git a/run_project_tests.py b/run_project_tests.py
index 6474185..2445dd4 100755
--- a/run_project_tests.py
+++ b/run_project_tests.py
@@ -82,7 +82,7 @@ class AutoDeletedDir:
failing_logs = []
print_debug = 'MESON_PRINT_TEST_OUTPUT' in os.environ
-under_ci = not {'TRAVIS', 'APPVEYOR'}.isdisjoint(os.environ)
+under_ci = 'CI' in os.environ
do_debug = under_ci or print_debug
no_meson_log_msg = 'No meson-log.txt found.'
diff --git a/run_tests.py b/run_tests.py
index 1e03fa7..3445e30 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -261,7 +261,7 @@ def main():
cross = options.cross
backend, _ = guess_backend(options.backend, shutil.which('msbuild'))
# Running on a developer machine? Be nice!
- if not mesonlib.is_windows() and not mesonlib.is_haiku() and 'TRAVIS' not in os.environ:
+ if not mesonlib.is_windows() and not mesonlib.is_haiku() and 'CI' not in os.environ:
os.nice(20)
# Appveyor sets the `platform` environment variable which completely messes
# up building with the vs2010 and vs2015 backends.
diff --git a/run_unittests.py b/run_unittests.py
index 58b273d..dfa9bc9 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -83,7 +83,7 @@ def is_tarball():
return False
def is_ci():
- if 'TRAVIS' in os.environ or 'APPVEYOR' in os.environ:
+ if 'CI' in os.environ:
return True
return False
@@ -100,8 +100,8 @@ def _git_init(project_dir):
def skipIfNoPkgconfig(f):
'''
- Skip this test if no pkg-config is found, unless we're on Travis or
- Appveyor CI. This allows users to run our test suite without having
+ Skip this test if no pkg-config is found, unless we're on CI.
+ This allows users to run our test suite without having
pkg-config installed on, f.ex., macOS, while ensuring that our CI does not
silently skip the test because of misconfiguration.
@@ -1673,7 +1673,7 @@ class AllPlatformTests(BasePlatformTests):
self.assertIsInstance(linker, lib)
self.assertEqual(cc.id, 'msvc')
self.assertTrue(hasattr(cc, 'is_64'))
- # If we're in the appveyor CI, we know what the compiler will be
+ # If we're on Windows CI, we know what the compiler will be
if 'arch' in os.environ:
if os.environ['arch'] == 'x64':
self.assertTrue(cc.is_64)
diff --git a/skip_ci.py b/skip_ci.py
index 752dfdc..5e0a7aa 100755
--- a/skip_ci.py
+++ b/skip_ci.py
@@ -54,9 +54,13 @@ def main():
help='Branch push is targeted to')
parser.add_argument('--is-pull-env', required=True,
help='Variable set if it is a PR')
+ parser.add_argument('--base-branch-origin', action='store_true',
+ help='Base branch reference is only in origin remote')
args = parser.parse_args()
check_pr(args.is_pull_env)
base = get_base_branch(args.base_branch_env)
+ if args.base_branch_origin:
+ base = 'origin/' + base
if all(is_documentation(f) for f in get_git_files(base)):
print("Don't run CI for documentation-only changes, add '[skip ci]' to commit title.")
print('See http://mesonbuild.com/Contributing.html#skipping-integration-tests')
diff --git a/test cases/csharp/1 basic/installed_files.txt b/test cases/csharp/1 basic/installed_files.txt
index f64c68c..5022d28 100644
--- a/test cases/csharp/1 basic/installed_files.txt
+++ b/test cases/csharp/1 basic/installed_files.txt
@@ -1 +1,2 @@
usr/bin/prog.exe
+?msvc:usr/bin/prog.pdb
diff --git a/test cases/csharp/2 library/installed_files.txt b/test cases/csharp/2 library/installed_files.txt
index 4ebea55..73e77a2 100644
--- a/test cases/csharp/2 library/installed_files.txt
+++ b/test cases/csharp/2 library/installed_files.txt
@@ -1,2 +1,5 @@
usr/bin/prog.exe
-usr/lib/helper.dll
+?msvc:usr/bin/prog.pdb
+?msvc:usr/bin/helper.dll
+?msvc:usr/bin/helper.pdb
+?gcc:usr/lib/helper.dll
diff --git a/test cases/frameworks/17 mpi/meson.build b/test cases/frameworks/17 mpi/meson.build
index 1085d40..ae3f08a 100644
--- a/test cases/frameworks/17 mpi/meson.build
+++ b/test cases/frameworks/17 mpi/meson.build
@@ -17,7 +17,7 @@ exec = executable('exec',
test('MPI C', exec)
if build_machine.system() != 'windows'
- # C++ MPI not supported by MS-MPI used on AppVeyor.
+ # C++ MPI not supported by MS-MPI
mpicpp = dependency('mpi', language : 'cpp')
execpp = executable('execpp',
'main.cpp',
@@ -44,4 +44,6 @@ if uburesult.returncode() != 0 and add_languages('fortran', required : false)
endif
# Check we can apply a version constraint
-dependency('mpi', version: '>=@0@'.format(mpic.version()))
+if mpic.version() != 'unknown'
+ dependency('mpi', version: '>=@0@'.format(mpic.version()))
+endif