src/Pure/System/mingw.scala
author wenzelm
Sat, 10 Oct 2020 21:33:54 +0200
changeset 72427 def95a34df8e
parent 72425 d0937d55eb90
child 72428 b7351ffe0dbc
permissions -rw-r--r--
clarified signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72421
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/System/mingw.scala
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
     3
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
     4
Support for MSYS2/MinGW64 on Windows.
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
     5
*/
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
     6
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
     7
package isabelle
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
     8
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
     9
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    10
object MinGW
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    11
{
72427
def95a34df8e clarified signature;
wenzelm
parents: 72425
diff changeset
    12
  def environment: List[String] =
def95a34df8e clarified signature;
wenzelm
parents: 72425
diff changeset
    13
    List("PATH=/usr/bin:/bin:/mingw64/bin", "CONFIG_SITE=/mingw64/etc/config.site")
72421
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    14
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    15
  def environment_prefix: String =
72427
def95a34df8e clarified signature;
wenzelm
parents: 72425
diff changeset
    16
    environment.map(Bash.string).mkString("/usr/bin/env ", " ", " ")
def95a34df8e clarified signature;
wenzelm
parents: 72425
diff changeset
    17
def95a34df8e clarified signature;
wenzelm
parents: 72425
diff changeset
    18
  def environment_export: String =
def95a34df8e clarified signature;
wenzelm
parents: 72425
diff changeset
    19
    environment.map(a => "export " + Bash.string(a)).mkString("", "\n", "\n")
72421
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    20
72424
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    21
  val none: MinGW = new MinGW(None)
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    22
  def root(path: Path) = new MinGW(Some(path))
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    23
}
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    24
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    25
class MinGW private(val root: Option[Path])
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    26
{
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    27
  override def toString: String =
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    28
    root match {
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    29
      case None => "MinGW.none"
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    30
      case Some(msys_root) => "MinGW.root(" + msys_root.toString + ")"
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    31
    }
72421
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    32
72424
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    33
  def bash_command(command: String): String =
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    34
    root match {
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    35
      case None => command
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    36
      case Some(msys_root) =>
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    37
        File.bash_path(msys_root + Path.explode("usr/bin/bash")) +
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    38
          " -c " + Bash.string(MinGW.environment_prefix + command)
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    39
    }
72421
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    40
72424
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    41
  def get_root: Path =
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    42
    if (!Platform.is_windows) error("Windows platform required")
72425
d0937d55eb90 clarified errors;
wenzelm
parents: 72424
diff changeset
    43
    else if (root.isEmpty) error("Windows platform requires msys/mingw root specification")
72424
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    44
    else root.get
72421
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    45
72424
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    46
  def check
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    47
  {
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    48
    if (Platform.is_windows) {
10c07d224035 tuned signature;
wenzelm
parents: 72421
diff changeset
    49
      get_root
72425
d0937d55eb90 clarified errors;
wenzelm
parents: 72424
diff changeset
    50
      try { require(Isabelle_System.bash(bash_command("uname -s")).check.out.startsWith("MSYS")) }
d0937d55eb90 clarified errors;
wenzelm
parents: 72424
diff changeset
    51
      catch { case ERROR(_) => error("Bad msys/mingw installation " + get_root) }
72421
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    52
    }
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    53
  }
9a8bc089890d support for MSYS2/MinGW64 on Windows;
wenzelm
parents:
diff changeset
    54
}