src/Pure/ML/ml_settings.scala
author nipkow
Tue, 17 Jun 2025 14:11:40 +0200
changeset 82733 8b537e1af2ec
parent 82729 d8986d88295e
permissions -rw-r--r--
reinstated intersection of lists as inter_list_set
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 = {
82729
d8986d88295e support for explicit ML platform identifier;
wenzelm
parents: 82721
diff changeset
    18
        proper_string(options.string("ML_platform")) orElse
82720
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    19
        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
    20
          val platform_64 =
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    21
            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
    22
              .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
    23
          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
    24
          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
    25
        }
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    26
      }
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    27
      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
    28
        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
    29
          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
    30
    }
82716
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    31
}
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    32
82721
85cf43364080 clarified signature;
wenzelm
parents: 82720
diff changeset
    33
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
    34
  def polyml_home: Path
82716
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    35
  def ml_system: String
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    36
  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
    37
  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
    38
82716
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    39
  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
    40
  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
    41
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_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
    43
  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
    44
  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
    45
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: 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
    47
  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
    48
    ("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
    49
956ecf2c07a0 more flexible ML_Settings in Isabelle/Scala, depending on system options and some default settings;
wenzelm
parents: 82718
diff changeset
    50
  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
    51
    ml_home + Path.basic("poly").exe_if(ml_platform_is_windows)
82721
85cf43364080 clarified signature;
wenzelm
parents: 82720
diff changeset
    52
85cf43364080 clarified signature;
wenzelm
parents: 82720
diff changeset
    53
  override def toString: String = ml_identifier
82716
6e33d46b1400 clarified signature: more explicit types;
wenzelm
parents:
diff changeset
    54
}