123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- function Cmd-Path($file) {
- try { Split-Path -Parent (Get-Command "$file.exe" -ErrorAction Stop).Source } catch { "" }
- }
- # resolve Opam binary and repo
- # you can choose when opam is installed by setting OPAM_INSTALL_DIR (and OPAMROOT - optional)
- $Opam = Cmd-Path "opam"
- $OpamRepo = $env:OPAMROOT
- $Git = Cmd-Path "git"
- if( !$Opam ) { $Opam = $env:OPAM_INSTALL_DIR }
- if( !$Opam ) { $Opam = (Get-Item .).FullName + "\opam" }
- if( !$OpamRepo ) { $OpamRepo = "$Opam\repo" }
- $CygRoot = "$OpamRepo\.cygwin\root"
- $WinSysPath = "$env:SystemRoot\System32"
- $Neko = Cmd-Path "neko"
- $RegPath = "HKCU:\Environment"
- $MbedVer = "2.16.3"
- $MbedTLS = "https://github.com/Simn/mingw64-mbedtls/releases/download/$MbedVer/mingw64-x86_64-mbedtls-$MbedVer-1.tar.xz"
- function Install-Init {
- if( !$Git ) {
- echo "**ERROR** git.exe could not be found in PATH"
- Exit
- }
- if( !$Neko ) {
- echo "**ERROR** Neko.exe could not be found in PATH"
- Exit
- }
-
- # reset PATH to prevent conflicting cygwin or existing install
- Set-Item -Path env:PATH -Value "$Neko;$CygRoot\usr\x86_64-w64-mingw32\bin;$Opam;$CygRoot\bin;$WinSysPath"
- # set OPAM root dir
- Set-Item -Path env:OPAMROOT -Value "$OpamRepo"
- }
- function Install-Opam {
- # download opam binary
- Invoke-Expression "& { $(Invoke-RestMethod https://opam.ocaml.org/install.ps1)} -OpamBinDir $Opam"
- # init opam, assume that we have windows GIT installed
- Invoke-Expression "opam init --cygwin-internal-install --no-git-location --shell=powershell --shell-setup"
- }
- function Install-Haxe-Deps {
- Invoke-Expression "opam install . --deps-only --confirm-level=yes"
-
- # install mbedtls mingw package
- $tmpFile = "./mbed.tgz"
- Invoke-Expression "curl $MbedTLS -o $tmpFile"
- Invoke-Expression "tar -C / -xvf $tmpFile"
- Remove-Item "$tmpFile"
-
- # install lsp server
- Invoke-Expression "opam install ocaml-lsp-server --confirm-level=yes"
- }
- function Add-Path($NewPath) {
- $CurrentPath = (Get-ItemProperty -Path $RegPath -Name Path).Path
- if ($CurrentPath -notlike "*$NewPath*") {
- $CurrentPath = "$NewPath;$CurrentPath"
- Set-ItemProperty -Path $RegPath -Name Path -Value $CurrentPath
- }
- }
- function Setup-Paths {
- Add-Path "$OpamRepo\default\bin"
- Add-Path "$CygRoot\bin"
- Add-Path "$CygRoot\usr\x86_64-w64-mingw32\bin"
- Add-Path "$CygRoot\usr\x86_64-w64-mingw32\sys-root\mingw\bin"
- Set-ItemProperty -Path $RegPath -Name OPAMROOT -Value $OpamRepo
- # refresh for all processes (no need to restart)
- $signature = @"
- [DllImport("user32.dll", CharSet = CharSet.Auto)]
- public static extern int SendMessageTimeout(IntPtr hWnd, int Msg, IntPtr wParam, string lParam, int fuFlags, int uTimeout, out IntPtr lpdwResult);
- "@
- $SendMessageTimeout = Add-Type -MemberDefinition $signature -Name "Win32SendMessageTimeout" -Namespace Win32Functions -PassThru
- $SendMessageTimeout::SendMessageTimeout([IntPtr]0xFFFF, 0x1A, [IntPtr]::Zero, "Environment", 2, 5000, [ref][IntPtr]::Zero)
- }
- Install-Init
- #Install-Opam
- Install-Haxe-Deps
- #Setup-Paths
|