Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Configuration variables and override files

EPICS-env reads its settings from make variables when it builds the Experimental Physics and Industrial Control System (EPICS) base and modules. The defaults live in tracked files under configure/; a site changes them in untracked .local files, so the tracked files stay unchanged.

Override files and read order

configure/CONFIG reads configure/RELEASE first and configure/CONFIG_SITE second. Each file then reads its two override files, and a later file wins:

Tracked fileOverride files, in the order read
configure/RELEASE../RELEASE.local (next to the repository), then configure/RELEASE.local
configure/CONFIG_SITE../CONFIG_SITE.local (next to the repository), then configure/CONFIG_SITE.local

Creating, editing, or removing either RELEASE.local override regenerates configure/MODULESGEN.mk on the next action invocation when the effective module triples change. Generated install directories follow the effective SRC_VER_<MODULE_KEY> values without a manual reconf.modules step. Query-only invocations use those effective values in memory and leave the persistent cache unchanged, including when it is absent or stale.

The variables that configure/CONFIG_BASE defines with ?= accept a value set in a CONFIG_SITE.local file, in the environment, or on the make command line. LINKER_USE_RPATH uses :=, so only a value on the make command line replaces it. Every EPICS base and module build receives LINKER_ORIGIN_ROOT set to INSTALL_LOCATION_EPICS on its own command line, so no value set for LINKER_ORIGIN_ROOT reaches a build.

conf.release.modules writes RELEASE.local and CONFIG_SITE.local at the repository top for the modules to read. EPICS-env itself does not read those two files, and each make conf overwrites them.

Install location and release

VariableDefaultSet inMeaning
INSTALL_LOCATION${HOME}/epicsCONFIG_SITE.localRoot of every installed tree
ENV_RELEASE_VERS1.4.0CONFIG_SITE.localEPICS-env release number; the second level of the installed tree

The installed tree for one host is $(INSTALL_LOCATION)/$(ENV_RELEASE_VERS)/<os_id>-<os_version>/$(SRC_VER_BASE). <os_id> and <os_version> are the operating system ID and VERSION_ID from /etc/os-release. This command prints that path for the current host:

make print-INSTALL_LOCATION_EPICS

Actions probe INSTALL_LOCATION with mkdir -p. When the probe returns 1, make runs the module build and install steps, the module links, and the commonIocsh install through sudo. The EPICS base build and install and the .versions install do not use sudo, so INSTALL_LOCATION must be writable by the current user for a complete install.

A query computes SUDO_INFO without creating the directory. An existing directory yields 0 when its parent path permits identifying it, even with mode 000 on the final directory. An absent path requires search and create access at the nearest existing ancestor; a blocked path or non-directory yields 1. The result does not guarantee write access inside an existing directory or predict quota, mount, or concurrent filesystem failures.

Source repositories and pins

VariableDefaultSet inMeaning
SRC_URL_BASEhttps://github.com/epics-baseRELEASE.localOrganization that hosts EPICS base
SRC_URL_EPICSMODULEShttps://github.com/epics-modulesRELEASE.localDefault organization for modules
SRC_URL_<ORG>One GitHub organization eachRELEASE.localOrganizations for modules hosted elsewhere: CHANNELFINDER, JEONGHANLEE, BRUNOSEIVAM, PSI, MOTOR, MD, BERKELEYLAB, PMAC
SRC_NAME_BASEepics-baseRELEASE.localEPICS base repository name
SRC_TAG_BASEtags/R7.0.10RELEASE.localEPICS base tag to check out
SRC_VER_BASE7.0.10RELEASE.localEPICS base version; the last level of the installed tree
SRC_NAME_<MODULE_KEY>Per moduleRELEASE.localModule repository name
SRC_TAG_<MODULE_KEY>Per moduleRELEASE.localModule tag or commit to check out
SRC_VER_<MODULE_KEY>Per moduleRELEASE.localModule version; part of the module install directory name

Module pins and dependencies lists the value of every <MODULE_KEY>.

Vendor library locations

VariableDefaultSet inMeaning
VENDOR_ULDAQ_PATH/usr/localRELEASE.localInstall prefix of the uldaq library that measComp links
OPEN62541_PATH/usr/localRELEASE.localInstall prefix of the open62541 library that opcua links

EPICS base site settings

conf.base.env writes these values into epics-base-src/configure/CONFIG_SITE_ENV, so they become the defaults of every input/output controller (IOC) built against the installed base.

EPICS base compiles CONFIG_SITE_ENV into its libCom library, so a changed value takes effect only after make conf.base, make build.base, and make install.base run again.

VariableDefaultMeaning
EPICS_TZ"PST8PDT,M3.2.0/2,M11.1.0/2"Time zone rule
EPICS_TS_NTP_INETtime.google.comNetwork Time Protocol (NTP) server
IOCSH_PS1"<base_version> > "iocsh prompt
IOCSH_HISTSIZE50Lines of iocsh command history
IOCSH_HISTEDIT_DISABLEemptyDisables line editing in iocsh when set
EPICS_IOC_LOG_INETemptyIOC log server address
EPICS_IOC_LOG_FILE_NAMEemptyIOC log file path
EPICS_IOC_LOG_FILE_COMMANDemptyCommand that returns a log file path after SIGHUP
EPICS_IOC_LOG_FILE_LIMIT1000000IOC log file size limit

conf.base.site writes these values into epics-base-src/configure/CONFIG_SITE.local:

VariableDefaultMeaning
CROSS_COMPILER_TARGET_ARCHSemptyCross target architectures for EPICS base
EPICS_SITE_VERSION"github.com/jeonghanlee/EPICS-env"Site version string built into EPICS base
EPICS_VCS_VERSION"EPICS-env-<base_version>-<git_describe>"Version string written as GENVERSIONDEFAULT

Variables set on the command line

VariableDefaultUsed byMeaning
VERBOSEunsetEvery targetPrints recipe commands when set
DEBUG_SHELLunsetEvery targetRuns recipes under /bin/sh -x when set
FILTER1 (no filter)varsPrints only variables whose names start with the given prefix
LEVEL2exist, exist.modules, tree.<VARIABLE>Tree depth
LSOPTSunsetls.<VARIABLE>Options passed to ls
MODULEempty (all)audit.module-deps, check.module-depsAudits one module
FORMATtextaudit.module-deps, check.module-depsReport format: text or json
PLATFORMoutput of uname -saudit.module-deps, check.module-depsWith Linux, dependencies found under a module’s os/Linux, os/posix, and os/default directories count as required; with any other value they count as optional