managed-components 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #!/bin/bash -xe
  2. REPODIR=$(dirname $(realpath $0))/../repos/managed-components
  3. error()
  4. {
  5. echo "$(date "+%F@%T") :: $1" 1>&2
  6. exit 1
  7. }
  8. report()
  9. {
  10. echo "$(date "+%F@%T") :: $1"
  11. }
  12. download()
  13. {
  14. mkdir -p ${REPODIR}
  15. report "Downloading Xar"
  16. wget --quiet -O ${REPODIR}/xar.tar.gz https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/xar/xar-1.5.2.tar.gz || error "*** Could not download Xar ***"
  17. report "Downloading x64 hostfxr.dll"
  18. wget --quiet -O ${REPODIR}/hostfxr-x64.zip https://www.nuget.org/api/v2/package/runtime.win-x64.Microsoft.NETCore.DotNetHostResolver/2.0.0 || error "*** Could not download 64bit hostfxr.dll ***"
  19. report "Downloading x86 hostfxr.dll"
  20. wget --quiet -O ${REPODIR}/hostfxr-x86.zip https://www.nuget.org/api/v2/package/runtime.win-x86.Microsoft.NETCore.DotNetHostResolver/2.0.0 || error "*** Could not download 32bit hostfxr.dll ***"
  21. report "Copying Mono MDK for Mac"
  22. cp $1 ${REPODIR}/mono.xar
  23. }
  24. clean()
  25. {
  26. pushd ${REPODIR}
  27. report "Deleting interstitial output"
  28. rm -rf ${REPODIR}/mono-mac \
  29. ${REPODIR}/xar \
  30. ${REPODIR}/hostfxr-x64 \
  31. ${REPODIR}/hostfxr-x86 \
  32. ${REPODIR}/Distribution \
  33. ${REPODIR}/mono.pkg \
  34. ${REPODIR}/Resources \
  35. ${REPODIR}/Library \
  36. ${REPODIR}/../../tmp/mono-mac
  37. popd
  38. }
  39. build()
  40. {
  41. pushd ${REPODIR}
  42. if [ ! -x "${REPODIR}/xar/src/xar" ]
  43. then report "Building Xar"
  44. mkdir -p xar
  45. tar xf xar.tar.gz -C xar/ --strip-components=1
  46. pushd xar/
  47. ./configure
  48. make
  49. popd
  50. fi
  51. report "Unpacking x64 hostfxr.dll"
  52. mkdir -p hostfxr-x64
  53. unzip -j "${REPODIR}/hostfxr-x64.zip" "runtimes/win-x64/native/hostfxr.dll" -d "hostfxr-x64"
  54. report "Unpacking x86 hostfxr.dll"
  55. mkdir -p hostfxr-x86
  56. unzip -j "${REPODIR}/hostfxr-x86.zip" "runtimes/win-x86/native/hostfxr.dll" -d "hostfxr-x86"
  57. report "Unpacking Mono for Mac"
  58. xar/src/xar -x -f mono.xar
  59. zcat mono.pkg/Payload | bsdcpio -i
  60. mv Library/Frameworks/Mono.framework/Versions/[5,6].* mono-mac
  61. popd
  62. }
  63. install()
  64. {
  65. rsync -a --copy-links ${REPODIR}/mono-mac/lib/ironpython ${REPODIR}/../../tmp/mono/lib/
  66. rsync -a --copy-links ${REPODIR}/mono-mac/lib/ironruby ${REPODIR}/../../tmp/mono/lib/
  67. rsync -a --copy-links ${REPODIR}/mono-mac/lib/xsp ${REPODIR}/../../tmp/mono/lib/
  68. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/Microsoft* ${REPODIR}/../../tmp/mono/lib/mono/
  69. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/msbuild ${REPODIR}/../../tmp/mono/lib/mono/
  70. rm -f ${REPODIR}/../../tmp/mono/lib/mono/msbuild/15.0/bin/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/libhostfxr.dylib
  71. rm -f ${REPODIR}/../../tmp/mono/lib/mono/msbuild/Current/bin/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/libhostfxr.dylib
  72. if [ "$1" = "x64" ]; then
  73. cp ${REPODIR}/hostfxr-x64/hostfxr.dll ${REPODIR}/../../tmp/mono/lib/mono/msbuild/Current/bin/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/
  74. else
  75. cp ${REPODIR}/hostfxr-x86/hostfxr.dll ${REPODIR}/../../tmp/mono/lib/mono/msbuild/Current/bin/SdkResolvers/Microsoft.DotNet.MSBuildSdkResolver/
  76. fi
  77. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/nuget ${REPODIR}/../../tmp/mono/lib/mono/
  78. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild-frameworks ${REPODIR}/../../tmp/mono/lib/mono/
  79. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/deniedAssembliesList.txt ${REPODIR}/../../tmp/mono/lib/mono/xbuild/
  80. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/15.0 ${REPODIR}/../../tmp/mono/lib/mono/xbuild/
  81. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Current ${REPODIR}/../../tmp/mono/lib/mono/xbuild/
  82. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Microsoft/Microsoft.NET.Build.Extensions ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/
  83. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Microsoft/NuGet ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/
  84. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Microsoft/Portable/VisualStudio ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/Portable/
  85. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Microsoft/VisualStudio/v/FSharp ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/VisualStudio/v/
  86. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Microsoft/VisualStudio/v11.0/FSharp ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/VisualStudio/v11.0/
  87. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Microsoft/VisualStudio/v12.0/FSharp ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/VisualStudio/v12.0/
  88. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Microsoft/VisualStudio/v14.0/FSharp ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/VisualStudio/v14.0/
  89. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Microsoft/VisualStudio/v15.0/FSharp ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/VisualStudio/v15.0/
  90. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/xbuild/Microsoft/VisualStudio/v16.0/FSharp ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/VisualStudio/v16.0/
  91. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/4.5/Microsoft.VisualBasic.dll ${REPODIR}/../../tmp/mono/lib/mono/4.5/
  92. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/4.5/Mono.Cecil.VB* ${REPODIR}/../../tmp/mono/lib/mono/4.5/
  93. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/4.5/Mono.WebServer2.dll ${REPODIR}/../../tmp/mono/lib/mono/4.5/
  94. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/4.5/vbnc.* ${REPODIR}/../../tmp/mono/lib/mono/4.5/
  95. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/4.5/xsp4.exe ${REPODIR}/../../tmp/mono/lib/mono/4.5/
  96. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/4.5/fastcgi-mono-server4.exe ${REPODIR}/../../tmp/mono/lib/mono/4.5/
  97. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/4.5/mod-mono-server4.exe ${REPODIR}/../../tmp/mono/lib/mono/4.5/
  98. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/4.5/mono-fpm.exe ${REPODIR}/../../tmp/mono/lib/mono/4.5/
  99. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/fsharp ${REPODIR}/../../tmp/mono/lib/mono/
  100. rsync -a --copy-links ${REPODIR}/mono-mac/lib/mono/4.0-api/Microsoft.VisualBasic.dll ${REPODIR}/../../tmp/mono/lib/mono/4.0-api/
  101. rsync -a --copy-links ${REPODIR}/mono-mac/bin/ir* ${REPODIR}/../../tmp/mono/bin/
  102. rsync -a --copy-links ${REPODIR}/mono-mac/bin/ipy* ${REPODIR}/../../tmp/mono/bin/
  103. rsync -a --copy-links ${REPODIR}/mono-mac/bin/fsharp* ${REPODIR}/../../tmp/mono/bin/
  104. rsync -a --copy-links ${REPODIR}/mono-mac/bin/xsp* ${REPODIR}/../../tmp/mono/bin/
  105. rsync -a --copy-links ${REPODIR}/mono-mac/bin/nuget ${REPODIR}/../../tmp/mono/bin/
  106. rsync -a --copy-links ${REPODIR}/mono-mac/bin/msbuild ${REPODIR}/../../tmp/mono/bin/
  107. sed -i 's#/Library.*mono#../..#' ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ F\#/v4.*/*
  108. sed -i 's#/Library.*mono#../../../../..#' ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/3.*/Framework/v4.*/*
  109. sed -i 's#/Library.*mono#../../../../..#' ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/4.*/Framework/v4.*/*
  110. sed -i 's#/Library.*mono#../../../../..#' ${REPODIR}/../../tmp/mono/lib/mono/xbuild/Microsoft/VisualStudio/v*/FSharp/*
  111. rsync -a --copy-links ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ F\#/v4.0/* ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ F\#/v4.0/
  112. rsync -a --copy-links ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/3.0/Framework/v4.0/* ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/3.0/Framework/v4.0/
  113. rsync -a --copy-links ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/3.1/Framework/v4.0/* ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/3.1/Framework/v4.0/
  114. rsync -a --copy-links ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/4.0/Framework/v4.0/* ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/4.0/Framework/v4.0/
  115. rsync -a --copy-links ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/4.1/Framework/v4.0/* ${REPODIR}/../../tmp/mono/lib/mono/Microsoft\ SDKs/F\#/4.1/Framework/v4.0/
  116. pushd ${REPODIR}/../../tmp/mono/bin
  117. rm -f xsp
  118. for i in ir ir64 irw irw64 xsp2 xsp4 fsharpc fsharpi fsharpiAnyCpu nuget msbuild ipy ipy64 ipyw ipyw64
  119. do echo "Processing $i"
  120. sed -i 's#/Library.*mono #\"\$\{BASH_SOURCE%/\*\}\"/mono #' $i
  121. sed -i 's#/Library.*cli #\"\$\{BASH_SOURCE%/\*\}\"/cli #' $i
  122. if [ -n "$(grep -hoE '[\" ]/Library.*\.(exe|dll)' $i)" ]
  123. then EXENAME=$(basename `grep -hoE -m 1 '[\" ]/Library.*\.(exe|dll)' $i | sed 's/^\"//'`)
  124. RUNTIME=$(dirname `grep -hoE -m 1 '[\" ]/Library.*\.(exe|dll)' $i` | sed 's/^\"//' | sed 's#/Library.*/[0-9]\+\.[0-9]\+\.[0-9]\+/lib/##' | sed '/^mono\//! s#^#..\\\\#' | sed 's#^mono/##')
  125. sed "s#@@RUNTIME@@#${RUNTIME}\\\\#g" ${REPODIR}/../../resources/wrapper.bat > $i.bat
  126. sed -i "s#@@COMMAND@@#${EXENAME}#g" $i.bat
  127. sed -i 's#/#\\#g' $i.bat
  128. fi
  129. sed -i 's#/Library.*/[0-9]\+\.[0-9]\+\.[0-9]\+/lib/#\"\$\(cygpath -w \"\$\{BASH_SOURCE%/\*\}\"/../lib/\)\"#g#' $i
  130. sed -i 's#\"\"#\"#g' $i
  131. sed -i 's#)\"#)#g' $i
  132. sed -i 's#exe #exe\" #' $i
  133. sed -i 's#dll #dll\" #' $i
  134. sed -i 's#basename \$0#basename \"\$0\"#' $i
  135. done
  136. cp xsp4 xsp
  137. cp xsp4.bat xsp.bat
  138. chmod a+x *
  139. cd ..
  140. for i in lib/mono/4.5/Mono.Cecil.VB*.dll lib/mono/4.5/Microsoft.VisualBasic.dll lib/mono/*/xsp*.exe lib/mono/4.5/fastcgi-mono-server4.exe lib/mono/4.5/mod-mono-server4.exe lib/mono/4.5/mono-fpm.exe lib/mono/*/Mono.WebServer*.dll
  141. do bin/gacutil -i $i
  142. done
  143. # make sure we didn't miss any files with Mac paths
  144. if grep -R 'Mono\.framework' . --exclude=xbuild.1 --exclude=MSBuild.dll.config --exclude=Microsoft.Common.Mono.Before.targets --exclude=macpack.exe; then
  145. echo "Found Mac paths in files, please make sure they're fixed."
  146. exit 1
  147. fi
  148. # make sure we didn't miss any files with cygwin install paths
  149. if grep -R '/tmp/mono'. --exclude=*.pc --exclude=mono-find-provides --exclude=mono-find-requires; then
  150. echo "Found cygwin paths in files, please make sure they're fixed."
  151. exit 1
  152. fi
  153. popd
  154. }
  155. prerequisites()
  156. {
  157. which bsdcpio 2>/dev/null || error "*** bsdcpio is not in \$PATH ***"
  158. which wget 2>/dev/null || error "*** wget is not in \$PATH ***"
  159. which xml2-config 2>/dev/null || error "*** xml2-config is not in \$PATH ***"
  160. which unzip 2>/dev/null || error "*** unzip is not in \$PATH ***"
  161. if [ ! -e "/usr/include/openssl/crypto.h" ]
  162. then error "*** openssl-devel is not installed ***"
  163. fi
  164. }
  165. $@