Skip to content

Commit

Permalink
Add comment to OpamStd.Env.Name
Browse files Browse the repository at this point in the history
  • Loading branch information
dra27 committed Feb 8, 2023
1 parent ed4d47e commit 12b4a5b
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion src/core/opamStd.mli
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,29 @@ module Env : sig

(** {3 Environment variable handling} *)

(** Environment variable names *)
(** Environment variable names. Windows has complicated semantics for
environment variables. The retrieval functions are case insensitive, but
it's "legal" for the environment block to contain entries which differ
only by case. If environment variables are set entirely using CRT or Win32
API functions, then there isn't usually a problem, the issue arises when
creating a program where the environment block is instead passed. In this
model, it's very easy to end up with two bindings in the same block. When
dealing with Windows programs, this will mostly be transparent, but it's a
problem with Cygwin which actively allows "duplicate" entries which differ
by case only and implements Posix semantics on top of this. The problem is
constantly with us thanks to the use of PATH on Unix, and Path on Windows!
opam tries to ensure that environment variables are looked up according to
the OS semantics (so case insensitively on Windows) and OpamEnv goes to
some trouble to ensure that updates to environment variables are case
preserving (i.e. PATH+=foo gets transformed to Path+=foo if Path exists
in the environment block).
Key to this is not accidentally treating environment variable names as
strings, without using the appropriate comparison functions. Name.t
represents environment variable names as private strings, providing
comparison operators to handle them, and still allowing the possibility
to coerce them to strings.
*)
module Name : sig
include ABSTRACT with type t = private string

Expand Down

0 comments on commit 12b4a5b

Please sign in to comment.