2 from distutils
.version
import StrictVersion
4 class FsharpPackage(GitHubTarballPackage
):
6 GitHubTarballPackage
.__init
__(self
,
9 '9cf3dbdf4e83816a8feb2eab0dd48465d130f902', # release/dev16.8
11 override_properties
={ 'make': 'version= ./build.sh -c Release && version= ./.dotnet/dotnet restore setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.csproj --packages fsharp-nugets' })
13 self
.sources
.extend(['patches/fsharp-netfx-multitarget.patch',
14 'patches/fsharp-portable-pdb.patch'])
19 for p
in range(1, len(self
.sources
)):
20 self
.sh('patch -p1 < "%{local_sources[' + str(p
) + ']}"')
22 # .NET Core 3.1 officially only supports macOS 10.13+ but we can get it to work on 10.12 by compiling our own System.Native.dylib
23 if StrictVersion(platform
.mac_ver()[0]) < StrictVersion("10.13.0"):
24 self
.sh('git clone --branch release/3.1 https://github.com/dotnet/corefx && git -C corefx checkout 1b5b5f0bf030bf7250c3258c140fa9e4214325c8')
25 self
.sh('echo \'\' > corefx/src/Native/Unix/System.Security.Cryptography.Native/CMakeLists.txt')
26 self
.sh('env -i HOME="$HOME" PATH="$PATH" USER="$USER" bash -c \'cd corefx && MACOSX_DEPLOYMENT_TARGET=10.12 src/Native/build-native.sh x64 Debug OSX outconfig netcoreapp-OSX-Debug-x64 -portable\'')
27 self
.sh('bash -c \'source eng/common/tools.sh && InitializeDotNetCli true\'')
28 self
.sh('cp corefx/artifacts/bin/native/netcoreapp-OSX-Debug-x64/System.Native.dylib .dotnet/shared/Microsoft.NETCore.App/3.1.6/System.Native.dylib')
35 "artifacts/bin/fsc/Release/net472/fsc.exe",
36 "artifacts/bin/fsc/Release/net472/fsc.exe.config",
37 "artifacts/bin/fsc/Release/net472/FSharp.Build.dll",
38 "artifacts/bin/fsc/Release/net472/FSharp.Build.xml",
39 "artifacts/bin/fsc/Release/net472/FSharp.Compiler.Private.dll",
40 "artifacts/bin/fsc/Release/net472/FSharp.Compiler.Private.xml",
41 "artifacts/bin/fsc/Release/net472/FSharp.Core.dll",
42 "artifacts/bin/fsc/Release/net472/FSharp.Core.xml",
43 "artifacts/bin/fsc/Release/net472/Microsoft.FSharp.Targets",
44 "artifacts/bin/fsc/Release/net472/Microsoft.Portable.FSharp.Targets",
45 "artifacts/bin/fsc/Release/net472/Microsoft.Build.dll",
46 "artifacts/bin/fsc/Release/net472/Microsoft.Build.Framework.dll",
47 "artifacts/bin/fsc/Release/net472/Microsoft.Build.Tasks.Core.dll",
48 "artifacts/bin/fsc/Release/net472/Microsoft.Build.Utilities.Core.dll",
49 "artifacts/bin/fsc/Release/net472/System.Buffers.dll",
50 "artifacts/bin/fsc/Release/net472/System.Collections.Immutable.dll",
51 "artifacts/bin/fsc/Release/net472/System.Memory.dll",
52 "artifacts/bin/fsc/Release/net472/System.Numerics.Vectors.dll",
53 "artifacts/bin/fsc/Release/net472/System.Reflection.Metadata.dll",
54 "artifacts/bin/fsc/Release/net472/System.Reflection.TypeExtensions.dll",
55 "artifacts/bin/fsc/Release/net472/System.Resources.Extensions.dll",
56 "artifacts/bin/fsc/Release/net472/System.Runtime.CompilerServices.Unsafe.dll",
57 "artifacts/bin/fsc/Release/net472/System.Threading.Tasks.Dataflow.dll",
58 "artifacts/bin/fsi/Release/net472/fsi.exe",
59 "artifacts/bin/fsi/Release/net472/fsi.exe.config",
60 "artifacts/bin/fsiAnyCpu/Release/net472/fsiAnyCpu.exe",
61 "artifacts/bin/fsiAnyCpu/Release/net472/fsiAnyCpu.exe.config",
62 "artifacts/bin/fsi/Release/net472/FSharp.Compiler.Interactive.Settings.dll",
63 "artifacts/bin/fsi/Release/net472/FSharp.Compiler.Interactive.Settings.xml",
64 "artifacts/bin/fsi/Release/net472/FSharp.Compiler.Server.Shared.dll",
65 "artifacts/bin/fsi/Release/net472/FSharp.Compiler.Server.Shared.xml",
66 "artifacts/bin/fsi/Release/net472/FSharp.DependencyManager.Nuget.dll",
67 "artifacts/bin/fsi/Release/net472/FSharp.DependencyManager.Nuget.xml",
68 "artifacts/bin/fsi/Release/net472/Microsoft.DotNet.DependencyManager.dll",
69 "artifacts/bin/fsi/Release/net472/Microsoft.DotNet.DependencyManager.xml"
72 self
.copy_files_to_dir(fsharp_files
, os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp'))
74 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETFramework/v4.0/4.3.0.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETFramework/v4.0/4.3.0.0'))
75 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETFramework/v4.0/4.3.1.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETFramework/v4.0/4.3.1.0'))
76 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETFramework/v4.0/4.4.0.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETFramework/v4.0/4.4.0.0'))
77 self
.copy_api_files("fsharp-nugets/microsoft.portable.fsharp.core/10.1.0/lib/versions/4.4.1.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETFramework/v4.0/4.4.1.0'))
78 self
.copy_api_files("fsharp-nugets/fsharp.core/4.3.4/lib/net45", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETFramework/v4.0/4.4.3.0'))
79 self
.copy_api_files("fsharp-nugets/fsharp.core/4.3.4/lib/net45", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETFramework/v4.0/4.4.5.0'))
81 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETCore/3.3.1.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETCore/3.3.1.0'))
82 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETCore/3.7.4.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETCore/3.7.4.0'))
83 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETCore/3.78.3.1", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETCore/3.78.3.1'))
84 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETCore/3.78.4.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETCore/3.78.4.0'))
85 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETCore/3.259.4.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETCore/3.259.4.0'))
86 self
.copy_api_files("fsharp-nugets/microsoft.portable.fsharp.core/10.1.0/lib/profiles/portable-net45+netcore45", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETCore/3.7.41.0'))
87 self
.copy_api_files("fsharp-nugets/microsoft.portable.fsharp.core/10.1.0/lib/profiles/portable-net45+netcore45+wp8", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETCore/3.78.41.0'))
88 self
.copy_api_files("fsharp-nugets/microsoft.portable.fsharp.core/10.1.0/lib/profiles/portable-net45+netcore45+wpa81+wp8", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETCore/3.259.41.0'))
90 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETPortable/2.3.5.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETPortable/2.3.5.0'))
91 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETPortable/2.3.5.1", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETPortable/2.3.5.1'))
92 self
.copy_api_files("fsharp-nugets/microsoft.visualfsharp.core.redist/1.0.0/content/.NETPortable/3.47.4.0", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETPortable/3.47.4.0'))
93 self
.copy_api_files("fsharp-nugets/microsoft.portable.fsharp.core/10.1.0/lib/profiles/portable-net45+sl5+netcore45", os
.path
.join(self
.staged_prefix
, 'lib/mono/fsharp/api/.NETPortable/3.47.41.0'))
95 self
.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v/FSharp"))
96 self
.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v11.0/FSharp"))
97 self
.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v12.0/FSharp"))
98 self
.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v14.0/FSharp"))
99 self
.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v15.0/FSharp"))
100 self
.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v16.0/FSharp"))
101 self
.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v17.0/FSharp"))
103 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/Microsoft F#/v4.0"))
104 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/Microsoft SDKs/F#/3.0/Framework/v4.0"))
105 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/Microsoft SDKs/F#/3.1/Framework/v4.0"))
106 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/Microsoft SDKs/F#/4.0/Framework/v4.0"))
107 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/Microsoft SDKs/F#/4.1/Framework/v4.0"))
108 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v/FSharp"))
109 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v11.0/FSharp"))
110 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v12.0/FSharp"))
111 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v14.0/FSharp"))
112 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v15.0/FSharp"))
113 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v16.0/FSharp"))
114 self
.write_targets_files(os
.path
.join(self
.staged_prefix
, "lib/mono/xbuild/Microsoft/VisualStudio/v17.0/FSharp"))
116 self
.write_script(os
.path
.join(self
.staged_prefix
, "bin"), "fsharpc", "fsc.exe")
117 self
.write_script(os
.path
.join(self
.staged_prefix
, "bin"), "fsharpi", "fsi.exe")
118 self
.write_script(os
.path
.join(self
.staged_prefix
, "bin"), "fsharpiAnyCpu", "fsiAnyCpu.exe")
120 def copy_api_files(self
, source_dir
, target_dir
):
122 os
.path
.join(source_dir
, "FSharp.Core.dll"),
123 os
.path
.join(source_dir
, "FSharp.Core.xml"),
124 os
.path
.join(source_dir
, "FSharp.Core.sigdata"),
125 os
.path
.join(source_dir
, "FSharp.Core.optdata")
127 self
.copy_files_to_dir(fsharpcore_files
, target_dir
)
129 def copy_netsdk_files(self
, source_dir
, target_dir
):
131 os
.path
.join(source_dir
, "Microsoft.FSharp.NetSdk.props"),
132 os
.path
.join(source_dir
, "Microsoft.FSharp.NetSdk.targets"),
133 os
.path
.join(source_dir
, "Microsoft.FSharp.Overrides.NetSdk.targets")
135 self
.copy_files_to_dir(netsdk_files
, target_dir
)
137 def write_targets_files(self
, target_dir
):
138 ensure_dir(target_dir
)
139 with
open(os
.path
.join(target_dir
, "Microsoft.FSharp.Targets"), "w") as output
:
140 output
.write('<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\n')
141 output
.write(' <Import Project="' + self
.package_prefix
+ '/lib/mono/fsharp/Microsoft.FSharp.Targets" />\n')
142 output
.write('</Project>\n')
143 with
open(os
.path
.join(target_dir
, "Microsoft.Portable.FSharp.Targets"), "w") as output
:
144 output
.write('<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\n')
145 output
.write(' <Import Project="' + self
.package_prefix
+ '/lib/mono/fsharp/Microsoft.Portable.FSharp.Targets" />\n')
146 output
.write('</Project>\n')
148 def write_script(self
, target_dir
, script_name
, exe_name
):
149 ensure_dir(target_dir
)
150 wrapper
= os
.path
.join(target_dir
, script_name
)
151 with
open(wrapper
, "w") as output
:
152 output
.write('#!/bin/sh\n')
153 output
.write('EXEC="exec "\n')
155 output
.write('if test x"$1" = x--debug; then\n')
156 output
.write(' DEBUG=--debug\n')
157 output
.write(' shift\n')
160 output
.write('if test x"$1" = x--gdb; then\n')
161 output
.write(' shift\n')
162 output
.write(' EXEC="gdb --eval-command=run --args "\n')
165 output
.write('if test x"$1" = x--valgrind; then\n')
166 output
.write(' shift\n')
167 output
.write(' EXEC="valgrind $VALGRIND_OPTIONS" \n')
170 output
.write('$EXEC ' + self
.package_prefix
+ '/bin/mono $DEBUG $MONO_OPTIONS ' + self
.package_prefix
+ '/lib/mono/fsharp/' + exe_name
+ ' --exename:$(basename "$0") "$@"\n')
171 os
.chmod(wrapper
, 0o755)
173 def copy_files_to_dir(self
, files
, target_dir
):
174 ensure_dir(target_dir
)
177 source
= os
.path
.join(self
.workspace
, f
)
178 target
= os
.path
.join(target_dir
, os
.path
.basename(source
))
179 shutil
.copy(source
, target
)