Extensions are software packages such as EDM or MEDM that are not designed to be used within IOCs. Building these is a little bit different than modules.
cd /epics
First, we will need to grab the files for the EPICS extensions directory: git clone --recursive https://github.com/epics-extensions/extensions extensions
Now, we should have the directory myepics/extensions
with some content.
cd /epics/extensions/src
In the src
directory within extensions
, we will place our EPICS extensions. This exact setup is unfortunately required due to how EDM and other extensions have their Makefiles setup.
The first major extension we will install is EDM, or "Extensible Display Manager". This is a Motif-based tool for viewing screens.
(NOTE: I'm testing all of this on Debian 13, but I am cross-referencing packages with Ubuntu 22.04)
Install the following via APT:
- libpng-dev
- libmotif-dev
- libxm4
- zlib1g-dev
- libgif-dev
- libx11-dev
- libxtst-dev
- libxmu-dev
cd /epics/extensions/src
The files may be obtained from this Github repository: https://github.com/gnartohl/edm
git clone https://github.com/gnartohl/edm
If you're on Ubuntu or Debian, you will need to point the extensions makefiles at the correct library location.
In /epics/extensions/configure/os/CONFIG_SITE.linux-x86_64.linux-x86_64
, add the following lines to the end of the file:
X11_LIB=/usr/lib/x86_64-linux-gnu
MOTIF_LIB=/usr/lib/x86_64-linux-gnu
Modify /epics/extensions/src/Makefile
to include the following patch:
diff --git a/extensions/src/Makefile b/extensions/src/Makefile
index 70b248c..d0673b6 100644
--- a/extensions/src/Makefile
+++ b/extensions/src/Makefile
@@ -45,6 +45,7 @@ JPROBE = jprobe
KM = km
NOBCONFIG = knobconfig
MEDM = medm
+EDM = edm
MOTIFBUTTON = motifButton
EXTENSION_MSI = msi
NAMECAPTURE = namecapture
@@ -96,6 +97,7 @@ DIRS += $(JDCT)
DIRS += $(JPROBE)
DIRS += $(KM)
DIRS += $(MEDM)
+DIRS += $(EDM)
DIRS += $(MOTIFBUTTON)
DIRS += $(EXTENSION_MSI)
DIRS += $(NAMECAPTURE)
This is required for EDM to compile, if you so choose to install it.
Then, compilation is as simple as:
cd /epics/extensions
make -j$(nproc)
EDM will search for screens in directories listed in $EDMDATAFILES
and $EPICS_DISPLAY_PATH
.
Depending on your system, the default EDM font configuation may not work. It certainly didn't work on my Debian 13 system due to missing fonts that also couldn't be found in the package manager.
To fix this, you will need to modify edm/setup/fonts.list
to point to courier or some other installed font family. In reality, courier doesn't actually need to be installed, EDM will fall back to some other built-in font. Nonetheless, it still requires the fonts.list be filled out.
diff --git a/setup/fonts.list b/setup/fonts.list
index b125a50..e77426d 100644
--- a/setup/fonts.list
+++ b/setup/fonts.list
@@ -2,83 +2,18 @@
courier-bold-r-12.0
helvetica-bold-r-12.0
-substitutions {
-
--misc-liberation sans-bold-r-normal--0-80-75-75-p-0-*-*=-adobe-helvetica-bold-r-normal--*-80-75-75-p-*-*-*
--misc-liberation sans-bold-i-normal--0-80-75-75-p-0-*-*=-adobe-helvetica-bold-o-normal--*-80-75-75-p-*-*-*
--misc-liberation sans-medium-r-normal--0-80-75-75-p-0-*-*=-adobe-helvetica-medium-r-normal--*-80-75-75-p-*-*-*
--misc-liberation sans-medium-i-normal--0-80-75-75-p-0-*-*=-adobe-helvetica-medium-o-normal--*-80-75-75-p-*-*-*
-
--misc-liberation sans-bold-r-normal--0-100-75-75-p-0-*-*=-adobe-helvetica-bold-r-normal--*-100-75-75-p-*-*-*
--misc-liberation sans-bold-i-normal--0-100-75-75-p-0-*-*=-adobe-helvetica-bold-o-normal--*-100-75-75-p-*-*-*
--misc-liberation sans-medium-r-normal--0-100-75-75-p-0-*-*=-adobe-helvetica-medium-r-normal--*-100-75-75-p-*-*-*
--misc-liberation sans-medium-i-normal--0-100-75-75-p-0-*-*=-adobe-helvetica-medium-o-normal--*-100-75-75-p-*-*-*
-
--misc-liberation sans-bold-r-normal--0-120-75-75-p-0-*-*=-adobe-helvetica-bold-r-normal--*-120-75-75-p-*-*-*
--misc-liberation sans-bold-i-normal--0-120-75-75-p-0-*-*=-adobe-helvetica-bold-o-normal--*-120-75-75-p-*-*-*
--misc-liberation sans-medium-r-normal--0-120-75-75-p-0-*-*=-adobe-helvetica-medium-r-normal--*-120-75-75-p-*-*-*
--misc-liberation sans-medium-i-normal--0-120-75-75-p-0-*-*=-adobe-helvetica-medium-o-normal--*-120-75-75-p-*-*-*
-
--misc-liberation sans-bold-r-normal--0-140-75-75-p-0-*-*=-adobe-helvetica-bold-r-normal--*-140-75-75-p-*-*-*
--misc-liberation sans-bold-i-normal--0-140-75-75-p-0-*-*=-adobe-helvetica-bold-o-normal--*-140-75-75-p-*-*-*
--misc-liberation sans-medium-r-normal--0-140-75-75-p-0-*-*=-adobe-helvetica-medium-r-normal--*-140-75-75-p-*-*-*
--misc-liberation sans-medium-i-normal--0-140-75-75-p-0-*-*=-adobe-helvetica-medium-o-normal--*-140-75-75-p-*-*-*
-
--misc-liberation sans-bold-r-normal--0-180-75-75-p-0-*-*=-adobe-helvetica-bold-r-normal--*-180-75-75-p-*-*-*
--misc-liberation sans-bold-i-normal--0-180-75-75-p-0-*-*=-adobe-helvetica-bold-o-normal--*-180-75-75-p-*-*-*
--misc-liberation sans-medium-r-normal--0-180-75-75-p-0-*-*=-adobe-helvetica-medium-r-normal--*-180-75-75-p-*-*-*
--misc-liberation sans-medium-i-normal--0-180-75-75-p-0-*-*=-adobe-helvetica-medium-o-normal--*-180-75-75-p-*-*-*
-
--misc-liberation sans-bold-r-normal--0-240-75-75-p-0-*-*=-adobe-helvetica-bold-r-normal--*-240-75-75-p-*-*-*
--misc-liberation sans-bold-i-normal--0-240-75-75-p-0-*-*=-adobe-helvetica-bold-o-normal--*-240-75-75-p-*-*-*
--misc-liberation sans-medium-r-normal--0-240-75-75-p-0-*-*=-adobe-helvetica-medium-r-normal--*-240-75-75-p-*-*-*
--misc-liberation sans-medium-i-normal--0-240-75-75-p-0-*-*=-adobe-helvetica-medium-o-normal--*-240-75-75-p-*-*-*
-
-
--misc-liberation mono-bold-r-normal--0-80-75-75-m-0-*-*=-adobe-courier-bold-r-normal--*-80-75-75-m-*-*-*
--misc-liberation mono-bold-i-normal--0-80-75-75-m-0-*-*=-adobe-courier-bold-o-normal--*-80-75-75-m-*-*-*
--misc-liberation mono-medium-r-normal--0-80-75-75-m-0-*-*=-adobe-courier-medium-r-normal--*-80-75-75-m-*-*-*
--misc-liberation mono-medium-i-normal--0-80-75-75-m-0-*-*=-adobe-courier-medium-o-normal--*-80-75-75-m-*-*-*
-
--misc-liberation mono-bold-r-normal--0-100-75-75-m-0-*-*=-adobe-courier-bold-r-normal--*-100-75-75-m-*-*-*
--misc-liberation mono-bold-i-normal--0-100-75-75-m-0-*-*=-adobe-courier-bold-o-normal--*-100-75-75-m-*-*-*
--misc-liberation mono-medium-r-normal--0-100-75-75-m-0-*-*=-adobe-courier-medium-r-normal--*-100-75-75-m-*-*-*
--misc-liberation mono-medium-i-normal--0-100-75-75-m-0-*-*=-adobe-courier-medium-o-normal--*-100-75-75-m-*-*-*
-
--misc-liberation mono-bold-r-normal--0-120-75-75-m-0-*-*=-adobe-courier-bold-r-normal--*-120-75-75-m-*-*-*
--misc-liberation mono-bold-i-normal--0-120-75-75-m-0-*-*=-adobe-courier-bold-o-normal--*-120-75-75-m-*-*-*
--misc-liberation mono-medium-r-normal--0-120-75-75-m-0-*-*=-adobe-courier-medium-r-normal--*-120-75-75-m-*-*-*
--misc-liberation mono-medium-i-normal--0-120-75-75-m-0-*-*=-adobe-courier-medium-o-normal--*-120-75-75-m-*-*-*
-
--misc-liberation mono-bold-r-normal--0-140-75-75-m-0-*-*=-adobe-courier-bold-r-normal--*-140-75-75-m-*-*-*
--misc-liberation mono-bold-i-normal--0-140-75-75-m-0-*-*=-adobe-courier-bold-o-normal--*-140-75-75-m-*-*-*
--misc-liberation mono-medium-r-normal--0-140-75-75-m-0-*-*=-adobe-courier-medium-r-normal--*-140-75-75-m-*-*-*
--misc-liberation mono-medium-i-normal--0-140-75-75-m-0-*-*=-adobe-courier-medium-o-normal--*-140-75-75-m-*-*-*
-
--misc-liberation mono-bold-r-normal--0-180-75-75-m-0-*-*=-adobe-courier-bold-r-normal--*-180-75-75-m-*-*-*
--misc-liberation mono-bold-i-normal--0-180-75-75-m-0-*-*=-adobe-courier-bold-o-normal--*-180-75-75-m-*-*-*
--misc-liberation mono-medium-r-normal--0-180-75-75-m-0-*-*=-adobe-courier-medium-r-normal--*-180-75-75-m-*-*-*
--misc-liberation mono-medium-i-normal--0-180-75-75-m-0-*-*=-adobe-courier-medium-o-normal--*-180-75-75-m-*-*-*
-
--misc-liberation mono-bold-r-normal--0-240-75-75-m-0-*-*=-adobe-courier-bold-r-normal--*-240-75-75-m-*-*-*
--misc-liberation mono-bold-i-normal--0-240-75-75-m-0-*-*=-adobe-courier-bold-o-normal--*-240-75-75-m-*-*-*
--misc-liberation mono-medium-r-normal--0-240-75-75-m-0-*-*=-adobe-courier-medium-r-normal--*-240-75-75-m-*-*-*
--misc-liberation mono-medium-i-normal--0-240-75-75-m-0-*-*=-adobe-courier-medium-o-normal--*-240-75-75-m-*-*-*
-
-}
-
# note that a tab separates the font spec and the word "exact"
-courier=-misc-liberation mono-(medium,bold)-(r,i)-normal--0-(80=90,100,120,140,160,180,200,240,280,320,360,420,480,600,720)-75-75-m-0-*-* exact
+#courier=-misc-liberation mono-(medium,bold)-(r,i)-normal--0-(80=90,100,120,140,160,180,200,240,280,320,360,420,480,600,720)-75-75-m-0-*-* exact
-helvetica=-misc-liberation sans-(medium,bold)-(r,i)-normal--0-(80,100,120,140,160=150,180,200,240,280,320,360,420,480,600,720)-75-75-p-0-*-* exact
+#helvetica=-misc-liberation sans-(medium,bold)-(r,i)-normal--0-(80,100,120,140,160=150,180,200,240,280,320,360,420,480,600,720)-75-75-p-0-*-* exact
# note that lists of candidate fonts may be specified as follows:
-#courier={
-#-misc-liberation mono-(medium,bold)-(r,i)-normal--0-(80=90,100,120,140,160,180,200,240,280,320,360,420,480,600,720)-75-75-m-0-*-* exact
-#-adobe-courier-(medium,bold)-(r,o)-normal--0-(80,100,120,140,160,180,200,240,280,320,360,420,480,600,720)-75-75-*-0-*-1
-#-monotype-arial-(medium,bold)-(r,i)-normal--*-(80,100,120,140,160,180,200,240,280,320,360,420,480,600,720)-75-75-p-*-*-*
-#}
+courier={
+-misc-liberation mono-(medium,bold)-(r,i)-normal--0-(80=90,100,120,140,160,180,200,240,280,320,360,420,480,600,720)-75-75-m-0-*-* exact
+-adobe-courier-(medium,bold)-(r,o)-normal--0-(80,100,120,140,160,180,200,240,280,320,360,420,480,600,720)-75-75-*-0-*-1
+-monotype-arial-(medium,bold)-(r,i)-normal--*-(80,100,120,140,160,180,200,240,280,320,360,420,480,600,720)-75-75-p-*-*-*
+}
#helvetica={
#-misc-liberation sans-(medium,bold)-(r,i)-normal--0-(80,100,120,140,160=150,180,200,240,280,320,360,420,480,600,720)-75-75-p-0-*-* exact
Once you have this done, and your environment setup (as per Setting up the environment, you can run edm with edm
.