annotate repoint.ps1 @ 56:5e9027b32179 tip master

Fixes for updated subrepos
author Chris Cannam <cannam@all-day-breakfast.com>
date Wed, 16 May 2018 15:51:14 +0100
parents bbcce33e758d
children
rev   line source
cannam@54 1 <#
cannam@54 2
cannam@54 3 .SYNOPSIS
cannam@54 4 A simple manager for third-party source code dependencies.
cannam@55 5 Run "repoint help" for more documentation.
cannam@54 6
cannam@54 7 #>
cannam@54 8
cannam@54 9 Set-StrictMode -Version 2.0
cannam@54 10 $ErrorActionPreference = "Stop"
cannam@55 11 $env:HGPLAIN = "true"
cannam@54 12
cannam@55 13 $sml = $env:REPOINT_SML
cannam@54 14
cannam@54 15 $mydir = Split-Path $MyInvocation.MyCommand.Path -Parent
cannam@55 16 $program = "$mydir/repoint.sml"
cannam@54 17
cannam@54 18 # We need either Poly/ML or SML/NJ. No great preference as to which.
cannam@54 19
cannam@55 20 # Typical locations
cannam@55 21 $env:PATH = "$env:PATH;C:\Program Files (x86)\SMLNJ\bin;C:\Program Files\Poly ML;C:\Program Files (x86)\Poly ML"
cannam@55 22
cannam@54 23 if (!$sml) {
cannam@54 24 if (Get-Command "sml" -ErrorAction SilentlyContinue) {
cannam@54 25 $sml = "smlnj"
cannam@54 26 } elseif (Get-Command "polyml" -ErrorAction SilentlyContinue) {
cannam@54 27 $sml = "poly"
cannam@54 28 } else {
cannam@54 29 echo @"
cannam@54 30
cannam@54 31 ERROR: No supported SML compiler or interpreter found
cannam@54 32
cannam@55 33 The Repoint external source code manager needs a Standard ML (SML)
cannam@54 34 compiler or interpreter to run.
cannam@54 35
cannam@54 36 Please ensure you have one of the following SML implementations
cannam@54 37 installed and present in your PATH, and try again.
cannam@54 38
cannam@54 39 1. Standard ML of New Jersey
cannam@54 40 - executable name: sml
cannam@54 41
cannam@54 42 2. Poly/ML
cannam@54 43 - executable name: polyml
cannam@54 44
cannam@54 45 "@
cannam@54 46 exit 1
cannam@54 47 }
cannam@54 48 }
cannam@54 49
cannam@55 50 if ($args -match "'""") {
cannam@54 51 $arglist = '["usage"]'
cannam@54 52 } else {
cannam@54 53 $arglist = '["' + ($args -join '","') + '"]'
cannam@54 54 }
cannam@54 55
cannam@54 56 if ($sml -eq "poly") {
cannam@54 57
cannam@54 58 $program = $program -replace "\\","\\\\"
cannam@55 59 echo "use ""$program""; repoint $arglist" | polyml -q --error-exit | Out-Host
cannam@54 60
cannam@54 61 if (-not $?) {
cannam@54 62 exit $LastExitCode
cannam@54 63 }
cannam@54 64
cannam@54 65 } elseif ($sml -eq "smlnj") {
cannam@54 66
cannam@54 67 $lines = @(Get-Content $program)
cannam@54 68 $lines = $lines -notmatch "val _ = main ()"
cannam@54 69
cannam@54 70 $intro = @"
cannam@54 71 val smlrun__cp =
cannam@54 72 let val x = !Control.Print.out in
cannam@54 73 Control.Print.out := { say = fn _ => (), flush = fn () => () };
cannam@54 74 x
cannam@54 75 end;
cannam@54 76 val smlrun__prev = ref "";
cannam@54 77 Control.Print.out := {
cannam@54 78 say = fn s =>
cannam@54 79 (if String.isSubstring "Error" s orelse String.isSubstring "Fail" s
cannam@54 80 then (Control.Print.out := smlrun__cp;
cannam@54 81 (#say smlrun__cp) (!smlrun__prev);
cannam@54 82 (#say smlrun__cp) s)
cannam@54 83 else (smlrun__prev := s; ())),
cannam@54 84 flush = fn s => ()
cannam@54 85 };
cannam@54 86 "@ -split "[\r\n]+"
cannam@54 87
cannam@54 88 $outro = @"
cannam@55 89 val _ = repoint $arglist;
cannam@54 90 val _ = OS.Process.exit (OS.Process.success);
cannam@54 91 "@ -split "[\r\n]+"
cannam@54 92
cannam@54 93 $script = @()
cannam@54 94 $script += $intro
cannam@54 95 $script += $lines
cannam@54 96 $script += $outro
cannam@54 97
cannam@54 98 $tmpfile = ([System.IO.Path]::GetTempFileName()) -replace "[.]tmp",".sml"
cannam@54 99
cannam@54 100 $script | Out-File -Encoding "ASCII" $tmpfile
cannam@54 101
cannam@54 102 $env:CM_VERBOSE="false"
cannam@54 103
cannam@54 104 sml $tmpfile
cannam@54 105
cannam@54 106 if (-not $?) {
cannam@54 107 del $tmpfile
cannam@54 108 exit $LastExitCode
cannam@54 109 }
cannam@54 110
cannam@54 111 del $tmpfile
cannam@54 112
cannam@54 113 } else {
cannam@54 114
cannam@54 115 "Unknown SML implementation name: $sml"
cannam@54 116 exit 2
cannam@54 117 }