src/Pure/ML/ml_settings.scala
author wenzelm
Sun, 15 Jun 2025 22:55:30 +0200
changeset 82721 85cf43364080
parent 82720 956ecf2c07a0
child 82729 d8986d88295e
permissions -rw-r--r--
clarified signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
82716
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/ML/ml_settings.scala
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
     3
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
     4
ML system settings.
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
     5
*/
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
     6
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
     7
package isabelle
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
     8
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
     9
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    10
object ML_Settings {
82720
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    11
  def system(options: Options,
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    12
    env: Isabelle_System.Settings = Isabelle_System.Settings()
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    13
  ): ML_Settings =
82718
e1a8753eaad7 clarified signature: more modular, avoid adhoc mixins;
wenzelm
parents: 82716
diff changeset
    14
    new ML_Settings {
82720
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    15
      override def polyml_home: Path = Path.variable("POLYML_HOME").expand_env(env)
82718
e1a8753eaad7 clarified signature: more modular, avoid adhoc mixins;
wenzelm
parents: 82716
diff changeset
    16
      override def ml_system: String = Isabelle_System.getenv_strict("ML_SYSTEM", env = env)
82720
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    17
      override def ml_platform: String = {
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    18
        proper_string(Isabelle_System.getenv("ML_PLATFORM", env = env)) getOrElse {
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    19
          val platform_64 =
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    20
            Isabelle_Platform.make(env = env)
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    21
              .ISABELLE_PLATFORM(windows = true, apple = options.bool("ML_system_apple"))
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    22
          if (options.bool("ML_system_64")) platform_64
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    23
          else platform_64.replace("64", "64_32")
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    24
        }
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    25
      }
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    26
      override def ml_options: String =
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    27
        proper_string(Isabelle_System.getenv("ML_OPTIONS", env = env)) getOrElse
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    28
          Isabelle_System.getenv(if (ml_platform_is_64_32) "ML_OPTIONS32" else "ML_OPTIONS64")
82718
e1a8753eaad7 clarified signature: more modular, avoid adhoc mixins;
wenzelm
parents: 82716
diff changeset
    29
    }
82716
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    30
}
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    31
82721
85cf43364080 clarified signature;
wenzelm
parents: 82720
diff changeset
    32
abstract class ML_Settings {
82720
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    33
  def polyml_home: Path
82716
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    34
  def ml_system: String
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    35
  def ml_platform: String
82720
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    36
  def ml_options: String
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    37
82716
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    38
  def ml_identifier: String = ml_system + "_" + ml_platform
82720
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    39
  def ml_home: Path = polyml_home + Path.basic(ml_platform)
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    40
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    41
  def ml_platform_is_arm: Boolean = ml_platform.containsSlice("arm64")
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    42
  def ml_platform_is_windows: Boolean = ml_platform.containsSlice("windows")
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    43
  def ml_platform_is_64_32: Boolean = ml_platform.containsSlice("64_32")
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    44
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    45
  def ml_sources: Path = polyml_home + Path.basic("src")
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    46
  def ml_sources_root: (String, String) =
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    47
    ("ML_SOURCES_ROOT", if (ml_platform_is_arm) "src/ROOT0.ML" else "src/ROOT.ML")
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    48
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    49
  def polyml_exe: Path =
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    50
    ml_home + Path.basic("poly").exe_if(ml_platform_is_windows)
82721
85cf43364080 clarified signature;
wenzelm
parents: 82720
diff changeset
    51
85cf43364080 clarified signature;
wenzelm
parents: 82720
diff changeset
    52
  override def toString: String = ml_identifier
82716
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    53
}