package opam-state

  1. Overview
  2. Docs

Source file opamScript.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
(* THIS FILE IS AUTOMATICALLY GENERATED, EDIT ../Makefile INSTEAD *)
let bwrap =
"#!/usr/bin/env bash\n\nset -ue\n\n# Used to make /* match all files (even those beginning with a '.')\nshopt -s dotglob\n\nif ! command -v bwrap >/dev/null; then\n    echo \"The 'bwrap' command was not found. Install 'bubblewrap' on your system, or\" >&2\n    echo \"disable sandboxing in ${OPAMROOT:-~/.opam}/config at your own risk.\" >&2\n    echo \"See https://github.com/projectatomic/bubblewrap for bwrap details.\" >&2\n    echo \"For 'bwrap' use in opam, see the FAQ:\" >&2\n    echo \"  https://opam.ocaml.org/doc/FAQ.html#Why-does-opam-require-bwrap\" >&2\n    exit 10\nfi\n\n# --new-session requires bubblewrap 0.1.7\n# --die-with-parent requires bubblewrap 0.1.8\nARGS=(--unshare-net --new-session --die-with-parent)\nARGS=(\"${ARGS[@]}\" --proc /proc --dev /dev)\nARGS=(\"${ARGS[@]}\" --setenv TMPDIR /opam-tmp --setenv TMP /opam-tmp --setenv TEMPDIR /opam-tmp --setenv TEMP /opam-tmp)\nARGS=(\"${ARGS[@]}\" --bind /tmp /tmp)\nARGS=(\"${ARGS[@]}\" --tmpfs /opam-tmp)\nARGS=(\"${ARGS[@]}\" --tmpfs /run)\n# NOTE: When adding a new mount-point please sync with the loop below to avoid overriding the mount point\n\nadd_mount() {\n    if [ -d \"$dir\" ]; then\n      case \"$1\" in\n          ro) B=\"--ro-bind\";;\n          rw) B=\"--bind\";;\n          sym) B=\"--symlink\";;\n      esac\n      ARGS=(\"${ARGS[@]}\" \"$B\" \"$2\" \"$3\")\n    fi\n}\n\nadd_mounts() {\n    local flag=\"$1\"; shift\n    for dir in \"$@\"; do\n      add_mount \"$flag\" \"$dir\" \"$dir\"\n    done\n}\n\n# Mounts the standard system paths. Maintains symlinks, to handle cases\n# like `/bin` -> `usr/bin`, where `/bin/../foo` resolves to `/usr/foo`,\n# not `/foo`. We handle symlinks here but not in `add_mounts` because\n# system paths are pretty much guaranteed not to accidentally escape into\n# off-limits directories.\nadd_sys_mounts() {\n    for dir in \"$@\"; do\n        if [ -L \"$dir\" ]; then\n            local src=$(readlink -f \"$dir\")\n            add_mount sym \"$src\" \"$dir\"\n        else\n            add_mounts ro \"$dir\"\n        fi\n    done\n}\n\n# NOTE: The list of moint-points to avoid is always to be sync'd with the list at the top of the file\n# It is due to a limitation of bubblewrap that we have to mount the directories one by one\n# See https://github.com/containers/bubblewrap/issues/413\nfor dir in /*; do\n    case \"$dir\" in\n    \"/proc\" | \"/dev\" | \"/run\" | \"/tmp\" | \"/opam-tmp\") ;;\n    \"/sys\") ;; # Disabled without a corresponding bind, due to security concerns\n    *) add_sys_mounts \"$dir\";;\n    esac\ndone\n# NOTE: This is required for NixOS (see https://github.com/NixOS/nixpkgs/pull/363770)\nif [ -d /run/current-system/sw ]; then\n  add_sys_mounts /run/current-system/sw\nfi\n\nmount_linked_cache() {\n  local l_cache=$1\n  local cache=$(readlink -m \"$l_cache\")\n  mkdir -p \"$cache\"\n  add_mount rw \"$l_cache\" \"$cache\"\n}\n\n# C compilers using `ccache` will write to a shared cache directory\n# that remain writeable. ccache seems widespread in some Fedora systems.\nadd_ccache_mount() {\n  if command -v ccache > /dev/null; then\n      ccache_dir_regex='cache_dir = (.*)$'\n      local IFS=$'\\n'\n      for f in $(ccache -p 2>/dev/null); do\n        if [[ $f =~ $ccache_dir_regex ]]; then\n          ccache_dir=${BASH_REMATCH[1]}\n          break\n        fi\n      done\n      CCACHE_DIR=${CCACHE_DIR-$HOME/.ccache}\n      ccache_dir=${ccache_dir-$CCACHE_DIR}\n      mount_linked_cache \"$ccache_dir\"\n  fi\n}\n\nadd_dune_cache_mount() {\n  local dune_cache=${DUNE_CACHE_ROOT:-${XDG_CACHE_HOME:-$HOME/.cache}/dune}\n  mount_linked_cache \"$dune_cache\"\n}\n\n# In case OPAMROOT happens to be in one of the writeable directories we\n# need to make sure it is read-only\nif [ -n \"${OPAMROOT:-}\" ]; then\n  add_mounts ro \"$OPAMROOT\"\nfi\n\n# When using opam variable that must be defined at action time, add them also\n# at init check in OpamAuxCommands.check_and_revert_sandboxing (like\n# OPAM_SWITCH_PREFIX).\n# This case-switch should remain identical between the different sandbox implems\nCOMMAND=\"$1\"; shift\ncase \"$COMMAND\" in\n    build)\n        add_mounts ro \"$OPAM_SWITCH_PREFIX\"\n        add_mounts rw \"$PWD\"\n        add_ccache_mount\n        add_dune_cache_mount\n        ;;\n    install)\n        add_mounts rw \"$OPAM_SWITCH_PREFIX\"\n        add_mounts ro \"$OPAM_SWITCH_PREFIX/.opam-switch\"\n        add_mounts rw \"$PWD\"\n        ;;\n    remove)\n        add_mounts rw \"$OPAM_SWITCH_PREFIX\"\n        add_mounts ro \"$OPAM_SWITCH_PREFIX/.opam-switch\"\n        if [ \"X${PWD#$OPAM_SWITCH_PREFIX/.opam-switch/}\" != \"X${PWD}\" ]; then\n          add_mounts rw \"$PWD\"\n        fi\n        ;;\n    *)\n        echo \"$0: unknown command $COMMAND, must be one of 'build', 'install' or 'remove'\" >&2\n        exit 2\nesac\n\nif ! command -v \"$1\" >/dev/null; then\n    echo \"[ERROR] Command not found: $1\" >&2\n    exit 10\nfi\n\n# Note: we assume $1 can be trusted, see https://github.com/projectatomic/bubblewrap/issues/259\n# As of now we are compatible up to 0.1.8, '--' can be added here when we require >= 0.3.0\nexec bwrap \"${ARGS[@]}\" \"$@\"\n"

let complete =
"if [ -z \"$BASH_VERSION\" ]; then return 0; fi\n\n_opam_add()\n{\n  IFS=$'\\n' _opam_reply+=(\"$@\")\n}\n\n_opam_add_f()\n{\n  local cmd\n  cmd=$1; shift\n  _opam_add \"$($cmd \"$@\" 2>/dev/null)\"\n}\n\n_opam_flags()\n{\n  opam \"$@\" --help=groff 2>/dev/null | \\\n      sed -n \\\n      -e 's%\\\\-\\|\\\\N'\"'45'\"'%-%g' \\\n      -e 's%, \\\\fB%\\n\\\\fB%g' \\\n      -e '/^\\\\fB-/p' | \\\n      sed -e 's%^\\\\fB\\(-[^\\\\]*\\).*%\\1%'\n}\n\n_opam_commands()\n{\n  opam \"$@\" --help=groff 2>/dev/null | \\\n      sed -n \\\n      -e 's%\\\\-\\|\\\\N'\"'45'\"'%-%g' \\\n      -e '/^\\.SH COMMANDS$/,/^\\.SH/ s%^\\\\fB\\([^,= ]*\\)\\\\fR.*%\\1%p'\n  echo '--help'\n}\n\n_opam_vars()\n{\n  opam var --safe 2>/dev/null | \\\n      sed -n \\\n      -e '/^PKG:/d' \\\n      -e 's%^\\([^#= ][^ ]*\\).*%\\1%p'\n}\n\n_opam_argtype()\n{\n  local cmd flag\n  cmd=\"$1\"; shift\n  flag=\"$1\"; shift\n  case \"$flag\" in\n      -*)\n          opam \"$cmd\" --help=groff 2>/dev/null | \\\n          sed -n \\\n              -e 's%\\\\-\\|\\\\N'\"'45'\"'%-%g' \\\n              -e 's%.*\\\\fB'\"$flag\"'\\\\fR[= ]\\\\fI\\([^, ]*\\)\\\\fR.*%\\1%p'\n          ;;\n  esac\n}\n\n_opam()\n{\n  local IFS cmd subcmd cur prev compgen_opt\n\n  COMPREPLY=()\n  cmd=${COMP_WORDS[1]}\n  subcmd=${COMP_WORDS[2]}\n  cur=${COMP_WORDS[COMP_CWORD]}\n  prev=${COMP_WORDS[COMP_CWORD-1]}\n  compgen_opt=()\n  _opam_reply=()\n\n  if [ $COMP_CWORD -eq 1 ]; then\n      _opam_add_f opam help topics\n      COMPREPLY=( $(compgen -W \"${_opam_reply[*]}\" -- $cur) )\n      unset _opam_reply\n      return 0\n  fi\n\n  case \"$(_opam_argtype $cmd $prev)\" in\n      LEVEL|JOBS|RANK) _opam_add 1 2 3 4 5 6 7 8 9;;\n      FILE|FILENAME) compgen_opt+=(-o filenames -f);;\n      DIR|ROOT) compgen_opt+=(-o filenames -d);;\n      MAKE|CMD) compgen_opt+=(-c);;\n      KIND) _opam_add http local git darcs hg;;\n      WHEN) _opam_add always never auto;;\n      SWITCH|SWITCHES) _opam_add_f opam switch list --safe -s;;\n      COLUMNS|FIELDS)\n          _opam_add name version package synopsis synopsis-or-target \\\n                    description installed-version pin source-hash \\\n                    opam-file all-installed-versions available-versions \\\n                    all-versions repository installed-files vc-ref depexts;;\n      PACKAGE|PACKAGES|PKG|PATTERN|PATTERNS)\n          _opam_add_f opam list --safe -A -s;;\n      FLAG) _opam_add light-uninstall verbose plugin compiler conf;;\n      REPOS) _opam_add_f opam repository list --safe -s -a;;\n      SHELL) _opam_add bash sh csh zsh fish;;\n      TAGS) ;;\n      CRITERIA) ;;\n      STRING) ;;\n      URL)\n          compgen_opt+=(-o filenames -d)\n          _opam_add \"https://\" \"http://\" \"file://\" \\\n                    \"git://\" \"git+file://\" \"git+ssh://\" \"git+https://\" \\\n                    \"hg+file://\" \"hg+ssh://\" \"hg+https://\" \\\n                    \"darcs+file://\" \"darcs+ssh://\" \"darcs+https://\";;\n      \"\")\n  case \"$cmd\" in\n      install|show|info|inst|ins|in|i|inf|sh)\n          _opam_add_f opam list --safe -a -s\n          if [ $COMP_CWORD -gt 2 ]; then\n              _opam_add_f _opam_flags \"$cmd\"\n          fi;;\n      reinstall|remove|uninstall|reinst|remov|uninst|unins)\n          _opam_add_f opam list --safe -i -s\n          if [ $COMP_CWORD -gt 2 ]; then\n              _opam_add_f _opam_flags \"$cmd\"\n          fi;;\n      upgrade|upg)\n          _opam_add_f opam list --safe -i -s\n          _opam_add_f _opam_flags \"$cmd\"\n          ;;\n      switch|sw)\n          case $COMP_CWORD in\n              2)\n                  _opam_add_f _opam_commands \"$cmd\"\n                  _opam_add_f opam switch list --safe -s;;\n              3)\n                  case \"$subcmd\" in\n                      create|install)\n                          _opam_add_f opam switch list-available --safe -s -a;;\n                      set|remove|reinstall)\n                          _opam_add_f opam switch list --safe -s;;\n                      import|export)\n                          compgen_opt+=(-o filenames -f);;\n                      *)\n                          _opam_add_f _opam_flags \"$cmd\"\n                  esac;;\n              *)\n                  _opam_add_f _opam_flags \"$cmd\"\n          esac;;\n      config|conf|c)\n          case $COMP_CWORD in\n              2)\n                  _opam_add_f _opam_commands \"$cmd\";;\n              3)\n                  case \"$subcmd\" in\n                      var) _opam_add_f _opam_vars;;\n                      exec) compgen_opt+=(-c);;\n                      *) _opam_add_f _opam_flags \"$cmd\"\n                  esac;;\n              *)\n                  _opam_add_f _opam_flags \"$cmd\"\n          esac;;\n      repository|remote|repos|repo)\n          case $COMP_CWORD in\n              2)\n                  _opam_add_f _opam_commands \"$cmd\";;\n              3)\n                  case \"$subcmd\" in\n                      list)\n                          _opam_add_f _opam_flags \"$cmd\";;\n                      *)\n                          _opam_add_f opam repository list --safe -a -s\n                  esac;;\n              *)\n                  _opam_add_f _opam_flags \"$cmd\"\n                  case \"$subcmd\" in\n                      set-url|add) compgen_opt+=(-o filenames -f);;\n                      set-repos) _opam_add_f opam repository list --safe -a -s;;\n                  esac;;\n          esac;;\n      update|upd)\n          _opam_add_f opam repository list --safe -s\n          _opam_add_f opam pin list --safe -s\n          _opam_add_f _opam_flags \"$cmd\"\n          ;;\n      source|so)\n          if [ $COMP_CWORD -eq 2 ]; then\n              _opam_add_f opam list --safe -A -s\n          else\n              _opam_add_f _opam_flags \"$cmd\"\n          fi;;\n      pin)\n          case $COMP_CWORD in\n              2)\n                  _opam_add_f _opam_commands \"$cmd\";;\n              3)\n                  case \"$subcmd\" in\n                      add)\n                          compgen_opt+=(-o filenames -d)\n                          _opam_add_f opam list --safe -A -s;;\n                      remove|edit)\n                          _opam_add_f opam pin list --safe -s;;\n                      *)\n                          _opam_add_f _opam_flags \"$cmd\"\n                  esac;;\n              *)\n                  case \"$subcmd\" in\n                      add)\n                          compgen_opt+=(-o filenames -d);;\n                      *)\n                          _opam_add_f _opam_flags \"$cmd\"\n                  esac\n          esac;;\n      unpin)\n          if [ $COMP_CWORD -eq 2 ]; then\n              _opam_add_f opam pin list --safe -s\n          else\n              _opam_add_f _opam_flags \"$cmd\"\n          fi;;\n      var|v)\n          if [ $COMP_CWORD -eq 2 ]; then _opam_add_f _opam_vars\n          else _opam_add_f _opam_flags \"$cmd\"; fi;;\n      exec|e)\n          if [ $COMP_CWORD -eq 2 ]; then compgen_opt+=(-c)\n          else _opam_add_f _opam_flags \"$cmd\"; fi;;\n      lint|build)\n          if [ $COMP_CWORD -eq 2 ]; then\n              compgen_opt+=(-f -X '!*opam' -o plusdirs)\n          else _opam_add_f _opam_flags \"$cmd\"; fi;;\n      admin)\n          if [ $COMP_CWORD -eq 2 ]; then\n              _opam_add_f _opam_commands \"$cmd\"\n          else _opam_add_f _opam_flags \"$cmd\" \"$subcmd\"; fi;;\n      *)\n          _opam_add_f _opam_commands \"$cmd\"\n          _opam_add_f _opam_flags \"$cmd\"\n  esac;;\n  esac\n\n  COMPREPLY=($(compgen -W \"${_opam_reply[*]}\" \"${compgen_opt[@]}\" -- \"$cur\"))\n  unset _opam_reply\n  return 0\n}\n\ncomplete -F _opam opam\n"

let complete_zsh =
"#compdef opam\n\nif [ -z \"$ZSH_VERSION\" ]; then return 0; fi\n\n_opam_add()\n{\n  IFS=$'\\n' _opam_reply+=(\"$@\")\n}\n\n_opam_add_f()\n{\n  local cmd\n  cmd=$1; shift\n  _opam_add \"$($cmd \"$@\" 2>/dev/null)\"\n}\n\n_opam_flags()\n{\n  opam \"$@\" --help=groff 2>/dev/null | \\\n      sed -n \\\n      -e 's%\\\\-\\|\\\\N'\"'45'\"'%-%g' \\\n      -e 's%, \\\\fB%\\n\\\\fB%g' \\\n      -e '/^\\\\fB-/p' | \\\n      sed -e 's%^\\\\fB\\(-[^\\\\]*\\).*%\\1%'\n}\n\n_opam_commands()\n{\n  opam \"$@\" --help=groff 2>/dev/null | \\\n      sed -n \\\n      -e 's%\\\\-\\|\\\\N'\"'45'\"'%-%g' \\\n      -e '/^\\.SH COMMANDS$/,/^\\.SH/ s%^\\\\fB\\([^,= ]*\\)\\\\fR.*%\\1%p'\n  echo '--help'\n}\n\n_opam_vars()\n{\n  opam var -safe 2>/dev/null | \\\n      sed -n \\\n      -e '/^PKG:/d' \\\n      -e 's%^\\([^#= ][^ ]*\\).*%\\1%p'\n}\n\n_opam_argtype()\n{\n  local cmd flag\n  cmd=\"$1\"; shift\n  flag=\"$1\"; shift\n  case \"$flag\" in\n      -*)\n          opam \"$cmd\" --help=groff 2>/dev/null | \\\n          sed -n \\\n              -e 's%\\\\-\\|\\\\N'\"'45'\"'%-%g' \\\n              -e 's%.*\\\\fB'\"$flag\"'\\\\fR[= ]\\\\fI\\([^, ]*\\)\\\\fR.*%\\1%p'\n          ;;\n  esac\n}\n\n_opam()\n{\n  local IFS cmd subcmd cur prev compgen_opt\n\n  COMPREPLY=()\n  cmd=${COMP_WORDS[1]}\n  subcmd=${COMP_WORDS[2]}\n  cur=${COMP_WORDS[COMP_CWORD]}\n  prev=${COMP_WORDS[COMP_CWORD-1]}\n  compgen_opt=()\n  _opam_reply=()\n\n  if [ $COMP_CWORD -eq 1 ]; then\n      _opam_add_f opam help topics\n      COMPREPLY=( $(compgen -W \"${_opam_reply[*]}\" -- $cur) )\n      unset _opam_reply\n      return 0\n  fi\n\n  case \"$(_opam_argtype $cmd $prev)\" in\n      LEVEL|JOBS|RANK) _opam_add 1 2 3 4 5 6 7 8 9;;\n      FILE|FILENAME) compgen_opt+=(-o filenames -f);;\n      DIR|ROOT) compgen_opt+=(-o filenames -d);;\n      MAKE|CMD) compgen_opt+=(-c);;\n      KIND) _opam_add http local git darcs hg;;\n      WHEN) _opam_add always never auto;;\n      SWITCH|SWITCHES) _opam_add_f opam switch list --safe -s;;\n      COLUMNS|FIELDS)\n          _opam_add name version package synopsis synopsis-or-target \\\n                    description installed-version pin source-hash \\\n                    opam-file all-installed-versions available-versions \\\n                    all-versions repository installed-files vc-ref depexts;;\n      PACKAGE|PACKAGES|PKG|PATTERN|PATTERNS)\n          _opam_add_f opam list --safe -A -s;;\n      FLAG) _opam_add light-uninstall verbose plugin compiler conf;;\n      REPOS) _opam_add_f opam repository list --safe -s -a;;\n      SHELL) _opam_add bash sh csh zsh fish;;\n      TAGS) ;;\n      CRITERIA) ;;\n      STRING) ;;\n      URL)\n          compgen_opt+=(-o filenames -d)\n          _opam_add \"https://\" \"http://\" \"file://\" \\\n                    \"git://\" \"git+file://\" \"git+ssh://\" \"git+https://\" \\\n                    \"hg+file://\" \"hg+ssh://\" \"hg+https://\" \\\n                    \"darcs+file://\" \"darcs+ssh://\" \"darcs+https://\";;\n      \"\")\n  case \"$cmd\" in\n      install|show|info|inst|ins|in|i|inf|sh)\n          _opam_add_f opam list --safe -a -s\n          if [ $COMP_CWORD -gt 2 ]; then\n              _opam_add_f _opam_flags \"$cmd\"\n          fi;;\n      reinstall|remove|uninstall|reinst|remov|uninst|unins)\n          _opam_add_f opam list --safe -i -s\n          if [ $COMP_CWORD -gt 2 ]; then\n              _opam_add_f _opam_flags \"$cmd\"\n          fi;;\n      upgrade|upg)\n          _opam_add_f opam list --safe -i -s\n          _opam_add_f _opam_flags \"$cmd\"\n          ;;\n      switch|sw)\n          case $COMP_CWORD in\n              2)\n                  _opam_add_f _opam_commands \"$cmd\"\n                  _opam_add_f opam switch list --safe -s;;\n              3)\n                  case \"$subcmd\" in\n                      create|install)\n                          _opam_add_f opam switch list-available --safe -s -a;;\n                      set|remove|reinstall)\n                          _opam_add_f opam switch list --safe -s;;\n                      import|export)\n                          compgen_opt+=(-o filenames -f);;\n                      *)\n                          _opam_add_f _opam_flags \"$cmd\"\n                  esac;;\n              *)\n                  _opam_add_f _opam_flags \"$cmd\"\n          esac;;\n      config|conf|c)\n          case $COMP_CWORD in\n              2)\n                  _opam_add_f _opam_commands \"$cmd\";;\n              3)\n                  case \"$subcmd\" in\n                      var) _opam_add_f _opam_vars;;\n                      exec) compgen_opt+=(-c);;\n                      *) _opam_add_f _opam_flags \"$cmd\"\n                  esac;;\n              *)\n                  _opam_add_f _opam_flags \"$cmd\"\n          esac;;\n      repository|remote|repos|repo)\n          case $COMP_CWORD in\n              2)\n                  _opam_add_f _opam_commands \"$cmd\";;\n              3)\n                  case \"$subcmd\" in\n                      list)\n                          _opam_add_f _opam_flags \"$cmd\";;\n                      *)\n                          _opam_add_f opam repository list --safe -a -s\n                  esac;;\n              *)\n                  _opam_add_f _opam_flags \"$cmd\"\n                  case \"$subcmd\" in\n                      set-url|add) compgen_opt+=(-o filenames -f);;\n                      set-repos) _opam_add_f opam repository list --safe -a -s;;\n                  esac;;\n          esac;;\n      update|upd)\n          _opam_add_f opam repository list --safe -s\n          _opam_add_f opam pin list --safe -s\n          _opam_add_f _opam_flags \"$cmd\"\n          ;;\n      source|so)\n          if [ $COMP_CWORD -eq 2 ]; then\n              _opam_add_f opam list --safe -A -s\n          else\n              _opam_add_f _opam_flags \"$cmd\"\n          fi;;\n      pin)\n          case $COMP_CWORD in\n              2)\n                  _opam_add_f _opam_commands \"$cmd\";;\n              3)\n                  case \"$subcmd\" in\n                      add)\n                          compgen_opt+=(-o filenames -d)\n                          _opam_add_f opam list --safe -A -s;;\n                      remove|edit)\n                          _opam_add_f opam pin list --safe -s;;\n                      *)\n                          _opam_add_f _opam_flags \"$cmd\"\n                  esac;;\n              *)\n                  case \"$subcmd\" in\n                      add)\n                          compgen_opt+=(-o filenames -d);;\n                      *)\n                          _opam_add_f _opam_flags \"$cmd\"\n                  esac\n          esac;;\n      unpin)\n          if [ $COMP_CWORD -eq 2 ]; then\n              _opam_add_f opam pin list --safe -s\n          else\n              _opam_add_f _opam_flags \"$cmd\"\n          fi;;\n      var|v)\n          if [ $COMP_CWORD -eq 2 ]; then _opam_add_f _opam_vars\n          else _opam_add_f _opam_flags \"$cmd\"; fi;;\n      exec|e)\n          if [ $COMP_CWORD -eq 2 ]; then compgen_opt+=(-c)\n          else _opam_add_f _opam_flags \"$cmd\"; fi;;\n      lint|build)\n          if [ $COMP_CWORD -eq 2 ]; then\n              compgen_opt+=(-f -X '!*opam' -o plusdirs)\n          else _opam_add_f _opam_flags \"$cmd\"; fi;;\n      admin)\n          if [ $COMP_CWORD -eq 2 ]; then\n              _opam_add_f _opam_commands \"$cmd\"\n          else _opam_add_f _opam_flags \"$cmd\" \"$subcmd\"; fi;;\n      *)\n          _opam_add_f _opam_commands \"$cmd\"\n          _opam_add_f _opam_flags \"$cmd\"\n  esac;;\n  esac\n\n  COMPREPLY=($(compgen -W \"${_opam_reply[*]}\" \"${compgen_opt[@]}\" -- \"$cur\"))\n  unset _opam_reply\n  return 0\n}\n\nautoload bashcompinit\nbashcompinit\ncomplete -F _opam opam\n"

let env_hook_csh =
"alias precmd 'eval `opam env --shell=csh --readonly`'\n"

let env_hook_fish =
"function __opam_env_export_eval --on-event fish_prompt\n    eval (opam env --shell=fish --readonly 2> /dev/null)\nend\n"

let env_hook =
"_opam_env_hook() {\n local previous_exit_status=$?;\n eval $(opam env --shell=bash --readonly 2> /dev/null <&- );\n return $previous_exit_status;\n};\nif ! [[ \"$PROMPT_COMMAND\" =~ _opam_env_hook ]]; then\n    PROMPT_COMMAND=\"_opam_env_hook;$PROMPT_COMMAND\";\nfi\n"

let env_hook_zsh =
"_opam_env_hook() {\n    eval $(opam env --shell=zsh --readonly 2> /dev/null <&-);\n}\ntypeset -ag precmd_functions;\nif [[ -z ${precmd_functions[(r)_opam_env_hook]} ]]; then\n    precmd_functions+=_opam_env_hook;\nfi\n"

let prompt =
"# This script allows you to see the active opam switch in your prompt. It\n# should be portable across all shells in common use.\n#\n# To enable, change your PS1 to call _opam_ps1 using command substitution. For\n# example, in bash:\n#\n#     PS1=\"$(__opam_ps1 \"(%s)\")\\u@\\h:\\w\\$ \"\n#\n\n__opam_ps1()\n{\n    local exit=$?\n    local printf_format='(%s)'\n\n    case \"$#\" in\n        0|1)    printf_format=\"${1:-$printf_format}\"\n        ;;\n        *)  return $exit\n        ;;\n    esac\n\n    local switch_name=\"$(opam switch show --safe 2>/dev/null)\"\n    if [ -z \"$switch_name\" ]; then\n        return $exit\n    fi\n    printf -- \"$printf_format\" \"$switch_name\"\n    return $exit\n}\n"

let sandbox_exec =
"#!/bin/bash\n# This script is only used on macOS, where /bin/bash is both guaranteed to exist\n# and to be for the native architecture, which is why /usr/bin/env bash is not used.\n# See https://github.com/ocaml/opam/issues/5450\nset -ue\n\nPOL='(version 1)(allow default)(deny network*)(deny file-write*)'\nPOL=\"$POL\"'(allow network* (remote unix))'\nPOL=\"$POL\"'(allow file-write* (literal \"/dev/null\") (literal \"/dev/dtracehelper\"))'\nPOL=\"$POL\"'(allow file-write* (regex #\"^(/private)?(/var)?/tmp/\"))'\n\nadd_mounts() {\n    if [ -d \"$2\" ]; then\n      local DIR=\"$(cd \"$2\" && pwd -P)\"\n      case \"$1\" in\n          ro) POL=\"$POL\"'(deny file-write* (subpath \"'\"$DIR\"'\"))';;\n          rw) POL=\"$POL\"'(allow file-write* (subpath \"'\"$DIR\"'\"))';;\n      esac\n    fi\n}\n\nif [ -z ${TMPDIR+x} ]; then\n  # Other applications obtain the per-user temporary\n  # directory differently; the latter should be made readable/writable\n  # too and getconf seems to be a robust way to get it\n  if command -v getconf > /dev/null ; then\n    TMPDIR=$(getconf DARWIN_USER_TEMP_DIR)\n    add_mounts rw \"$TMPDIR\"\n    export TMPDIR\n  fi\nelse\n  add_mounts rw \"$TMPDIR\"\nfi\n\n# C compilers using `ccache` will write to a shared cache directory\n# that remain writeable. ccache seems widespread in some Fedora systems.\nadd_ccache_mount() {\n  if command -v ccache > /dev/null; then\n      ccache_dir_regex='cache_dir = (.*)$'\n      local IFS=$'\\n'\n      for f in $(ccache -p 2>/dev/null); do\n        if [[ $f =~ $ccache_dir_regex ]]; then\n          ccache_dir=${BASH_REMATCH[1]}\n          break\n        fi\n      done\n      CCACHE_DIR=${CCACHE_DIR-$HOME/.ccache}\n      ccache_dir=${ccache_dir-$CCACHE_DIR}\n      add_mounts rw \"$ccache_dir\"\n  fi\n}\n\nadd_dune_cache_mount() {\n  local dune_cache=${DUNE_CACHE_ROOT:-${XDG_CACHE_HOME:-$HOME/.cache}/dune}\n  mkdir -p \"${dune_cache}\"\n  add_mounts rw \"$dune_cache\"\n}\n\n# In case OPAMROOT happens to be in one of the writeable directories we\n# need to make sure it is read-only\nif [ -n \"${OPAMROOT:-}\" ]; then\n  add_mounts ro \"$OPAMROOT\"\nfi\n\n# When using opam variable that must be defined at action time, add them also\n# at init check in OpamAuxCommands.check_and_revert_sandboxing (like\n# OPAM_SWITCH_PREFIX).\n# This case-switch should remain identical between the different sandbox implems\nCOMMAND=\"$1\"; shift\ncase \"$COMMAND\" in\n    build)\n        add_mounts ro \"$OPAM_SWITCH_PREFIX\"\n        add_mounts rw \"$PWD\"\n        add_ccache_mount\n        add_dune_cache_mount\n        ;;\n    install)\n        add_mounts rw \"$OPAM_SWITCH_PREFIX\"\n        add_mounts ro \"$OPAM_SWITCH_PREFIX/.opam-switch\"\n        add_mounts rw \"$PWD\"\n        ;;\n    remove)\n        add_mounts rw \"$OPAM_SWITCH_PREFIX\"\n        add_mounts ro \"$OPAM_SWITCH_PREFIX/.opam-switch\"\n        if [ \"X${PWD#$OPAM_SWITCH_PREFIX/.opam-switch/}\" != \"X${PWD}\" ]; then\n          add_mounts rw \"$PWD\"\n        fi\n        ;;\n    *)\n        echo \"$0: unknown command $COMMAND, must be one of 'build', 'install' or 'remove'\" >&2\n        exit 2\nesac\n\nif ! command -v \"$1\" >/dev/null; then\n    echo \"[ERROR] Command not found: $1\" >&2\n    exit 10\nfi\n\nexec sandbox-exec -p \"$POL\" \"$@\"\n"

OCaml

Innovation. Community. Security.