src/Pure/Tools/caddy_setup.scala
author nipkow
Tue, 17 Jun 2025 14:11:40 +0200
changeset 82733 8b537e1af2ec
parent 82615 3e20da339306
permissions -rw-r--r--
reinstated intersection of lists as inter_list_set
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
82615
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/caddy_setup.scala
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
     3
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
     4
Dynamic setup of Caddy component.
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
     5
*/
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
     6
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
     7
package isabelle
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
     8
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
     9
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    10
object Caddy_Setup {
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    11
  /* platform information */
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    12
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    13
  sealed case class Platform_Info(platform: String, xcaddy_template: String)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    14
  extends Platform.Info {
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    15
    def xcaddy_download(url: String, version: String): String =
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    16
      Url.append_path(url, xcaddy_template.replace("{V}", version))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    17
  }
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    18
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    19
  val all_platforms: List[Platform_Info] =
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    20
    List(
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    21
      Platform_Info("arm64-darwin", "v{V}/xcaddy_{V}_mac_arm64.tar.gz"),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    22
      Platform_Info("arm64-linux", "v{V}/xcaddy_{V}_linux_arm64.tar.gz"),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    23
      Platform_Info("x86_64-darwin", "v{V}/xcaddy_{V}_mac_amd64.tar.gz"),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    24
      Platform_Info("x86_64-linux", "v{V}/xcaddy_{V}_linux_amd64.tar.gz"),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    25
      Platform_Info("x86_64-windows", "v{V}/xcaddy_{V}_windows_amd64.zip"))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    26
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    27
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    28
  /* download and setup */
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    29
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    30
  def default_target_dir: Path = Components.default_components_base
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    31
  def default_caddy_version: String = Isabelle_System.getenv_strict("ISABELLE_CADDY_SETUP_VERSION")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    32
  def default_caddy_modules: String = Isabelle_System.getenv_strict("ISABELLE_CADDY_SETUP_MODULES")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    33
  def default_xcaddy_url: String = "https://github.com/caddyserver/xcaddy/releases/download"
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    34
  def default_xcaddy_version: String = "0.4.4"
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    35
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    36
  def show_settings(): List[String] =
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    37
    for (a <- List("ISABELLE_CADDY_SETUP_VERSION", "ISABELLE_CADDY_SETUP_MODULES"))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    38
      yield {
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    39
        val b = Isabelle_System.getenv(a)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    40
        a + "=" + quote(b)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    41
      }
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    42
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    43
  def caddy_setup(
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    44
    caddy_version: String = default_caddy_version,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    45
    caddy_modules: String = default_caddy_modules,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    46
    xcaddy_url: String = default_xcaddy_url,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    47
    xcaddy_version: String = default_xcaddy_version,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    48
    target_dir: Path = default_target_dir,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    49
    progress: Progress = new Progress,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    50
    force: Boolean = false
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    51
  ): Unit = {
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    52
    val platform = Isabelle_Platform.local.ISABELLE_PLATFORM(windows = true, apple = true)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    53
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    54
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    55
    /* component directory */
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    56
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    57
    val component_dir =
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    58
      Components.Directory(target_dir + Path.basic("caddy-" + caddy_version))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    59
        .create(permissive = true)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    60
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    61
    progress.echo("Component directory " + component_dir)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    62
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    63
    component_dir.write_settings("""
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    64
ISABELLE_CADDY_HOME="$COMPONENT"
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    65
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    66
if [ -n "$ISABELLE_WINDOWS_PLATFORM64" -a -d "$ISABELLE_CADDY_HOME/$ISABELLE_WINDOWS_PLATFORM64" ]; then
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    67
  ISABELLE_CADDY="$ISABELLE_CADDY_HOME/$ISABELLE_WINDOWS_PLATFORM64/caddy.exe"
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    68
elif [ -n "$ISABELLE_APPLE_PLATFORM64" -a -d "$ISABELLE_CADDY_HOME/$ISABELLE_APPLE_PLATFORM64" ]; then
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    69
  ISABELLE_CADDY="$ISABELLE_CADDY_HOME/$ISABELLE_APPLE_PLATFORM64/caddy"
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    70
elif [ -d "$ISABELLE_CADDY_HOME/$ISABELLE_PLATFORM64" ]; then
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    71
  ISABELLE_CADDY="$ISABELLE_CADDY_HOME/$ISABELLE_PLATFORM64/caddy"
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    72
fi
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    73
""")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    74
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    75
    for (old <- proper_string(Isabelle_System.getenv("ISABELLE_CADDY_HOME"))) {
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    76
      Components.update_components(false, Path.explode(old))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    77
    }
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    78
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    79
    Components.update_components(true, component_dir.path)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    80
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    81
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    82
    /* download and setup */
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    83
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    84
    Isabelle_System.with_tmp_dir("tmp") { tmp_dir =>
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    85
      val platform_info: Platform_Info =
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    86
        all_platforms.find(_.platform == platform)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    87
          .getOrElse(error("Bad platform " + quote(platform)))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    88
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    89
      val platform_dir = component_dir.path + platform_info.path
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    90
      if (platform_dir.is_dir && !force) {
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    91
        progress.echo_warning("Platform " + platform + " already installed")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    92
      }
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    93
      else {
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    94
        progress.echo("Platform " + platform + " ...")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    95
        progress.expose_interrupt()
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    96
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    97
        Isabelle_System.make_directory(platform_dir)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    98
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
    99
        val xcaddy_dir = Isabelle_System.make_directory(tmp_dir + Path.explode("xcaddy"))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   100
        val xcaddy_download = platform_info.xcaddy_download(xcaddy_url, xcaddy_version)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   101
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   102
        val xcaddy_archive_name =
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   103
          Url.get_base_name(xcaddy_download) getOrElse
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   104
            error("Malformed download URL " + quote(xcaddy_download))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   105
        val xcaddy_archive_path = tmp_dir + Path.basic(xcaddy_archive_name)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   106
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   107
        Isabelle_System.download_file(xcaddy_download, xcaddy_archive_path)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   108
        Isabelle_System.extract(xcaddy_archive_path, xcaddy_dir)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   109
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   110
        progress.echo("Building caddy " + caddy_version)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   111
        progress.bash(
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   112
          Library.make_lines(
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   113
            "set -e",
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   114
            "xcaddy/xcaddy build v" + Bash.string(caddy_version) +
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   115
              Word.explode(caddy_modules).map(s => " --with " + Bash.string(s)).mkString,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   116
            "./caddy list-modules"),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   117
          cwd = tmp_dir, echo = progress.verbose).check
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   118
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   119
        Isabelle_System.copy_file(tmp_dir + Path.explode("caddy").platform_exe, platform_dir)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   120
      }
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   121
    }
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   122
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   123
    File.find_files(component_dir.path.file, pred = file => File.is_exe(file.getName)).
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   124
      foreach(file => File.set_executable(File.path(file)))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   125
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   126
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   127
    /* README */
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   128
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   129
    File.write(component_dir.README,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   130
      """This installation of Caddy has been produced via "isabelle caddy_setup".
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   131
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   132
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   133
        Makarius
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   134
        """ + Date.Format.date(Date.now()) + "\n")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   135
  }
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   136
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   137
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   138
  /* Isabelle tool wrapper */
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   139
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   140
  val isabelle_tool =
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   141
    Isabelle_Tool("caddy_setup", "dynamic setup of Caddy component", Scala_Project.here,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   142
      { args =>
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   143
        var target_dir = default_target_dir
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   144
        var xcaddy_url = default_xcaddy_url
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   145
        var xcaddy_version = default_xcaddy_version
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   146
        var caddy_modules = default_caddy_modules
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   147
        var caddy_version = default_caddy_version
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   148
        var force = false
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   149
        var verbose = false
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   150
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   151
        val getopts = Getopts("""
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   152
Usage: isabelle caddy_setup [OPTIONS]
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   153
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   154
  Options are:
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   155
    -D DIR       target directory (default ".")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   156
    -N MODULES   non-standard modules for caddy
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   157
                 (default: ISABELLE_CADDY_SETUP_MODULES="""" + default_caddy_modules + """")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   158
    -U URL       download URL for xcaddy (default: """" + default_xcaddy_url + """")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   159
    -V VERSION   version for caddy
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   160
                 (default: ISABELLE_CADDY_SETUP_VERSION="""" + default_caddy_version + """")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   161
    -W VERSION   version for xcaddy (default: """" + default_xcaddy_version + """")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   162
    -f           force fresh installation of specified platforms
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   163
    -v           verbose
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   164
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   165
  Build the Caddy webserver via xcaddy and configure it as Isabelle
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   166
  component. See also https://github.com/caddyserver/xcaddy""",
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   167
          "D:" -> (arg => target_dir = Path.explode(arg)),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   168
          "N:" -> (arg => caddy_modules = arg),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   169
          "U:" -> (arg => xcaddy_url = arg),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   170
          "V:" -> (arg => caddy_version = arg),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   171
          "W:" -> (arg => xcaddy_version = arg),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   172
          "f" -> (_ => force = true),
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   173
          "v" -> (_ => verbose = true))
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   174
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   175
        val more_args = getopts(args)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   176
        if (more_args.nonEmpty) getopts.usage()
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   177
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   178
        val progress = new Console_Progress(verbose = verbose)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   179
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   180
        caddy_setup(caddy_version = caddy_version, caddy_modules = caddy_modules,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   181
          xcaddy_url = xcaddy_url, xcaddy_version = xcaddy_version, target_dir = target_dir,
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   182
          progress = progress, force = force)
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   183
      })
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   184
}
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   185
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   186
class Caddy_Setup extends Setup_Tool("caddy_setup", "ISABELLE_CADDY_SETUP") {
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   187
  override val test_file: Path = Path.explode("lib/Tools/caddy")
3e20da339306 provide "isabelle caddy_setup" and "isabelle caddy";
wenzelm
parents:
diff changeset
   188
}