src/Pure/Admin/build_csdp.scala
author wenzelm
Fri, 09 Oct 2020 20:54:26 +0200
changeset 72414 af24c0dd6975
child 72417 992822a11039
permissions -rw-r--r--
build Isabelle CSDP component from official downloads;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72414
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Admin/build_csdp.scala
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
     3
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
     4
Build Isabelle CSDP component from official downloads.
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
     5
*/
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
     6
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
     7
package isabelle
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
     8
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
     9
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    10
object Build_CSDP
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    11
{
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    12
  /* build CSDP */
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    13
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    14
  val component_name = "csdp-6.2.0"
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    15
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    16
  val source_url = "https://github.com/coin-or/Csdp/archive/releases/6.2.0.tar.gz"
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    17
  val windows_url = "https://github.com/coin-or/Csdp/files/2485584/csdp6.2.0win64.zip"
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    18
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    19
  sealed case class Flags(platform: String, CFLAGS: String = "", LIBS: String = "")
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    20
  {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    21
    def print: String =
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    22
      "  * " + platform + ":\n" +
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    23
      List("CFLAGS=" + CFLAGS, "LIBS=" + LIBS).map("    " + _).mkString("\n")
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    24
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    25
    def change(path: Path)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    26
    {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    27
      File.change(path, s =>
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    28
        (for (line <- split_lines(s))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    29
          yield {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    30
            line.replaceAll("CFLAGS=.*", "CFLAGS=" + CFLAGS)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    31
              .replaceAll("LIBS=.*", "LIBS=" + LIBS)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    32
          }).mkString("\n"))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    33
    }
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    34
  }
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    35
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    36
  val build_flags: List[Flags] =
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    37
    List(
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    38
      Flags("arm64-linux",
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    39
        CFLAGS = "-march=native -mtune=native -Ofast -ansi -Wall -DBIT64 -DUSESIGTERM -DUSEGETTIME -I../include",
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    40
        LIBS = "-static -L../lib -lsdp -llapack -lblas -lgfortran -lm"),
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    41
      Flags("x86_64-linux",  // Ubuntu 16.04 LTS
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    42
        CFLAGS = "-march=native -mtune=native -Ofast -ansi -Wall -DBIT64 -DUSESIGTERM -DUSEGETTIME -I../include",
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    43
        LIBS = "-static -L../lib -lsdp -llapack -lblas -lgfortran -lquadmath -lm"),
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    44
      Flags("x86_64-darwin",
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    45
        CFLAGS = "-m64 -Ofast -ansi -Wall -DBIT64 -DUSESIGTERM -DUSEGETTIME -I../include",
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    46
        LIBS = "-L../lib -lsdp -llapack -lblas -lm"))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    47
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    48
  def build_csdp(
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    49
    pretend_windows: Boolean = false,
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    50
    verbose: Boolean = false,
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    51
    progress: Progress = new Progress,
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    52
    target_dir: Path = Path.current)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    53
  {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    54
    Isabelle_System.with_tmp_dir("build")(tmp_dir =>
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    55
    {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    56
      val component_dir = Isabelle_System.new_directory(target_dir + Path.basic(component_name))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    57
      progress.echo("Component " + component_dir)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    58
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    59
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    60
      /* platform */
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    61
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    62
      val is_windows = Platform.is_windows || pretend_windows
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    63
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    64
      val (platform_name, windows_name) =
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    65
        if (is_windows) {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    66
          val Windows_Name = """^.*?([^/]+)\.zip$""".r
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    67
          val windows_name =
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    68
            windows_url match {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    69
              case Windows_Name(name) => name
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    70
              case _ => error("Failed to determine base name from " + quote(windows_url))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    71
            }
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    72
          ("x86_64-windows", windows_name)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    73
        }
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    74
        else {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    75
          val name =
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    76
            proper_string(Isabelle_System.getenv("ISABELLE_PLATFORM64"))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    77
              .getOrElse(error("No 64bit platform"))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    78
          (name, "")
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    79
        }
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    80
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    81
      val platform_dir = Isabelle_System.make_directory(component_dir + Path.basic(platform_name))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    82
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    83
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    84
      /* download */
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    85
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    86
      val archive_path = tmp_dir + Path.basic("src.tar.gz")
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    87
      Isabelle_System.download(source_url, archive_path, progress = progress)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    88
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    89
      Isabelle_System.bash("tar xzf src.tar.gz", cwd = tmp_dir.file).check
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    90
      val source_name =
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    91
        File.read_dir(tmp_dir).filterNot(_ == "src.tar.gz") match {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    92
          case List(name) => name
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    93
          case _ => error("Exactly one entry expected in archive " + quote(source_url))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    94
        }
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    95
      Isabelle_System.bash(
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    96
        "tar xzf " + archive_path + " && mv " + Bash.string(source_name) + " src",
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    97
        cwd = component_dir.file).check
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    98
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
    99
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   100
      /* build */
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   101
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   102
      if (is_windows) {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   103
        Isabelle_System.download(windows_url, tmp_dir + Path.basic("windows.zip"),
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   104
          progress = progress)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   105
        Isabelle_System.bash("unzip -x windows", cwd = tmp_dir.file).check
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   106
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   107
        val windows_dir = tmp_dir + Path.explode(windows_name)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   108
        File.copy(windows_dir + Path.explode("LICENSE"), component_dir)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   109
        File.copy(windows_dir + Path.explode("bin/csdp.exe"), platform_dir)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   110
        File.set_executable(platform_dir + Path.basic("csdp.exe"), true)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   111
      }
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   112
      else {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   113
        progress.echo("Building CSDP ...")
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   114
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   115
        val build_dir = tmp_dir + Path.basic(source_name)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   116
        build_flags.find(flags => flags.platform == platform_name) match {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   117
          case None => error("No build flags for platform " + quote(platform_name))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   118
          case Some(flags) => flags.change(build_dir + Path.basic("Makefile"))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   119
        }
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   120
        Isabelle_System.bash("make",
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   121
          cwd = build_dir.file,
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   122
          progress_stdout = progress.echo_if(verbose, _),
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   123
          progress_stderr = progress.echo_if(verbose, _)).check
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   124
        File.copy(build_dir + Path.explode("solver/csdp"), platform_dir)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   125
      }
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   126
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   127
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   128
      /* settings */
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   129
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   130
      val etc_dir = Isabelle_System.make_directory(component_dir + Path.basic("etc"))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   131
      File.write(etc_dir + Path.basic("settings"),
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   132
        """# -*- shell-script -*- :mode=shellscript:
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   133
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   134
ISABELLE_CSDP="$COMPONENT/${ISABELLE_WINDOWS_PLATFORM64:-$ISABELLE_PLATFORM64}/csdp"
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   135
""")
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   136
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   137
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   138
      /* README */
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   139
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   140
      File.write(component_dir + Path.basic("README"),
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   141
"""This distribution of CSDP is based on the official downloads:
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   142
""" + source_url + """
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   143
""" + windows_url + """
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   144
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   145
For Linux and macOS, it has been built from sources using the following
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   146
options in the Makefile:
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   147
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   148
""" + build_flags.map(_.print).mkString("\n\n") + """
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   149
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   150
For Windows, the existing binary distribution has been used.
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   151
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   152
Only the bare "csdp" program is required for Isabelle.
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   153
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   154
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   155
    Makarius
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   156
    """ + Date.Format.date(Date.now()) + "\n")
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   157
    })
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   158
}
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   159
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   160
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   161
  /* Isabelle tool wrapper */
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   162
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   163
  val isabelle_tool =
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   164
    Isabelle_Tool("build_csdp", "build prover component from official downloads",
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   165
    args =>
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   166
    {
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   167
      var target_dir = Path.current
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   168
      var pretend_windows = false
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   169
      var verbose = false
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   170
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   171
      val getopts = Getopts("""
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   172
Usage: isabelle build_csdp [OPTIONS]
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   173
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   174
  Options are:
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   175
    -D DIR       target directory (default ".")
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   176
    -W           pretend that platform is Windows: download binary, no build
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   177
    -v           verbose
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   178
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   179
  Build prover component from official downloads.
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   180
""",
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   181
        "D:" -> (arg => target_dir = Path.explode(arg)),
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   182
        "W" -> (_ => pretend_windows = true),
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   183
        "v" -> (_ => verbose = true))
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   184
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   185
      val more_args = getopts(args)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   186
      if (more_args.nonEmpty) getopts.usage()
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   187
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   188
      val progress = new Console_Progress()
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   189
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   190
      build_csdp(pretend_windows = pretend_windows, verbose = verbose, progress = progress,
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   191
        target_dir = target_dir)
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   192
    })
af24c0dd6975 build Isabelle CSDP component from official downloads;
wenzelm
parents:
diff changeset
   193
}