fsharp.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import platform
  2. from distutils.version import StrictVersion
  3. class FsharpPackage(GitHubTarballPackage):
  4. def __init__(self):
  5. GitHubTarballPackage.__init__(self,
  6. 'dotnet', 'fsharp',
  7. '5.0.0',
  8. '03283e07f6bd5717797acb288cf6044cedca2202',
  9. configure='',
  10. override_properties={ 'make': 'version= ./build.sh -c Release && version= ./.dotnet/dotnet restore setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.csproj --packages fsharp-nugets' })
  11. self.sources.extend(['patches/fsharp-netfx-multitarget.patch',
  12. 'patches/fsharp-portable-pdb.patch'])
  13. def prep(self):
  14. Package.prep(self)
  15. for p in range(1, len(self.sources)):
  16. self.sh('patch -p1 < "%{local_sources[' + str(p) + ']}"')
  17. # .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
  18. if StrictVersion(platform.mac_ver()[0]) < StrictVersion("10.13.0"):
  19. self.sh('git clone --branch release/3.1 git://github.com/dotnet/corefx && git -C corefx checkout 1b5b5f0bf030bf7250c3258c140fa9e4214325c8')
  20. self.sh('echo \'\' > corefx/src/Native/Unix/System.Security.Cryptography.Native/CMakeLists.txt')
  21. 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\'')
  22. self.sh('bash -c \'source eng/common/tools.sh && InitializeDotNetCli true\'')
  23. 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')
  24. def build(self):
  25. Package.make(self)
  26. def install(self):
  27. fsharp_files = [
  28. "artifacts/bin/fsc/Release/net472/fsc.exe",
  29. "artifacts/bin/fsc/Release/net472/fsc.exe.config",
  30. "artifacts/bin/fsc/Release/net472/FSharp.Build.dll",
  31. "artifacts/bin/fsc/Release/net472/FSharp.Build.xml",
  32. "artifacts/bin/fsc/Release/net472/FSharp.Compiler.Private.dll",
  33. "artifacts/bin/fsc/Release/net472/FSharp.Compiler.Private.xml",
  34. "artifacts/bin/fsc/Release/net472/FSharp.Core.dll",
  35. "artifacts/bin/fsc/Release/net472/FSharp.Core.xml",
  36. "artifacts/bin/fsc/Release/net472/Microsoft.FSharp.Targets",
  37. "artifacts/bin/fsc/Release/net472/Microsoft.Portable.FSharp.Targets",
  38. "artifacts/bin/fsc/Release/net472/Microsoft.Build.dll",
  39. "artifacts/bin/fsc/Release/net472/Microsoft.Build.Framework.dll",
  40. "artifacts/bin/fsc/Release/net472/Microsoft.Build.Tasks.Core.dll",
  41. "artifacts/bin/fsc/Release/net472/Microsoft.Build.Utilities.Core.dll",
  42. "artifacts/bin/fsc/Release/net472/System.Buffers.dll",
  43. "artifacts/bin/fsc/Release/net472/System.Collections.Immutable.dll",
  44. "artifacts/bin/fsc/Release/net472/System.Memory.dll",
  45. "artifacts/bin/fsc/Release/net472/System.Numerics.Vectors.dll",
  46. "artifacts/bin/fsc/Release/net472/System.Reflection.Metadata.dll",
  47. "artifacts/bin/fsc/Release/net472/System.Reflection.TypeExtensions.dll",
  48. "artifacts/bin/fsc/Release/net472/System.Resources.Extensions.dll",
  49. "artifacts/bin/fsc/Release/net472/System.Runtime.CompilerServices.Unsafe.dll",
  50. "artifacts/bin/fsc/Release/net472/System.Threading.Tasks.Dataflow.dll",
  51. "artifacts/bin/fsi/Release/net472/fsi.exe",
  52. "artifacts/bin/fsi/Release/net472/fsi.exe.config",
  53. "artifacts/bin/fsiAnyCpu/Release/net472/fsiAnyCpu.exe",
  54. "artifacts/bin/fsiAnyCpu/Release/net472/fsiAnyCpu.exe.config",
  55. "artifacts/bin/fsi/Release/net472/FSharp.Compiler.Interactive.Settings.dll",
  56. "artifacts/bin/fsi/Release/net472/FSharp.Compiler.Interactive.Settings.xml",
  57. "artifacts/bin/fsi/Release/net472/FSharp.Compiler.Server.Shared.dll",
  58. "artifacts/bin/fsi/Release/net472/FSharp.Compiler.Server.Shared.xml",
  59. "artifacts/bin/fsi/Release/net472/FSharp.DependencyManager.Nuget.dll",
  60. "artifacts/bin/fsi/Release/net472/FSharp.DependencyManager.Nuget.xml",
  61. "artifacts/bin/fsi/Release/net472/Microsoft.DotNet.DependencyManager.dll",
  62. "artifacts/bin/fsi/Release/net472/Microsoft.DotNet.DependencyManager.xml"
  63. ]
  64. self.copy_files_to_dir(fsharp_files, os.path.join(self.staged_prefix, 'lib/mono/fsharp'))
  65. 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'))
  66. 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'))
  67. 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'))
  68. 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'))
  69. 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'))
  70. 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'))
  71. 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'))
  72. 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'))
  73. 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'))
  74. 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'))
  75. 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'))
  76. 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'))
  77. 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'))
  78. 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'))
  79. 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'))
  80. 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'))
  81. 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'))
  82. 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'))
  83. self.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v/FSharp"))
  84. self.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v11.0/FSharp"))
  85. self.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v12.0/FSharp"))
  86. self.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v14.0/FSharp"))
  87. self.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v15.0/FSharp"))
  88. self.copy_netsdk_files("artifacts/bin/fsc/Release/net472", os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v16.0/FSharp"))
  89. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/Microsoft F#/v4.0"))
  90. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/Microsoft SDKs/F#/3.0/Framework/v4.0"))
  91. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/Microsoft SDKs/F#/3.1/Framework/v4.0"))
  92. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/Microsoft SDKs/F#/4.0/Framework/v4.0"))
  93. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/Microsoft SDKs/F#/4.1/Framework/v4.0"))
  94. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v/FSharp"))
  95. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v11.0/FSharp"))
  96. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v12.0/FSharp"))
  97. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v14.0/FSharp"))
  98. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v15.0/FSharp"))
  99. self.write_targets_files(os.path.join(self.staged_prefix, "lib/mono/xbuild/Microsoft/VisualStudio/v16.0/FSharp"))
  100. self.write_script(os.path.join(self.staged_prefix, "bin"), "fsharpc", "fsc.exe")
  101. self.write_script(os.path.join(self.staged_prefix, "bin"), "fsharpi", "fsi.exe")
  102. self.write_script(os.path.join(self.staged_prefix, "bin"), "fsharpiAnyCpu", "fsiAnyCpu.exe")
  103. def copy_api_files(self, source_dir, target_dir):
  104. fsharpcore_files = [
  105. os.path.join(source_dir, "FSharp.Core.dll"),
  106. os.path.join(source_dir, "FSharp.Core.xml"),
  107. os.path.join(source_dir, "FSharp.Core.sigdata"),
  108. os.path.join(source_dir, "FSharp.Core.optdata")
  109. ]
  110. self.copy_files_to_dir(fsharpcore_files, target_dir)
  111. def copy_netsdk_files(self, source_dir, target_dir):
  112. netsdk_files = [
  113. os.path.join(source_dir, "Microsoft.FSharp.NetSdk.props"),
  114. os.path.join(source_dir, "Microsoft.FSharp.NetSdk.targets"),
  115. os.path.join(source_dir, "Microsoft.FSharp.Overrides.NetSdk.targets")
  116. ]
  117. self.copy_files_to_dir(netsdk_files, target_dir)
  118. def write_targets_files(self, target_dir):
  119. ensure_dir(target_dir)
  120. with open(os.path.join(target_dir, "Microsoft.FSharp.Targets"), "w") as output:
  121. output.write('<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\n')
  122. output.write(' <Import Project="' + self.package_prefix + '/lib/mono/fsharp/Microsoft.FSharp.Targets" />\n')
  123. output.write('</Project>\n')
  124. with open(os.path.join(target_dir, "Microsoft.Portable.FSharp.Targets"), "w") as output:
  125. output.write('<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\n')
  126. output.write(' <Import Project="' + self.package_prefix + '/lib/mono/fsharp/Microsoft.Portable.FSharp.Targets" />\n')
  127. output.write('</Project>\n')
  128. def write_script(self, target_dir, script_name, exe_name):
  129. ensure_dir(target_dir)
  130. wrapper = os.path.join(target_dir, script_name)
  131. with open(wrapper, "w") as output:
  132. output.write('#!/bin/sh\n')
  133. output.write('EXEC="exec "\n')
  134. output.write('\n')
  135. output.write('if test x"$1" = x--debug; then\n')
  136. output.write(' DEBUG=--debug\n')
  137. output.write(' shift\n')
  138. output.write('fi\n')
  139. output.write('\n')
  140. output.write('if test x"$1" = x--gdb; then\n')
  141. output.write(' shift\n')
  142. output.write(' EXEC="gdb --eval-command=run --args "\n')
  143. output.write('fi\n')
  144. output.write('\n')
  145. output.write('if test x"$1" = x--valgrind; then\n')
  146. output.write(' shift\n')
  147. output.write(' EXEC="valgrind $VALGRIND_OPTIONS" \n')
  148. output.write('fi\n')
  149. output.write('\n')
  150. output.write('$EXEC ' + self.package_prefix + '/bin/mono $DEBUG $MONO_OPTIONS ' + self.package_prefix + '/lib/mono/fsharp/' + exe_name + ' --exename:$(basename "$0") "$@"\n')
  151. os.chmod(wrapper, 0o755)
  152. def copy_files_to_dir(self, files, target_dir):
  153. ensure_dir(target_dir)
  154. for f in files:
  155. source = os.path.join(self.workspace, f)
  156. target = os.path.join(target_dir, os.path.basename(source))
  157. shutil.copy(source, target)
  158. FsharpPackage()