Skip to content

Commit

Permalink
Merge pull request #1025 from frederikja163/4.0prev1
Browse files Browse the repository at this point in the history
build script updates
  • Loading branch information
varon committed Mar 19, 2020
2 parents 83de7ce + df57bdd commit ed3567d
Show file tree
Hide file tree
Showing 118 changed files with 681 additions and 515 deletions.
29 changes: 12 additions & 17 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -315,8 +315,6 @@ typings/
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/
*.Restore.targets

# FAKE - F# Make
Expand Down Expand Up @@ -415,7 +413,6 @@ anaconda-mode/
lib/debug
lib/release
*.exe
!.paket/paket.bootstrapper.exe

### Intellij+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
Expand Down Expand Up @@ -579,20 +576,16 @@ TestResults.xml

### OpenTK Binding files ###
.bindingsGenerated
src/OpenTK/Graphics/ES10/Enums
src/OpenTK/Graphics/ES10/Wrappers
src/OpenTK/Graphics/ES11/Enums
src/OpenTK/Graphics/ES11/Wrappers
src/OpenTK/Graphics/ES20/Enums
src/OpenTK/Graphics/ES20/Wrappers
src/OpenTK/Graphics/ES30/Enums
src/OpenTK/Graphics/ES30/Wrappers
src/OpenTK/Graphics/ES31/Enums
src/OpenTK/Graphics/ES31/Wrappers
src/OpenTK/Graphics/OpenGL/Enums
src/OpenTK/Graphics/OpenGL/Wrappers
src/OpenTK/Graphics/OpenGL4/Enums
src/OpenTK/Graphics/OpenGL4/Wrappers
src/OpenToolkit.Graphics/ES11/ES11.cs
src/OpenToolkit.Graphics/ES11/ES11Enums.cs
src/OpenToolkit.Graphics/ES20/ES20.cs
src/OpenToolkit.Graphics/ES20/ES20Enums.cs
src/OpenToolkit.Graphics/ES30/ES30.cs
src/OpenToolkit.Graphics/ES30/ES30Enums.cs
src/OpenToolkit.Graphics/OpenGL2/GL.cs
src/OpenToolkit.Graphics/OpenGL2/GLEnums.cs
src/OpenToolkit.Graphics/OpenGL4/GL4.cs
src/OpenToolkit.Graphics/OpenGL4/GL4Enums.cs

### OpenTK AssemblyInfo files ###
**/AssemblyInfo.cs
Expand Down Expand Up @@ -642,6 +635,8 @@ tools/
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
*.template
.paket/paket.exe

## Build tool directories for auxiliary files
# latexrun
Expand Down
Binary file added .paket/paket.bootstrapper.exe
Binary file not shown.
130 changes: 130 additions & 0 deletions .paket/paket.targets
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<PropertyGroup>
<!-- Enable the restore command to run before builds -->
<RestorePackages Condition=" '$(RestorePackages)' == '' ">true</RestorePackages>
<PaketToolsPath>$(MSBuildThisFileDirectory)</PaketToolsPath>
<PaketRootPath>$(MSBuildThisFileDirectory)..\</PaketRootPath>
<PaketLockFilePath>$(PaketRootPath)paket.lock</PaketLockFilePath>
<PaketRestoreCacheFile>$(PaketRootPath)paket-files\paket.restore.cached</PaketRestoreCacheFile>
<MonoPath Condition="'$(MonoPath)' == '' And Exists('/Library/Frameworks/Mono.framework/Commands/mono')">/Library/Frameworks/Mono.framework/Commands/mono</MonoPath>
<MonoPath Condition="'$(MonoPath)' == ''">mono</MonoPath>

<!-- Disable test for CLI tool completely - overrideable via properties in projects or via environment variables -->
<PaketDisableCliTest Condition=" '$(PaketDisableCliTest)' == '' ">False</PaketDisableCliTest>
</PropertyGroup>

<!-- Resolve how paket should be called -->
<!-- Current priority is: local (1: repo root, 2: .paket folder) => 3: as CLI tool => as bootstrapper (4: proj Bootstrapper style, 5: BootstrapperExeDir) => 6: global path variable -->
<Target Name="SetPaketCommand" >
<!-- Test if paket is available in the standard locations. If so, that takes priority. Case 1/2 - non-windows specific -->
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT' ">
<!-- no windows, try native paket as default, root => tool -->
<PaketExePath Condition=" '$(PaketExePath)' == '' AND Exists('$(PaketRootPath)paket') ">$(PaketRootPath)paket</PaketExePath>
<PaketExePath Condition=" '$(PaketExePath)' == '' AND Exists('$(PaketToolsPath)paket') ">$(PaketToolsPath)paket</PaketExePath>
</PropertyGroup>

<!-- Test if paket is available in the standard locations. If so, that takes priority. Case 2/2 - same across platforms -->
<PropertyGroup>
<!-- root => tool -->
<PaketExePath Condition=" '$(PaketExePath)' == '' AND Exists('$(PaketRootPath)paket.exe') ">$(PaketRootPath)paket.exe</PaketExePath>
<PaketExePath Condition=" '$(PaketExePath)' == '' AND Exists('$(PaketToolsPath)paket.exe') ">$(PaketToolsPath)paket.exe</PaketExePath>
</PropertyGroup>

<!-- If paket hasn't be found in standard locations, test for CLI tool usage. -->
<!-- First test: Is CLI configured to be used in "dotnet-tools.json"? - can result in a false negative; only a positive outcome is reliable. -->
<PropertyGroup Condition=" '$(PaketExePath)' == '' ">
<_DotnetToolsJson Condition="Exists('$(PaketRootPath)/.config/dotnet-tools.json')">$([System.IO.File]::ReadAllText("$(PaketRootPath)/.config/dotnet-tools.json"))</_DotnetToolsJson>
<_ConfigContainsPaket Condition=" '$(_DotnetToolsJson)' != ''">$(_DotnetToolsJson.Contains('"paket"'))</_ConfigContainsPaket>
<_ConfigContainsPaket Condition=" '$(_ConfigContainsPaket)' == ''">false</_ConfigContainsPaket>
</PropertyGroup>

<!-- Second test: Call 'dotnet paket' and see if it returns without an error. Mute all the output. Only run if previous test failed and the test has not been disabled. -->
<!-- WARNING: This method can lead to processes hanging forever, and should be used as little as possible. See https://github.com/fsprojects/Paket/issues/3705 for details. -->
<Exec Condition=" '$(PaketExePath)' == '' AND !$(PaketDisableCliTest) AND !$(_ConfigContainsPaket)" Command="dotnet paket --version" IgnoreExitCode="true" StandardOutputImportance="low" StandardErrorImportance="low" >
<Output TaskParameter="ExitCode" PropertyName="LocalPaketToolExitCode" />
</Exec>

<!-- If paket is installed as CLI use that. Again, only if paket haven't already been found in standard locations. -->
<PropertyGroup Condition=" '$(PaketExePath)' == '' AND ($(_ConfigContainsPaket) OR '$(LocalPaketToolExitCode)' == '0') ">
<_PaketCommand>dotnet paket</_PaketCommand>
</PropertyGroup>

<!-- If neither local files nor CLI tool can be found, final attempt is searching for boostrapper config before falling back to global path variable. -->
<PropertyGroup Condition=" '$(PaketExePath)' == '' AND '$(_PaketCommand)' == '' ">
<!-- Test for bootstrapper setup -->
<PaketExePath Condition=" '$(PaketExePath)' == '' AND '$(PaketBootstrapperStyle)' == 'proj' ">$(PaketToolsPath)paket</PaketExePath>
<PaketExePath Condition=" '$(PaketExePath)' == '' AND Exists('$(PaketBootStrapperExeDir)') ">$(PaketBootStrapperExeDir)paket</PaketExePath>

<!-- If all else fails, use global path approach. -->
<PaketExePath Condition=" '$(PaketExePath)' == ''">paket</PaketExePath>
</PropertyGroup>

<!-- If not using CLI, setup correct execution command. -->
<PropertyGroup Condition=" '$(_PaketCommand)' == '' ">
<_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)"))</_PaketExeExtension>
<_PaketCommand Condition=" '$(_PaketCommand)' == '' AND '$(_PaketExeExtension)' == '.dll' ">dotnet "$(PaketExePath)"</_PaketCommand>
<_PaketCommand Condition=" '$(_PaketCommand)' == '' AND '$(OS)' != 'Windows_NT' AND '$(_PaketExeExtension)' == '.exe' ">$(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"</_PaketCommand>
<_PaketCommand Condition=" '$(_PaketCommand)' == '' ">"$(PaketExePath)"</_PaketCommand>
</PropertyGroup>

<!-- The way to get a property to be available outside the target is to use this task. -->
<CreateProperty Value="$(_PaketCommand)">
<Output TaskParameter="Value" PropertyName="PaketCommand"/>
</CreateProperty>

</Target>

<Choose> <!-- MyProject.fsproj.paket.references has the highest precedence -->
<When Condition="Exists('$(MSBuildProjectFullPath).paket.references')">
<PropertyGroup>
<PaketReferences>$(MSBuildProjectFullPath).paket.references</PaketReferences>
</PropertyGroup>
</When> <!-- MyProject.paket.references -->
<When Condition="Exists('$(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references')">
<PropertyGroup>
<PaketReferences>$(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references</PaketReferences>
</PropertyGroup>
</When> <!-- paket.references -->
<When Condition="Exists('$(MSBuildProjectDirectory)\paket.references')">
<PropertyGroup>
<PaketReferences>$(MSBuildProjectDirectory)\paket.references</PaketReferences>
</PropertyGroup>
</When> <!-- Set to empty if a reference file isn't found matching one of the 3 format options -->
<Otherwise>
<PropertyGroup>
<PaketReferences></PaketReferences>
</PropertyGroup>
</Otherwise>
</Choose>

<PropertyGroup>
<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'true'">RestorePackages; $(BuildDependsOn);</BuildDependsOn>
</PropertyGroup>

<Target Name="RestorePackages" DependsOnTargets="SetPaketCommand">

<PropertyGroup>
<!-- Commands -->
<RestoreCommand>$(PaketCommand) restore --references-file "$(PaketReferences)"</RestoreCommand>
<PaketRestoreRequired>true</PaketRestoreRequired>
</PropertyGroup>

<PropertyGroup Condition="Exists('$(PaketRestoreCacheFile)') ">
<PaketRestoreCachedHash>$([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)'))</PaketRestoreCachedHash>
<PaketRestoreLockFileHash>$([System.IO.File]::ReadAllText('$(PaketLockFilePath)'))</PaketRestoreLockFileHash>
<PaketRestoreRequired>true</PaketRestoreRequired>
<PaketRestoreRequired Condition=" '$(PaketRestoreLockFileHash)' == '$(PaketRestoreCachedHash)' ">false</PaketRestoreRequired>
<PaketRestoreRequired Condition=" '$(PaketRestoreLockFileHash)' == '' ">true</PaketRestoreRequired>
</PropertyGroup>

<Exec Command="$(RestoreCommand)"
IgnoreStandardErrorWarningFormat="true"
WorkingDirectory="$(PaketRootPath)"
ContinueOnError="false"
Condition=" '$(PaketRestoreRequired)' == 'true' AND Exists('$(PaketReferences)') AND '$(PaketReferences)' != '' "
/>
</Target>
</Project>
32 changes: 32 additions & 0 deletions OpenTK.nuspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>OpenTK</id>

<version>4.0-pre</version>

<authors>Team OpenTK</authors>

<projectUrl>https://github.com/opentk/opentk</projectUrl>

<license type="expression">MIT</license>

<iconUrl>https://api.nuget.org/v3-flatcontainer/opentk/3.1.0/icon</iconUrl>

<description>The Open Toolkit is set of fast, low-level C# bindings for OpenGL, OpenGL ES and OpenAL. It runs on all major platforms and powers hundreds of apps, games and scientific research.</description>

<copyright>Copyright (c) 2006 - 2019 Stefanos Apostolopoulos stapostol@gmail.com for the Open Toolkit library.</copyright>

<tags>OpenTK OpenGL OpenGLES GLES OpenAL C# F# .NET Mono Vector Math Game Graphics Sound</tags>

<dependencies>
<dependency id="OpenToolkit.Core" version="4.0.0-pre"/>
<dependency id="OpenToolkit.Mathematics" version="4.0.0-pre"/>
<dependency id="OpenToolkit.Input" version="4.0.0-pre"/>
<dependency id="OpenToolkit.Graphics" version="4.0.0-pre"/>
<dependency id="OpenToolkit.Windowing.Desktop" version="4.0.0-pre"/>
<dependency id="OpenToolkit.Windowing.Common" version="4.0.0-pre"/>
<dependency id="OpenToolkit.Windowing.GraphicsLibraryFramework" version="4.0.0-pre"/>
</dependencies>
</metadata>
</package>
43 changes: 21 additions & 22 deletions OpenTK.sln
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ci-config", "ci-config", "{
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Windowing", "Windowing", "{BBBE802B-9F6E-4299-97CE-97CDA43802B9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenToolkit.Windowing.Common", "src\Windowing\OpenToolkit.Windowing.Common\OpenToolkit.Windowing.Common.csproj", "{619434D1-477D-40E7-A691-AAF510D8A209}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenToolkit.GraphicsLibraryFramework", "src\Windowing\OpenToolkit.GraphicsLibraryFramework\OpenToolkit.GraphicsLibraryFramework.csproj", "{CA7C55A9-B86F-4467-A655-14D04C573E89}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenToolkit.Windowing.Desktop", "src\Windowing\OpenToolkit.Windowing.Desktop\OpenToolkit.Windowing.Desktop.csproj", "{BB7FF73F-5143-4D57-B228-770B10CA80C6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0B9B71A1-29F7-4CC5-9A9D-9DF122BE8B28}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "OpenToolkit.Tests", "tests\OpenToolkit.Tests\OpenToolkit.Tests.fsproj", "{0100EDA0-A134-4D9E-AE6B-470169BD8B94}"
Expand All @@ -50,7 +44,6 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "OpenToolkit.Tests.Integrati
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{471E0D18-D620-4CBE-A471-F3DB470E6D49}"
ProjectSection(SolutionItems) = preProject
build-bootstrap.csproj = build-bootstrap.csproj
build.cmd = build.cmd
build.fsx = build.fsx
build.sh = build.sh
Expand All @@ -74,6 +67,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenToolkit.OpenAL", "src\O
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenToolkit.OpenAL.Extensions", "src\OpenAL\OpenToolkit.OpenAL.Extensions\OpenToolkit.OpenAL.Extensions.csproj", "{CB4028A7-A449-4452-9FC5-78CDB545FEB9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenToolkit.Windowing.Common", "src\OpenToolkit.Windowing.Common\OpenToolkit.Windowing.Common.csproj", "{9A0D02D2-0834-42F8-9610-8221CF803708}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenToolkit.Windowing.GraphicsLibraryFramework", "src\OpenToolkit.Windowing.GraphicsLibraryFramework\OpenToolkit.Windowing.GraphicsLibraryFramework.csproj", "{ECC7271C-A5E5-4CDC-BA9F-A38A150CD2D4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenToolkit.Windowing.Desktop", "src\OpenToolkit.Windowing.Desktop\OpenToolkit.Windowing.Desktop.csproj", "{172C1E62-DA67-4203-BBCB-9DA4D9111EF0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -92,18 +91,6 @@ Global
{30B46B07-2836-4862-B7FA-A158B581F83E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{30B46B07-2836-4862-B7FA-A158B581F83E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{30B46B07-2836-4862-B7FA-A158B581F83E}.Release|Any CPU.Build.0 = Release|Any CPU
{619434D1-477D-40E7-A691-AAF510D8A209}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{619434D1-477D-40E7-A691-AAF510D8A209}.Debug|Any CPU.Build.0 = Debug|Any CPU
{619434D1-477D-40E7-A691-AAF510D8A209}.Release|Any CPU.ActiveCfg = Release|Any CPU
{619434D1-477D-40E7-A691-AAF510D8A209}.Release|Any CPU.Build.0 = Release|Any CPU
{CA7C55A9-B86F-4467-A655-14D04C573E89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CA7C55A9-B86F-4467-A655-14D04C573E89}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CA7C55A9-B86F-4467-A655-14D04C573E89}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CA7C55A9-B86F-4467-A655-14D04C573E89}.Release|Any CPU.Build.0 = Release|Any CPU
{BB7FF73F-5143-4D57-B228-770B10CA80C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB7FF73F-5143-4D57-B228-770B10CA80C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BB7FF73F-5143-4D57-B228-770B10CA80C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB7FF73F-5143-4D57-B228-770B10CA80C6}.Release|Any CPU.Build.0 = Release|Any CPU
{0100EDA0-A134-4D9E-AE6B-470169BD8B94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0100EDA0-A134-4D9E-AE6B-470169BD8B94}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0100EDA0-A134-4D9E-AE6B-470169BD8B94}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -144,19 +131,31 @@ Global
{C426C9D1-8857-4E52-BAC7-4C05EE6070AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C426C9D1-8857-4E52-BAC7-4C05EE6070AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C426C9D1-8857-4E52-BAC7-4C05EE6070AB}.Release|Any CPU.Build.0 = Release|Any CPU
{9A0D02D2-0834-42F8-9610-8221CF803708}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A0D02D2-0834-42F8-9610-8221CF803708}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9A0D02D2-0834-42F8-9610-8221CF803708}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9A0D02D2-0834-42F8-9610-8221CF803708}.Release|Any CPU.Build.0 = Release|Any CPU
{ECC7271C-A5E5-4CDC-BA9F-A38A150CD2D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ECC7271C-A5E5-4CDC-BA9F-A38A150CD2D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ECC7271C-A5E5-4CDC-BA9F-A38A150CD2D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ECC7271C-A5E5-4CDC-BA9F-A38A150CD2D4}.Release|Any CPU.Build.0 = Release|Any CPU
{172C1E62-DA67-4203-BBCB-9DA4D9111EF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{172C1E62-DA67-4203-BBCB-9DA4D9111EF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{172C1E62-DA67-4203-BBCB-9DA4D9111EF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{172C1E62-DA67-4203-BBCB-9DA4D9111EF0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{619434D1-477D-40E7-A691-AAF510D8A209} = {BBBE802B-9F6E-4299-97CE-97CDA43802B9}
{CA7C55A9-B86F-4467-A655-14D04C573E89} = {BBBE802B-9F6E-4299-97CE-97CDA43802B9}
{BB7FF73F-5143-4D57-B228-770B10CA80C6} = {BBBE802B-9F6E-4299-97CE-97CDA43802B9}
{0100EDA0-A134-4D9E-AE6B-470169BD8B94} = {0B9B71A1-29F7-4CC5-9A9D-9DF122BE8B28}
{48936313-63D4-4A26-87F0-040AA15FF4A6} = {0B9B71A1-29F7-4CC5-9A9D-9DF122BE8B28}
{808BD056-6B35-4DB3-93E2-78243CC51A6A} = {0B9B71A1-29F7-4CC5-9A9D-9DF122BE8B28}
{40349C84-AAF1-4159-B118-0565F7351523} = {BF0E6BAA-C31F-4481-924B-3EE9826BEE4D}
{CB4028A7-A449-4452-9FC5-78CDB545FEB9} = {BF0E6BAA-C31F-4481-924B-3EE9826BEE4D}
{9A0D02D2-0834-42F8-9610-8221CF803708} = {BBBE802B-9F6E-4299-97CE-97CDA43802B9}
{ECC7271C-A5E5-4CDC-BA9F-A38A150CD2D4} = {BBBE802B-9F6E-4299-97CE-97CDA43802B9}
{172C1E62-DA67-4203-BBCB-9DA4D9111EF0} = {BBBE802B-9F6E-4299-97CE-97CDA43802B9}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {82DDE6D6-0D55-49B4-9C64-B31B4A6E729F}
Expand Down
Loading

0 comments on commit ed3567d

Please sign in to comment.