Compare commits

..

12 Commits

1043 changed files with 35321 additions and 48490 deletions

View File

@@ -1,18 +1,11 @@
# .appveyor.yml for use with EPICS Base ci-scripts
# (see: https://github.com/epics-base/ci-scripts)
# AppVeyor configuration for EPICS Base
# Ralph Lange <ralph.lange@gmx.de>
# Copyright (c) 2016-2017 ITER Organization
# Version format
version: base-{branch}-{build}
#---------------------------------#
# build cache #
#---------------------------------#
# The AppVeyor cache allowance is way too small (1GB per account across all projects, branches and jobs)
# to be used for the dependency builds.
cache:
- C:\Users\appveyor\.tools
#---------------------------------#
# repository cloning #
#---------------------------------#
@@ -23,15 +16,15 @@ init:
- git config --global core.autocrlf true
# Set clone depth (do not fetch complete history)
clone_depth: 5
clone_depth: 50
# Skipping commits affecting only specific files
skip_commits:
files:
- 'documentation/*'
- 'templates/*'
- '**/*.html'
- '**/*.md'
- '.travis.yml'
#---------------------------------#
# build matrix configuration #
@@ -44,44 +37,34 @@ configuration:
- dynamic-debug
- static-debug
# Environment variables: compiler toolchain, base version, setup file, ...
# Environment variables: compiler toolchain
environment:
# common / default variables for all jobs
SETUP_PATH: .ci-local:.ci
BASE: SELF
matrix:
- CMP: vs2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
- CMP: vs2017
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- CMP: vs2015
- CMP: vs2013
- CMP: vs2012
- CMP: vs2010
- CMP: mingw
- TOOLCHAIN: 10.0
- TOOLCHAIN: 11.0
- TOOLCHAIN: 12.0
- TOOLCHAIN: 14.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLCHAIN: 2017
- TOOLCHAIN: cygwin
- TOOLCHAIN: mingw
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
# Platform: processor architecture
# Platform: architecture
platform:
- x86
- x64
# Matrix configuration: exclude sets of jobs
# Matrix configuration: allow specific failing jobs
matrix:
exclude:
# VS2012 and older installs don't have the 64 bit compiler
# VS Express installs don't have the 64 bit compiler
- platform: x64
CMP: vs2012
- platform: x64
CMP: vs2010
- platform: x64
CMP: vs2008
# Exclude more jobs to reduce build time
# Skip 32-bit for "middle-aged" compilers
- platform: x86
CMP: vs2017
- platform: x86
CMP: vs2015
TOOLCHAIN: 10.0
# Cygwin static-debug has compiler problems
- configuration: static-debug
TOOLCHAIN: cygwin
#---------------------------------#
# building & testing #
@@ -89,33 +72,13 @@ matrix:
install:
- cmd: git submodule update --init --recursive
- cmd: python .ci/appveyor/do.py prepare
- cmd: .ci/appveyor-prepare.bat
build_script:
- cmd: python .ci/appveyor/do.py build
- cmd: .ci/appveyor-make.bat
test_script:
- cmd: python .ci/appveyor/do.py test
on_finish:
- ps: Get-ChildItem *.tap -Recurse -Force | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
- cmd: python .ci/appveyor/do.py build test-results -s
#---------------------------------#
# debugging #
#---------------------------------#
## if you want to connect by remote desktop to a failed build, uncomment these lines
## note that you will need to connect within the usual build timeout limit (60 minutes)
## so you may want to adjust the build matrix above to just build the one of interest
# print the connection info
#init:
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# block a failed build (until the watchdog barks)
#on_failure:
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
- cmd: .ci/appveyor-make.bat runtests
#---------------------------------#
# notifications #

137
.ci/appveyor-make.bat Normal file
View File

@@ -0,0 +1,137 @@
:: Universal build script for AppVeyor (https://ci.appveyor.com/)
:: Environment:
:: TOOLCHAIN - toolchain version [10.0/11.0/12.0/14.0/2017/cygwin/mingw]
:: CONFIGURATION - determines EPICS build [dynamic/static]
:: PLATFORM - architecture [x86/x64]
::
:: All command line args are passed to make
Setlocal EnableDelayedExpansion
set "ST="
if /i "%CONFIGURATION%"=="static" set ST=-static
set OS=64BIT
if "%PLATFORM%"=="x86" set OS=32BIT
echo [INFO] Platform: %OS%
:: Use parallel make, except for 3.14
set "MAKEARGS=-j2 -Otarget"
if "%APPVEYOR_REPO_BRANCH%"=="3.14" set MAKEARGS=
if "%TOOLCHAIN%"=="cygwin" (
set "MAKE=make"
if "%OS%"=="64BIT" (
set "EPICS_HOST_ARCH=cygwin-x86_64"
set "INCLUDE=C:\cygwin64\include;%INCLUDE%"
set "PATH=C:\cygwin64\bin;%PATH%"
echo [INFO] Cygwin Toolchain 64bit
) else (
set "EPICS_HOST_ARCH=cygwin-x86"
set "INCLUDE=C:\cygwin\include;%INCLUDE%"
set "PATH=C:\cygwin\bin;%PATH%"
echo [INFO] Cygwin Toolchain 32bit
)
echo [INFO] Compiler Version
gcc -v
goto Finish
)
if "%TOOLCHAIN%"=="mingw" (
set "MAKE=mingw32-make"
if "%OS%"=="64BIT" (
set "EPICS_HOST_ARCH=windows-x64-mingw"
set "INCLUDE=C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\include;%INCLUDE%"
set "PATH=C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;%PATH%"
echo [INFO] MinGW Toolchain 64bit
) else (
set "EPICS_HOST_ARCH=win32-x86-mingw"
set "INCLUDE=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\include;%INCLUDE%"
set "PATH=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin;%PATH%"
echo [INFO] MinGW Toolchain 32bit
)
echo [INFO] Compiler Version
gcc -v
goto Finish
)
set "VSINSTALL=C:\Program Files (x86)\Microsoft Visual Studio %TOOLCHAIN%"
if not exist "%VSINSTALL%\" set "VSINSTALL=C:\Program Files (x86)\Microsoft Visual Studio\%TOOLCHAIN%\Community"
if not exist "%VSINSTALL%\" goto MSMissing
set "MAKE=C:\tools\make"
echo [INFO] APPVEYOR_BUILD_WORKER_IMAGE=%APPVEYOR_BUILD_WORKER_IMAGE%
if "%OS%"=="64BIT" (
set EPICS_HOST_ARCH=windows-x64%ST%
:: VS 2017
if exist "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat" (
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
call "%VSINSTALL%\VC\vcvarsall.bat" amd64
where cl
if !ERRORLEVEL! NEQ 0 (
call "%VSINSTALL%\VC\vcvarsall.bat" x86_amd64
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
)
goto MSFound
)
if exist "%VSINSTALL%\VC\bin\amd64\vcvars64.bat" (
call "%VSINSTALL%\VC\bin\amd64\vcvars64.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
) else (
set EPICS_HOST_ARCH=win32-x86%ST%
:: VS 2017
if exist "%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat" (
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
call "%VSINSTALL%\VC\vcvarsall.bat" x86
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\VC\bin\vcvars32.bat" (
call "%VSINSTALL%\VC\bin\vcvars32.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\Common7\Tools\vsvars32.bat" (
call "%VSINSTALL%\Common7\Tools\vsvars32.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
)
:MSMissing
echo [INFO] Installation for MSVC Toolchain %TOOLCHAIN% / %OS% seems to be missing
exit 1
:MSFound
echo [INFO] Microsoft Visual Studio Toolchain %TOOLCHAIN%
echo [INFO] Compiler Version
cl
:Finish
echo [INFO] EPICS_HOST_ARCH: %EPICS_HOST_ARCH%
echo [INFO] Make version
%MAKE% --version
echo [INFO] Perl version
perl --version
%MAKE% %MAKEARGS% %*

63
.ci/appveyor-prepare.bat Normal file
View File

@@ -0,0 +1,63 @@
:: Build script for AppVeyor (https://ci.appveyor.com/)
:: Environment:
:: TOOLCHAIN - Toolchain Version [9.0/10.0/11.0/12.0/14.0/cygwin/mingw]
:: CONFIGURATION - determines EPICS build [dynamic/static, -debug]
:: PLATFORM - "x86" -> use 32bit architecture
::
:: Prepares an Appveyor build by excuting the following steps
:: - Set up configure\CONFIG_SITE for static vs. dynamic build
:: - Install Cygwin / Mingw (TOOLCHAIN setting) in the in the appropriate flavor
:: - Download and install Make-4.1 from EPICS download page
Setlocal EnableDelayedExpansion
set OS=64BIT
if "%PLATFORM%"=="x86" set OS=32BIT
echo [INFO] Platform: %OS%
if "%TOOLCHAIN%"=="cygwin" (
echo.%CONFIGURATION% | findstr /C:"static">nul && (
echo SHARED_LIBRARIES=NO>> configure\CONFIG_SITE
echo STATIC_BUILD=YES>> configure\CONFIG_SITE
echo [INFO] EPICS set up for static build
) || (
echo [INFO] EPICS set up for dynamic build
)
echo.%CONFIGURATION% | findstr /C:"debug">nul && (
echo HOST_OPT=NO>> configure\CONFIG_SITE
echo [INFO] EPICS set up for debug build
) || (
echo [INFO] EPICS set up for optimized build
)
if "%OS%"=="64BIT" (
echo [INFO] Installing Cygwin 64bit and dependencies
@powershell -Command "(new-object net.webclient).DownloadFile('http://www.cygwin.com/setup-x86_64.exe', 'C:\cygwin64\setup-x86_64.exe')"
C:\cygwin64\setup-x86_64.exe -q -P "libreadline-devel,libncursesw-devel"
) else (
echo [INFO] Installing Cygwin 32bit and dependencies
@powershell -Command "(new-object net.webclient).DownloadFile('http://www.cygwin.com/setup-x86.exe', 'C:\cygwin\setup-x86.exe')"
C:\cygwin\setup-x86.exe -q -P "libreadline-devel,libncursesw-devel"
)
)
if "%TOOLCHAIN%"=="mingw" (
echo.%CONFIGURATION% | findstr /C:"static">nul && (
echo SHARED_LIBRARIES=NO>> configure\CONFIG_SITE
echo STATIC_BUILD=YES>> configure\CONFIG_SITE
echo [INFO] EPICS set up for static build
) || (
echo [INFO] EPICS set up for dynamic build
)
echo.%CONFIGURATION% | findstr /C:"debug">nul && (
echo HOST_OPT=NO>> configure\CONFIG_SITE
echo [INFO] EPICS set up for debug build
) || (
echo [INFO] EPICS set up for optimized build
)
)
echo [INFO] Installing Make 4.2.1 from ANL web site
curl -fsS --retry 3 -o C:\tools\make-4.2.1.zip https://epics.anl.gov/download/tools/make-4.2.1-win64.zip
cd \tools
"C:\Program Files\7-Zip\7z" e make-4.2.1.zip

8
.ci/checkout-modules.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/sh
#
# Checkout submodules on their appropriate branches
#
git submodule foreach '\
git checkout `git config -f $toplevel/.gitmodules submodule.$name.branch` && \
git pull '

77
.ci/travis-build.sh Executable file
View File

@@ -0,0 +1,77 @@
#!/bin/sh
set -e -x
die() {
echo "$1" >&2
exit 1
}
CACHEKEY=1
export EPICS_HOST_ARCH=`perl src/tools/EpicsHostArch.pl`
[ -e configure/os/CONFIG_SITE.Common.linux-x86 ] || die "Wrong location: $PWD"
case "$CMPLR" in
clang)
echo "Host compiler is clang"
cat << EOF >> configure/os/CONFIG_SITE.Common.$EPICS_HOST_ARCH
GNU = NO
CMPLR_CLASS = clang
CC = clang
CCC = clang++
EOF
;;
*) echo "Host compiler is default";;
esac
if [ "$STATIC" = "YES" ]
then
echo "Build static libraries/executables"
cat << EOF >> configure/CONFIG_SITE
SHARED_LIBRARIES=NO
STATIC_BUILD=YES
EOF
fi
# requires wine and g++-mingw-w64-i686
if [ "$WINE" = "32" ]
then
echo "Cross mingw32"
sed -i -e '/CMPLR_PREFIX/d' configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
cat << EOF >> configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
CMPLR_PREFIX=i686-w64-mingw32-
EOF
cat << EOF >> configure/CONFIG_SITE
CROSS_COMPILER_TARGET_ARCHS+=win32-x86-mingw
EOF
fi
# set RTEMS to eg. "4.9" or "4.10"
if [ -n "$RTEMS" ]
then
echo "Cross RTEMS${RTEMS} for pc386"
curl -L "https://github.com/mdavidsaver/rsb/releases/download/20171203-${RTEMS}/i386-rtems${RTEMS}-trusty-20171203-${RTEMS}.tar.bz2" \
| tar -C / -xmj
sed -i -e '/^RTEMS_VERSION/d' -e '/^RTEMS_BASE/d' configure/os/CONFIG_SITE.Common.RTEMS
cat << EOF >> configure/os/CONFIG_SITE.Common.RTEMS
RTEMS_VERSION=$RTEMS
RTEMS_BASE=$HOME/.rtems
EOF
cat << EOF >> configure/CONFIG_SITE
CROSS_COMPILER_TARGET_ARCHS += RTEMS-pc386-qemu
EOF
# find local qemu-system-i386
echo -n "Using QEMU: "
type qemu-system-i386 || echo "Missing qemu"
fi
make -j2 $EXTRA
if [ "$TEST" != "NO" ]
then
make -j2 tapfiles
make -s test-results
fi

8
.gitmodules vendored
View File

@@ -22,10 +22,6 @@
path = modules/pva2pva
url = https://github.com/epics-base/pva2pva
branch = master
[submodule ".ci"]
path = .ci
url = https://github.com/epics-base/ci-scripts
branch = master
[submodule "modules/pcas"]
path = modules/pcas
url = https://github.com/epics-modules/pcas
path = modules/pcas
url = https://github.com/epics-modules/pcas

View File

@@ -1,26 +1,22 @@
#!/bin/bash
#!/bin/sh
#
# Make tar for git repo w/ one level of sub modules.
#
set -e -u
set -e
die() {
echo "$1" >&2
exit 1
}
maybedie() {
if [ "$DEVMODE" ]; then
echo "Warning: $1" >&2
else
echo "Error: $1" >&2
exit 1
fi
}
TOPREV="$1"
FINALTAR="$2"
PREFIX="$3"
usage() {
if ! [ "$TOPREV" ]
then
cat <<EOF >&2
usage: $0 [-v] [-s] <rev> [<outfile> [<prefix>]]
usage: $0 <rev> [<outfile> [<prefix>]]
<rev> may be any git revision spec. (tag, branch, or commit id).
@@ -28,33 +24,9 @@ usage: $0 [-v] [-s] <rev> [<outfile> [<prefix>]]
If <outfile> is omitted, "base-<rev>.tar.gz" will be used.
If provided, <prefix> must end with "/". If <prefix> is omitted,
the default is "base-<rev>/".
Options:
-v Enable verbose prints
-d Enable permissive developer mode
EOF
exit 1
}
export DEVMODE=
while getopts "vd" OPT
do
case "$OPT" in
v) set -x;;
d) DEVMODE=1;;
?) echo "Unknown option"
usage;;
esac
done
shift $(($OPTIND - 1))
TOPREV="$1"
FINALTAR="$2"
PREFIX="${3:-}"
[ "$TOPREV" ] || usage
fi
case "$FINALTAR" in
"")
@@ -87,13 +59,16 @@ case "$PREFIX" in
esac
# Check for both <tag> and R<tag>
if ! [ `git tag -l $TOPREV` ]
if [ "$TOPREV" = "HEAD" ]
then
true
elif ! [ `git tag -l $TOPREV` ]
then
if [ `git tag -l R$TOPREV` ]
then
TOPREV="R$TOPREV"
else
maybedie "No tags exist '$TOPREV' or 'R$TOPREV'"
die "No tags exist '$TOPREV' or 'R$TOPREV'"
fi
fi
@@ -114,17 +89,11 @@ git archive --prefix=$PREFIX $TOPREV | tar -C "$TDIR"/tar -x
#
# sub-modules appear in tree as eg.:
# 160000 commit c3a6cfcf0dad4a4eeecf59b474710d06ff3eb68a modules/ca
git ls-tree -r $TOPREV | \
awk '/^[0-9]+ commit / && $4 != ".ci" {print $3, $4}' | \
git ls-tree -r $TOPREV | awk '/^[0-9]+ commit / {print $3, $4}' | \
while read HASH MODDIR
do
echo "Visiting $HASH $MODDIR"
if [ -e $MODDIR/.git ]
then
git -C $MODDIR archive --prefix=${PREFIX}${MODDIR}/ $HASH | tar -C "$TDIR"/tar -x
else
maybedie " Submodule not checked out."
fi
git -C $MODDIR archive --prefix=${PREFIX}${MODDIR}/ $HASH | tar -C "$TDIR"/tar -x
done
# make a list of files copied and filter out undesirables
@@ -136,17 +105,13 @@ sed -i -e 's|^\./||' "$TDIR"/list.1
# Exclude files
sed \
-e '/\/\.ci\//d' \
-e '/\/\.ci-local\//d' \
-e '/\/\.\?ci\//d' \
-e '/\/\.tools\//d' \
-e '/\/jenkins\//d' \
-e '/\/\.git/d' \
-e '/\/\.hgtags$/d' \
-e '/\/\.cproject$/d' \
-e '/\/\.project$/d' \
-e '/\/\.travis\.yml$/d' \
-e '/\/\.appveyor\.yml$/d' \
-e '/\/\.readthedocs\.yml$/d' \
"$TDIR"/list.1 > "$TDIR"/list.2
if ! diff -U 0 "$TDIR"/list.1 "$TDIR"/list.2
@@ -164,5 +129,5 @@ tar -t $TAROPT -f "$FINALTAR" > "$TDIR"/list.3
# make sure we haven't picked up anything extra
if ! diff -u "$TDIR"/list.2 "$TDIR"/list.3
then
die "Oops! Tarfile diff against plan shown above"
echo "Oops! Tarfile diff against plan shown above"
fi

View File

@@ -1,89 +1,27 @@
# .travis.yml for use with EPICS Base ci-scripts
# (see: https://github.com/epics-base/ci-scripts)
language: cpp
compiler: gcc
dist: xenial
cache:
directories:
- $HOME/.cache
env:
global:
- SETUP_PATH=.ci-local:.ci
- BASE=SELF
sudo: false
dist: trusty
language: c
compiler:
- gcc
addons:
apt:
packages:
# for all EPICS builds
- libreadline6-dev
- libncurses5-dev
- perl
# for clang compiler
- clang
# for mingw builds (32bit and 64bit)
- g++-mingw-w64-i686
- g++-mingw-w64-x86-64
# for RTEMS cross builds
- qemu-system-x86
homebrew:
packages:
# for all EPICS builds
- bash
update: true
install:
- ./.ci/travis/prepare.sh
script:
- ./.ci/travis/build.sh
# Define build jobs
jobs:
include:
# Different configurations of default gcc and clang
- dist: bionic
- dist: xenial
- dist: bionic
env: STATIC=YES EXTRA="CMD_CXXFLAGS=-std=c++11"
- dist: trusty
env: EXTRA="CMD_CXXFLAGS=-std=c++11"
- dist: bionic
compiler: clang
- compiler: clang
- dist: trusty
compiler: clang
env: STATIC=YES
# Cross-compilations to Windows using MinGW and WINE
- env: WINE=32 TEST=NO STATIC=YES
compiler: mingw
- env: WINE=32 TEST=NO STATIC=NO
compiler: mingw
# Cross-compilation to RTEMS
- env: RTEMS=4.10
- env: RTEMS=4.9
# MacOS build
- os: osx
env:
- EXTRA="CMD_CFLAGS=-mmacosx-version-min=10.7"
- EXTRA1="CMD_CXXFLAGS=-mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++"
- EXTRA2="CMD_LDXFLAGS=-mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++"
compiler: clang
- .ci/travis-build.sh
env:
- CMPLR=gcc
- CMPLR=clang
- CMPLR=gcc STATIC=YES
- CMPLR=clang STATIC=YES
- CMPLR=gcc EXTRA=CMD_CXXFLAGS=-std=c++11
- CMPLR=clang EXTRA=CMD_CXXFLAGS=-std=c++11
- WINE=32 TEST=NO STATIC=YES
- WINE=32 TEST=NO STATIC=NO
- RTEMS=4.10 TEST=YES
- RTEMS=4.9 TEST=YES

View File

@@ -58,9 +58,9 @@ include $(CONFIG)/CONFIG_BASE_VERSION
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common
# Parse configure/RELEASE to find all upstream modules
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)
ifdef T_A
# Cross compile specific definitions

View File

@@ -42,10 +42,9 @@ FIND_TOOL = $(firstword $(wildcard $(TOOLS)/$(1) $(EPICS_BASE)/src/tools/$(1)))
PODTOHTML = $(PERL) $(TOOLS)/podToHtml.pl
CONVERTRELEASE = $(PERL) $(call FIND_TOOL,convertRelease.pl)
FULLPATHNAME = $(PERL) $(TOOLS)/fullPathName.pl
TAPTOJUNIT = $(PERL) $(TOOLS)/tap-to-junit-xml.pl
GENVERSIONHEADER = $(PERL) $(TOOLS)/genVersionHeader.pl $(QUIET_FLAG) $(QUESTION_FLAG)
MAKERPATH = $(PYTHON) $(TOOLS)/makeRPath.py
#---------------------------------------------------------------
# tools for installing libraries and products
INSTALL = $(PERL) $(TOOLS)/installEpics.pl $(QUIET_FLAG)
@@ -61,13 +60,3 @@ REPLACEVAR = $(PERL) $(TOOLS)/replaceVAR.pl
# tools for cleaning out unwanted files
CVSCLEAN = $(call FIND_TOOL,cvsclean.pl)
DEPCLEAN = $(call FIND_TOOL,depclean.pl)
#---------------------------------------------------------------
# Tools for testing
TAPTOJUNIT = $(PERL) $(TOOLS)/tap-to-junit-xml.pl
PROVE = $(PERL) $(TOOLS)/epicsProve.pl
PROVE.tap = $(PROVE) --ext .tap --exec "$(CAT)"
TEST_FAILURE_FILENAME = .tests-failed.log
TEST_FAILURE_FILE = $(TOP)/$(TEST_FAILURE_FILENAME)
PROVE_FAILURE = echo $(abspath .)>> $(TEST_FAILURE_FILE)

View File

@@ -48,7 +48,7 @@ EPICS_VERSION = 7
EPICS_REVISION = 0
# EPICS_MODIFICATION must be a number >=0 and <256
EPICS_MODIFICATION = 4
EPICS_MODIFICATION = 3
# EPICS_PATCH_LEVEL must be a number (win32 resource file requirement)
# Not included in the official EPICS version number if zero
@@ -60,8 +60,12 @@ EPICS_PATCH_LEVEL = 1
EPICS_DEV_SNAPSHOT=-DEV
#EPICS_DEV_SNAPSHOT=-pre1
#EPICS_DEV_SNAPSHOT=-pre1-DEV
#EPICS_DEV_SNAPSHOT=-pre2
#EPICS_DEV_SNAPSHOT=-pre2-DEV
#EPICS_DEV_SNAPSHOT=-rc1
#EPICS_DEV_SNAPSHOT=-rc1-DEV
#EPICS_DEV_SNAPSHOT=-rc2
#EPICS_DEV_SNAPSHOT=-rc2-DEV
# No changes should be needed below here

View File

@@ -38,8 +38,6 @@ BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)
# otherwise override this in os/CONFIG_SITE.<host_arch>.Common
PERL = perl -CSD
PYTHON = python
#-------------------------------------------------------
# Check configure/RELEASE file for consistency
CHECK_RELEASE_YES = checkRelease
@@ -306,7 +304,7 @@ LDLIBS = $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS)\
CPPFLAGS = $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS) $(OPT_CPPFLAGS)\
$(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS) $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS)\
$(USR_CPPFLAGS) $(CMD_CPPFLAGS) $(ARCH_DEP_CPPFLAGS) $(OP_SYS_CPPFLAGS)\
$(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS) $(API_CPPFLAGS)
$(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)
#--------------------------------------------------
# ar definition default
@@ -378,14 +376,14 @@ PATH_FILTER = $(1)$(warning PATH_FILTER is deprecated; used for $(1))
# each list starts with the destination directory name(s)
# to make sure it's there
INSTALL_PROD = $(PRODNAME:%= $(INSTALL_BIN)/%)
INSTALL_LIBS = $(LIBNAME:%=$(INSTALL_LIB)/%)
INSTALL_MUNCHS = $(MUNCHNAME:%=$(INSTALL_BIN)/%)
INSTALL_SHRLIBS = $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
INSTALL_LOADABLE_SHRLIBS = $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
INSTALL_DLLSTUB_LIBS = $(DLLSTUB_LIBNAME:%=$(INSTALL_LIB)/%)
INSTALL_TCLLIBS = $(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
INSTALL_TCLINDEX = $(TCLINDEX:%=$(INSTALL_TCLLIB)/%)
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
INSTALL_DLLSTUB_LIBS=$(DLLSTUB_LIBNAME:%=$(INSTALL_LIB)/%)
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)

View File

@@ -3,8 +3,9 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
# Author: Andrew Johnson
# Date: 20 April 1995
@@ -53,3 +54,8 @@ EPICS_IOC_IGNORE_SERVERS=""
# EPICS_IOC_LOG_PORT Log server port number etc.
EPICS_IOC_LOG_PORT=7004
# Other services:
EPICS_CMD_PROTO_PORT=
EPICS_AR_PORT=7002

View File

@@ -161,9 +161,7 @@ USE_POSIX_THREAD_PRIORITY_SCHEDULING = YES
# Site version number, if set will append '-' and this string to the
# EPICS version number string that is reported by many tools.
ifeq ($(INSTALL_LOCATION),$(EPICS_BASE))
EPICS_SITE_VERSION=$(shell $(PERL) -MPOSIX -e 'print strftime "%Y-%m-%d", localtime')
endif
EPICS_SITE_VERSION=$(shell $(PERL) -MPOSIX -e 'print strftime "%Y-%m-%d $(shell git describe --tags --dirty)", localtime')
# For GNU compiler, use pipes rather than temporary files for
# communication between the various stages of compilation.
@@ -171,18 +169,10 @@ endif
GCC_PIPE = NO
# Set RPATH when linking executables and libraries.
# Must be either YES, NO, or ORIGIN. If you set this to NO you must also provide a
# Must be either YES or NO. If you set this to NO you must also provide a
# way for Base executables to find their shared libraries when they are
# run at build-time, e.g. set the LD_LIBRARY_PATH environment variable.
# ORIGIN is a feature of the ELF executable format used by Linux, freebsd, and solaris.
LINKER_USE_RPATH = YES
# Only used when LINKER_USE_RPATH=ORIGIN
# The build time root(s) of the relocatable tree (separate multiple w/ ':').
# Linking to libraries under any root directory will be relative.
# Linking to libraries outside of this root will be absolute.
# All root directories are considered to be the same.
LINKER_ORIGIN_ROOT = $(INSTALL_LOCATION)
# Overrides for the settings above may appear in a CONFIG_SITE.local file
-include $(CONFIG)/CONFIG_SITE.local

View File

@@ -24,40 +24,40 @@
# Site-specific environment settings
## Time service:
# EPICS_TZ
# Local timezone rules for vxWorks and RTEMS. The value follows the Posix
# TZ environment variable's Mm.n.d/h format (see the IBM link below for
# details). If TZ hasn't already been set when the osdTime timeRegister()
# C++ static constructor runs, this parameter will be copied into the TZ
# environment variable. Once the OS clock has been synchronized to NTP the
# routine tz2timezone() will be run to convert TZ into the TIMEZONE
# variable format that VxWorks needs.
# https://developer.ibm.com/articles/au-aix-posix/
# Japan Standard Time, no DST:
#EPICS_TZ = "JST-9"
# Central European (Summer) Time:
#EPICS_TZ = "CET-1CEST,M3.5.0/2,M10.5.0/3"
# Greenwich Mean/British Summer Time:
#EPICS_TZ = "GMT0BST,M3.5.0/1,M10.5.0/2"
# US Eastern Standard/Daylight Time:
#EPICS_TZ = "EST5EDT,M3.2.0/2,M11.1.0/2"
# US Central Standard/Daylight Time:
EPICS_TZ = "CST6CDT,M3.2.0/2,M11.1.0/2"
# US Mountain Standard/Daylight Time:
#EPICS_TZ = "MST7MDT,M3.2.0/2,M11.1.0/2"
# US Pacific Standard/Daylight Time:
#EPICS_TZ = "PST8PDT,M3.2.0/2,M11.1.0/2"
# US Hawaiian Standard Time, no DST:
#EPICS_TZ = "HST10"
# Time service:
# EPICS_TIMEZONE
# Local timezone info for vxWorks and RTEMS. The format is
# <name>::<minutesWest>:<startDST>:<endDST>
# where <name> is only used by strftime() for %Z conversions,
# and <startDST> and <endDST> are mmddhh - that is month,day,hour
# e.g. for ANL in 2018: EPICS_TIMEZONE=CUS::360:031102:110402
# The future dates below assume the rules don't get changed;
# see http://www.timeanddate.com/time/dst/2018.html to check.
#
# DST for 2019 US: Mar 10 - Nov 03
# EU: Mar 31 - Oct 27
EPICS_TIMEZONE = CUS::360:031002:110302
#EPICS_TIMEZONE = MET::-60:033102:102703
#
# DST for 2020 US: Mar 08 - Nov 01
# EU: Mar 29 - Oct 25
#EPICS_TIMEZONE = CUS::360:030802:110102
#EPICS_TIMEZONE = MET::-60:032902:102503
#
# DST for 2021 US: Mar 14 - Nov 07
# EU: Mar 28 - Oct 31
#EPICS_TIMEZONE = CUS::360:031402:110702
#EPICS_TIMEZONE = MET::-60:032802:103103
#
# DST for 2022 US: Mar 13 - Nov 06
# EU: Mar 27 - Oct 30
#EPICS_TIMEZONE = CUS::360:031302:110602
#EPICS_TIMEZONE = MET::-60:032702:103003
#
# DST for 2023 US: Mar 13 - Nov 06
# EU: Mar 27 - Oct 30
#EPICS_TIMEZONE = CUS::360:031202:110502
#EPICS_TIMEZONE = MET::-60:032602:102903
# EPICS_TS_NTP_INET
# NTP time server ip address for VxWorks and RTEMS.

View File

@@ -20,14 +20,5 @@ CONFIGS += $(subst ../,,$(wildcard ../os/CONFIG*))
CONFIGS += $(subst ../,,$(wildcard ../RELEASE*))
CONFIGS += $(subst ../,,$(wildcard ../RULES*))
CFG += CONFIG_LIBCOM_MODULE
CFG += CONFIG_LIBCOM_VERSION
CFG += CONFIG_CA_MODULE
CFG += CONFIG_CA_VERSION
CFG += CONFIG_DATABASE_MODULE
CFG += CONFIG_DATABASE_VERSION
include $(TOP)/configure/RULES

View File

@@ -161,13 +161,13 @@ actionArchTargets = $(foreach action, $(ACTIONS), \
$(foreach arch, $(BUILD_ARCHS), $(action)$(DIVIDER)$(arch)))
cleanArchTargets = $(foreach arch, $(BUILD_ARCHS), clean$(DIVIDER)$(arch))
include $(CONFIG)/CONFIG_APP_INCLUDE
-include $(TOP)/configure/CONFIG_APP_INCLUDE
all: install
install: buildInstall
buildInstall: build
buildInstall : build
rebuild: clean install
@@ -196,21 +196,21 @@ endif
#---------------------------------------------------------------
# build dependancies, clean rule
inc: $(COMMON_INC) $(INSTALL_INC)
inc : $(COMMON_INC) $(INSTALL_INC)
build: $(COMMON_DBDS) $(COMMON_DBS) $(COMMON_DBDCATS) \
build : $(COMMON_DBDS) $(COMMON_DBS) $(COMMON_DBDCATS) \
$(INSTALL_DBDS) $(INSTALL_DBS) \
$(DBDDEPENDS_FILES) $(TARGETS) \
$(INSTALL_DB_INSTALLS) $(INSTALL_DBD_INSTALLS)
clean: db_clean
db_clean:
db_clean :
@$(RM) $(COMMONS) $(DBDDEPENDS_FILES)
@$(RM) *_registerRecordDeviceDriver.cpp
@$(RM) $(TARGETS)
.PHONY: db_clean
.PHONY : db_clean
realclean: clean
@@ -389,7 +389,7 @@ $(COMMON_DIR)/%.dbd: ../%Include.dbd
# Make DBDCAT file x depend on x_DBD source files
define DBDCAT_template
$$(COMMON_DIR)/$(1).dbd: ../Makefile $$(foreach file, $$($(1)_DBD),$$(DBDCAT_SOURCE) )
$$(COMMON_DIR)/$(1).dbd : ../Makefile $$(foreach file, $$($(1)_DBD),$$(DBDCAT_SOURCE) )
endef
$(foreach name,$(subst .dbd,,$(DBDCAT)), $(eval $(call DBDCAT_template,$(name))))
@@ -418,7 +418,7 @@ $(INSTALL_DBD)/%: ../%
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
define DBD_INSTALLS_template
$$(INSTALL_DBD)/$$(notdir $(1)): $(1)
$$(INSTALL_DBD)/$$(notdir $(1)) : $(1)
$(ECHO) "Installing $$@"
@$$(INSTALL) -d -m $$(INSTALL_PERMISSIONS) $$^ $$(INSTALL_DBD)
endef
@@ -436,7 +436,7 @@ $(COMMON_DIR)/%.html: %.dbd.pod
$(COMMON_DIR)/%.html: %.pod
@$(RM) $(notdir $@)
$(PODTOHTML) -s -s -o $(notdir $@) $<
$(PODTOHTML) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
$(COMMON_DIR)/%.html: %.pm
@@ -460,7 +460,7 @@ $(COMMON_DIR)/%.html: ../%.pl
#---------------------------------------------------------------
# DB files
$(COMMON_DIR)/%.db: $(COMMON_DIR)/%.edf
$(COMMON_DIR)/%.db: $(COMMON_DIR)/%.edf
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $*.VAR $<
@$(REPLACEVAR) < $*.VAR > $@
@$(RM) $*.VAR
@@ -514,7 +514,7 @@ $(INSTALL_DB)/%.db: $(COMMON_DIR)/%.db
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
define DB_INSTALLS_template
$$(INSTALL_DB)/$$(notdir $(1)): $(1)
$$(INSTALL_DB)/$$(notdir $(1)) : $(1)
$(ECHO) "Installing $$@"
@$$(INSTALL) -d -m $$(INSTALL_PERMISSIONS) $$^ $$(INSTALL_DB)
endef
@@ -539,3 +539,4 @@ $(foreach file, $(DB_INSTALLS), $(eval $(call DB_INSTALLS_template, $(file))))
$(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ $< $(basename $@) $(IOCS_APPL_TOP)
.PRECIOUS: %_registerRecordDeviceDriver.cpp

View File

@@ -75,7 +75,7 @@ HTMLS_DIR ?= .
# First target
all: install
ifeq ($(EPICS_HOST_ARCH),$(T_A))
ifeq ($(EPICS_HOST_ARCH),$T_A)
host: install
else
# Do nothing
@@ -125,17 +125,17 @@ PRODTARGETS += $(PRODNAME) $(MUNCHNAME) $(CTDT_SRCS) $(CTDT_OBJS) $(NMS)
TESTPRODTARGETS += $(TESTPRODNAME) $(TESTMUNCHNAME)
#---------------------------------------------------------------
# Test result files
# Test specifications and test result files
#
ifneq (,$(strip $(TESTS)))
TARGETS += testspec
endif
# Enable testing if this host can run tests for the current target
ifneq (,$(filter $(T_A), $(EPICS_HOST_ARCH) $(CROSS_COMPILER_RUNTEST_ARCHS)))
# Enable testing if this host can run tests on the current target
ifneq (,$(findstring $(T_A),$(EPICS_HOST_ARCH) $(CROSS_COMPILER_RUNTEST_ARCHS)))
RUNTESTS_ENABLED = YES
TESTSCRIPTS.t = $(filter %.t, $(TESTSCRIPTS))
TAPFILES.t += $(TESTSCRIPTS.t:.t=.tap)
JUNITFILES.t += $(TESTSCRIPTS.t:.t=.xml)
TAPFILES += $(TAPFILES.t)
JUNITFILES += $(JUNITFILES.t)
TAPFILES += $(TESTSCRIPTS:.t=.tap)
JUNITFILES += $(TAPFILES:.tap=.xml)
endif
#---------------------------------------------------------------
@@ -164,13 +164,14 @@ build: inc
build: $(OBJSNAME) $(LIBTARGETS) $(PRODTARGETS) $(TESTPRODTARGETS) \
$(TARGETS) $(TESTSCRIPTS) $(INSTALL_LIB_INSTALLS)
inc: $(COMMON_INC) $(INSTALL_INC) $(INSTALL_CONFIGS)
inc : $(COMMON_INC) $(INSTALL_INC) $(INSTALL_CONFIGS)
buildInstall: \
buildInstall : \
$(INSTALL_SCRIPTS) $(INSTALL_PROD) $(INSTALL_MUNCHS) \
$(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX) \
$(INSTALL_HTMLS) $(INSTALL_DOCS) \
$(INSTALL_OBJS) \
$(INSTALL_DOCS) \
$(INSTALL_HTMLS) \
$(INSTALL_TEMPLATE) \
$(INSTALL_BIN_INSTALLS)
@@ -190,9 +191,9 @@ ifdef RES
@$(RM) *$(RES)
endif
# Sort directories to remove duplicates & make parents first
$(sort $(DIRECTORY_TARGETS)):
$(MKDIR) $@
# Sort mkdir targets to remove duplicates & make parents first
$(DIRECTORY_TARGETS):
$(MKDIR) $(sort $@)
# Install LIB_INSTALLS libraries before linking executables
$(TESTPRODNAME) $(PRODNAME): | $(INSTALL_LIB_INSTALLS)
@@ -206,19 +207,12 @@ endif
checkRelease:
+$(CONVERTRELEASE) checkRelease
warnRelease:
$(CONVERTRELEASE) checkRelease
-$(CONVERTRELEASE) checkRelease
noCheckRelease:
ifeq ($(EPICS_HOST_ARCH),$(T_A))
$(info Warning: RELEASE file consistency checks have been disabled)
endif
# $(FINAL_DIR) signals eventual install locations to makeRPath script
$(TESTPRODNAME): FINAL_DIR=.
$(PRODNAME): FINAL_DIR=$(INSTALL_BIN)
$(TESTSHRLIBNAME): FINAL_DIR=.
$(SHRLIBNAME): FINAL_DIR=$(INSTALL_SHRLIB)
$(LOADABLE_SHRLIBNAME): FINAL_DIR=$(INSTALL_SHRLIB)
#---------------------------------------------------------------
# The order of the following rules is
# VERY IMPORTANT !!!!
@@ -230,7 +224,7 @@ $(TESTPRODNAME) $(PRODNAME): %$(EXE):
$(DEBUGCMD) $(LINK.cpp)
$(MT_EXE_COMMAND)
%_ctdt$(OBJ): %_ctdt.c
%_ctdt$(OBJ) : %_ctdt.c
@$(RM) $@
$(COMPILE.ctdt) $<
@@ -248,9 +242,9 @@ $(TESTPRODNAME) $(PRODNAME): %$(EXE):
# Cancel GNUMake's built-in rules, which don't have our _INC
# dependencies so could get used in some circumstances (gdd)
%.o: %.c
%.o: %.cc
%.o: %.cpp
%.o : %.c
%.o : %.cc
%.o : %.cpp
# Include files are order-only prerequisites for compilation:
%$(OBJ): %.c | $(COMMON_INC) $(INSTALL_INC)
@@ -284,7 +278,7 @@ YACCOPT ?= $($*_YACCOPT)
# must be a separate rule since when not using '-d' the
# prefix for .h will be different then .c
%.h: %.c %.y
%.h : %.c %.y
%.c: %.l
@$(RM) $@
@@ -367,22 +361,23 @@ $(MODNAME): %$(MODEXT): %$(EXE)
#---------------------------------------------------------------
# Automated testing
runtests: run-tap-tests
run-tap-tests: $(TESTSCRIPTS.t)
ifneq ($(TESTSCRIPTS.t),)
runtests: $(TESTSCRIPTS)
ifdef RUNTESTS_ENABLED
$(PROVE) --failures --color $^ || $(PROVE_FAILURE)
endif
-$(PERL) -MTest::Harness -e 'runtests @ARGV if @ARGV;' $^
endif
tapfiles: $(TAPFILES)
junitfiles: $(JUNITFILES)
testspec: $(TESTSCRIPTS)
@$(RM) $@
@echo OS-class: $(OS_CLASS) > $@
@echo Target-arch: $(T_A) >> $@
$(if $^, @echo Tests: $^ >> $@)
$(if $(TESTFILES), @echo Files: $(TESTFILES) >> $@)
$(if $(TESTSPEC_$(OS_CLASS)), @echo "Harness: $(TESTSPEC_$(OS_CLASS))" >> $@)
test-results: tap-results
tap-results: $(TAPFILES)
ifneq ($(strip $(TAPFILES)),)
test-results: tapfiles
ifneq ($(TAPFILES),)
ifdef RUNTESTS_ENABLED
$(PROVE.tap) --failures --color $^ || $(PROVE_FAILURE)
prove --failures --ext .tap --exec "$(CAT)" --color $(TAPFILES)
endif
CURRENT_TAPFILES := $(wildcard $(TAPFILES))
@@ -397,13 +392,16 @@ ifneq ($(CURRENT_JUNITFILES),)
$(RM) $(CURRENT_JUNITFILES)
endif
tapfiles: $(TESTSCRIPTS) $(TAPFILES)
junitfiles: $(JUNITFILES)
# A .tap file is the output from running the associated test script
$(TAPFILES.t): %.tap: %.t
%.tap: %.t
ifdef RUNTESTS_ENABLED
$(PERL) $< -tap > $@
-$(PERL) $< -tap > $@
endif
$(JUNITFILES.t): %.xml: %.tap
%.xml: %.tap
$(TAPTOJUNIT) --puretap --output $@ --input $< $*
# If there's a perl test script (.plt) available, use it
@@ -418,23 +416,6 @@ $(JUNITFILES.t): %.xml: %.tap
$(PERL) $(TOOLS)/makeTestfile.pl $(T_A) $(EPICS_HOST_ARCH) $@ $<
#---------------------------------------------------------------
# Generate $(API_HEADER) files on request (%API.h)
ifdef API_HEADER
# Install them
INC += $(API_HEADER)
# Ensure we generate them early enough
INSTALL_API_HEADERS = $(addprefix $(INSTALL_INCLUDE)/,$(API_HEADER))
$(filter-out $(INSTALL_API_HEADERS), $(INSTALL_INC)) $(HDEPENDS_FILES): \
| $(INSTALL_API_HEADERS)
# How to make one
$(COMMON_DIR)/%API.h: $(TOOLS)/makeAPIheader.pl
@$(RM) $@
$(PERL) $(TOOLS)/makeAPIheader.pl -o $@ $(@:$(COMMON_DIR)/%API.h=%)
endif
# Generate header with version number from VCS
ifneq ($(GENVERSION),)
@@ -446,14 +427,14 @@ endif
# Install rules for BIN_INSTALLS and LIB_INSTALLS
define BIN_INSTALLS_template
$$(INSTALL_BIN)/$$(notdir $(1)): $(1)
$$(INSTALL_BIN)/$$(notdir $(1)) : $(1)
$(ECHO) "Installing $$(<F)"
@$$(INSTALL) -d -m $$(BIN_PERMISSIONS) $$^ $$(INSTALL_BIN)
endef
$(foreach file, $(BIN_INSTALLS), $(eval $(call BIN_INSTALLS_template, $(file))))
define LIB_INSTALLS_template
$$(INSTALL_LIB)/$$(notdir $(1)): $(1)
$$(INSTALL_LIB)/$$(notdir $(1)) : $(1)
$(ECHO) "Installing $$(<F)"
@$$(INSTALL) -d -m $$(LIB_PERMISSIONS) $$^ $$(INSTALL_LIB)
endef
@@ -527,19 +508,19 @@ $(INSTALL_CONFIG)/%: ../%
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
endif
$(INSTALL_INCLUDE)/%: $(COMMON_DIR)/%
$(INSTALL_INCLUDE)/% : $(COMMON_DIR)/%
$(ECHO) "Installing generated generic include file $@"
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
$(INSTALL_INCLUDE)/%: %
$(INSTALL_INCLUDE)/% : %
$(ECHO) "Installing generic include file $@"
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
$(INSTALL_INCLUDE)/os/$(OS_CLASS)/%: %
$(INSTALL_INCLUDE)/os/$(OS_CLASS)/% : %
$(ECHO) "Installing OS dependent include file $@"
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
$(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS)/%: %
$(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS)/% : %
$(ECHO) "Installing compiler dependent include file $@"
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
@@ -577,8 +558,8 @@ include $(CONFIG)/RULES_EXPAND
.PRECIOUS: $(COMMON_INC)
.PHONY: all host inc build install clean rebuild buildInstall build_clean
.PHONY: runtests run-tap-tests tapfiles junitfiles test-results tap-results
.PHONY: clean-tests checkRelease warnRelease noCheckRelease FORCE
.PHONY: runtests tapfiles clean-tests test-results junitfiles
.PHONY: checkRelease warnRelease noCheckRelease FORCE
include $(CONFIG)/RULES_COMMON

View File

@@ -4,7 +4,7 @@
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE is distributed subject to a Software License Agreement found
# in the file LICENSE that is included with this distribution.
# in the file LICENSE that is included with this distribution.
#*************************************************************************
ARCHS += $(BUILD_ARCHS)
@@ -54,7 +54,7 @@ $(foreach dir, $(DIRS), \
define DEP_template2
$(1)$$(DIVIDER)$(2) : $$(foreach ddir, $$($(1)_DEPEND_DIRS), \
$$(addsuffix $$(DIVIDER)$(2),$$(ddir))) | before-$(2)
$$(addsuffix $$(DIVIDER)$(2),$$(ddir)))
endef
$(foreach action, $(ACTIONS), \
$(foreach dir, $(DIRS), \
@@ -79,24 +79,18 @@ $(foreach arch, $(ARCHS), \
dirPart = $(join $(dir $@), $(word 1, $(subst $(DIVIDER), ,$(notdir $@))))
actionArchPart = $(join $(word 2, $(subst $(DIVIDER), ,$(notdir $@))), \
$(addprefix $(DIVIDER),$(word 3, $(subst $(DIVIDER), ,$(notdir $@)))))
$(DIRS) $(dirActionTargets) $(dirArchTargets) $(dirActionArchTargets):
$(addprefix $(DIVIDER),$(word 3, $(subst $(DIVIDER), ,$(notdir $@)))))
$(DIRS) $(dirActionTargets) $(dirArchTargets) $(dirActionArchTargets) :
$(MAKE) -C $(dirPart) $(actionArchPart)
# before-action rules are run once prior to recursing through the
# list of subdirectories and running the action rule in each one.
# See DEP_template2 above for how that rule ordering is achieved.
beforeActions = $(addprefix before-,$(ACTIONS))
$(beforeActions):
$(ARCHS) $(ACTIONS) $(actionArchTargets) :%: \
$(foreach dir, $(DIRS), $(dir)$(DIVIDER)%)
.PHONY : $(DIRS) all host rebuild
.PHONY : $(ARCHS) $(ACTIONS) $(beforeActions)
.PHONY : $(dirActionTargets) $(dirArchTargets)
.PHONY : $(dirActionArchTargets)
.PHONY : $(actionArchTargets)
.PHONY: $(DIRS) all host rebuild
.PHONY: $(ARCHS) $(ACTIONS)
.PHONY: $(dirActionTargets) $(dirArchTargets)
.PHONY: $(dirActionArchTargets)
.PHONY: $(actionArchTargets)
include $(CONFIG)/RULES_COMMON

View File

@@ -12,72 +12,28 @@
vpath %@ $(USR_VPATH) $(ALL_SRC_DIRS)
#---------------------------------------------------------------
# Template variable expansion
# This feature allows you to instantiate simple template files at
# build-time, replacing macros spelled @NAME@ with values provided
# by the Makefile. The template filename must end with an @ sign,
# which is removed to create the expanded filename.
# Makefiles can use this variable expansion as follows:
#
# 1. Add the template filename (with the trailing @ sign) to either
# the EXPAND or EXPAND_COMMON variable, for example:
# EXPAND_COMMON += myVersion.h@
# Use EXPAND_COMMON for templates that don't depend on the
# target architecture (these will be generated in O.Common).
# 2. There are 2 ways of defining template macros. The simplest
# is to add a NAME=VALUE string to the EXPAND_VARS variable for
# the desired macros, e.g.:
# EXPAND_VARS += MY_MAJOR_VERSION=$(MY_MAJOR_VERSION)
# EXPAND_VARS += MY_MINOR_VERSION=$(MY_MINOR_VERSION)
# These values may not contain spaces, even if inside quotes.
# 3. A better way in the above case is to add the names of any
# Makefile variables that should be provided as macros to the
# variable EXPAND_ME, like this:
# EXPAND_ME += MY_MAJOR_VERSION
# EXPAND_ME += MY_MINOR_VERSION
# The values of these variables may contain spaces.
# 4. The macros TOP and ARCH will be set by the build system.
# TOP is the value of $(INSTALL_LOCATION) for this module.
# ARCH is the target architecture $(T_A), but is only set
# while expanding files in EXPAND
# 5. Add the expanded filename to some other variable that will
# cause it to be created and used, such as INC here:
# INC += myVersion.h
# Variable expansion
# Default settings
EXPAND_TOOL ?= $(PERL) $(TOOLS)/expandVars.pl
EXPANDARCH = -a $(T_A)
EXPANDFLAGS += -t $(INSTALL_LOCATION)
EXPANDFLAGS += $(addprefix -D ,$(EXPAND_VARS) $($@_EXPAND_VARS))
EXPANDFLAGS += $(foreach var, $(EXPAND_ME) $($@_EXPAND_ME), \
-D$(var)="$(strip $($(var)))")
EXPANDFLAGS += -t $(INSTALL_LOCATION) -a $(T_A)
EXPANDFLAGS += $(addprefix -D ,$(EXPAND_VARS))
# The names of files to be expanded must end with '@'
EXPANDED = $(EXPAND:%@=%)
EXPANDED_COM = $(EXPAND_COMMON:%@=%)
EXPANDED_COMMON = $(EXPANDED_COM:%=$(COMMON_DIR)/%)
$(EXPANDED): %: %@
$(ECHO) "Expanding $< to $@"
@$(RM) $@
$(EXPAND_TOOL) $(EXPANDARCH) $(EXPANDFLAGS) $($@_EXPANDFLAGS) $< $@
$(EXPANDED_COM): %: %@
$(ECHO) "Expanding $< to $(COMMON_DIR)/$@"
@$(RM) $@
$(EXPAND_TOOL) $(EXPANDFLAGS) $($@_EXPANDFLAGS) $< $@
$(EXPANDED_COMMON): $(COMMON_DIR)/%: %
@$(MV) $< $@
@$(EXPAND_TOOL) $(EXPANDFLAGS) $($@_EXPANDFLAGS) $< $@
clean: expand_clean
expand_clean:
@$(RM) $(EXPANDED) $(EXPANDED_COMMON)
@$(RM) $(EXPANDED)
.PRECIOUS: $(EXPANDED) $(EXPANDED_COMMON)
.PRECIOUS: $(EXPANDED)
.PHONY: expand_clean
#---------------------------------------------------------------
@@ -114,3 +70,4 @@ $1$(DEP):
endef
$(foreach asy, $(sort $(COMMON_ASSEMBLIES) $(ASSEMBLIES)), \
$(eval $(call ASSEMBLY_DEP_template,$(strip $(asy)))))

View File

@@ -23,8 +23,7 @@
# -include $(TOP)/../CONFIG_SITE.local
# Add checked-out submodules to DIRS
LIVE_SUBMODULES = $(subst /Makefile,,$(wildcard $(addsuffix /Makefile, $(SUBMODULES))))
DIRS += $(LIVE_SUBMODULES)
DIRS += $(subst /Makefile,,$(wildcard $(addsuffix /Makefile, $(SUBMODULES))))
include $(CONFIG)/RULES_DIRS
@@ -46,15 +45,3 @@ realclean:
$(RM) $(wildcard RELEASE.*.local)
.PHONY: RELEASE.host realclean
# Append all our live submodule failure files
FAILURE_FILES = $(addsuffix /$(TEST_FAILURE_FILENAME), $(LIVE_SUBMODULES))
define combine_failure_files
@$(TOUCH) $(FAILURE_FILES)
@$(CAT) $(FAILURE_FILES) >> $(TEST_FAILURE_FILE)
endef
runtests: | $(addsuffix $(DIVIDER)runtests, $(LIVE_SUBMODULES))
$(if $(FAILURE_FILES), $(combine_failure_files))
test-results: | $(addsuffix $(DIVIDER)test-results, $(LIVE_SUBMODULES))
$(if $(FAILURE_FILES), $(combine_failure_files))

View File

@@ -95,20 +95,12 @@ $(1)_DLL_DEPLIBS=$$(foreach lib, $$($(1)_DLL_LIBS), \
$$(LIB_PREFIX)$(1)$$(LIB_SUFFIX):$$($(1)_OBJSNAME) $$($(1)_RESS)
$$(LIB_PREFIX)$(1)$$(LIB_SUFFIX):$$($(1)_DEPLIBS)
ifneq ($$($(1)_API),)
$$(LIB_PREFIX)$(1)$$(LIB_SUFFIX): API_CPPFLAGS += -DBUILDING_$$($(1)_API)_API
endif
ifeq ($$(SHARED_LIBRARIES),YES)
ifdef SHRLIB_SUFFIX
$$(SHRLIB_PREFIX)$(1)$$(SHRLIB_SUFFIX):$$($(1)_OBJSNAME) $$($(1)_RESS)
$$(SHRLIB_PREFIX)$(1)$$(SHRLIB_SUFFIX):$$($(1)_DEPLIBS)
$$(SHRLIB_PREFIX)$(1)$$(SHRLIB_SUFFIX):$$($(1)_DLL_DEPLIBS)
ifneq ($$($(1)_API),)
$$(SHRLIB_PREFIX)$(1)$$(SHRLIB_SUFFIX): API_CPPFLAGS += -DBUILDING_$$($(1)_API)_API
endif
endif
endif
@@ -149,11 +141,6 @@ $(1)_DLL_DEPLIBS=$$(foreach lib, $$($(1)_DLL_LIBS),\
$$(LOADABLE_SHRLIB_PREFIX)$(1)$$(LOADABLE_SHRLIB_SUFFIX):$$($(1)_OBJSNAME) $$($(1)_RESS)
$$(LOADABLE_SHRLIB_PREFIX)$(1)$$(LOADABLE_SHRLIB_SUFFIX):$$($(1)_DEPLIBS)
$$(LOADABLE_SHRLIB_PREFIX)$(1)$$(LOADABLE_SHRLIB_SUFFIX):$$($(1)_DLL_DEPLIBS)
ifneq ($$($(1)_API),)
$$(LOADABLE_SHRLIB_PREFIX)$(1)$$(LOADABLE_SHRLIB_SUFFIX): \
API_CPPFLAGS += -DBUILDING_$$($(1)_API)_API
endif
endef
$(foreach target, $(LOADABLE_LIBRARY), \

View File

@@ -26,7 +26,8 @@ ifndef DISABLE_TOP_RULES
distclean: realclean cvsclean realuninstall
realuninstall: uninstallDirs
$(RMDIR) $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB)
$(RMDIR) $(INSTALL_LOCATION_BIN)
$(RMDIR) $(INSTALL_LOCATION_LIB)
UNINSTALL_DIRS += $(INSTALL_DB) $(INSTALL_DBD) $(INSTALL_DOC) $(INSTALL_HTML)
UNINSTALL_DIRS += $(INSTALL_INCLUDE) $(INSTALL_TEMPLATES) $(DIRECTORY_TARGETS)
@@ -36,37 +37,36 @@ endif
uninstallDirs:
$(RMDIR) $(UNINSTALL_DIRS)
# Remove the bin and lib directories if they have no sub-directories
#
EMPTY_INSTALL_DIRS = \
$(if $(wildcard $(INSTALL_LOCATION_BIN)/*),,$(INSTALL_LOCATION_BIN)) \
$(if $(wildcard $(INSTALL_LOCATION_LIB)/*),,$(INSTALL_LOCATION_LIB))
uninstall: archuninstall uninstallDirs
$(RMDIR) $(EMPTY_INSTALL_DIRS)
archuninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))
archuninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS)) | cleandirs
archPart = $(word 2, $(subst $(DIVIDER), ,$@))
uninstall$(DIVIDER)%:
$(RMDIR) $(addsuffix /$(subst uninstall$(DIVIDER),,$@), \
$(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB))
$(RMDIR) $(INSTALL_LOCATION_BIN)/$(archPart)
$(RMDIR) $(INSTALL_LOCATION_LIB)/$(archPart)
runtests test-results:
@$(PERL) $(TOOLS)/testFailures.pl $(TEST_FAILURE_FILE)
# Remove the bin and lib directories if they have no sub-directories
#
cleandirs:
@$(NOP)
ifeq ($(wildcard $(INSTALL_LOCATION_BIN)/*),)
$(RMDIR) $(INSTALL_LOCATION_BIN)
endif
ifeq ($(wildcard $(INSTALL_LOCATION_LIB)/*),)
$(RMDIR) $(INSTALL_LOCATION_LIB)
endif
else
#
# Using a disabled rule aborts
#
distclean uninstall realuninstall archuninstall:
cleandirs distclean uninstall realuninstall archuninstall:
$(error Target '$@' not available in a submodule)
endif # DISABLE_TOP_RULES
before-runtests before-test-results: rm-failure-file
rm-failure-file:
@$(RM) $(TEST_FAILURE_FILE)
@$(TOUCH) $(TEST_FAILURE_FILE)
help:
@echo "Usage: gnumake [options] [target] ..."
@@ -106,7 +106,7 @@ endif
@echo "Object targets are supported by the O.<arch> level Makefile .e.g"
@echo " xxxRecord.o"
.PHONY: distclean uninstall rm-failure-file help
.PHONY: cleandirs distclean uninstall help
.PHONY: realuninstall archuninstall uninstallDirs
ifndef DISABLE_TOP_RULES

View File

@@ -11,12 +11,15 @@ ELDK=/opt/eldk-4.2
GNU_TARGET=ppc_4xxFP
GNU_DIR=$(ELDK)/usr
# This cross tool chain is installed in a somehow weired way
# Optimizer is buggy. Throws SIGTRAP in typeinfo for epics::pvAccess::ChannelArray
OPT_CXXFLAGS_YES += -fno-inline-functions
ARCH_DEP_CPPFLAGS += --sysroot=$(ELDK)/$(GNU_TARGET)
ARCH_DEP_LDFLAGS = --sysroot=$(ELDK)/$(GNU_TARGET)
# This cross tool chain is installed in a somehow weird way
# Without the following lines it does not work on RHEL7
# but it worked on SL6
ARCH_DEP_CXXFLAGS += -I $(ELDK)/$(GNU_TARGET)/usr/include/c++/4.2.2
ARCH_DEP_CXXFLAGS += -I $(ELDK)/$(GNU_TARGET)/usr/include/c++/4.2.2/powerpc-linux
ARCH_DEP_CXXFLAGS += -I $(ELDK)/$(GNU_TARGET)/usr/include/c++/4.2.2/backward
ARCH_DEP_LDFLAGS += -Wl,-rpath-link,$(ELDK)/$(GNU_TARGET)/lib
ARCH_DEP_LDFLAGS += -Wl,-rpath-link,$(ELDK)/$(GNU_TARGET)/usr/lib

View File

@@ -23,17 +23,15 @@ STATIC_LDFLAGS_YES= -Wl,-Bstatic
STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Wl,-Bdynamic
# Set runtime path for shared libraries if LINKER_USE_RPATH=YES
SHRLIBDIR_RPATH_LDFLAGS_YES = $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath,%)
SHRLIBDIR_RPATH_LDFLAGS_ORIGIN = $(shell $(MAKERPATH) -O '\$$ORIGIN' -F $(FINAL_DIR) -R $(LINKER_ORIGIN_ROOT) $(SHRLIB_DEPLIB_DIRS))
# Set runtime path for shared libraries if USE_RPATH=YES and STATIC_BUILD=NO
SHRLIBDIR_RPATH_LDFLAGS_YES_NO = $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath,%)
SHRLIBDIR_LDFLAGS += \
$(SHRLIBDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH))
$(SHRLIBDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH)_$(STATIC_BUILD))
# Set runtime path for products if LINKER_USE_RPATH=YES
PRODDIR_RPATH_LDFLAGS_YES = $(PROD_DEPLIB_DIRS:%=-Wl,-rpath,%)
PRODDIR_RPATH_LDFLAGS_ORIGIN = $(shell $(MAKERPATH) -O '\$$ORIGIN' -F $(FINAL_DIR) -R $(LINKER_ORIGIN_ROOT) $(PROD_DEPLIB_DIRS))
# Set runtime path for products if USE_RPATH=YES and STATIC_BUILD=NO
PRODDIR_RPATH_LDFLAGS_YES_NO = $(PROD_DEPLIB_DIRS:%=-Wl,-rpath,%)
PRODDIR_LDFLAGS += \
$(PRODDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH))
$(PRODDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH)_$(STATIC_BUILD))
# Link libraries controlled by COMMANDLINE_LIBRARY
# The newest Linux versions only need readline, older ones need both

View File

@@ -1,18 +0,0 @@
# National Instruments CompactRIO running LabView RT 19.5.1
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = arm
GNU_TARGET = arm-linux-gnu
SYSROOT = /opt/LabVIEW-RT-19.5.1/arm/sysroots/armv7a-vfp-neon-nilrt-linux-gnueabi
ARCH_DEP_CPPFLAGS += -march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon
ARCH_DEP_CPPFLAGS += --sysroot=$(SYSROOT)
ARCH_DEP_CPPFLAGS += -I$(SYSROOT)/usr/include/c++/4.7.2/arm-nilrt-linux-gnueabi/
ARCH_DEP_CPPFLAGS += -I$(SYSROOT)/usr/include/c++/4.7.2/
ARCH_DEP_LDFLAGS += --sysroot=$(SYSROOT)
COMMANDLINE_LIBRARY = READLINE_NCURSES

View File

@@ -30,7 +30,7 @@ ARCH_DEP_LDFLAGS += -m32
# Compiler does not define __unix __unix__ unix
# Override for -DUNIX from CONFIG.Common.UnixCommon
OP_SYS_CPPFLAGS = -D_MINGW -D__USE_MINGW_ANSI_STDIO
OP_SYS_CPPFLAGS = -D_MINGW
EXE = .exe
RES = .coff

View File

@@ -1,8 +0,0 @@
include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
PATH_FILTER = $(subst /,/,$(1))
# Silence the tr1 namespace deprecation warnings
USR_CXXFLAGS_WIN32 += -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
MSVC_DIR = /opt/wine-msvc-2017/bin/x86/

View File

@@ -1,8 +0,0 @@
include $(CONFIG)/os/CONFIG.windows-x64.windows-x64
PATH_FILTER = $(subst /,/,$(1))
# Silence the tr1 namespace deprecation warnings
USR_CXXFLAGS_WIN32 += -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
MSVC_DIR = /opt/wine-msvc-2017/bin/x64/

View File

@@ -11,7 +11,6 @@ RM = rm -f
MKDIR = mkdir -p
RMDIR = rm -rf
CAT = cat
TOUCH = touch
# Allow site overrides
-include $(CONFIG)/os/CONFIG_SITE.UnixCommon.Common

View File

@@ -21,4 +21,4 @@ LOADABLE_SHRLIB_LDFLAGS = -shared \
GNU_LDLIBS_YES =
# Link with system libraries
OP_SYS_LDLIBS = -lpsapi -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm -ldbghelp
OP_SYS_LDLIBS = -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm

View File

@@ -4,5 +4,21 @@
# Override these definitions in CONFIG_SITE.linux-x86.windows-x64-mingw
#-------------------------------------------------------
# Use the definitions from the win32-x86-mingw target
include $(CONFIG)/os/CONFIG.linux-x86.win32-x86-mingw
# Include common gnu compiler definitions
include $(CONFIG)/CONFIG.gnuCommon
# Add resource compiler
RCCMD = $(GNU_BIN)/$(CMPLR_PREFIX)windres$(CMPLR_SUFFIX) $(INCLUDES) $< $@
# Remove -fPIC flags, add out-implib
SHRLIB_CFLAGS =
SHRLIB_LDFLAGS = -shared \
-Wl,--out-implib,$(DLLSTUB_PREFIX)$*$(DLLSTUB_SUFFIX)
LOADABLE_SHRLIB_LDFLAGS = -shared \
-Wl,--out-implib,$(DLLSTUB_PREFIX)$*$(DLLSTUB_SUFFIX)
# No need to explicitly link with gcc library
GNU_LDLIBS_YES =
# Link with winsock2
OP_SYS_LDLIBS = -lws2_32

View File

@@ -32,4 +32,4 @@ LOADABLE_SHRLIB_LDFLAGS = -shared \
GNU_LDLIBS_YES =
# Link with system libraries
OP_SYS_LDLIBS = -lpsapi -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm -ldbghelp
OP_SYS_LDLIBS = -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm

View File

@@ -11,7 +11,6 @@ MKDIR = $(PERL) -MExtUtils::Command -e mkpath
RMDIR = $(PERL) -MExtUtils::Command -e rm_rf
NOP = $(PERL) -e ''
CAT = $(PERL) -MExtUtils::Command -e cat
TOUCH = $(PERL) -MExtUtils::Command -e touch
WIND_HOST_TYPE = x86-win32
OSITHREAD_USE_DEFAULT_STACK = NO

View File

@@ -14,15 +14,15 @@ OPT_WHOLE_PROGRAM = YES
#-------------------------------------------------------
WINLINK = $(MSVC_DIR)link
WINLINK = link
RCCMD = $(MSVC_DIR)rc -l 0x409 $(INCLUDES) -fo $@ $<
RCCMD = rc -l 0x409 $(INCLUDES) -fo $@ $<
ARCMD = $(MSVC_DIR)lib -nologo -verbose -out:$@ $(LIB_OPT_LDFLAGS) $(LIBRARY_LD_OBJS)
ARCMD = lib -nologo -verbose -out:$@ $(LIB_OPT_LDFLAGS) $(LIBRARY_LD_OBJS)
#
# Configure OS vendor C compiler
CC = $(MSVC_DIR)cl
CC = cl
# Override CONFIG.gnuCommon settings for cross builds.
GNU = NO
@@ -75,14 +75,14 @@ STATIC_CFLAGS_YES= -MT$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS)
STATIC_CFLAGS_NO= -MD$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS) -DEPICS_CALL_DLL
# OS vendor c preprocessor
CPP = $(MSVC_DIR)cl -nologo -C -E
CPP = cl -nologo -C -E
# Configure OS vendor C++ compiler
#
# -EHsc - generate code for exceptions
# -GR - generate code for run time type identification
#
CCC = $(MSVC_DIR)cl -EHsc -GR
CCC = cl -EHsc -GR
# Other compiler flags, used for CPP, C and C++
#
@@ -135,22 +135,19 @@ OBJ_CXXFLAG = -Fo
STATIC_CXXFLAGS_YES= -MT$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS)
STATIC_CXXFLAGS_NO= -MD$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS) -DEPICS_CALL_DLL
STATIC_LDLIBS_YES=ws2_32.lib advapi32.lib user32.lib kernel32.lib winmm.lib dbghelp.lib
STATIC_LDLIBS_YES=ws2_32.lib advapi32.lib user32.lib kernel32.lib winmm.lib
STATIC_LDLIBS_NO=
STATIC_LDFLAGS=
RANLIB=
#
# option needed for parallel builds with Visual Studio 2013 onward
# VS2012 and above have VisualStudioVersion, so just need to exclude 2012 (11.0)
# -FS Force Synchronous PDB Writes
# option needed for parallel builds with Visual Studio 2015 onward
#
# -FS Force Synchronous PDB Writes
ifneq ($(VisualStudioVersion),)
ifneq ($(VisualStudioVersion),11.0)
OPT_CXXFLAGS_NO += -FS
OPT_CFLAGS_NO += -FS
endif
endif
#

View File

@@ -1,35 +1,39 @@
# CONFIG_SITE.Common.linux-arm
#
# Site-specific settings for the linux-arm target
# Site Specific definitions for all linux-arm targets
#-------------------------------------------------------
# NOTE: In most cases if SHARED_LIBRARIES is set to YES the
# NOTE for SHARED_LIBRARIES: In most cases if this is set to YES the
# shared libraries will be found automatically. However if the .so
# files are installed at a different path to their compile-time path
# then in order to be found at runtime do one of these:
# a) LD_LIBRARY_PATH must include the full absolute pathname to
# $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) when invoking base
# executables.
# b) Add the runtime path to SHRLIB_DEPLIB_DIRS and PROD_DEPLIB_DIRS, which
# b) Add the runtime path to SHRLIB_DEPLIB_DIRS and PROD_DEPLIB_DIRS, which
# will add the named directory to the list contained in the executables.
# c) Add the runtime path to /etc/ld.so.conf and run ldconfig
# to inform the system of the shared library location.
# Depending on your version of Linux you'll want one of the following
# lines to enable command-line editing and history in iocsh. If you're
# not sure which, start with the top one and work downwards until the
# build doesn't fail to link the readline library. If none of them work,
# comment them all out to build without readline support.
# Use GNU Readline if the header file is installed
COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
$(firstword $(READLINE_DIR) $(GNU_DIR))/include/readline/readline.h), \
READLINE, EPICS))
# No other libraries needed (recent Fedora, Ubuntu etc.):
#COMMANDLINE_LIBRARY = READLINE
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
# from the top of the Base tree after changing this setting.
# Needs -lncurses:
# Needs -lncurses (RHEL 5 etc.):
#COMMANDLINE_LIBRARY = READLINE_NCURSES
# Needs -lcurses:
# Needs -lcurses (older versions)
#COMMANDLINE_LIBRARY = READLINE_CURSES
# Readline is broken or you don't want use it:
#COMMANDLINE_LIBRARY = EPICS
# It makes sense to include debugging symbols even in optimized builds
# in case you want to attach gdb to the process or examine a core-dump.
# This does cost disk space, but not memory as debug symbols are not
# loaded into RAM when the binary is loaded.
OPT_CFLAGS_YES += -g
OPT_CXXFLAGS_YES += -g

View File

@@ -1,8 +1,9 @@
# CONFIG_SITE.Common.linux-cris
#
# Site-specific settings for the linux-cris target
# Site Specific definitions for linux-cris target
# Only the local epics system manager should modify this file
# NOTE: In most cases if SHARED_LIBRARIES is set to YES the
# NOTE for SHARED_LIBRARIES: In most cases if this is set to YES the
# shared libraries will be found automatically. However if the .so
# files are installed at a different path to their compile-time path
# then in order to be found at runtime do one of these:
@@ -14,21 +15,21 @@
# c) Add the runtime path to /etc/ld.so.conf and run ldconfig
# to inform the system of the shared library location.
# Depending on your version of Linux you may want one of the following
# lines to enable command-line editing and history in iocsh. If you're
# not sure which, start with the top one and work downwards until the
# build doesn't fail to link the readline library. If none of them work,
# comment them all out to build without readline support.
# Use GNU Readline if the header file is installed
COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
$(GNU_DIR)/include/readline/readline.h), READLINE, EPICS))
# No other libraries needed (recent Fedora, Ubuntu etc.):
#COMMANDLINE_LIBRARY = READLINE
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
# from the top of the Base tree after changing this setting.
# Needs -lncurses:
# Needs -lncurses (RHEL 5 etc.):
#COMMANDLINE_LIBRARY = READLINE_NCURSES
# Needs -lcurses:
# Needs -lcurses (older versions)
#COMMANDLINE_LIBRARY = READLINE_CURSES
# Readline is broken or you don't want use it:
#COMMANDLINE_LIBRARY = EPICS
OP_SYS_CFLAGS += -g

View File

@@ -1,6 +1,7 @@
# CONFIG_SITE.Common.linux-microblaze
#
# Site-specific settings for the linux-microblaze target
# Site specific definitions for linux-microblaze target builds.
#-------------------------------------------------------
# The gnu tools for cross compiling for MicroBlaze (little endian)
# on Linux can be downloaded from the Xilinx git server:
@@ -11,21 +12,3 @@
GNU_DIR = /usr/local/vw/microblaze-2.0/microblazeel-unknown-linux-gnu
# Use GNU Readline if the header file is installed
COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
$(GNU_DIR)/include/readline/readline.h), READLINE, EPICS))
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
# from the top of the Base tree after changing this setting.
# Needs -lncurses:
#COMMANDLINE_LIBRARY = READLINE_NCURSES
# Needs -lcurses:
#COMMANDLINE_LIBRARY = READLINE_CURSES
# Readline is broken or you don't want use it:
#COMMANDLINE_LIBRARY = EPICS

View File

@@ -1,8 +1,9 @@
# CONFIG_SITE.Common.linux-x86
#
# Site-specific settings for the linux-x86 target
# Site Specific definitions for linux-x86 target
# Only the local epics system manager should modify this file
# NOTE: In most cases if SHARED_LIBRARIES is set to YES the
# NOTE for SHARED_LIBRARIES: In most cases if this is set to YES the
# shared libraries will be found automatically. However if the .so
# files are installed at a different path to their compile-time path
# then in order to be found at runtime do one of these:
@@ -14,15 +15,14 @@
# c) Add the runtime path to /etc/ld.so.conf and run ldconfig
# to inform the system of the shared library location.
# Depending on your version of Linux you'll want one of the following
# lines to enable command-line editing and history in iocsh. If you're
# not sure which, start with the top one and work downwards until the
# build doesn't fail to link the readline library. If none of them work,
# comment them all out to build without readline support.
# Use GNU Readline if the header file is installed
COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
$(GNU_DIR)/include/readline/readline.h), READLINE, EPICS))
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
# from the top of the Base tree after changing this setting.
# No other libraries needed (recent Fedora, Ubuntu etc.):
COMMANDLINE_LIBRARY = READLINE
# Needs -lncurses (RHEL 5 etc.):
#COMMANDLINE_LIBRARY = READLINE_NCURSES
@@ -30,9 +30,6 @@ COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
# Needs -lcurses (older versions)
#COMMANDLINE_LIBRARY = READLINE_CURSES
# Readline is broken or you don't want use it:
#COMMANDLINE_LIBRARY = EPICS
# Permit access to 64-bit file-systems
OP_SYS_CFLAGS += -D_FILE_OFFSET_BITS=64
@@ -46,6 +43,14 @@ OP_SYS_CFLAGS += -D_FILE_OFFSET_BITS=64
#CCC = clang++
# It makes sense to include debugging symbols even in optimized builds
# in case you want to attach gdb to the process or examine a core-dump.
# This does cost disk space, but not memory as debug symbols are not
# loaded into RAM when the binary is loaded.
OPT_CFLAGS_YES += -g
OPT_CXXFLAGS_YES += -g
# Tune GNU compiler output for a specific 32-bit cpu-type
# (e.g. generic, native, i386, i686, pentium2/3/4, prescott, k6, athlon etc.)
GNU_TUNE_CFLAGS = -mtune=generic

View File

@@ -1,8 +1,9 @@
# CONFIG_SITE.Common.linux-x86_64
#
# Site-specific settings for the linux-x86_64 target
# Site Specific definitions for linux-x86_64 target
# Only the local epics system manager should modify this file
# NOTE: In most cases if SHARED_LIBRARIES is set to YES the
# NOTE for SHARED_LIBRARIES: In most cases if this is set to YES the
# shared libraries will be found automatically. However if the .so
# files are installed at a different path to their compile-time path
# then in order to be found at runtime do one of these:
@@ -14,15 +15,14 @@
# c) Add the runtime path to /etc/ld.so.conf and run ldconfig
# to inform the system of the shared library location.
# Depending on your version of Linux you'll want one of the following
# lines to enable command-line editing and history in iocsh. If you're
# not sure which, start with the top one and work downwards until the
# build doesn't fail to link the readline library. If none of them work,
# comment them all out to build without readline support.
# Use GNU Readline if the header file is installed
COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
$(GNU_DIR)/include/readline/readline.h), READLINE, EPICS))
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
# from the top of the Base tree after changing this setting.
# No other libraries needed (recent Fedora, Ubuntu etc.):
COMMANDLINE_LIBRARY = READLINE
# Needs -lncurses (RHEL 5 etc.):
#COMMANDLINE_LIBRARY = READLINE_NCURSES
@@ -30,9 +30,6 @@ COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
# Needs -lcurses (older versions)
#COMMANDLINE_LIBRARY = READLINE_CURSES
# Readline is broken or you don't want use it:
#COMMANDLINE_LIBRARY = EPICS
# Uncomment the followings lines to build with CLANG instead of GCC.
#
@@ -42,6 +39,14 @@ COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
#CCC = clang++
# It makes sense to include debugging symbols even in optimized builds
# in case you want to attach gdb to the process or examine a core-dump.
# This does cost disk space, but not memory as debug symbols are not
# loaded into RAM when the binary is loaded.
OPT_CFLAGS_YES += -g
OPT_CXXFLAGS_YES += -g
# Tune GNU compiler output for a specific 64-bit cpu-type
# (e.g. generic, native, core2, nocona, k8, opteron, athlon64, barcelona etc.)
GNU_TUNE_CFLAGS = -mtune=generic

View File

@@ -1,23 +1,4 @@
# CONFIG_SITE.Common.linux-xscale_be
#
# Site-specific settings for the linux-xscale_be target
# Use GNU Readline if the header file is installed
COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
$(firstword $(READLINE_DIR) $(GNU_DIR))/include/readline/readline.h), \
READLINE, EPICS))
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
# from the top of the Base tree after changing this setting.
# Needs -lncurses:
#COMMANDLINE_LIBRARY = READLINE_NCURSES
# Needs -lcurses:
#COMMANDLINE_LIBRARY = READLINE_CURSES
# Readline is broken or you don't want use it:
#COMMANDLINE_LIBRARY = EPICS
# Site specific definitions for all linux-xscale_be target builds.
#-------------------------------------------------------

View File

@@ -1,14 +1,2 @@
# CONFIG_SITE.Common.linuxCommon
#
# Site-specific settings for all linux targets
# It makes sense to include debugging symbols even in optimized builds
# in case you want to attach gdb to the process or examine a core-dump.
# This does cost disk space, but not memory as debug symbols are not
# loaded into RAM when the binary is loaded.
OPT_CFLAGS_YES += -g
OPT_CXXFLAGS_YES += -g
COMMANDLINE_LIBRARY = READLINE
CODE_CPPFLAGS += -fno-strict-aliasing

View File

@@ -2,20 +2,16 @@ include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.Common
# Build 32 bit version as a cross architecture
#CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86
#CROSS_COMPILER_RUNTEST_ARCHS += RHEL7-x86
# Improved error checking with clang
CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64-clang
CROSS_COMPILER_RUNTEST_ARCHS += RHEL7-x86_64-clang
# Build for old SL6 64 bit
CROSS_COMPILER_TARGET_ARCHS += SL6-x86_64
CROSS_COMPILER_RUNTEST_ARCHS += SL6-x86_64
# Build for old SL6 32 bit
CROSS_COMPILER_TARGET_ARCHS += SL6-x86
# WINE MSVC
CROSS_COMPILER_TARGET_ARCHS += win32-x86 windows-x64
# NI Linux Real-Time 7.x
# requires RPM gcc-c++-arm-linux-gnu
CROSS_COMPILER_TARGET_ARCHS += nilrt7-armv7a
CROSS_COMPILER_RUNTEST_ARCHS += SL6-x86_64

View File

@@ -1,4 +1,4 @@
INSTALL_LOCATION=/usr/local/epics/base-$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)$(EPICS_PATCH_VSTRING)
INSTALL_LOCATION=/usr/local/epics/base-$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
GNU_HOST_ARCH=i686
GNU_HOST_OS=linux

View File

@@ -4,17 +4,17 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Known Problems in EPICS 7.0.3.1</title>
<title>Known Problems in EPICS 7.0.3</title>
</head>
<body>
<h1 style="text-align: center">EPICS 7.0.3.1: Known Problems</h1>
<h1 style="text-align: center">EPICS 7.0.3: Known Problems</h1>
<p>Any patch files linked below should be applied at the root of the
base-7.0.3.1 tree. Download them, then use the GNU Patch program as
base-7.0.3 tree. Download them, then use the GNU Patch program as
follows:</p>
<blockquote><pre>% <b>cd <i>/path/to/</i>base-7.0.3.1</b>
<blockquote><pre>% <b>cd <i>/path/to/</i>base-7.0.3</b>
% <b>patch -p1 &lt; <i>/path/to/</i>file.patch</b></pre></blockquote>
<p>The following problems were known by the developers at the time of this
@@ -28,6 +28,10 @@ release:</p>
...</li>
-->
<li>IOCs running on some versions of Cygwin may display warnings at iocInit
about duplicate EPICS CA Address list entries. These warnings might be due
to a bug in Cygwin; they are benign and can be ignored.</li>
</ul>
</body>

344
documentation/README.1st Normal file
View File

@@ -0,0 +1,344 @@
Installation Instructions
EPICS Base Release 7.0.3
--------------------------------------------------------------------------
Table of Contents
* What is EPICS base?
* What is new in this release?
* Copyright
* Supported platforms
* Supported compilers
* Software requirements
* Host system storage requirements
* Documentation
* Directory Structure
* Build related components
* Building EPICS base (Unix and Win32)
* Example application and extension
* Multiple host platforms
--------------------------------------------------------------------------
What is EPICS base?
The Experimental Physics and Industrial Control Systems (EPICS) is an
extensible set of software components and tools with which application
developers can create a control system. This control system can be used
to control accelerators, detectors, telescopes, or other scientific
experimental equipment. EPICS base is the set of core software, i.e. the
components of EPICS without which EPICS would not function. EPICS base
allows an arbitrary number of target systems, IOCs (input/output
controllers), and host systems, OPIs (operator interfaces) of various
types.
What is new in this release?
Please check the RELEASE_NOTES file in the distribution for description
of changes and release migration details.
Copyright
Please review the LICENSE file included in the distribution for legal
terms of usage.
Supported platforms
The list of platforms supported by this version of EPICS base is given
in the configure/CONFIG_SITE file. If you are trying to build EPICS Base
on an unlisted host or for a different target machine you must have the
proper host/target cross compiler and header files, and you will have to
create and add the appropriate new configure files to the
base/configure/os/directory. You can start by copying existing
configuration files in the configure/os directory and then make changes
for your new platforms.
Supported compilers
This version of EPICS base has been built and tested using the host
vendor's C and C++ compilers, as well as the GNU gcc and g++ compilers.
The GNU cross-compilers work for all cross-compiled targets. You may
need the C and C++ compilers to be in your search path to do EPICS
builds; check the definitions of CC and CCC in
base/configure/os/CONFIG.<host>.<host> if you have problems.
Software requirements
GNU make
You must use the GNU version of make for EPICS builds, and we now
recommend version 4.1 or later (version 3.82 may work on Linux, but
doesn't on Windows).
Perl
You must have Perl version 5.8.1 or later installed. The EPICS
configuration files do not specify the perl full pathname, so the perl
executable must be found through your normal search path.
Unzip and tar (Winzip on WIN32 systems)
You must have tools available to unzip and untar the EPICS base
distribution file.
Target systems
EPICS supports IOCs running on embedded platforms such as VxWorks and
RTEMS built using a cross-compiler, and also supports soft IOCs running
as processes on the host platform.
vxWorks
You must have vxWorks 6 installed if any of your target systems are
vxWorks systems; the C++ compilers for vxWorks 5.x are now too old to
support. The vxWorks installation provides the cross-compiler and header
files needed to build for these targets. The absolute path to and the
version number of the vxWorks installation must be set in the
base/configure/os/CONFIG_SITE.Common.vxWorksCommon file or in one of its
target-specific overrides.
Consult the vxWorks 6.x EPICS web pages and the vxWorks documentation
for information about configuring your vxWorks operating system for use
with EPICS.
RTEMS
For RTEMS targets, you need RTEMS core and toolset version 4.9.2 or
4.10. The newer 4.11 or 5.x releases are not supported yet.
Command-line editing libraries
GNU readline or other OS-specific libraries can be used by the IOC shell
to provide command line editing and history recall. The default setting
is different for each OS. On Linux the default is to use READLINE since
most distributions include it. On MacOS the default is also READLINE
since Apple provides a compatible library, although it isn't GNU. On
RTEMS we support GNU readline and Tecla, although the default is to use
neither since these have to be added to the RTEMS installation
separately. On vxWorks we support the built-in ledLib library.
Host system storage requirements
The compressed tar file is approximately 1.6 MB in size. The
distribution source tree takes up approximately 12 MB. Each host target
will need around 40 MB for build files, and each cross-compiled target
around 20 MB.
Documentation
EPICS documentation is available through the EPICS website at Argonne.
Release specific documentation can also be found in the
base/documentation directory of the distribution.
Directory Structure
Distribution directory structure:
base Root directory of the base distribution
base/configure Operating system independent build config files
base/configure/os Operating system dependent build config files
base/documentation Distribution documentation
base/src Source code in various subdirectories
base/startup Scripts for setting up path and environment
Install directories created by the build:
bin Installed scripts and executables in subdirs
cfg Installed build configuration files
db Installed data bases
dbd Installed data base definitions
doc Installed documentation files
html Installed html documentation
include Installed header files
include/os Installed os specific header files in subdirs
include/compiler Installed compiler-specific header files
lib Installed libraries in arch subdirectories
lib/perl Installed perl modules
templates Installed templates
Build related components
base/documentation directory - contains setup, build, and install documents
README.1st Instructions for setup and building epics base
README.html html version of README.1st
README.darwin.html Installation notes for Mac OS X (Darwin)
RELEASE_NOTES.html Notes on release changes
KnownProblems.html List of known problems and workarounds
base/startup directory - contains scripts to set environment and path
EpicsHostArch Shell script to set EPICS_HOST_ARCH env variable
unix.csh C shell script to set path and env variables
unix.sh Bourne shell script to set path and env variables
win32.bat Bat file example to configure win32-x86 target
windows.bat Bat file example to configure windows-x64 target
base/configure directory - contains build definitions and rules
CONFIG Includes configure files and allows variable overrides
CONFIG.CrossCommon Cross build definitions
CONFIG.gnuCommon Gnu compiler build definitions for all archs
CONFIG_ADDONS Definitions for <osclass> and DEFAULT options
CONFIG_APP_INCLUDE
CONFIG_BASE EPICS base tool and location definitions
CONFIG_BASE_VERSION Definitions for EPICS base version number
CONFIG_COMMON Definitions common to all builds
CONFIG_ENV Definitions of EPICS environment variables
CONFIG_FILE_TYPE
CONFIG_SITE Site specific make definitions
CONFIG_SITE_ENV Site defaults for EPICS environment variables
MAKEFILE Installs CONFIG* RULES* creates
RELEASE Location of external products
RULES Includes appropriate rules file
RULES.Db Rules for database and database definition files
RULES.ioc Rules for application iocBoot/ioc* directory
RULES_ARCHS Definitions and rules for building architectures
RULES_BUILD Build and install rules and definitions
RULES_DIRS Definitions and rules for building subdirectories
RULES_EXPAND
RULES_FILE_TYPE
RULES_TARGET
RULES_TOP Rules specific to a <top> dir (uninstall and tar)
Sample.Makefile Sample makefile with comments
base/configure/os directory - contains os-arch specific definitions
CONFIG.<host>.<target> Specific host-target build definitions
CONFIG.Common.<target> Specific target definitions for all hosts
CONFIG.<host>.Common Specific host definitions for all targets
CONFIG.UnixCommon.Common Definitions for Unix hosts and all targets
CONFIG.Common.UnixCommon Definitions for Unix targets and all hosts
CONFIG.Common.vxWorksCommon Specific host definitions for all vx targets
CONFIG_SITE.<host>.<target> Site specific host-target definitions
CONFIG_SITE.Common.<target> Site specific target defs for all hosts
CONFIG_SITE.<host>.Common Site specific host defs for all targets
Building EPICS base (Unix and Win32)
Unpack file
Unzip and untar the distribution file. Use WinZip on Windows systems.
Set environment variables
Files in the base/startup directory have been provided to help set
required path and other environment variables.
EPICS_HOST_ARCH
Before you can build or use EPICS Base, the environment variable
EPICS_HOST_ARCH should be defined. A perl script EpicsHostArch.pl in
the base/startup directory has been provided to help set
EPICS_HOST_ARCH. You should have EPICS_HOST_ARCH set to your host
operating system followed by a dash and then your CPU architecture,
e.g. linux-x86_64. If you are not using the OS vendor's c/c++ compiler
for host builds, you will need another dash followed by the alternate
compiler name (e.g. "-gnu" for GNU c/c++ compilers on a solaris host
or "-mingw" for MinGW c/c++ compilers on a WIN32 host). See
configure/CONFIG_SITE for a list of supported EPICS_HOST_ARCH values.
PERLLIB
On WIN32, some versions of Perl require that the environment variable
PERLLIB be set to <perl directory location>.
PATH
As already mentioned, you must have the perl executable and you may
need C and C++ compilers in your search path. For building base you
also must have echo in your search path. For Unix host builds you also
need ln, cpp, cp, rm, mv, and mkdir in your search path and /bin/chmod
must exist. On some Unix systems you may also need ar and ranlib in
your path, and the C compiler may require as and ld in your path. On
solaris systems you need uname in your path.
LD_LIBRARY_PATH
EPICS shared libraries and executables normally contain the full path
to any libraries they require. However, if you move the EPICS files or
directories from their build-time location then in order for the
shared libraries to be found at runtime LD_LIBRARY_PATH must include
the full pathname to $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) when
invoking executables, or some equivalent OS-specific mechanism (such
as /etc/ld.so.conf on Linux) must be used. Shared libraries are now
built by default on all Unix type hosts.
Do site-specific build configuration
Site configuration
To configure EPICS, you may want to modify the default definitions in
the following files:
configure/CONFIG_SITE Build choices. Specify target archs.
configure/CONFIG_SITE_ENV Environment variable defaults
configure/RELEASE TORNADO2 full path location
Host configuration
To configure each host system, you may override the default
definitions by adding a new file in the configure/os directory with
override definitions. The new file should have the same name as the
distribution file to be overridden except with CONFIG in the name
changed to CONFIG_SITE.
configure/os/CONFIG.<host>.<host> Host build settings
configure/os/CONFIG.<host>.Common Host common build settings
Target configuration
To configure each target system, you may override the default
definitions by adding a new file in the configure/os directory with
override definitions. The new file should have the same name as the
distribution file to be overridden except with CONFIG in the name
replaced by CONFIG_SITE. This step is necessary even if the host
system is the only target system.
configure/os/CONFIG.Common.<target> Target common settings
configure/os/CONFIG.<host>.<target> Host-target settings
Build EPICS base
After configuring the build you should be able to build EPICS base by
issuing the following commands in the distribution's root directory
(base):
gnumake clean uninstall
gnumake
The command "gnumake clean uninstall" will remove all files and
directories generated by a previous build. The command "gnumake" will
build and install everything for the configured host and targets.
It is recommended that you do a "gnumake clean uninstall" at the root
directory of an EPICS directory structure before each complete rebuild
to ensure that all components will be rebuilt.
Example application and extension
A perl tool, makeBaseApp.pl is included in the distribution file. This
script will create a sample application that can be built and then
executed to try out this release of base.
Instructions for building and executing the example IOC application can
be found in the section "Example Application" of Chapter 2, "Getting
Started", in the "IOC Application Developer's Guide" for this release.
The "Example IOC Application" section briefly explains how to create and
build an example application in a user created <top> directory. It also
explains how to run the example application on a vxWorks ioc or as a
process on the host system. By running the example application as a
host-based IOC, you will be able to quickly implement a complete EPICS
system and be able to run channel access clients on the host system.
A perl script, makeBaseExt.pl, is included in the distribution file.
This script will create a sample extension that can be built and
executed. The makeBaseApp.pl and makeBaseExt.pl scripts are installed
into the install location bin/<hostarch> directory during the base
build.
Multiple host platforms
You can build using a single EPICS directory structure on multiple host
systems and for multiple cross target systems. The intermediate and
binary files generated by the build will be created in separate
subdirectories and installed into the appropriate separate host/target
install directories. EPICS executables and perl scripts are installed
into the $(INSTALL_LOCATION)/bin/<arch> directories. Libraries are
installed into $(INSTALL_LOCATION)/lib/<arch>. The default definition
for $(INSTALL_LOCATION) is $(TOP) which is the root directory in the
distribution directory structure, base. Created object files are stored
in O.<arch> source subdirectories, This allows objects for multiple
cross target architectures to be maintained at the same time. To build
EPICS base for a specific host/target combination you must have the
proper host/target C/C++ cross compiler and target header files and the
base/configure/os directory must have the appropriate configure files.

382
documentation/README.html Normal file
View File

@@ -0,0 +1,382 @@
<!DOCTYPE HTML>
<!-- Generate the README.1st file from this file using:
elinks -dump -no-numbering -no-references -dump-width 80 README.html
-->
<HTML>
<HEAD>
<TITLE>README - EPICS Base Installation Instructions</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>Installation Instructions</H1>
<H2>EPICS Base Release 7.0.3</H2><BR>
</CENTER>
<HR>
<H3> Table of Contents</H3>
<UL>
<LI><A HREF="#0_0_1"> What is EPICS base?</A></LI>
<LI><A HREF="#0_0_2"> What is new in this release?</A></LI>
<LI><A HREF="#0_0_3"> Copyright</A></LI>
<LI><A HREF="#0_0_4"> Supported platforms</A></LI>
<LI><A HREF="#0_0_5"> Supported compilers</A></LI>
<LI><A HREF="#0_0_6"> Software requirements</A></LI>
<LI><A HREF="#0_0_7"> Host system storage requirements</A></LI>
<LI><A HREF="#0_0_8"> Documentation</A></LI>
<LI><A HREF="#0_0_10"> Directory Structure</A></LI>
<LI><A HREF="#0_0_11"> Build related components</A></LI>
<LI><A HREF="#0_0_12"> Building EPICS base (Unix and Win32)</A></LI>
<LI><A HREF="#0_0_13"> Example application and extension</A></LI>
<LI><A HREF="#0_0_14"> Multiple host platforms</A></LI>
</UL>
<HR>
<H3><A NAME="0_0_1"> What is EPICS base?</A></H3>
<BLOCKQUOTE>The Experimental Physics and Industrial Control Systems
(EPICS) is an extensible set of software components and tools with
which application developers can create a control system. This control
system can be used to control accelerators, detectors, telescopes, or
other scientific experimental equipment. EPICS base is the set of core
software, i.e. the components of EPICS without which EPICS would not
function. EPICS base allows an arbitrary number of target systems, IOCs
(input/output controllers), and host systems, OPIs (operator
interfaces) of various types.</BLOCKQUOTE>
<H3><A NAME="0_0_2"> What is new in this release?</A></H3>
<BLOCKQUOTE> Please check the RELEASE_NOTES file in the distribution for
description of changes and release migration details.</BLOCKQUOTE>
<H3><A NAME="0_0_3"> Copyright</A></H3>
<BLOCKQUOTE>Please review the LICENSE file included in the
distribution for legal terms of usage.</BLOCKQUOTE>
<H3><A NAME="0_0_4"> Supported platforms</A></H3>
<BLOCKQUOTE>The list of platforms supported by this version of EPICS base
is given in the configure/CONFIG_SITE file. If you are trying to build
EPICS Base on an unlisted host or for a different target machine you
must have the proper host/target cross compiler and header files, and
you will have to create and add the appropriate new configure files to
the base/configure/os/directory. You can start by copying existing
configuration files in the configure/os directory and then make changes
for your new platforms.</BLOCKQUOTE>
<H3><A NAME="0_0_5"> Supported compilers</A></H3>
<BLOCKQUOTE>This version of EPICS base has been built and tested using the host
vendor's C and C++ compilers, as well as the GNU gcc and g++ compilers. The GNU
cross-compilers work for all cross-compiled targets. You may need the C and C++
compilers to be in your search path to do EPICS builds; check the definitions
of CC and CCC in base/configure/os/CONFIG.&lt;host&gt;.&lt;host&gt; if you have
problems.</BLOCKQUOTE>
<H3><A NAME="0_0_6"> Software requirements</A></H3>
<BLOCKQUOTE><B>GNU make</B><BR>
You must use the GNU version of make for EPICS builds, and we now recommend
version 4.1 or later (version 3.82 may work on Linux, but doesn't on Windows).
<P><B>Perl</B><BR>
You must have Perl version 5.8.1 or later installed. The EPICS configuration
files do not specify the perl full pathname, so the perl executable must
be found through your normal search path.</P>
<P><B>Unzip and tar (Winzip on WIN32 systems)</B><BR>
You must have tools available to unzip and untar the EPICS base
distribution file.</P>
<P><B>Target systems</B><BR>
EPICS supports IOCs running on embedded platforms such as VxWorks
and RTEMS built using a cross-compiler, and also supports soft IOCs running
as processes on the host platform.</P>
<P><B>vxWorks</B><BR>
You must have vxWorks 6 installed if any of your target systems are vxWorks
systems; the C++ compilers for vxWorks 5.x are now too old to support. The
vxWorks installation provides the cross-compiler and header files needed to
build for these targets. The absolute path to and the version number of the
vxWorks installation must be set in the
base/configure/os/CONFIG_SITE.Common.vxWorksCommon file or in one of its
target-specific overrides.</P>
<P>Consult the <a href="https://epics.anl.gov/base/vxWorks6.php">vxWorks
6.x</a> EPICS web pages and the vxWorks documentation for information
about configuring your vxWorks operating system for use with EPICS.</P>
<P><B>RTEMS</B><BR>
For RTEMS targets, you need RTEMS core and toolset version 4.9.2 or 4.10. The
newer 4.11 or 5.x releases are not supported yet.</P>
<P><B>Command-line editing libraries</B><BR>
GNU readline or other OS-specific libraries can be used by the IOC shell to
provide command line editing and history recall. The default setting is
different for each OS. On Linux the default is to use READLINE since most
distributions include it. On MacOS the default is also READLINE since Apple
provides a compatible library, although it isn't GNU. On RTEMS we support GNU
readline and Tecla, although the default is to use neither since these have to
be added to the RTEMS installation separately. On vxWorks we support the
built-in ledLib library.</P>
</BLOCKQUOTE>
<H3><A NAME="0_0_7"> Host system storage requirements</A></H3>
<BLOCKQUOTE>The compressed tar file is approximately 1.6 MB in size. The
distribution source tree takes up approximately 12 MB. Each host target will
need around 40 MB for build files, and each cross-compiled target around 20
MB.</BLOCKQUOTE>
<H3><A NAME="0_0_8"> Documentation</A></H3>
<BLOCKQUOTE>EPICS documentation is available through the
<a href="https://epics.anl.gov/">EPICS website</a> at Argonne.
<P>Release specific documentation can also be found in the base/documentation
directory of the distribution.</BLOCKQUOTE>
<H3><A NAME="0_0_10"> Directory Structure</A></H3>
<BLOCKQUOTE><H4>Distribution directory structure:</H4>
<PRE>
base Root directory of the base distribution
base/configure Operating system independent build config files
base/configure/os Operating system dependent build config files
base/documentation Distribution documentation
base/src Source code in various subdirectories
base/startup Scripts for setting up path and environment
</PRE>
<H4>Install directories created by the build:</H4>
<PRE>
bin Installed scripts and executables in subdirs
cfg Installed build configuration files
db Installed data bases
dbd Installed data base definitions
doc Installed documentation files
html Installed html documentation
include Installed header files
include/os Installed os specific header files in subdirs
include/compiler Installed compiler-specific header files
lib Installed libraries in arch subdirectories
lib/perl Installed perl modules
templates Installed templates
</PRE>
</BLOCKQUOTE>
<H3><A NAME="0_0_11"> Build related components</A></H3>
<BLOCKQUOTE>
<H4>base/documentation directory - contains setup, build, and install
documents</H4>
<PRE>
README.1st Instructions for setup and building epics base
README.html html version of README.1st
README.darwin.html Installation notes for Mac OS X (Darwin)
RELEASE_NOTES.html Notes on release changes
KnownProblems.html List of known problems and workarounds
</PRE>
<H4>base/startup directory - contains scripts to set environment and path</H4>
<PRE>
EpicsHostArch Shell script to set EPICS_HOST_ARCH env variable
unix.csh C shell script to set path and env variables
unix.sh Bourne shell script to set path and env variables
win32.bat Bat file example to configure win32-x86 target
windows.bat Bat file example to configure windows-x64 target
</PRE>
<H4>base/configure directory - contains build definitions and rules</H4>
<PRE>
CONFIG Includes configure files and allows variable overrides
CONFIG.CrossCommon Cross build definitions
CONFIG.gnuCommon Gnu compiler build definitions for all archs
CONFIG_ADDONS Definitions for &lt;osclass&gt; and DEFAULT options
CONFIG_APP_INCLUDE
CONFIG_BASE EPICS base tool and location definitions
CONFIG_BASE_VERSION Definitions for EPICS base version number
CONFIG_COMMON Definitions common to all builds
CONFIG_ENV Definitions of EPICS environment variables
CONFIG_FILE_TYPE
CONFIG_SITE Site specific make definitions
CONFIG_SITE_ENV Site defaults for EPICS environment variables
MAKEFILE Installs CONFIG* RULES* creates
RELEASE Location of external products
RULES Includes appropriate rules file
RULES.Db Rules for database and database definition files
RULES.ioc Rules for application iocBoot/ioc* directory
RULES_ARCHS Definitions and rules for building architectures
RULES_BUILD Build and install rules and definitions
RULES_DIRS Definitions and rules for building subdirectories
RULES_EXPAND
RULES_FILE_TYPE
RULES_TARGET
RULES_TOP Rules specific to a &lt;top&gt; dir (uninstall and tar)
Sample.Makefile Sample makefile with comments
</PRE>
<H4>base/configure/os directory - contains os-arch specific definitions</H4>
<PRE>
CONFIG.&lt;host&gt;.&lt;target&gt; Specific host-target build definitions
CONFIG.Common.&lt;target&gt; Specific target definitions for all hosts
CONFIG.&lt;host&gt;.Common Specific host definitions for all targets
CONFIG.UnixCommon.Common Definitions for Unix hosts and all targets
CONFIG.Common.UnixCommon Definitions for Unix targets and all hosts
CONFIG.Common.vxWorksCommon Specific host definitions for all vx targets
CONFIG_SITE.&lt;host&gt;.&lt;target&gt; Site specific host-target definitions
CONFIG_SITE.Common.&lt;target&gt; Site specific target defs for all hosts
CONFIG_SITE.&lt;host&gt;.Common Site specific host defs for all targets
</PRE>
</BLOCKQUOTE>
<H3><A NAME="0_0_12"> Building EPICS base (Unix and Win32)</A></H3>
<BLOCKQUOTE>
<H4> Unpack file</H4>
<BLOCKQUOTE>
Unzip and untar the distribution file. Use WinZip on Windows
systems.
</BLOCKQUOTE>
<H4>Set environment variables</H4>
<BLOCKQUOTE>
Files in the base/startup directory have been provided to
help set required path and other environment variables.
<P><B>EPICS_HOST_ARCH</B><BR>
Before you can build or use EPICS Base, the environment variable
EPICS_HOST_ARCH should be defined. A perl script EpicsHostArch.pl in the
base/startup directory has been provided to help set EPICS_HOST_ARCH.
You should have EPICS_HOST_ARCH set to your host operating system
followed by a dash and then your CPU architecture, e.g. linux-x86_64.
If you are not using the OS vendor's c/c++ compiler for host builds,
you will need another dash followed by the alternate compiler name
(e.g. &quot;-gnu&quot; for GNU c/c++ compilers on a solaris host or &quot;-mingw&quot;
for MinGW c/c++ compilers on a WIN32 host). See configure/CONFIG_SITE
for a list of supported EPICS_HOST_ARCH values.</P>
<P><B>PERLLIB</B><BR>
On WIN32, some versions of Perl require that the environment
variable PERLLIB be set to &lt;perl directory location&gt;.</P>
<P><B>PATH</B><BR>
As already mentioned, you must have the perl executable and you may
need C and C++ compilers in your search path. For building base you
also must have echo in your search path. For Unix host builds you also
need ln, cpp, cp, rm, mv, and mkdir in your search path and /bin/chmod
must exist. On some Unix systems you may also need ar and ranlib in
your path, and the C compiler may require as and ld in your path. On
solaris systems you need uname in your path.</P>
<P><B>LD_LIBRARY_PATH</B><BR>
EPICS shared libraries and executables normally contain the full path
to any libraries they require.
However, if you move the EPICS files or directories from their build-time
location then in order for the shared libraries to be found at runtime
LD_LIBRARY_PATH must include the full pathname to
$(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) when invoking executables, or
some equivalent OS-specific mechanism (such as /etc/ld.so.conf on Linux)
must be used.
Shared libraries are now built by default on all Unix type hosts.</P>
</BLOCKQUOTE>
<H4>Do site-specific build configuration</H4>
<BLOCKQUOTE>
<B>Site configuration</B><BR>
To configure EPICS, you may want to modify the default definitions
in the following files:
<PRE>
configure/CONFIG_SITE Build choices. Specify target archs.
configure/CONFIG_SITE_ENV Environment variable defaults
configure/RELEASE TORNADO2 full path location
</PRE>
<B> Host configuration</B><BR>
To configure each host system, you may override the default
definitions by adding a new file in the configure/os directory with
override definitions. The new file should have the same name as the
distribution file to be overridden except with CONFIG in the name
changed to CONFIG_SITE.
<PRE>
configure/os/CONFIG.&lt;host&gt;.&lt;host&gt; Host build settings
configure/os/CONFIG.&lt;host&gt;.Common Host common build settings
</PRE>
<B>Target configuration</B><BR>
To configure each target system, you may override the default
definitions by adding a new file in the configure/os directory with
override definitions. The new file should have the same name as the
distribution file to be overridden except with CONFIG in the name
replaced by CONFIG_SITE. This step is necessary even if the host system
is the only target system.
<PRE>
configure/os/CONFIG.Common.&lt;target&gt; Target common settings
configure/os/CONFIG.&lt;host&gt;.&lt;target&gt; Host-target settings
</PRE>
</BLOCKQUOTE>
<H4>Build EPICS base</H4>
<BLOCKQUOTE>After configuring the build you should be able to build
EPICS base by issuing the following commands in the distribution's root
directory (base):
<PRE>
gnumake clean uninstall
gnumake
</PRE>
The command &quot;gnumake clean uninstall&quot;
will remove all files and directories generated by a previous build.
The command &quot;gnumake&quot; will build and install everything for the
configured host and targets.
<P> It is recommended that you do a &quot;gnumake clean uninstall&quot; at the
root directory of an EPICS directory structure before each complete
rebuild to ensure that all components will be rebuilt.
</BLOCKQUOTE>
</BLOCKQUOTE>
<H3><A NAME="0_0_13"> Example application and extension</A></H3>
<BLOCKQUOTE>A perl tool, makeBaseApp.pl is included in the distribution
file. This script will create a sample application that can be built
and then executed to try out this release of base.
<P>
Instructions for building and executing the example IOC application
can be found in the section &quot;Example Application&quot; of Chapter 2,
&quot;Getting Started&quot;, in the &quot;IOC Application Developer's Guide&quot; for this
release. The &quot;Example IOC Application&quot; section briefly explains how to
create and build an example application in a user created &lt;top&gt;
directory. It also explains how to run the example application on a
vxWorks ioc or as a process on the host system.
By running the example application as a host-based IOC, you will be
able to quickly implement a complete EPICS system and be able to run channel
access clients on the host system.
<P>
A perl script,
makeBaseExt.pl, is included in the distribution file. This script will
create a sample extension that can be built and executed. The
makeBaseApp.pl and makeBaseExt.pl scripts are installed into the
install location bin/&lt;hostarch&gt; directory during the base build.
</BLOCKQUOTE>
<H3><A NAME="0_0_14"> Multiple host platforms</A></H3>
<BLOCKQUOTE>You can build using a single EPICS directory structure on
multiple host systems and for multiple cross target systems. The
intermediate and binary files generated by the build will be created in
separate subdirectories and installed into the appropriate separate
host/target install directories. EPICS executables and perl scripts are
installed into the <TT>$(INSTALL_LOCATION)/bin/&lt;arch&gt;</TT> directories.
Libraries are installed into $<TT>(INSTALL_LOCATION)/lib/&lt;arch&gt;</TT>.
The default definition for <TT>$(INSTALL_LOCATION)</TT> is <TT>$(TOP)</TT>
which is the root directory in the distribution directory structure,
base. Created object files are stored in O.&lt;arch&gt; source
subdirectories, This allows objects for multiple cross target
architectures to be maintained at the same time. To build EPICS base
for a specific host/target combination you must have the proper
host/target C/C++ cross compiler and target header files and the
base/configure/os directory must have the appropriate configure files.
</BLOCKQUOTE>
</BODY>
</HTML>

View File

@@ -1,372 +0,0 @@
# Installation Instructions
## EPICS Base Release 7.0.3.1
-----
### Table of Contents
- [What is EPICS base?](#0_0_1)
- [What is new in this release?](#0_0_2)
- [Copyright](#0_0_3)
- [Supported platforms](#0_0_4)
- [Supported compilers](#0_0_5)
- [Software requirements](#0_0_6)
- [Host system storage requirements](#0_0_7)
- [Documentation](#0_0_8)
- [Directory Structure](#0_0_10)
- [Build related components](#0_0_11)
- [Building EPICS base (Unix and Win32)](#0_0_12)
- [Example application and extension](#0_0_13)
- [Multiple host platforms](#0_0_14)
-----
### <span id="0_0_1">What is EPICS base?</span>
The Experimental Physics and Industrial Control Systems (EPICS) is an
extensible set of software components and tools with which application
developers can create a control system. This control system can be
used to control accelerators, detectors, telescopes, or other
scientific experimental equipment. EPICS base is the set of core
software, i.e. the components of EPICS without which EPICS would not
function. EPICS base allows an arbitrary number of target systems,
IOCs (input/output controllers), and host systems, OPIs (operator
interfaces) of various types.
### <span id="0_0_2">What is new in this release?</span>
Please check the `RELEASE_NOTES` file in the distribution for
description of changes and release migration details.
### <span id="0_0_3">Copyright</span>
Please review the LICENSE file included in the distribution for legal
terms of usage.
### <span id="0_0_4">Supported platforms</span>
The list of platforms supported by this version of EPICS base is given
in the `configure/CONFIG_SITE` file. If you are trying to build EPICS
Base on an unlisted host or for a different target machine you must
have the proper host/target cross compiler and header files, and you
will have to create and add the appropriate new configure files to the
base/configure/os/directory. You can start by copying existing
configuration files in the configure/os directory and then make
changes for your new platforms.
### <span id="0_0_5">Supported compilers</span>
This version of EPICS base has been built and tested using the host
vendor's C and C++ compilers, as well as the GNU gcc and g++
compilers. The GNU cross-compilers work for all cross-compiled
targets. You may need the C and C++ compilers to be in your search
path to do EPICS builds; check the definitions of CC and CCC in
`base/configure/os/CONFIG.<host>.<host>` if you have problems.
### <span id="0_0_6">Software requirements</span>
**GNU make**
You must use GNU make, gnumake, for any EPICS builds. Set your path so
that a gnumake version 3.81 or later is available.
**Perl**
You must have Perl version 5.8.1 or later installed. The EPICS
configuration files do not specify the perl full pathname, so the perl
executable must be found through your normal search path.
**Unzip and tar (Winzip on WIN32 systems)**
You must have tools available to unzip and untar the EPICS base
distribution file.
**Target systems**
EPICS supports IOCs running on embedded platforms such as VxWorks and
RTEMS built using a cross-compiler, and also supports soft IOCs
running as processes on the host platform.
**vxWorks**
You must have vxWorks 6.8 or later installed if any of your target
systems are vxWorks systems; the C++ compiler from older versions cannot
compile recently developed code. The vxWorks installation provides the
cross-compiler and header files needed to build for these targets. The
absolute path to and the version number of the vxWorks installation
must be set in the `base/configure/os/CONFIG_SITE.Common.vxWorksCommon`
file or in one of its target-specific overrides.
Consult the [vxWorks 6.x](https://epics.anl.gov/base/vxWorks6.php) EPICS
web pages about and the vxWorks documentation for information about
configuring your vxWorks operating system for use with EPICS.
**RTEMS**
For RTEMS targets, you need RTEMS core and toolset version 4.9.x or
4.10.x (4.11 or 5.x are not yet supported).
**GNU readline or Tecla library**
GNU readline and Tecla libraries can be used by the IOC shell to
provide command line editing and command line history recall and edit.
GNU readline (or Tecla library) must be installed on your target
system when `COMMANDLINE_LIBRARY` is set to READLINE (or TECLA) for
that target. EPICS (EPICS shell) is the default specified in
`CONFIG_COMMON`. A READLINE override is defined for linux-x86 in the
EPICS distribution. Comment out `COMMANDLINE_LIBRARY=READLINE` in
`configure/os/CONFIG_SITE.Common.linux-x86` if readline is not
installed on linux-x86. Command-line editing and history will then be
those supplied by the os. On vxWorks the ledLib command-line input
library is used instead.
### <span id="0_0_7">Host system storage requirements</span>
The compressed tar file is approximately 1.6 MB in size. The
distribution source tree takes up approximately 12 MB. Each host
target will need around 40 MB for build files, and each cross-compiled
target around 20 MB.
### <span id="0_0_8">Documentation</span>
EPICS documentation is available through the [EPICS
website](https://epics.anl.gov/) at Argonne.
Release specific documentation can also be found in the
base/documentation directory of the distribution.
### <span id="0_0_10">Directory Structure</span>
#### Distribution directory structure:
```
base Root directory of the base distribution
base/configure Operating system independent build config files
base/configure/os Operating system dependent build config files
base/documentation Distribution documentation
base/src Source code in various subdirectories
base/startup Scripts for setting up path and environment
```
#### Install directories created by the build:
```
bin Installed scripts and executables in subdirs
cfg Installed build configuration files
db Installed data bases
dbd Installed data base definitions
doc Installed documentation files
html Installed html documentation
include Installed header files
include/os Installed os specific header files in subdirs
include/compiler Installed compiler-specific header files
lib Installed libraries in arch subdirectories
lib/perl Installed perl modules
templates Installed templates
```
### <span id="0_0_11">Build related components</span>
#### base/documentation directory - contains setup, build, and install documents
```
README.md Instructions for setup and building epics base
README.darwin.html Installation notes for Mac OS X (Darwin)
RELEASE_NOTES.html Notes on release changes
KnownProblems.html List of known problems and workarounds
```
#### base/startup directory - contains scripts to set environment and path
```
EpicsHostArch Shell script to set EPICS_HOST_ARCH env variable
unix.csh C shell script to set path and env variables
unix.sh Bourne shell script to set path and env variables
win32.bat Bat file example to configure win32-x86 target
windows.bat Bat file example to configure windows-x64 target
```
#### base/configure directory - contains build definitions and rules
```
CONFIG Includes configure files and allows variable overrides
CONFIG.CrossCommon Cross build definitions
CONFIG.gnuCommon Gnu compiler build definitions for all archs
CONFIG_ADDONS Definitions for <osclass> and DEFAULT options
CONFIG_APP_INCLUDE
CONFIG_BASE EPICS base tool and location definitions
CONFIG_BASE_VERSION Definitions for EPICS base version number
CONFIG_COMMON Definitions common to all builds
CONFIG_ENV Definitions of EPICS environment variables
CONFIG_FILE_TYPE
CONFIG_SITE Site specific make definitions
CONFIG_SITE_ENV Site defaults for EPICS environment variables
MAKEFILE Installs CONFIG* RULES* creates
RELEASE Location of external products
RULES Includes appropriate rules file
RULES.Db Rules for database and database definition files
RULES.ioc Rules for application iocBoot/ioc* directory
RULES_ARCHS Definitions and rules for building architectures
RULES_BUILD Build and install rules and definitions
RULES_DIRS Definitions and rules for building subdirectories
RULES_EXPAND
RULES_FILE_TYPE
RULES_TARGET
RULES_TOP Rules specific to a <top> dir (uninstall and tar)
Sample.Makefile Sample makefile with comments
```
#### base/configure/os directory - contains os-arch specific definitions
```
CONFIG.<host>.<target> Specific host-target build definitions
CONFIG.Common.<target> Specific target definitions for all hosts
CONFIG.<host>.Common Specific host definitions for all targets
CONFIG.UnixCommon.Common Definitions for Unix hosts and all targets
CONFIG.Common.UnixCommon Definitions for Unix targets and all hosts
CONFIG.Common.vxWorksCommon Specific host definitions for all vx targets
CONFIG_SITE.<host>.<target> Site specific host-target definitions
CONFIG_SITE.Common.<target> Site specific target defs for all hosts
CONFIG_SITE.<host>.Common Site specific host defs for all targets
```
### <span id="0_0_12">Building EPICS base (Unix and Win32)</span>
#### Unpack file
Unzip and untar the distribution file. Use WinZip on Windows
systems.
#### Set environment variables
Files in the base/startup directory have been provided to help set
required path and other environment variables.
* `EPICS_HOST_ARCH`
Before you can build or use EPICS R3.15, the environment variable
`EPICS_HOST_ARCH` must be defined. A perl script EpicsHostArch.pl in
the base/startup directory has been provided to help set
`EPICS_HOST_ARCH.` You should have `EPICS_HOST_ARCH` set to your
host operating system followed by a dash and then your host
architecture, e.g. solaris-sparc. If you are not using the OS
vendor's c/c++ compiler for host builds, you will need another dash
followed by the alternate compiler name (e.g. "-gnu" for GNU c/c++
compilers on a solaris host or "-mingw" for MinGW c/c++ compilers on
a WIN32 host). See `configure/CONFIG_SITE` for a list of supported
`EPICS_HOST_ARCH` values.
* `PERLLIB`
On WIN32, some versions of Perl require that the environment
variable PERLLIB be set to &lt;perl directory location>.
* `PATH`
As already mentioned, you must have the perl executable and you may
need C and C++ compilers in your search path. For building base you
also must have echo in your search path. For Unix host builds you
also need ln, cpp, cp, rm, mv, and mkdir in your search path and
/bin/chmod must exist. On some Unix systems you may also need ar and
ranlib in your path, and the C compiler may require as and ld in
your path. On solaris systems you need uname in your path.
* `LD_LIBRARY_PATH`
R3.15 shared libraries and executables normally contain the full
path to any libraries they require. However, if you move the EPICS
files or directories from their build-time location then in order
for the shared libraries to be found at runtime `LD_LIBRARY_PATH`
must include the full pathname to
`$(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH)` when invoking
executables, or some equivalent OS-specific mechanism (such as
/etc/ld.so.conf on Linux) must be used. Shared libraries are now
built by default on all Unix type hosts.
#### Do site-specific build configuration
**Site configuration**
To configure EPICS, you may want to modify the default definitions
in the following files:
```
configure/CONFIG_SITE Build choices. Specify target archs.
configure/CONFIG_SITE_ENV Environment variable defaults
configure/RELEASE TORNADO2 full path location
```
**Host configuration**
To configure each host system, you may override the default
definitions by adding a new file in the configure/os directory with
override definitions. The new file should have the same name as the
distribution file to be overridden except with CONFIG in the name
changed to `CONFIG_SITE`.
```
configure/os/CONFIG.<host>.<host> Host build settings
configure/os/CONFIG.<host>.Common Host common build settings
```
**Target configuration**
To configure each target system, you may override the default
definitions by adding a new file in the configure/os directory with
override definitions. The new file should have the same name as the
distribution file to be overridden except with CONFIG in the name
replaced by `CONFIG_SITE`. This step is necessary even if the host
system is the only target system.
```
configure/os/CONFIG.Common.<target> Target common settings
configure/os/CONFIG.<host>.<target> Host-target settings
```
#### Build EPICS base
After configuring the build you should be able to build EPICS base
by issuing the following commands in the distribution's root
directory (base):
```
gnumake clean uninstall
gnumake
```
The command "gnumake clean uninstall" will remove all files and
directories generated by a previous build. The command "gnumake"
will build and install everything for the configured host and
targets.
It is recommended that you do a "gnumake clean uninstall" at the
root directory of an EPICS directory structure before each complete
rebuild to ensure that all components will be rebuilt.
### <span id="0_0_13">Example application and extension</span>
A perl tool, makeBaseApp.pl is included in the distribution file. This
script will create a sample application that can be built and then
executed to try out this release of base.
Instructions for building and executing the 3.15 example application
can be found in the section "Example Application" of Chapter 2,
"Getting Started", in the "IOC Application Developer's Guide" for this
release. The "Example IOC Application" section briefly explains how to
create and build an example application in a user created &lt;top>
directory. It also explains how to run the example application on a
vxWorks ioc or as a process on the host system. By running the example
application as a host-based IOC, you will be able to quickly implement
a complete EPICS system and be able to run channel access clients on
the host system.
A perl script, makeBaseExt.pl, is included in the distribution file.
This script will create a sample extension that can be built and
executed. The makeBaseApp.pl and makeBaseExt.pl scripts are installed
into the install location `bin/<hostarch>` directory during the base
build.
### <span id="0_0_14">Multiple host platforms</span>
You can build using a single EPICS directory structure on multiple
host systems and for multiple cross target systems. The intermediate
and binary files generated by the build will be created in separate
subdirectories and installed into the appropriate separate host/target
install directories. EPICS executables and perl scripts are installed
into the `$(INSTALL_LOCATION)/bin/<arch>` directories. Libraries are
installed into $`(INSTALL_LOCATION)/lib/<arch>`. The default
definition for `$(INSTALL_LOCATION)` is `$(TOP)` which is the root
directory in the distribution directory structure, base. Created
object files are stored in `O.<arch>` source subdirectories, This
allows objects for multiple cross target architectures to be
maintained at the same time. To build EPICS base for a specific
host/target combination you must have the proper host/target C/C++
cross compiler and target header files and the base/configure/os
directory must have the appropriate configure files.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,68 +0,0 @@
# Record Reference Documentation
The following documentation for the record types and menus include with Base was
converted from the old EPICS Wiki pages and updated. This list only includes the
record types supplied with Base.
* [Fields Common to All Record Types](dbCommonRecord.html)
* [Fields Common to Input Record Types](dbCommonInput.html)
* [Fields Common to Output Record Types](dbCommonOutput.html)
## Record Types
* [Analog Array Input Record (aai)](aaiRecord.html)
* [Analog Array Output Record (aao)](aaoRecord.html)
* [Analog Input Record (ai)](aiRecord.html)
* [Analog Output Record (ao)](aoRecord.html)
* [Array Subroutine Record (aSub)](aSubRecord.html)
* [Binary Input Record (bi)](biRecord.html)
* [Binary Output Record (bo)](boRecord.html)
* [Calculation Output Record (calcout)](calcoutRecord.html)
* [Calculation Record (calc)](calcRecord.html)
* [Compression Record (compress)](compressRecord.html)
* [Data Fanout Record (dfanout)](dfanoutRecord.html)
* [Event Record (event)](eventRecord.html)
* [Fanout Record (fanout)](fanoutRecord.html)
* [Histogram Record (histogram)](histogramRecord.html)
* [64bit Integer Input Record (int64in)](int64inRecord.html)
* [64bit Integer Output Record (int64out)](int64outRecord.html)
* [Long Input Record (longin)](longinRecord.html)
* [Long Output Record (longout)](longoutRecord.html)
* [Long String Input Record (lsi)](lsiRecord.html)
* [Long String Output Record (lso)](lsoRecord.html)
* [Multi-Bit Binary Input Direct Record (mbbiDirect)](mbbiDirectRecord.html)
* [Multi-Bit Binary Input Record (mbbi)](mbbiRecord.html)
* [Multi-Bit Binary Output Direct Record (mbboDirect)](mbboDirectRecord.html)
* [Multi-Bit Binary Output Record (mbbo)](mbboRecord.html)
* [Permissive Record (permissive)](permissiveRecord.html)
* [Printf Record (prinf)](printfRecord.html)
* [Select Record (sel)](selRecord.html)
* [Sequence Record (seq)](seqRecord.html)
* [State Record (state)](stateRecord.html)
* [String Input Record (stringin)](stringinRecord.html)
* [String Output Record (stringout)](stringoutRecord.html)
* [Sub-Array Record (subArray)](subArrayRecord.html)
* [Subroutine Record (sub)](subRecord.html)
* [Waveform Record (waveform)](waveformRecord.html)
## Menu Definitions
* [Alarm Severity Menu](menuAlarmSevr.html)
* [Alarm Status Menu](menuAlarmStat.html)
* [Analog Conversions Menu](menuConvert.html)
* [Field Type Menu](menuFtype.html)
* [Invalid Value Output Action Menu](menuIvoa.html)
* [Output Mode Select Menu](menuOmsl.html)
* [Scan Menu](menuScan.html)
* [Simulation Mode Menu](menuSimm.html)
* [Yes/No Menu](menuYesNo.html)
## Corrections and Updates
Corrections to these documents can be submitted as patch files to the EPICS core
developers, or as merge requests or pull requests to the 7.0 branch of Base.
The document sources can be found in the `modules/database/src/std/rec` and
`modules/database/src/ioc/db` directories in files with extension `.dbd.pod`.
The documentation source format is a combination of the EPICS DBD file format
with an extended version of Perl's POD (plain old documentation); run `perldoc
pod` for details of POD.

View File

@@ -147,17 +147,17 @@ starting at <a href="#ReleaseApproval">Release Approval</a>.</p>
<td>Tag the module in Git, using these tag conventions:
<ul>
<li>
<tt>R7.0.4.1-pre<i>n</i></tt>
<tt>R7.0.3-pre<i>n</i></tt>
&mdash; pre-release tag
</li>
<li>
<tt>R7.0.4.1-rc<i>n</i></tt>
<tt>R7.0.3-rc<i>n</i></tt>
&mdash; release candidate tag
</li>
</ul>
<blockquote><tt>
cd base-7.0<br />
git tag -m 'ANJ: Tagged for 7.0.4.1-rc1' R7.0.4.1-rc1
git tag -m 'ANJ: Tagged for 7.0.3-rc1' R7.0.3-rc1
</tt></blockquote>
Note that submodules must <em>not</em> be tagged with the version used
for the top-level, they each have their own separate version numbers
@@ -171,11 +171,11 @@ starting at <a href="#ReleaseApproval">Release Approval</a>.</p>
files and directories that are only used for continuous integration:
<blockquote><tt>
cd base-7.0<br />
./.tools/make-tar.sh R7.0.4.1-rc1 base-7.0.4.1-rc1.tar.gz base-7.0.4.1-rc1/
./.tools/make-tar.sh R7.0.3-rc1 base-7.0.3-rc1.tar.gz base-7.0.3-rc1/
</tt></blockquote>
Create a GPG signature file of the tarfile as follows:
<blockquote><tt>
gpg --armor --sign --detach-sig base-7.0.4.1-rc1.tar.gz
gpg --armor --sign --detach-sig base-7.0.3-rc1.tar.gz
</tt></blockquote>
</td>
</tr>
@@ -277,77 +277,32 @@ starting at <a href="#ReleaseApproval">Release Approval</a>.</p>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>
<p>For each external submodule in turn (assuming it has not been tagged
yet):</p>
<ol>
<li>Check that the module's Release Notes have been updated to cover
all changes; add items as necessary, and set the module version
number and release date if appropriate. Convert to HTML and view in
a browser to check the formatting:
<blockquote><tt>
cd base-7.0/modules/&lt;module&gt;/documentation<br />
pandoc -f gfm -t html -o RELEASE_NOTES.html RELEASE_NOTES.md
</tt></blockquote>
Commit changes (don't push yet).</li>
<li>Edit the module's release version file
<tt>configure/CONFIG_<i>module</i>_VERSION</tt> and its top-level
<tt>Doxyfile</tt>; set the <tt>DEVELOPMENT_FLAG</tt> value to 0 and
remove <tt>-dev</tt> from the <tt>PROJECT_NUMBER</tt> string.
Commit changes (don't push).</li>
<li>Tag the module:
<blockquote><tt>
git tag -m 'ANJ: Tag for EPICS 7.0.4.1' &lt;module-version&gt;
</tt></blockquote>
</li>
<li>Update the git submodule on the Base-7.0 branch to the
newly-tagged version, but don't commit yet:
<blockquote><tt>
cd base-7.0/modules<br />
git add &lt;module&gt;<br />
git submodule status --cached
</tt></blockquote>
</li>
<li>Edit the module's release version file
<tt>configure/CONFIG_<i>module</i>_VERSION</tt> and its top-level
<tt>Doxyfile</tt>; increment the <tt>MAINTENANCE_VERSION</tt>, set
the <tt>DEVELOPMENT_FLAG</tt> value to 1, and update the
<tt>PROJECT_NUMBER</tt> string, appending <tt>-dev</tt> to the new
module version number. Commit changes.</li>
<li>Push commits and the new tag to the submodule's GitHub repository:
<blockquote><tt>
cd base-7.0/modules/&lt;module&gt;<br />
git push --follow-tags upstream master
</tt></blockquote>
</li>
</ol>
<p>Commit all the submodule updates to the 7.0 branch.</p>
</td>
<p>For each external submodule, check if the module's release version
number (and SHRLIB_VERSION setting) has been updated if appropriate,
and that its Release Notes have been updated to cover any changes.
Commit any fixes and tag the module if that hasn't already been
done.</p>
<p>Update all external submodules on the Base-7.0 branch and
commit.</p></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>Edit the main EPICS Base version file and the built-in module version
files:
<td>Edit and commit changes to the EPICS Base version number file and
these embedded module version files:
<ul>
<li><tt>configure/CONFIG_BASE_VERSION</tt></li>
<li><tt>configure/CONFIG_LIBCOM_VERSION</tt></li>
<li><tt>configure/CONFIG_CA_VERSION</tt></li>
<li><tt>configure/CONFIG_DATABASE_VERSION</tt></li>
<li>configure/CONFIG_BASE_VERSION </li>
<li>modules/libcom/configure/CONFIG_LIBCOM_VERSION</li>
<li>modules/ca/configure/CONFIG_CA_VERSION</li>
<li>modules/database/configure/CONFIG_DATABASE_VERSION</li>
</ul>
<p>Version numbers should be set according to the level of changes made
since the last release. Note that the <tt>MAINTENANCE_VERSION</tt> or
<tt>PATCH_LEVEL</tt> value should have been incremented after the
previous release tag was applied. Set all <tt>DEVELOPMENT_FLAG</tt>
values to 0 and <tt>EPICS_DEV_SNAPSHOT</tt> to the empty string.</p>
<p>Commit these changes (don't push).</p>
</td>
<p>Version numbers should be set according to the level of changes
made since the last release. Note that the MAINTENANCE_VERSION or
PATCH_LEVEL value should have been incremented after the previous
release tag was applied.</p>
<p>Set all DEVELOPMENT_FLAG values to 0 and EPICS_DEV_SNAPSHOT to the
empty string.</p>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
@@ -355,28 +310,27 @@ starting at <a href="#ReleaseApproval">Release Approval</a>.</p>
<td>Tag the epics-base module in Git:
<blockquote><tt>
cd base-7.0<br />
git tag -m 'ANJ: Tagged for release' R7.0.4.1
git tag -m 'ANJ: Tagged for 7.0.3' R7.0.3</i>
</tt></blockquote>
<p>Don't push these commits or the new tag to the Launchpad repository
yet.</p>
</td>
yet.</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>Edit the main EPICS Base version file and the built-in module version
files:
<td>Edit and commit changes to the EPICS Base version number file and
the embedded module version files as follows:
<ul>
<li><tt>configure/CONFIG_BASE_VERSION</tt></li>
<li><tt>configure/CONFIG_LIBCOM_VERSION</tt></li>
<li><tt>configure/CONFIG_CA_VERSION</tt></li>
<li><tt>configure/CONFIG_DATABASE_VERSION</tt></li>
<li>configure/CONFIG_BASE_VERSION </li>
<li>modules/libcom/configure/CONFIG_LIBCOM_VERSION</li>
<li>modules/ca/configure/CONFIG_CA_VERSION</li>
<li>modules/database/configure/CONFIG_DATABASE_VERSION</li>
</ul>
<p>Version numbers should be set for the next expected patch/maintenance
release by incrementing the MAINTENANCE_VERSION or PATCH_LEVEL value
in each file. Set all <tt>DEVELOPMENT_FLAG</tt> values to 1 and
<tt>EPICS_DEV_SNAPSHOT</tt> to "-DEV".</p>
<p>Commit these changes (don't push).</p>
release by incrementing the MAINTENANCE_VERSION or PATCH_LEVEL
value in each file.</p>
<p>Set all DEVELOPMENT_FLAG values to 1 and EPICS_DEV_SNAPSHOT to
"-DEV".</p>
</td>
</tr>
<tr>
@@ -387,12 +341,11 @@ starting at <a href="#ReleaseApproval">Release Approval</a>.</p>
files and directories that are only used for continuous integration:
<blockquote><tt>
cd base-7.0<br />
./.tools/make-tar.sh R7.0.4.1 ../base-7.0.4.1.tar.gz base-7.0.4.1/
./.tools/make-tar.sh R7.0.3 base-7.0.3.tar.gz base-7.0.3/
</tt></blockquote>
Create a GPG signature file of the tarfile as follows:
<blockquote><tt>
cd ..<br />
gpg --armor --sign --detach-sig base-7.0.4.1.tar.gz
gpg --armor --sign --detach-sig base-7.0.3.tar.gz
</tt></blockquote>
</td>
</tr>
@@ -457,7 +410,7 @@ starting at <a href="#ReleaseApproval">Release Approval</a>.</p>
<td>Upload the tar file and its <tt>.asc</tt> signature file to the
epics-controls web-server.
<blockquote><tt>
scp base-7.0.4.1.tar.gz base-7.0.4.1.tar.gz.asc epics-controls:download/base<br />
scp base-7.0.3.tar.gz base-7.0.3.tar.gz.asc epics-controls:download/base<br />
</tt></blockquote>
</td>
</tr>

View File

@@ -7,15 +7,15 @@ TOP = ..
include $(TOP)/configure/CONFIG
include CONFIG_SITE.local
DIRS += libcom
# Submodules for bundle build
SUBMODULES += libcom
DIRS += ca
SUBMODULES += ca
ca_DEPEND_DIRS = libcom
DIRS += database
SUBMODULES += database
database_DEPEND_DIRS = ca
# Submodules for bundle build
SUBMODULES += pvData
pvData_DEPEND_DIRS = libcom

21
modules/ca/.ci/travis-build.sh Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/sh
set -e -x
# set RTEMS to eg. "4.9" or "4.10"
# requires qemu, bison, flex, texinfo, install-info
if [ -n "$RTEMS" ]
then
# find local qemu-system-i386
export PATH="$HOME/.cache/qemu/usr/bin:$PATH"
echo -n "Using QEMU: "
type qemu-system-i386 || echo "Missing qemu"
EXTRA=RTEMS_QEMU_FIXUPS=YES
fi
make -j2 $EXTRA
if [ "$TEST" != "NO" ]
then
make -j2 tapfiles
make -s test-results
fi

132
modules/ca/.ci/travis-prepare.sh Executable file
View File

@@ -0,0 +1,132 @@
#!/bin/sh
set -e -x
CURDIR="$PWD"
QDIR="$HOME/.cache/qemu"
if [ -n "$RTEMS" -a "$TEST" = "YES" ]
then
git clone --quiet --branch vme --depth 10 https://github.com/mdavidsaver/qemu.git "$HOME/.build/qemu"
cd "$HOME/.build/qemu"
HEAD=`git log -n1 --pretty=format:%H`
echo "HEAD revision $HEAD"
[ -e "$HOME/.cache/qemu/built" ] && BUILT=`cat "$HOME/.cache/qemu/built"`
echo "Cached revision $BUILT"
if [ "$HEAD" != "$BUILT" ]
then
echo "Building QEMU"
git submodule --quiet update --init
install -d "$HOME/.build/qemu/build"
cd "$HOME/.build/qemu/build"
"$HOME/.build/qemu/configure" --prefix="$HOME/.cache/qemu/usr" --target-list=i386-softmmu --disable-werror
make -j2
make install
echo "$HEAD" > "$HOME/.cache/qemu/built"
fi
fi
cd "$CURDIR"
cat << EOF > configure/RELEASE.local
EPICS_BASE=$HOME/.source/epics-base
EOF
install -d "$HOME/.source"
cd "$HOME/.source"
add_base_module() {
MODULE=$1
BRANCH=$2
( cd epics-base/modules && \
git clone --quiet --depth 5 --branch "$MODULE"/"$BRANCH" https://github.com/${REPOBASE:-epics-base}/epics-base.git "$MODULE" && \
cd "$MODULE" && git log -n1 )
}
git clone --quiet --depth 5 --branch core/"${BRCORE:-master}" https://github.com/${REPOBASE:-epics-base}/epics-base.git epics-base
( cd epics-base && git log -n1 )
add_base_module libcom "${BRLIBCOM:-master}"
EPICS_HOST_ARCH=`sh epics-base/startup/EpicsHostArch`
# requires wine and g++-mingw-w64-i686
if [ "$WINE" = "32" ]
then
echo "Cross mingw32"
sed -i -e '/CMPLR_PREFIX/d' epics-base/configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
cat << EOF >> epics-base/configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
CMPLR_PREFIX=i686-w64-mingw32-
EOF
cat << EOF >> epics-base/configure/CONFIG_SITE
CROSS_COMPILER_TARGET_ARCHS+=win32-x86-mingw
EOF
fi
if [ "$STATIC" = "YES" ]
then
echo "Build static libraries/executables"
cat << EOF >> epics-base/configure/CONFIG_SITE
SHARED_LIBRARIES=NO
STATIC_BUILD=YES
EOF
fi
case "$CMPLR" in
clang)
echo "Host compiler is clang"
cat << EOF >> epics-base/configure/os/CONFIG_SITE.Common.$EPICS_HOST_ARCH
GNU = NO
CMPLR_CLASS = clang
CC = clang
CCC = clang++
EOF
# hack
sed -i -e 's/CMPLR_CLASS = gcc/CMPLR_CLASS = clang/' epics-base/configure/CONFIG.gnuCommon
clang --version
;;
*)
echo "Host compiler is default"
gcc --version
;;
esac
cat <<EOF >> epics-base/configure/CONFIG_SITE
USR_CPPFLAGS += $USR_CPPFLAGS
USR_CFLAGS += $USR_CFLAGS
USR_CXXFLAGS += $USR_CXXFLAGS
EOF
# set RTEMS to eg. "4.9" or "4.10"
# requires qemu, bison, flex, texinfo, install-info
if [ -n "$RTEMS" ]
then
echo "Cross RTEMS${RTEMS} for pc386"
install -d /home/travis/.cache
curl -L "https://github.com/mdavidsaver/rsb/releases/download/travis-20160306-2/rtems${RTEMS}-i386-trusty-20190306-2.tar.gz" \
| tar -C /home/travis/.cache -xj
sed -i -e '/^RTEMS_VERSION/d' -e '/^RTEMS_BASE/d' epics-base/configure/os/CONFIG_SITE.Common.RTEMS
cat << EOF >> epics-base/configure/os/CONFIG_SITE.Common.RTEMS
RTEMS_VERSION=$RTEMS
RTEMS_BASE=/home/travis/.cache/rtems${RTEMS}-i386
EOF
cat << EOF >> epics-base/configure/CONFIG_SITE
CROSS_COMPILER_TARGET_ARCHS+=RTEMS-pc386
EOF
# find local qemu-system-i386
export PATH="$HOME/.cache/qemu/usr/bin:$PATH"
echo -n "Using QEMU: "
type qemu-system-i386 || echo "Missing qemu"
EXTRA=RTEMS_QEMU_FIXUPS=YES
fi
make -j2 -C epics-base $EXTRA

26
modules/ca/.travis.yml Normal file
View File

@@ -0,0 +1,26 @@
sudo: false
dist: trusty
language: c
compiler:
- gcc
addons:
apt:
packages:
- libreadline6-dev
- libncurses5-dev
- perl
- clang
- g++-mingw-w64-i686
install:
- ./.ci/travis-prepare.sh
script:
- ./.ci/travis-build.sh
env:
- BRCORE=master BRLIBCOM=master TEST=NO
- CMPLR=clang TEST=NO
- USR_CXXFLAGS=-std=c++11 TEST=NO
- CMPLR=clang USR_CXXFLAGS=-std=c++11 TEST=NO
- WINE=32 TEST=NO STATIC=YES
- WINE=32 TEST=NO STATIC=NO
- RTEMS=4.10 TEST=NO
- RTEMS=4.9 TEST=NO

View File

@@ -7,9 +7,11 @@
# in file LICENSE that is included with this distribution.
#*************************************************************************
TOP = ../..
TOP = .
include $(TOP)/configure/CONFIG
DIRS += src
DIRS += configure src
include $(TOP)/configure/RULES_DIRS
src_DEPEND_DIRS = configure
include $(TOP)/configure/RULES_TOP

View File

@@ -0,0 +1,28 @@
# CONFIG - Load build configuration data
#
# Do not make changes to this file!
# Allow user to override where the build rules come from
RULES = $(EPICS_BASE)
# RELEASE files point to other application tops
include $(TOP)/configure/RELEASE
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common
ifdef T_A
-include $(TOP)/configure/RELEASE.Common.$(T_A)
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)
endif
CONFIG = $(RULES)/configure
include $(CONFIG)/CONFIG
# Override the Base definition:
INSTALL_LOCATION = $(TOP)
# CONFIG_SITE files contain other build configuration settings
include $(TOP)/configure/CONFIG_SITE
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common
ifdef T_A
-include $(TOP)/configure/CONFIG_SITE.Common.$(T_A)
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)
endif

View File

@@ -2,7 +2,7 @@
EPICS_CA_MAJOR_VERSION = 4
EPICS_CA_MINOR_VERSION = 13
EPICS_CA_MAINTENANCE_VERSION = 7
EPICS_CA_MAINTENANCE_VERSION = 5
# Development flag, set to zero for release versions

View File

@@ -0,0 +1,42 @@
# CONFIG_SITE
# Make any application-specific changes to the EPICS build
# configuration variables in this file.
#
# Host/target specific settings can be specified in files named
# CONFIG_SITE.$(EPICS_HOST_ARCH).Common
# CONFIG_SITE.Common.$(T_A)
# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)
# CHECK_RELEASE controls the consistency checking of the support
# applications pointed to by the RELEASE* files.
# Normally CHECK_RELEASE should be set to YES.
# Set CHECK_RELEASE to NO to disable checking completely.
# Set CHECK_RELEASE to WARN to perform consistency checking but
# continue building even if conflicts are found.
CHECK_RELEASE = YES
# Set this when you only want to compile this application
# for a subset of the cross-compiled target architectures
# that Base is built for.
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32
# To install files into a location other than $(TOP) define
# INSTALL_LOCATION here.
#INSTALL_LOCATION=</absolute/path/to/install/top>
# Set this when the IOC and build host use different paths
# to the install location. This may be needed to boot from
# a Microsoft FTP server say, or on some NFS configurations.
#IOCS_APPL_TOP = </IOC's/absolute/path/to/install/top>
# For application debugging purposes, override the HOST_OPT and/
# or CROSS_OPT settings from base/configure/CONFIG_SITE
#HOST_OPT = NO
#CROSS_OPT = NO
# These allow developers to override the CONFIG_SITE variable
# settings without having to modify the configure/CONFIG_SITE
# file itself.
-include $(TOP)/../CONFIG_SITE.local
-include $(TOP)/configure/CONFIG_SITE.local

View File

@@ -0,0 +1,15 @@
#*************************************************************************
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
TOP = ..
include $(TOP)/configure/CONFIG
TARGETS = $(CONFIG_TARGETS)
CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS)))
CFG += CONFIG_CA_MODULE
CFG += CONFIG_CA_VERSION
include $(TOP)/configure/RULES

View File

@@ -0,0 +1,39 @@
# RELEASE - Location of external support modules
#
# IF YOU CHANGE ANY PATHS in this file or make API changes to
# any modules it refers to, you should do a "make rebuild" in
# this application's top level directory.
#
# The EPICS build process does not check dependencies against
# any files from outside the application, so it is safest to
# rebuild it completely if any modules it depends on change.
#
# Host- or target-specific settings can be given in files named
# RELEASE.$(EPICS_HOST_ARCH).Common
# RELEASE.Common.$(T_A)
# RELEASE.$(EPICS_HOST_ARCH).$(T_A)
#
# This file is parsed by both GNUmake and an EPICS Perl script,
# so it may ONLY contain definititions of paths to other support
# modules, variable definitions that are used in module paths,
# and include statements that pull in other RELEASE files.
# Variables may be used before their values have been set.
# Build variables that are NOT used in paths should be set in
# the CONFIG_SITE file.
# Variables and paths to dependent modules:
#MODULES = /path/to/modules
#MYMODULE = $(MODULES)/my-module
# If building the EPICS modules individually, set these:
#EPICS_LIBCOM = $(MODULES)/libcom-3.17.0
#EPICS_BASE = $(MODULES)/core-7.0.1
# Set RULES here if you want to use build rules from elsewhere:
#RULES = $(MODULES)/build-rules
# These lines allow developers to override these RELEASE settings
# without having to modify this file directly.
-include $(TOP)/../RELEASE.local
-include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local
-include $(TOP)/configure/RELEASE.local

View File

@@ -0,0 +1,6 @@
# RULES
include $(CONFIG)/RULES
# Library should be rebuilt because LIBOBJS may have changed.
$(LIBNAME): ../Makefile

View File

@@ -0,0 +1,2 @@
#RULES_DIRS
include $(CONFIG)/RULES_DIRS

View File

@@ -0,0 +1,2 @@
#RULES_TOP
include $(CONFIG)/RULES_TOP

View File

@@ -7,7 +7,7 @@
# in the file LICENSE that is included with this distribution.
#*************************************************************************
TOP = ../../..
TOP = ..
include $(TOP)/configure/CONFIG
# Channel Access Client

View File

@@ -18,6 +18,7 @@
#include "errlog.h"
#define epicsExportSharedSymbols
#include "iocinf.h"
#include "syncGroup.h"
#include "oldAccess.h"
@@ -208,23 +209,23 @@ bool CASG::ioComplete (
return this->ioPendingList.count () == 0u;
}
void CASG::put ( epicsGuard < epicsMutex > & guard, chid pChan,
void CASG::put ( epicsGuard < epicsMutex > & guard, chid pChan,
unsigned type, arrayElementCount count, const void * pValue )
{
guard.assertIdenticalMutex ( this->client.mutexRef() );
sgAutoPtr < syncGroupWriteNotify > pNotify ( guard, *this );
pNotify = syncGroupWriteNotify::factory (
pNotify = syncGroupWriteNotify::factory (
this->freeListWriteOP, *this, & CASG :: recycleWriteNotifyIO, pChan );
pNotify->begin ( guard, type, count, pValue );
pNotify.release ();
}
void CASG::get ( epicsGuard < epicsMutex > & guard, chid pChan,
void CASG::get ( epicsGuard < epicsMutex > & guard, chid pChan,
unsigned type, arrayElementCount count, void *pValue )
{
guard.assertIdenticalMutex ( this->client.mutexRef() );
sgAutoPtr < syncGroupReadNotify > pNotify ( guard, *this );
pNotify = syncGroupReadNotify::factory (
pNotify = syncGroupReadNotify::factory (
this->freeListReadOP, *this, & CASG :: recycleReadNotifyIO, pChan, pValue );
pNotify->begin ( guard, type, count );
pNotify.release ();
@@ -241,14 +242,14 @@ void CASG::completionNotify (
}
}
void CASG :: recycleReadNotifyIO ( epicsGuard < epicsMutex > & guard,
void CASG :: recycleReadNotifyIO ( epicsGuard < epicsMutex > & guard,
syncGroupReadNotify & io )
{
guard.assertIdenticalMutex ( this->client.mutexRef() );
this->freeListReadOP.release ( & io );
}
void CASG :: recycleWriteNotifyIO ( epicsGuard < epicsMutex > & guard,
void CASG :: recycleWriteNotifyIO ( epicsGuard < epicsMutex > & guard,
syncGroupWriteNotify & io )
{
guard.assertIdenticalMutex ( this->client.mutexRef() );

View File

@@ -6,8 +6,8 @@
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
CURDIR := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))
TOP = ../../../..
TOP = ../..
include $(TOP)/configure/CONFIG
@@ -26,13 +26,7 @@ INC += cacIO.h
INC += caDiagnostics.h
INC += net_convert.h
INC += caVersion.h
EXPAND_COMMON += caVersion.h@
EXPAND_ME += EPICS_CA_MAJOR_VERSION
EXPAND_ME += EPICS_CA_MINOR_VERSION
EXPAND_ME += EPICS_CA_MAINTENANCE_VERSION
EXPAND_ME += EPICS_CA_DEVELOPMENT_FLAG
INC += caVersionNum.h
LIBSRCS += cac.cpp
LIBSRCS += cacChannel.cpp
@@ -80,9 +74,6 @@ LIBSRCS += hostNameCache.cpp
LIBSRCS += msgForMultiplyDefinedPV.cpp
LIBSRCS_vxWorks += templateInstances.cpp
API_HEADER = libCaAPI.h
ca_API = libCa
LIBRARY=ca
ca_RCS = ca.rc
@@ -119,7 +110,7 @@ EXPAND += S99caRepeater@
EXPAND += caRepeater.service@
EXPAND_VARS = INSTALL_BIN=$(abspath $(INSTALL_BIN))
SRC_DIRS += $(CURDIR)/test
SRC_DIRS += $(TOP)/src/client/test
PROD_HOST += ca_test
ca_test_SRCS = ca_test_main.c ca_test.c
ca_test_LIBS = ca Com
@@ -127,7 +118,20 @@ ca_test_SYS_LIBS_WIN32 = ws2_32 advapi32 user32
OBJS_vxWorks += ca_test
EXPANDVARS += EPICS_CA_MAJOR_VERSION
EXPANDVARS += EPICS_CA_MINOR_VERSION
EXPANDVARS += EPICS_CA_MAINTENANCE_VERSION
EXPANDVARS += EPICS_CA_DEVELOPMENT_FLAG
EXPANDFLAGS += $(foreach var,$(EXPANDVARS),-D$(var)="$(strip $($(var)))")
# shared library ABI version.
SHRLIB_VERSION = $(EPICS_CA_MAJOR_VERSION).$(EPICS_CA_MINOR_VERSION).$(EPICS_CA_MAINTENANCE_VERSION)
include $(TOP)/configure/RULES
# Can't use EXPAND as generated headers must appear
# in O.Common, but EXPAND emits rules for O.$(T_A)
../O.Common/caVersionNum.h: ../caVersionNum.h@
$(EXPAND_TOOL) $(EXPANDFLAGS) $($@_EXPANDFLAGS) $< $@

View File

@@ -5,11 +5,11 @@
* Operator of Los Alamos National Laboratory.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#ifndef INC_SearchDest_H
#define INC_SearchDest_H
#ifndef SearchDest_h
#define SearchDest_h
#include <osiSock.h>
#include <epicsTime.h>
@@ -28,7 +28,7 @@ struct SearchDest :
virtual void notify (
const caHdr & msg, const void * pPayload,
const osiSockAddr & addr, const epicsTime & ) = 0;
virtual void show (
virtual void show (
epicsGuard < epicsMutex > &, unsigned level ) const = 0;
};
virtual void searchRequest ( epicsGuard < epicsMutex > &,
@@ -36,4 +36,4 @@ struct SearchDest :
virtual void show ( epicsGuard < epicsMutex > &, unsigned level ) const = 0;
};
#endif // ifndef INC_SearchDest_H
#endif // SearchDest_h

View File

@@ -3,7 +3,8 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
@@ -39,6 +40,7 @@
*/
#define CAC_VERSION_GLOBAL
#define epicsExportSharedSymbols
#include "iocinf.h"
#include "oldAccess.h"
#include "cac.h"
@@ -163,13 +165,13 @@ int fetchClientContext ( ca_client_context **ppcac )
* ca_task_initialize ()
*/
// extern "C"
int epicsStdCall ca_task_initialize ( void )
int epicsShareAPI ca_task_initialize ( void )
{
return ca_context_create ( ca_disable_preemptive_callback );
}
// extern "C"
int epicsStdCall ca_context_create (
int epicsShareAPI ca_context_create (
ca_preemptive_callback_select premptiveCallbackSelect )
{
ca_client_context *pcac;
@@ -181,19 +183,19 @@ int epicsStdCall ca_context_create (
}
pcac = ( ca_client_context * ) epicsThreadPrivateGet ( caClientContextId );
if ( pcac ) {
if ( pcac ) {
if ( premptiveCallbackSelect == ca_enable_preemptive_callback &&
! pcac->preemptiveCallbakIsEnabled() ) {
return ECA_NOTTHREADED;
}
return ECA_NORMAL;
}
return ECA_NORMAL;
}
pcac = new ca_client_context (
premptiveCallbackSelect == ca_enable_preemptive_callback );
if ( ! pcac ) {
return ECA_ALLOCMEM;
}
if ( ! pcac ) {
return ECA_ALLOCMEM;
}
epicsThreadPrivateSet ( caClientContextId, (void *) pcac );
}
@@ -209,7 +211,7 @@ int epicsStdCall ca_context_create (
// defunct
//
// extern "C"
int epicsStdCall ca_modify_host_name ( const char * )
int epicsShareAPI ca_modify_host_name ( const char * )
{
return ECA_NORMAL;
}
@@ -220,7 +222,7 @@ int epicsStdCall ca_modify_host_name ( const char * )
// defunct
//
// extern "C"
int epicsStdCall ca_modify_user_name ( const char * )
int epicsShareAPI ca_modify_user_name ( const char * )
{
return ECA_NORMAL;
}
@@ -229,7 +231,7 @@ int epicsStdCall ca_modify_user_name ( const char * )
// ca_context_destroy ()
//
// extern "C"
void epicsStdCall ca_context_destroy ()
void epicsShareAPI ca_context_destroy ()
{
ca_client_context *pcac;
@@ -248,7 +250,7 @@ void epicsStdCall ca_context_destroy ()
* releases all resources alloc to a channel access client
*/
// extern "C"
int epicsStdCall ca_task_exit ()
int epicsShareAPI ca_task_exit ()
{
ca_context_destroy ();
return ECA_NORMAL;
@@ -261,7 +263,7 @@ int epicsStdCall ca_task_exit ()
* backwards compatible entry point to ca_search_and_connect()
*/
// extern "C"
int epicsStdCall ca_build_and_connect ( const char *name_str, chtype get_type,
int epicsShareAPI ca_build_and_connect ( const char *name_str, chtype get_type,
arrayElementCount get_count, chid * chan, void *pvalue,
caCh *conn_func, void *puser )
{
@@ -276,7 +278,7 @@ int epicsStdCall ca_build_and_connect ( const char *name_str, chtype get_type,
* ca_search_and_connect()
*/
// extern "C"
int epicsStdCall ca_search_and_connect (
int epicsShareAPI ca_search_and_connect (
const char * name_str, chid * chanptr,
caCh * conn_func, void * puser )
{
@@ -285,7 +287,7 @@ int epicsStdCall ca_search_and_connect (
}
// extern "C"
int epicsStdCall ca_create_channel (
int epicsShareAPI ca_create_channel (
const char * name_str, caCh * conn_func, void * puser,
capri priority, chid * chanptr )
{
@@ -360,7 +362,7 @@ int epicsStdCall ca_create_channel (
* its context
*/
// extern "C"
int epicsStdCall ca_clear_channel ( chid pChan )
int epicsShareAPI ca_clear_channel ( chid pChan )
{
ca_client_context & cac = pChan->getClientCtx ();
{
@@ -399,7 +401,7 @@ int epicsStdCall ca_clear_channel ( chid pChan )
* Specify an event subroutine to be run for asynch exceptions
*/
// extern "C"
int epicsStdCall ca_add_exception_event ( caExceptionHandler *pfunc, void *arg )
int epicsShareAPI ca_add_exception_event ( caExceptionHandler *pfunc, void *arg )
{
ca_client_context *pcac;
int caStatus = fetchClientContext ( &pcac );
@@ -415,7 +417,7 @@ int epicsStdCall ca_add_exception_event ( caExceptionHandler *pfunc, void *arg )
/*
* ca_add_masked_array_event
*/
int epicsStdCall ca_add_masked_array_event (
int epicsShareAPI ca_add_masked_array_event (
chtype type, arrayElementCount count, chid pChan,
caEventCallBackFunc *pCallBack, void *pCallBackArg,
ca_real, ca_real, ca_real,
@@ -428,19 +430,19 @@ int epicsStdCall ca_add_masked_array_event (
/*
* ca_clear_event ()
*/
int epicsStdCall ca_clear_event ( evid pMon )
int epicsShareAPI ca_clear_event ( evid pMon )
{
return ca_clear_subscription ( pMon );
}
// extern "C"
chid epicsStdCall ca_evid_to_chid ( evid pMon )
chid epicsShareAPI ca_evid_to_chid ( evid pMon )
{
return & pMon->channel ();
}
// extern "C"
int epicsStdCall ca_pend ( ca_real timeout, int early )
int epicsShareAPI ca_pend ( ca_real timeout, int early )
{
if ( early ) {
return ca_pend_io ( timeout );
@@ -454,7 +456,7 @@ int epicsStdCall ca_pend ( ca_real timeout, int early )
* ca_pend_event ()
*/
// extern "C"
int epicsStdCall ca_pend_event ( ca_real timeout )
int epicsShareAPI ca_pend_event ( ca_real timeout )
{
ca_client_context *pcac;
int status = fetchClientContext ( &pcac );
@@ -465,7 +467,7 @@ int epicsStdCall ca_pend_event ( ca_real timeout )
try {
// preserve past odd ball behavior of waiting forever when
// the delay is zero
if ( timeout == 0.0 ) {
if ( timeout == 0.0 ) {
while ( true ) {
pcac->pendEvent ( 60.0 );
}
@@ -481,7 +483,7 @@ int epicsStdCall ca_pend_event ( ca_real timeout )
* ca_pend_io ()
*/
// extern "C"
int epicsStdCall ca_pend_io ( ca_real timeout )
int epicsShareAPI ca_pend_io ( ca_real timeout )
{
ca_client_context *pcac;
int status = fetchClientContext ( &pcac );
@@ -506,7 +508,7 @@ int epicsStdCall ca_pend_io ( ca_real timeout )
/*
* ca_flush_io ()
*/
int epicsStdCall ca_flush_io ()
int epicsShareAPI ca_flush_io ()
{
ca_client_context * pcac;
int caStatus = fetchClientContext (&pcac);
@@ -523,7 +525,7 @@ int epicsStdCall ca_flush_io ()
/*
* CA_TEST_IO ()
*/
int epicsStdCall ca_test_io ()
int epicsShareAPI ca_test_io ()
{
ca_client_context *pcac;
int caStatus = fetchClientContext ( &pcac );
@@ -543,7 +545,7 @@ int epicsStdCall ca_test_io ()
* CA_SIGNAL()
*/
// extern "C"
void epicsStdCall ca_signal ( long ca_status, const char *message )
void epicsShareAPI ca_signal ( long ca_status, const char *message )
{
ca_signal_with_file_and_lineno ( ca_status, message, NULL, 0 );
}
@@ -558,7 +560,7 @@ void epicsStdCall ca_signal ( long ca_status, const char *message )
* (if they call this routine again).
*/
// extern "C"
const char * epicsStdCall ca_message ( long ca_status )
const char * epicsShareAPI ca_message ( long ca_status )
{
unsigned msgNo = CA_EXTRACT_MSG_NO ( ca_status );
@@ -574,7 +576,7 @@ const char * epicsStdCall ca_message ( long ca_status )
* ca_signal_with_file_and_lineno()
*/
// extern "C"
void epicsStdCall ca_signal_with_file_and_lineno ( long ca_status,
void epicsShareAPI ca_signal_with_file_and_lineno ( long ca_status,
const char *message, const char *pfilenm, int lineno )
{
ca_signal_formated ( ca_status, pfilenm, lineno, message );
@@ -584,7 +586,7 @@ void epicsStdCall ca_signal_with_file_and_lineno ( long ca_status,
* ca_signal_formated()
*/
// extern "C"
void epicsStdCall ca_signal_formated ( long ca_status, const char *pfilenm,
void epicsShareAPI ca_signal_formated ( long ca_status, const char *pfilenm,
int lineno, const char *pFormat, ... )
{
ca_client_context *pcac;
@@ -620,7 +622,7 @@ void epicsStdCall ca_signal_formated ( long ca_status, const char *pfilenm,
*
*/
// extern "C"
int epicsStdCall ca_add_fd_registration ( CAFDHANDLER * func, void * arg )
int epicsShareAPI ca_add_fd_registration ( CAFDHANDLER * func, void * arg )
{
ca_client_context *pcac;
int caStatus = fetchClientContext ( &pcac );
@@ -638,7 +640,7 @@ int epicsStdCall ca_add_fd_registration ( CAFDHANDLER * func, void * arg )
* function that returns the CA version string
*/
// extern "C"
const char * epicsStdCall ca_version ()
const char * epicsShareAPI ca_version ()
{
return CA_VERSION_STRING ( CA_MINOR_PROTOCOL_REVISION );
}
@@ -647,7 +649,7 @@ const char * epicsStdCall ca_version ()
* ca_replace_printf_handler ()
*/
// extern "C"
int epicsStdCall ca_replace_printf_handler ( caPrintfFunc *ca_printf_func )
int epicsShareAPI ca_replace_printf_handler ( caPrintfFunc *ca_printf_func )
{
ca_client_context *pcac;
int caStatus = fetchClientContext (&pcac);
@@ -667,7 +669,7 @@ int epicsStdCall ca_replace_printf_handler ( caPrintfFunc *ca_printf_func )
* (for testing purposes only)
*/
// extern "C"
unsigned epicsStdCall ca_get_ioc_connection_count ()
unsigned epicsShareAPI ca_get_ioc_connection_count ()
{
ca_client_context * pcac;
int caStatus = fetchClientContext ( & pcac );
@@ -678,7 +680,7 @@ unsigned epicsStdCall ca_get_ioc_connection_count ()
return pcac->circuitCount ();
}
unsigned epicsStdCall ca_beacon_anomaly_count ()
unsigned epicsShareAPI ca_beacon_anomaly_count ()
{
ca_client_context * pcac;
int caStatus = fetchClientContext ( & pcac );
@@ -690,15 +692,15 @@ unsigned epicsStdCall ca_beacon_anomaly_count ()
}
// extern "C"
int epicsStdCall ca_channel_status ( epicsThreadId /* tid */ )
int epicsShareAPI ca_channel_status ( epicsThreadId /* tid */ )
{
::printf ("The R3.14 EPICS OS abstraction API does not allow peeking at thread private storage of another thread.\n");
::printf ("Please call \"ca_client_status ( unsigned level )\" from the subsystem specific diagnostic code.\n");
return ECA_ANACHRONISM;
return ECA_ANACHRONISM;
}
// extern "C"
int epicsStdCall ca_client_status ( unsigned level )
int epicsShareAPI ca_client_status ( unsigned level )
{
ca_client_context *pcac;
int caStatus = fetchClientContext ( &pcac );
@@ -710,7 +712,7 @@ int epicsStdCall ca_client_status ( unsigned level )
return ECA_NORMAL;
}
int epicsStdCall ca_context_status ( ca_client_context * pcac, unsigned level )
int epicsShareAPI ca_context_status ( ca_client_context * pcac, unsigned level )
{
pcac->show ( level );
return ECA_NORMAL;
@@ -723,7 +725,7 @@ int epicsStdCall ca_context_status ( ca_client_context * pcac, unsigned level )
* by another thread
*/
// extern "C"
struct ca_client_context * epicsStdCall ca_current_context ()
struct ca_client_context * epicsShareAPI ca_current_context ()
{
struct ca_client_context *pCtx;
if ( caClientContextId ) {
@@ -743,7 +745,7 @@ struct ca_client_context * epicsStdCall ca_current_context ()
* by another thread
*/
// extern "C"
int epicsStdCall ca_attach_context ( struct ca_client_context * pCtx )
int epicsShareAPI ca_attach_context ( struct ca_client_context * pCtx )
{
ca_client_context *pcac = (ca_client_context *) epicsThreadPrivateGet ( caClientContextId );
if ( pcac && pCtx != 0 ) {
@@ -756,14 +758,14 @@ int epicsStdCall ca_attach_context ( struct ca_client_context * pCtx )
return ECA_NORMAL;
}
void epicsStdCall ca_detach_context ()
void epicsShareAPI ca_detach_context ()
{
if ( caClientContextId ) {
epicsThreadPrivateSet ( caClientContextId, 0 );
}
}
int epicsStdCall ca_preemtive_callback_is_enabled ()
int epicsShareAPI ca_preemtive_callback_is_enabled ()
{
ca_client_context *pcac = (ca_client_context *) epicsThreadPrivateGet ( caClientContextId );
if ( ! pcac ) {
@@ -774,7 +776,7 @@ int epicsStdCall ca_preemtive_callback_is_enabled ()
// extern "C"
void epicsStdCall ca_self_test ()
void epicsShareAPI ca_self_test ()
{
ca_client_context *pcac = (ca_client_context *) epicsThreadPrivateGet ( caClientContextId );
if ( ! pcac ) {
@@ -783,7 +785,8 @@ void epicsStdCall ca_self_test ()
pcac->selfTest ();
}
const int epicsTypeToDBR_XXXX [lastEpicsType+1] = {
// extern "C"
epicsShareDef const int epicsTypeToDBR_XXXX [lastEpicsType+1] = {
DBR_SHORT, /* forces conversion fronm uint8 to int16 */
DBR_CHAR,
DBR_SHORT,
@@ -797,257 +800,265 @@ const int epicsTypeToDBR_XXXX [lastEpicsType+1] = {
DBR_STRING
};
const epicsType DBR_XXXXToEpicsType [LAST_BUFFER_TYPE+1] = {
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
// extern "C"
epicsShareDef const epicsType DBR_XXXXToEpicsType [LAST_BUFFER_TYPE+1] = {
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
epicsOldStringT,
epicsInt16T,
epicsFloat32T,
epicsEnum16T,
epicsUInt8T,
epicsInt32T,
epicsFloat64T,
epicsUInt16T,
epicsUInt16T,
epicsOldStringT,
epicsOldStringT
epicsUInt16T,
epicsUInt16T,
epicsOldStringT,
epicsOldStringT
};
const unsigned short dbr_size[LAST_BUFFER_TYPE+1] = {
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
// extern "C"
epicsShareDef const unsigned short dbr_size[LAST_BUFFER_TYPE+1] = {
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(struct dbr_sts_string), /* string field with status */
sizeof(struct dbr_sts_short), /* short field with status */
sizeof(struct dbr_sts_float), /* float field with status */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(struct dbr_sts_string), /* string field with status */
sizeof(struct dbr_sts_short), /* short field with status */
sizeof(struct dbr_sts_float), /* float field with status */
sizeof(struct dbr_sts_enum), /* item number with status */
sizeof(struct dbr_sts_char), /* char field with status */
sizeof(struct dbr_sts_long), /* long field with status */
sizeof(struct dbr_sts_double), /* double field with time */
sizeof(struct dbr_time_string), /* string field with time */
sizeof(struct dbr_sts_enum), /* item number with status */
sizeof(struct dbr_sts_char), /* char field with status */
sizeof(struct dbr_sts_long), /* long field with status */
sizeof(struct dbr_sts_double), /* double field with time */
sizeof(struct dbr_time_string), /* string field with time */
sizeof(struct dbr_time_short), /* short field with time */
sizeof(struct dbr_time_float), /* float field with time */
sizeof(struct dbr_time_enum), /* item number with time */
sizeof(struct dbr_time_char), /* char field with time */
sizeof(struct dbr_time_long), /* long field with time */
sizeof(struct dbr_time_short), /* short field with time */
sizeof(struct dbr_time_float), /* float field with time */
sizeof(struct dbr_time_enum), /* item number with time */
sizeof(struct dbr_time_char), /* char field with time */
sizeof(struct dbr_time_long), /* long field with time */
sizeof(struct dbr_time_double), /* double field with time */
sizeof(struct dbr_sts_string), /* graphic string info */
sizeof(struct dbr_gr_short), /* graphic short info */
sizeof(struct dbr_gr_float), /* graphic float info */
sizeof(struct dbr_gr_enum), /* graphic item info */
sizeof(struct dbr_time_double), /* double field with time */
sizeof(struct dbr_sts_string), /* graphic string info */
sizeof(struct dbr_gr_short), /* graphic short info */
sizeof(struct dbr_gr_float), /* graphic float info */
sizeof(struct dbr_gr_enum), /* graphic item info */
sizeof(struct dbr_gr_char), /* graphic char info */
sizeof(struct dbr_gr_long), /* graphic long info */
sizeof(struct dbr_gr_double), /* graphic double info */
sizeof(struct dbr_sts_string), /* control string info */
sizeof(struct dbr_ctrl_short), /* control short info */
sizeof(struct dbr_gr_char), /* graphic char info */
sizeof(struct dbr_gr_long), /* graphic long info */
sizeof(struct dbr_gr_double), /* graphic double info */
sizeof(struct dbr_sts_string), /* control string info */
sizeof(struct dbr_ctrl_short), /* control short info */
sizeof(struct dbr_ctrl_float), /* control float info */
sizeof(struct dbr_ctrl_enum), /* control item info */
sizeof(struct dbr_ctrl_char), /* control char info */
sizeof(struct dbr_ctrl_long), /* control long info */
sizeof(struct dbr_ctrl_double), /* control double info */
sizeof(struct dbr_ctrl_float), /* control float info */
sizeof(struct dbr_ctrl_enum), /* control item info */
sizeof(struct dbr_ctrl_char), /* control char info */
sizeof(struct dbr_ctrl_long), /* control long info */
sizeof(struct dbr_ctrl_double), /* control double info */
sizeof(dbr_put_ackt_t), /* put ackt */
sizeof(dbr_put_acks_t), /* put acks */
sizeof(struct dbr_stsack_string),/* string field with status/ack*/
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_put_ackt_t), /* put ackt */
sizeof(dbr_put_acks_t), /* put acks */
sizeof(struct dbr_stsack_string),/* string field with status/ack*/
sizeof(dbr_string_t), /* string max size */
};
const unsigned short dbr_value_size[LAST_BUFFER_TYPE+1] = {
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
// extern "C"
epicsShareDef const unsigned short dbr_value_size[LAST_BUFFER_TYPE+1] = {
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_double_t), /* double */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_short_t), /* short */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(dbr_float_t), /* IEEE Float */
sizeof(dbr_enum_t), /* item number */
sizeof(dbr_char_t), /* character */
sizeof(dbr_long_t), /* long */
sizeof(dbr_double_t), /* double */
sizeof(dbr_ushort_t), /* put_ackt */
sizeof(dbr_ushort_t), /* put_acks */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_ushort_t), /* put_ackt */
sizeof(dbr_ushort_t), /* put_acks */
sizeof(dbr_string_t), /* string max size */
sizeof(dbr_string_t), /* string max size */
};
//extern "C"
const enum dbr_value_class dbr_value_class[LAST_BUFFER_TYPE+1] = {
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
epicsShareDef const enum dbr_value_class dbr_value_class[LAST_BUFFER_TYPE+1] = {
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
dbr_class_int,
dbr_class_int,
dbr_class_string,
dbr_class_string, /* string max size */
dbr_class_string, /* string max size */
dbr_class_int, /* short */
dbr_class_float, /* IEEE Float */
dbr_class_int, /* item number */
dbr_class_int, /* character */
dbr_class_int, /* long */
dbr_class_float, /* double */
dbr_class_int,
dbr_class_int,
dbr_class_string,
dbr_class_string, /* string max size */
};
const unsigned short dbr_value_offset[LAST_BUFFER_TYPE+1] = {
0, /* string */
0, /* short */
0, /* IEEE Float */
0, /* item number */
0, /* character */
0, /* long */
0, /* IEEE double */
(unsigned short) offsetof(dbr_sts_string,value[0]), /* string field with status */
(unsigned short) offsetof(dbr_sts_short,value), /* short field with status */
(unsigned short) offsetof(dbr_sts_float,value), /* float field with status */
(unsigned short) offsetof(dbr_sts_enum,value), /* item number with status */
(unsigned short) offsetof(dbr_sts_char,value), /* char field with status */
(unsigned short) offsetof(dbr_sts_long,value), /* long field with status */
(unsigned short) offsetof(dbr_sts_double,value), /* double field with time */
(unsigned short) offsetof(dbr_time_string,value[0] ), /* string field with time */
(unsigned short) offsetof(dbr_time_short,value), /* short field with time */
(unsigned short) offsetof(dbr_time_float,value), /* float field with time */
(unsigned short) offsetof(dbr_time_enum,value), /* item number with time */
(unsigned short) offsetof(dbr_time_char,value), /* char field with time */
(unsigned short) offsetof(dbr_time_long,value), /* long field with time */
(unsigned short) offsetof(dbr_time_double,value), /* double field with time */
(unsigned short) offsetof(dbr_sts_string,value[0]), /* graphic string info */
(unsigned short) offsetof(dbr_gr_short,value), /* graphic short info */
(unsigned short) offsetof(dbr_gr_float,value), /* graphic float info */
(unsigned short) offsetof(dbr_gr_enum,value), /* graphic item info */
(unsigned short) offsetof(dbr_gr_char,value), /* graphic char info */
(unsigned short) offsetof(dbr_gr_long,value), /* graphic long info */
(unsigned short) offsetof(dbr_gr_double,value), /* graphic double info */
(unsigned short) offsetof(dbr_sts_string,value[0]), /* control string info */
(unsigned short) offsetof(dbr_ctrl_short,value), /* control short info */
(unsigned short) offsetof(dbr_ctrl_float,value), /* control float info */
(unsigned short) offsetof(dbr_ctrl_enum,value), /* control item info */
(unsigned short) offsetof(dbr_ctrl_char,value), /* control char info */
(unsigned short) offsetof(dbr_ctrl_long,value), /* control long info */
(unsigned short) offsetof(dbr_ctrl_double,value), /* control double info */
0, /* put ackt */
0, /* put acks */
(unsigned short) offsetof(dbr_stsack_string,value[0]), /* string field with status */
0, /* string */
// extern "C"
epicsShareDef const unsigned short dbr_value_offset[LAST_BUFFER_TYPE+1] = {
0, /* string */
0, /* short */
0, /* IEEE Float */
0, /* item number */
0, /* character */
0, /* long */
0, /* IEEE double */
(unsigned short) offsetof(dbr_sts_string,value[0]),/* string field with status */
(unsigned short) offsetof(dbr_sts_short,value), /* short field with status */
(unsigned short) offsetof(dbr_sts_float,value), /* float field with status */
(unsigned short) offsetof(dbr_sts_enum,value), /* item number with status */
(unsigned short) offsetof(dbr_sts_char,value), /* char field with status */
(unsigned short) offsetof(dbr_sts_long,value), /* long field with status */
(unsigned short) offsetof(dbr_sts_double,value), /* double field with time */
(unsigned short) offsetof(dbr_time_string,value[0] ),/* string field with time */
(unsigned short) offsetof(dbr_time_short,value), /* short field with time */
(unsigned short) offsetof(dbr_time_float,value), /* float field with time */
(unsigned short) offsetof(dbr_time_enum,value), /* item number with time */
(unsigned short) offsetof(dbr_time_char,value), /* char field with time */
(unsigned short) offsetof(dbr_time_long,value), /* long field with time */
(unsigned short) offsetof(dbr_time_double,value), /* double field with time */
(unsigned short) offsetof(dbr_sts_string,value[0]),/* graphic string info */
(unsigned short) offsetof(dbr_gr_short,value), /* graphic short info */
(unsigned short) offsetof(dbr_gr_float,value), /* graphic float info */
(unsigned short) offsetof(dbr_gr_enum,value), /* graphic item info */
(unsigned short) offsetof(dbr_gr_char,value), /* graphic char info */
(unsigned short) offsetof(dbr_gr_long,value), /* graphic long info */
(unsigned short) offsetof(dbr_gr_double,value), /* graphic double info */
(unsigned short) offsetof(dbr_sts_string,value[0]),/* control string info */
(unsigned short) offsetof(dbr_ctrl_short,value), /* control short info */
(unsigned short) offsetof(dbr_ctrl_float,value), /* control float info */
(unsigned short) offsetof(dbr_ctrl_enum,value), /* control item info */
(unsigned short) offsetof(dbr_ctrl_char,value), /* control char info */
(unsigned short) offsetof(dbr_ctrl_long,value), /* control long info */
(unsigned short) offsetof(dbr_ctrl_double,value), /* control double info */
0, /* put ackt */
0, /* put acks */
(unsigned short) offsetof(dbr_stsack_string,value[0]),/* string field with status */
0, /* string */
};
const char *dbf_text[LAST_TYPE+3] = {
"TYPENOTCONN",
"DBF_STRING",
"DBF_SHORT",
"DBF_FLOAT",
"DBF_ENUM",
"DBF_CHAR",
"DBF_LONG",
"DBF_DOUBLE",
"DBF_NO_ACCESS"
// extern "C"
epicsShareDef const char *dbf_text[LAST_TYPE+3] = {
"TYPENOTCONN",
"DBF_STRING",
"DBF_SHORT",
"DBF_FLOAT",
"DBF_ENUM",
"DBF_CHAR",
"DBF_LONG",
"DBF_DOUBLE",
"DBF_NO_ACCESS"
};
const char *dbf_text_invalid = "DBF_invalid";
// extern "C"
epicsShareDef const char *dbf_text_invalid = "DBF_invalid";
const short dbf_text_dim = (sizeof dbf_text)/(sizeof (char *));
// extern "C"
epicsShareDef const short dbf_text_dim = (sizeof dbf_text)/(sizeof (char *));
const char *dbr_text[LAST_BUFFER_TYPE+1] = {
// extern "C"
epicsShareDef const char *dbr_text[LAST_BUFFER_TYPE+1] = {
"DBR_STRING",
"DBR_SHORT",
"DBR_FLOAT",
@@ -1089,6 +1100,8 @@ const char *dbr_text[LAST_BUFFER_TYPE+1] = {
"DBR_CLASS_NAME"
};
const char *dbr_text_invalid = "DBR_invalid";
// extern "C"
epicsShareDef const char *dbr_text_invalid = "DBR_invalid";
const short dbr_text_dim = (sizeof dbr_text) / (sizeof (char *)) + 1;
// extern "C"
epicsShareDef const short dbr_text_dim = (sizeof dbr_text) / (sizeof (char *)) + 1;

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
* Operator of Los Alamos National Laboratory.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#include <stdio.h>
@@ -19,15 +19,15 @@ int main ( int argc, char **argv )
unsigned progressLoggingLevel;
unsigned channelCount;
unsigned repetitionCount;
enum ca_preemptive_callback_select preempt;
int aBoolean;
enum ca_preemptive_callback_select preempt;
int aBoolean;
if ( argc < 2 || argc > 6 ) {
printf ("usage: %s <PV name> [progress logging level] [channel count] "
"[repetition count] [enable preemptive callback]\n",
"[repetition count] [enable preemptive callback]\n",
argv[0] );
return 1;
return 1;
}
if ( argc >= 3 ) {
@@ -57,12 +57,12 @@ int main ( int argc, char **argv )
else {
aBoolean = 0;
}
if ( aBoolean ) {
preempt = ca_enable_preemptive_callback;
}
else {
preempt = ca_disable_preemptive_callback;
}
if ( aBoolean ) {
preempt = ca_enable_preemptive_callback;
}
else {
preempt = ca_disable_preemptive_callback;
}
acctst ( argv[1], progressLoggingLevel, channelCount, repetitionCount, preempt );

View File

@@ -60,7 +60,7 @@ struct AutoInit {
AutoInit ();
};
AutoInit :: AutoInit ()
AutoInit :: AutoInit ()
{
iocshRegister ( &acctstFuncDef, acctstCallFunc );
}

View File

@@ -3,38 +3,38 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#ifndef INC_addrList_H
#define INC_addrList_H
#ifndef addrListh
#define addrListh
#include "envDefs.h"
#include "shareLib.h"
#include "envDefs.h"
#include "osiSock.h"
#include "libCaAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
LIBCA_API void epicsStdCall configureChannelAccessAddressList
epicsShareFunc void epicsShareAPI configureChannelAccessAddressList
( struct ELLLIST *pList, SOCKET sock, unsigned short port );
LIBCA_API int epicsStdCall addAddrToChannelAccessAddressList
( struct ELLLIST *pList, const ENV_PARAM *pEnv,
epicsShareFunc int epicsShareAPI addAddrToChannelAccessAddressList
( struct ELLLIST *pList, const ENV_PARAM *pEnv,
unsigned short port, int ignoreNonDefaultPort );
LIBCA_API void epicsStdCall printChannelAccessAddressList
epicsShareFunc void epicsShareAPI printChannelAccessAddressList
( const struct ELLLIST *pList );
LIBCA_API void epicsStdCall removeDuplicateAddresses
epicsShareFunc void epicsShareAPI removeDuplicateAddresses
( struct ELLLIST *pDestList, ELLLIST *pSrcList, int silent);
#ifdef __cplusplus
}
#endif
#endif /* ifndef INC_addrList_H */
#endif /* ifndef addrListh */

View File

@@ -3,31 +3,41 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
*
/*
*
*
* L O S A L A M O S
* Los Alamos National Laboratory
* Los Alamos, New Mexico 87545
*
*
* Copyright, The Regents of the University of California.
*
*
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
*
*
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
*/
#ifndef INC_autoPtrFreeList_H
#define INC_autoPtrFreeList_H
#ifndef autoPtrFreeListh
#define autoPtrFreeListh
#ifdef epicsExportSharedSymbols
# define autoPtrFreeListh_epicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#include "tsFreeList.h"
#include "compilerDependencies.h"
#ifdef autoPtrFreeListh_epicsExportSharedSymbols
# define epicsExportSharedSymbols
#endif
template < class T, unsigned N = 0x400, class MUTEX = epicsMutex >
class autoPtrFreeList {
public:
@@ -46,7 +56,7 @@ private:
};
template < class T, unsigned N, class MUTEX >
inline autoPtrFreeList < T, N, MUTEX >::autoPtrFreeList (
inline autoPtrFreeList < T, N, MUTEX >::autoPtrFreeList (
tsFreeList < T, N, MUTEX > & freeListIn, T * pIn ) :
p ( pIn ), freeList ( freeListIn ) {}
@@ -91,4 +101,4 @@ inline T * autoPtrFreeList < T, N, MUTEX >::release ()
return pTmp;
}
#endif // #ifndef INC_autoPtrFreeList_H
#endif // #ifdef autoPtrFreeListh

View File

@@ -5,22 +5,22 @@
* Operator of Los Alamos National Laboratory.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
*
/*
*
*
* L O S A L A M O S
* Los Alamos National Laboratory
* Los Alamos, New Mexico 87545
*
*
* Copyright, The Regents of the University of California.
*
*
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
*
*
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
*/
#ifndef autoPtrRecycleh
@@ -29,7 +29,7 @@
template < class T >
class autoPtrRecycle {
public:
autoPtrRecycle (
autoPtrRecycle (
epicsGuard < epicsMutex > &, chronIntIdResTable < baseNMIU > &,
cacRecycle &, T * );
~autoPtrRecycle ();
@@ -43,12 +43,12 @@ private:
chronIntIdResTable < baseNMIU > & ioTable;
epicsGuard < epicsMutex > & guard;
// not implemented
autoPtrRecycle ( const autoPtrRecycle & );
autoPtrRecycle & operator = ( const autoPtrRecycle & );
autoPtrRecycle ( const autoPtrRecycle & );
autoPtrRecycle & operator = ( const autoPtrRecycle & );
};
template < class T >
inline autoPtrRecycle<T>::autoPtrRecycle (
inline autoPtrRecycle<T>::autoPtrRecycle (
epicsGuard < epicsMutex > & guardIn, chronIntIdResTable < baseNMIU > & tbl,
cacRecycle & rIn, T * pIn ) :
p ( pIn ), r ( rIn ), ioTable ( tbl ), guard ( guardIn ) {}

View File

@@ -3,11 +3,12 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
/*
*
* L O S A L A M O S
* Los Alamos National Laboratory

View File

@@ -3,11 +3,12 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
/*
*
* L O S A L A M O S
* Los Alamos National Laboratory
@@ -27,6 +28,7 @@
#include "errlog.h"
#define epicsExportSharedSymbols
#include "iocinf.h"
#include "virtualCircuit.h"
#include "bhe.h"
@@ -40,12 +42,12 @@
* start up
*
* if creating this in response to a search reply
* and not in response to a beacon then
* and not in response to a beacon then
* we set the beacon time stamp to
* zero (so we can correctly compute the period
* between the 1st and 2nd beacons)
*/
bhe::bhe ( epicsMutex & mutexIn, const epicsTime & initialTimeStamp,
bhe::bhe ( epicsMutex & mutexIn, const epicsTime & initialTimeStamp,
unsigned initialBeaconNumber, const inetAddrID & addr ) :
inetAddrID ( addr ), timeStamp ( initialTimeStamp ), averagePeriod ( - DBL_MAX ),
mutex ( mutexIn ), pIIU ( 0 ), lastBeaconNumber ( initialBeaconNumber )
@@ -72,7 +74,7 @@ void bhe::beaconAnomalyNotify ( epicsGuard < epicsMutex > & guard )
}
#ifdef DEBUG
void bhe::logBeacon ( const char * pDiagnostic,
void bhe::logBeacon ( const char * pDiagnostic,
const double & currentPeriod,
const epicsTime & currentTime )
{
@@ -80,10 +82,10 @@ void bhe::logBeacon ( const char * pDiagnostic,
char name[64];
this->name ( name, sizeof ( name ) );
char date[64];
currentTime.strftime ( date, sizeof ( date ),
currentTime.strftime ( date, sizeof ( date ),
"%a %b %d %Y %H:%M:%S.%f");
::printf ( "%s cp=%g ap=%g %s %s\n",
pDiagnostic, currentPeriod,
pDiagnostic, currentPeriod,
this->averagePeriod, name, date );
}
}
@@ -103,7 +105,7 @@ void bhe::logBeaconDiscard ( unsigned beaconAdvance,
char name[64];
this->name ( name, sizeof ( name ) );
char date[64];
currentTime.strftime ( date, sizeof ( date ),
currentTime.strftime ( date, sizeof ( date ),
"%a %b %d %Y %H:%M:%S.%f");
::printf ( "bb %u %s %s\n",
beaconAdvance, name, date );
@@ -121,16 +123,16 @@ void bhe::logBeaconDiscard ( unsigned /* beaconAdvance */,
*
* updates beacon period, and looks for beacon anomalies
*/
bool bhe::updatePeriod (
epicsGuard < epicsMutex > & guard, const epicsTime & programBeginTime,
const epicsTime & currentTime, ca_uint32_t beaconNumber,
bool bhe::updatePeriod (
epicsGuard < epicsMutex > & guard, const epicsTime & programBeginTime,
const epicsTime & currentTime, ca_uint32_t beaconNumber,
unsigned protocolRevision )
{
guard.assertIdenticalMutex ( this->mutex );
//
// this block is enetered if the beacon was created as a side effect of
// creating a connection and so we dont yet know the first beacon time
// creating a connection and so we dont yet know the first beacon time
// and sequence number
//
if ( this->timeStamp == epicsTime () ) {
@@ -140,7 +142,7 @@ bool bhe::updatePeriod (
this->beaconAnomalyNotify ( guard );
/*
/*
* this is the 1st beacon seen - the beacon time stamp
* was not initialized during BHE create because
* a TCP/IP connection created the beacon.
@@ -165,15 +167,15 @@ bool bhe::updatePeriod (
}
this->lastBeaconNumber = beaconNumber;
// throw out sequence numbers just prior to, or the same as, the last one received
// throw out sequence numbers just prior to, or the same as, the last one received
// (this situation is probably caused by a temporary duplicate route )
if ( beaconSeqAdvance == 0 || beaconSeqAdvance > ca_uint32_max - 256 ) {
logBeaconDiscard ( beaconSeqAdvance, currentTime );
return false;
}
// throw out sequence numbers that jump forward by only a few numbers
// (this situation is probably caused by a duplicate route
// throw out sequence numbers that jump forward by only a few numbers
// (this situation is probably caused by a duplicate route
// or a beacon due to input queue overun)
if ( beaconSeqAdvance > 1 && beaconSeqAdvance < 4 ) {
logBeaconDiscard ( beaconSeqAdvance, currentTime );
@@ -203,7 +205,7 @@ bool bhe::updatePeriod (
/*
* ignore beacons seen for the first time shortly after
* init, but do not ignore beacons arriving with a short
* period because the IOC was rebooted soon after the
* period because the IOC was rebooted soon after the
* client starts up.
*/
totalRunningTime = this->timeStamp - programBeginTime;
@@ -215,24 +217,24 @@ bool bhe::updatePeriod (
/*
* Is this an IOC seen because of a restored
* network segment?
* network segment?
*
* It may be possible to get false triggers here
* It may be possible to get false triggers here
* if the client is busy, but this does not cause
* problems because the echo response will tell us
* problems because the echo response will tell us
* that the server is available
*/
if ( currentPeriod >= this->averagePeriod * 1.25 ) {
/*
* trigger on any missing beacon
/*
* trigger on any missing beacon
* if connected to this server
*/
*/
this->beaconAnomalyNotify ( guard );
if ( currentPeriod >= this->averagePeriod * 3.25 ) {
/*
* trigger on any 3 contiguous missing beacons
/*
* trigger on any 3 contiguous missing beacons
* if not connected to this server
*/
netChange = true;
@@ -246,9 +248,9 @@ bool bhe::updatePeriod (
* IOC reboots). Lower tolarance here because we
* dont have to worry about lost beacons.
*
* It may be possible to get false triggers here
* It may be possible to get false triggers here
* if the client is busy, but this does not cause
* problems because the echo response will tell us
* problems because the echo response will tell us
* that the server is available
*/
else if ( currentPeriod <= this->averagePeriod * 0.80 ) {
@@ -257,14 +259,14 @@ bool bhe::updatePeriod (
logBeacon ( "bal", currentPeriod, currentTime );
}
else if ( this->pIIU ) {
// update state of health for active virtual circuits
// update state of health for active virtual circuits
// if the beacon looks ok
this->pIIU->beaconArrivalNotify ( guard );
logBeacon ( "vb", currentPeriod, currentTime );
}
// update a running average period
this->averagePeriod = currentPeriod * 0.125 +
this->averagePeriod = currentPeriod * 0.125 +
this->averagePeriod * 0.875;
}
@@ -284,22 +286,22 @@ void bhe::show ( epicsGuard < epicsMutex > &, unsigned level ) const
char host [64];
this->name ( host, sizeof ( host ) );
if ( this->averagePeriod == -DBL_MAX ) {
::printf ( "CA beacon hash entry for %s <no period estimate>\n",
::printf ( "CA beacon hash entry for %s <no period estimate>\n",
host );
}
else {
::printf ( "CA beacon hash entry for %s with period estimate %f\n",
::printf ( "CA beacon hash entry for %s with period estimate %f\n",
host, this->averagePeriod );
}
if ( level > 0u ) {
char date[64];
this->timeStamp.strftime ( date, sizeof ( date ), "%a %b %d %Y %H:%M:%S");
::printf ( "\tbeacon number %u, on %s\n",
::printf ( "\tbeacon number %u, on %s\n",
this->lastBeaconNumber, date );
}
}
double bhe::period ( epicsGuard < epicsMutex > & guard ) const
double bhe::period ( epicsGuard < epicsMutex > & guard ) const
{
guard.assertIdenticalMutex ( this->mutex );
return this->averagePeriod;
@@ -311,14 +313,14 @@ epicsTime bhe::updateTime ( epicsGuard < epicsMutex > & guard ) const
return this->timeStamp;
}
void bhe::registerIIU (
void bhe::registerIIU (
epicsGuard < epicsMutex > & guard, tcpiiu & iiu )
{
guard.assertIdenticalMutex ( this->mutex );
this->pIIU = & iiu;
}
void bhe::unregisterIIU (
void bhe::unregisterIIU (
epicsGuard < epicsMutex > & guard, tcpiiu & iiu )
{
guard.assertIdenticalMutex ( this->mutex );

View File

@@ -3,11 +3,12 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
/*
*
* L O S A L A M O S
* Los Alamos National Laboratory
@@ -18,15 +19,24 @@
* Author: Jeff Hill
*/
#ifndef INC_bhe_H
#define INC_bhe_H
#ifndef bheh
#define bheh
#ifdef epicsExportSharedSymbols
# define bhehEpicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#include "tsDLList.h"
#include "tsFreeList.h"
#include "epicsTime.h"
#include "compilerDependencies.h"
#include "libCaAPI.h"
#ifdef bhehEpicsExportSharedSymbols
# define epicsExportSharedSymbols
# include "shareLib.h"
#endif
#include "inetAddrID.h"
#include "caProto.h"
@@ -35,7 +45,7 @@ class bheMemoryManager;
// using a pure abstract wrapper class around the free list avoids
// Tornado 2.0.1 GNU compiler bugs
class LIBCA_API bheMemoryManager {
class epicsShareClass bheMemoryManager {
public:
virtual ~bheMemoryManager ();
virtual void * allocate ( size_t ) = 0;
@@ -44,24 +54,24 @@ public:
class bhe : public tsSLNode < bhe >, public inetAddrID {
public:
LIBCA_API bhe (
epicsMutex &, const epicsTime & initialTimeStamp,
epicsShareFunc bhe (
epicsMutex &, const epicsTime & initialTimeStamp,
unsigned initialBeaconNumber, const inetAddrID & addr );
LIBCA_API ~bhe ();
LIBCA_API bool updatePeriod (
epicsShareFunc ~bhe ();
epicsShareFunc bool updatePeriod (
epicsGuard < epicsMutex > &,
const epicsTime & programBeginTime,
const epicsTime & currentTime, ca_uint32_t beaconNumber,
const epicsTime & programBeginTime,
const epicsTime & currentTime, ca_uint32_t beaconNumber,
unsigned protocolRevision );
LIBCA_API double period ( epicsGuard < epicsMutex > & ) const;
LIBCA_API epicsTime updateTime ( epicsGuard < epicsMutex > & ) const;
LIBCA_API void show ( unsigned level ) const;
LIBCA_API void show ( epicsGuard < epicsMutex > &, unsigned /* level */ ) const;
LIBCA_API void registerIIU ( epicsGuard < epicsMutex > &, tcpiiu & );
LIBCA_API void unregisterIIU ( epicsGuard < epicsMutex > &, tcpiiu & );
LIBCA_API void * operator new ( size_t size, bheMemoryManager & );
epicsShareFunc double period ( epicsGuard < epicsMutex > & ) const;
epicsShareFunc epicsTime updateTime ( epicsGuard < epicsMutex > & ) const;
epicsShareFunc void show ( unsigned level ) const;
epicsShareFunc void show ( epicsGuard < epicsMutex > &, unsigned /* level */ ) const;
epicsShareFunc void registerIIU ( epicsGuard < epicsMutex > &, tcpiiu & );
epicsShareFunc void unregisterIIU ( epicsGuard < epicsMutex > &, tcpiiu & );
epicsShareFunc void * operator new ( size_t size, bheMemoryManager & );
#ifdef CXX_PLACEMENT_DELETE
LIBCA_API void operator delete ( void *, bheMemoryManager & );
epicsShareFunc void operator delete ( void *, bheMemoryManager & );
#endif
private:
epicsTime timeStamp;
@@ -70,14 +80,14 @@ private:
tcpiiu * pIIU;
ca_uint32_t lastBeaconNumber;
void beaconAnomalyNotify ( epicsGuard < epicsMutex > & );
void logBeacon ( const char * pDiagnostic,
void logBeacon ( const char * pDiagnostic,
const double & currentPeriod,
const epicsTime & currentTime );
void logBeaconDiscard ( unsigned beaconAdvance,
const epicsTime & currentTime );
bhe ( const bhe & );
bhe & operator = ( const bhe & );
LIBCA_API void operator delete ( void * );
bhe ( const bhe & );
bhe & operator = ( const bhe & );
epicsShareFunc void operator delete ( void * );
};
// using a wrapper class around the free list avoids
@@ -89,24 +99,24 @@ public:
void release ( void * );
private:
tsFreeList < bhe, 0x100 > freeList;
bheFreeStore ( const bheFreeStore & );
bheFreeStore & operator = ( const bheFreeStore & );
bheFreeStore ( const bheFreeStore & );
bheFreeStore & operator = ( const bheFreeStore & );
};
inline void * bhe::operator new ( size_t size,
inline void * bhe::operator new ( size_t size,
bheMemoryManager & mgr )
{
{
return mgr.allocate ( size );
}
#ifdef CXX_PLACEMENT_DELETE
inline void bhe::operator delete ( void * pCadaver,
inline void bhe::operator delete ( void * pCadaver,
bheMemoryManager & mgr )
{
{
mgr.release ( pCadaver );
}
#endif
#endif // ifndef INC_bhe_H
#endif // ifdef bheh

View File

@@ -3,8 +3,9 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#include <stdio.h>
@@ -59,50 +60,50 @@ void caConnTest ( const char *pNameIn, unsigned channelCountIn, double delayIn )
{
unsigned iteration = 0u;
int status;
unsigned i;
chid *pChans;
unsigned i;
chid *pChans;
channelCount = channelCountIn;
pChans = new chid [channelCount];
while ( 1 ) {
while ( 1 ) {
connCount = 0u;
subsequentConnect = false;
begin = epicsTime::getCurrent ();
printf ( "initializing CA client library\n" );
status = ca_task_initialize();
SEVCHK ( status, "CA init failed" );
status = ca_task_initialize();
SEVCHK ( status, "CA init failed" );
printf ( "creating channels\n" );
for ( i = 0u; i < channelCount; i++ ) {
status = ca_search_and_connect ( pNameIn,
for ( i = 0u; i < channelCount; i++ ) {
status = ca_search_and_connect ( pNameIn,
&pChans[i], caConnTestConnHandler, 0 );
SEVCHK ( status, "CA search problems" );
}
SEVCHK ( status, "CA search problems" );
}
printf ( "all channels were created\n" );
ca_pend_event ( delayIn );
ca_pend_event ( delayIn );
if ( iteration & 1 ) {
for ( i = 0u; i < channelCount; i++ ) {
status = ca_clear_channel ( pChans[i] );
SEVCHK ( status, "ca_clear_channel() problems" );
}
for ( i = 0u; i < channelCount; i++ ) {
status = ca_clear_channel ( pChans[i] );
SEVCHK ( status, "ca_clear_channel() problems" );
}
printf ( "all channels were destroyed\n" );
}
printf ( "shutting down CA client library\n" );
status = ca_task_exit ();
SEVCHK ( status, "task exit problems" );
status = ca_task_exit ();
SEVCHK ( status, "task exit problems" );
iteration++;
}
}
//delete [] pChans;
}

View File

@@ -3,8 +3,9 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#include <stdio.h>

View File

@@ -3,12 +3,13 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#ifndef INC_caDiagnostics_H
#define INC_caDiagnostics_H
#ifndef caDiagnosticsh
#define caDiagnosticsh
#include "cadef.h"
@@ -19,8 +20,8 @@ extern "C" {
enum appendNumberFlag {appendNumber, dontAppendNumber};
int catime ( const char *channelName, unsigned channelCount, enum appendNumberFlag appNF );
int acctst ( const char *pname, unsigned logggingInterestLevel,
unsigned channelCount, unsigned repetitionCount,
int acctst ( const char *pname, unsigned logggingInterestLevel,
unsigned channelCount, unsigned repetitionCount,
enum ca_preemptive_callback_select select );
#define CATIME_OK 0
@@ -32,6 +33,6 @@ int acctst ( const char *pname, unsigned logggingInterestLevel,
void caConnTest ( const char *pNameIn, unsigned channelCountIn, double delayIn );
#endif /* ifndef INC_caDiagnostics_H */
#endif /* caDiagnosticsh */

View File

@@ -3,8 +3,9 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#include <stdio.h>
@@ -37,50 +38,50 @@ void caEventRate ( const char *pName, unsigned count )
chid * pChidTable = new chid [ count ];
{
printf ( "Connecting to CA Channel \"%s\" %u times.",
printf ( "Connecting to CA Channel \"%s\" %u times.",
pName, count );
fflush ( stdout );
epicsTime begin = epicsTime::getCurrent ();
for ( unsigned i = 0u; i < count; i++ ) {
int status = ca_search ( pName, & pChidTable[i] );
SEVCHK ( status, NULL );
}
int status = ca_pend_io ( 10000.0 );
if ( status != ECA_NORMAL ) {
fprintf ( stderr, " not found.\n" );
return;
}
epicsTime end = epicsTime::getCurrent ();
printf ( " done(%f sec).\n", end - begin );
}
{
printf ( "Subscribing %u times.", count );
fflush ( stdout );
epicsTime begin = epicsTime::getCurrent ();
for ( unsigned i = 0u; i < count; i++ ) {
int addEventStatus = ca_add_event ( DBR_FLOAT,
int addEventStatus = ca_add_event ( DBR_FLOAT,
pChidTable[i], eventCallBack, &eventCount, NULL);
SEVCHK ( addEventStatus, __FILE__ );
}
int status = ca_flush_io ();
SEVCHK ( status, __FILE__ );
epicsTime end = epicsTime::getCurrent ();
printf ( " done(%f sec).\n", end - begin );
}
{
printf ( "Waiting for initial value events." );
fflush ( stdout );
// let the first one go by
// let the first one go by
epicsTime begin = epicsTime::getCurrent ();
while ( eventCount < count ) {
int status = ca_pend_event ( 0.01 );
@@ -89,7 +90,7 @@ void caEventRate ( const char *pName, unsigned count )
}
}
epicsTime end = epicsTime::getCurrent ();
printf ( " done(%f sec).\n", end - begin );
}
@@ -127,7 +128,7 @@ void caEventRate ( const char *pName, unsigned count )
double mean = X / N;
double stdDev = sqrt ( XX / N - mean * mean );
printf ( "CA Event Rate (Hz): current %g mean %g std dev %g\n",
printf ( "CA Event Rate (Hz): current %g mean %g std dev %g\n",
Hz, mean, stdDev );
if ( samplePeriod < maxSamplePeriod ) {

View File

@@ -3,8 +3,9 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#include <stdio.h>

View File

@@ -3,8 +3,9 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
*
@@ -13,15 +14,15 @@
* 505 665 1831
*/
#ifndef INC_caProto_H
#define INC_caProto_H
#ifndef __CAPROTO__
#define __CAPROTO__
#define capStrOf(A) #A
#define capStrOfX(A) capStrOf ( A )
/*
/*
* CA protocol revision
* TCP/UDP port number (bumped each major protocol change)
* TCP/UDP port number (bumped each major protocol change)
*/
#define CA_MAJOR_PROTOCOL_REVISION 4
#define CA_VERSION_STRING( MINOR_REVISION ) \
@@ -29,7 +30,7 @@
#define CA_UKN_MINOR_VERSION 0u /* unknown minor version */
#define CA_MINIMUM_SUPPORTED_VERSION 4u
# define CA_VSUPPORTED(MINOR) ((MINOR)>=CA_MINIMUM_SUPPORTED_VERSION)
# define CA_V41(MINOR) ((MINOR)>=1u)
# define CA_V41(MINOR) ((MINOR)>=1u)
# define CA_V42(MINOR) ((MINOR)>=2u)
# define CA_V43(MINOR) ((MINOR)>=3u)
# define CA_V44(MINOR) ((MINOR)>=4u)
@@ -44,8 +45,8 @@
# define CA_V413(MINOR) ((MINOR)>=13u) /* Allow zero length in requests. */
/*
* These port numbers are only used if the CA repeater and
* CA server port numbers cant be obtained from the EPICS
* These port numbers are only used if the CA repeater and
* CA server port numbers cant be obtained from the EPICS
* environment variables "EPICS_CA_REPEATER_PORT" and
* "EPICS_CA_SERVER_PORT"
*/
@@ -53,8 +54,8 @@
#define CA_SERVER_PORT (CA_PORT_BASE+CA_MAJOR_PROTOCOL_REVISION*2u)
#define CA_REPEATER_PORT (CA_PORT_BASE+CA_MAJOR_PROTOCOL_REVISION*2u+1u)
/*
* 1500 (max of ethernet and 802.{2,3} MTU) - 20(IP) - 8(UDP)
/*
* 1500 (max of ethernet and 802.{2,3} MTU) - 20(IP) - 8(UDP)
* (the MTU of Ethernet is currently independent of its speed varient)
*/
#define ETHERNET_MAX_UDP ( 1500u - 20u - 8u )
@@ -88,10 +89,10 @@ typedef ca_uint32_t caResId;
#define CA_PROTO_SNAPSHOT 5u /* snapshot of the system */
#define CA_PROTO_SEARCH 6u /* IOC channel search */
#define CA_PROTO_BUILD 7u /* build - obsolete */
#define CA_PROTO_EVENTS_OFF 8u /* flow control */
#define CA_PROTO_EVENTS_ON 9u /* flow control */
#define CA_PROTO_READ_SYNC 10u /* purge old reads */
#define CA_PROTO_ERROR 11u /* an operation failed */
#define CA_PROTO_EVENTS_OFF 8u /* flow control */
#define CA_PROTO_EVENTS_ON 9u /* flow control */
#define CA_PROTO_READ_SYNC 10u /* purge old reads */
#define CA_PROTO_ERROR 11u /* an operation failed */
#define CA_PROTO_CLEAR_CHANNEL 12u /* free chan resources */
#define CA_PROTO_RSRV_IS_UP 13u /* CA server has joined the net */
#define CA_PROTO_NOT_FOUND 14u /* channel not found */
@@ -171,7 +172,7 @@ typedef struct ca_hdr {
*/
struct mon_info {
ca_float32_t m_lval; /* low delta */
ca_float32_t m_hval; /* high delta */
ca_float32_t m_hval; /* high delta */
ca_float32_t m_toval; /* period btween samples */
ca_uint16_t m_mask; /* event select mask */
ca_uint16_t m_pad; /* extend to 32 bits */
@@ -182,5 +183,5 @@ struct mon_info {
*/
#define unreasonablePVNameSize 500u
#endif /* ifndef INC_caProto_H */
#endif /* __CAPROTO__ */

View File

@@ -3,8 +3,9 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
*
@@ -30,66 +31,11 @@
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
#include <stdio.h>
#if !defined(_WIN32) && !defined(__rtems__) && !defined(vxWorks)
# include <sys/types.h>
# include <sys/stat.h>
# include <fcntl.h>
#define CAN_DETACH_STDINOUT
#endif
#include "epicsAssert.h"
#include "osiUnistd.h"
#include "epicsGetopt.h"
#include "udpiiu.h"
static void usage(char* argv[])
int main()
{
fprintf(stderr, "Usage: %s -hv\n"
"\n"
" -h - Print this message\n"
" -v - Do not replace stdin/out/err with /dev/null\n",
argv[0]);
}
int main(int argc, char* argv[])
{
bool detachinout = true;
int opt;
while ((opt = getopt(argc, argv, "hv")) != -1) {
switch (opt) {
default:
usage(argv);
fprintf(stderr, "\nUnknown argument '%c'\n", opt);
return 1;
case 'h':
usage(argv);
return 0;
case 'v':
detachinout = false;
break;
}
}
#ifdef CAN_DETACH_STDINOUT
if(detachinout) {
int readfd = open("/dev/null", O_RDONLY);
int writefd = open("/dev/null", O_WRONLY);
dup2(readfd, 0);
dup2(writefd, 1);
dup2(writefd, 2);
close(readfd);
close(writefd);
}
#else
(void)detachinout;
#endif
chdir ( "/" );
ca_repeater ();
return ( 0 );
}

View File

@@ -3,8 +3,9 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
*
@@ -17,8 +18,8 @@
* Author: Jeff Hill
*/
#ifndef INC_caServerID_H
#define INC_caServerID_H
#ifndef caServerIDh
#define caServerIDh
#include "osiSock.h"
#include "resourceLib.h"
@@ -36,7 +37,7 @@ private:
ca_uint8_t pri;
};
inline caServerID::caServerID (
inline caServerID::caServerID (
const struct sockaddr_in & addrIn, unsigned priorityIn ) :
addr ( addrIn ), pri ( static_cast <ca_uint8_t> ( priorityIn ) )
{
@@ -45,7 +46,7 @@ inline caServerID::caServerID (
inline bool caServerID::operator == ( const caServerID & rhs ) const
{
if ( this->addr.sin_addr.s_addr == rhs.addr.sin_addr.s_addr &&
if ( this->addr.sin_addr.s_addr == rhs.addr.sin_addr.s_addr &&
this->addr.sin_port == rhs.addr.sin_port &&
this->pri == rhs.pri ) {
return true;
@@ -66,7 +67,7 @@ inline resTableIndex caServerID::hash () const
index ^= this->addr.sin_port;
index ^= this->addr.sin_port >> 8u;
index ^= this->pri;
return integerHash ( caServerMinIndexBitWidth,
return integerHash ( caServerMinIndexBitWidth,
caServerMaxIndexBitWidth, index );
}
@@ -82,4 +83,6 @@ inline unsigned caServerID::priority () const
return this->pri;
}
#endif // ifdef INC_caServerID_H
#endif // ifdef caServerID

View File

@@ -0,0 +1,28 @@
/*************************************************************************\
* Copyright (c) 2017 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#ifndef CAVERSION_H
#define CAVERSION_H
#include <epicsVersion.h>
#include <shareLib.h>
#ifndef VERSION_INT
# define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P))
#endif
/* include generated headers with:
* EPICS_CA_MAJOR_VERSION
* EPICS_CA_MINOR_VERSION
* EPICS_CA_MAINTENANCE_VERSION
* EPICS_CA_DEVELOPMENT_FLAG
*/
#include "caVersionNum.h"
#define CA_VERSION_INT VERSION_INT(EPICS_CA_MAJOR_VERSION, EPICS_CA_MINOR_VERSION, EPICS_CA_MAINTENANCE_VERSION, 0)
#endif // CAVERSION_H

View File

@@ -1,21 +0,0 @@
/*************************************************************************\
* Copyright (c) 2017 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
#ifndef INC_caVersion_H
#define INC_caVersion_H
#define EPICS_CA_MAJOR_VERSION @EPICS_CA_MAJOR_VERSION@
#define EPICS_CA_MINOR_VERSION @EPICS_CA_MINOR_VERSION@
#define EPICS_CA_MAINTENANCE_VERSION @EPICS_CA_MAINTENANCE_VERSION@
#define EPICS_CA_DEVELOPMENT_FLAG @EPICS_CA_DEVELOPMENT_FLAG@
#include <epicsVersion.h>
#define CA_VERSION_INT VERSION_INT(EPICS_CA_MAJOR_VERSION, \
EPICS_CA_MINOR_VERSION, EPICS_CA_MAINTENANCE_VERSION, 0)
#endif /* INC_caVersion_H */

View File

@@ -0,0 +1,7 @@
#ifndef CAVERSION_H
# error include caVersion.h, not this header
#endif
#define EPICS_CA_MAJOR_VERSION @EPICS_CA_MAJOR_VERSION@
#define EPICS_CA_MINOR_VERSION @EPICS_CA_MINOR_VERSION@
#define EPICS_CA_MAINTENANCE_VERSION @EPICS_CA_MAINTENANCE_VERSION@
#define EPICS_CA_DEVELOPMENT_FLAG @EPICS_CA_DEVELOPMENT_FLAG@

View File

@@ -17,9 +17,9 @@
* Copyright, 1986, The Regents of the University of California.
*
*
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
*/
#ifdef _MSC_VER
@@ -34,11 +34,12 @@
#include "errlog.h"
#include "locationException.h"
#define epicsExportSharedSymbols
#include "iocinf.h"
#include "oldAccess.h"
#include "cac.h"
epicsThreadPrivateId caClientCallbackThreadId;
epicsShareDef epicsThreadPrivateId caClientCallbackThreadId;
static epicsThreadOnceId cacOnce = EPICS_THREAD_ONCE_INIT;
@@ -735,12 +736,12 @@ void ca_client_context::installDefaultService ( cacService & service )
ca_client_context::pDefaultService = & service;
}
void epicsStdCall caInstallDefaultService ( cacService & service )
void epicsShareAPI caInstallDefaultService ( cacService & service )
{
ca_client_context::installDefaultService ( service );
}
LIBCA_API int epicsStdCall ca_clear_subscription ( evid pMon )
epicsShareFunc int epicsShareAPI ca_clear_subscription ( evid pMon )
{
oldChannelNotify & chan = pMon->channel ();
ca_client_context & cac = chan.getClientCtx ();

View File

@@ -34,6 +34,7 @@
#include "errlog.h"
#include "epicsExport.h"
#define epicsExportSharedSymbols
#include "addrList.h"
#include "iocinf.h"
#include "cac.h"
@@ -52,7 +53,7 @@
static const char pVersionCAC[] =
"@(#) " EPICS_VERSION_STRING
", CA Client Library";
", CA Client Library " __DATE__;
// TCP response dispatch table
const cac::pProtoStubTCP cac::tcpJumpTableCAC [] =
@@ -154,7 +155,7 @@ cac::cac (
}
try {
long status;
long status;
/*
* Certain os, such as HPUX, do not unblock a socket system call

View File

@@ -19,8 +19,13 @@
*
*/
#ifndef INC_cac_H
#define INC_cac_H
#ifndef cach
#define cach
#ifdef epicsExportSharedSymbols
# define cach_restore_epicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#include "compilerDependencies.h"
#include "ipAddrToAsciiAsynchronous.h"
@@ -30,7 +35,11 @@
#include "freeList.h"
#include "localHostName.h"
#include "libCaAPI.h"
#ifdef cach_restore_epicsExportSharedSymbols
# define epicsExportSharedSymbols
# include "shareLib.h"
#endif
#include "nciu.h"
#include "comBuf.h"
#include "bhe.h"
@@ -72,8 +81,8 @@ public:
void release ( void * );
private:
tsFreeList < comBuf, 0x20 > freeList;
cacComBufMemoryManager ( const cacComBufMemoryManager & );
cacComBufMemoryManager & operator = ( const cacComBufMemoryManager & );
cacComBufMemoryManager ( const cacComBufMemoryManager & );
cacComBufMemoryManager & operator = ( const cacComBufMemoryManager & );
};
class notifyGuard {
@@ -339,8 +348,8 @@ private:
const char *pCtx, unsigned status );
static const pExcepProtoStubTCP tcpExcepJumpTableCAC [];
cac ( const cac & );
cac & operator = ( const cac & );
cac ( const cac & );
cac & operator = ( const cac & );
friend class tcpiiu;
};
@@ -423,4 +432,4 @@ inline double cac ::
return this->connTMO;
}
#endif // ifndef INC_cac_H
#endif // ifdef cach

View File

@@ -3,12 +3,13 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
/*
*
* L O S A L A M O S
* Los Alamos National Laboratory
@@ -26,6 +27,7 @@
#include "errlog.h"
#define epicsExportSharedSymbols
#include "iocinf.h"
#include "localHostName.h"
#include "cacIO.h"
@@ -39,7 +41,7 @@ private:
epicsSingleton < localHostName > :: reference
_refLocalHostName;
};
static epicsThreadOnceId cacChannelIdOnce = EPICS_THREAD_ONCE_INIT;
const cacChannel::priLev cacChannel::priorityMax = 99u;
@@ -53,63 +55,63 @@ cacChannel::~cacChannel ()
{
}
caAccessRights cacChannel::accessRights (
epicsGuard < epicsMutex > & ) const
caAccessRights cacChannel::accessRights (
epicsGuard < epicsMutex > & ) const
{
static caAccessRights ar ( true, true );
return ar;
}
unsigned cacChannel::searchAttempts (
epicsGuard < epicsMutex > & ) const
unsigned cacChannel::searchAttempts (
epicsGuard < epicsMutex > & ) const
{
return 0u;
}
double cacChannel::beaconPeriod (
epicsGuard < epicsMutex > & ) const
double cacChannel::beaconPeriod (
epicsGuard < epicsMutex > & ) const
{
return - DBL_MAX;
}
double cacChannel::receiveWatchdogDelay (
double cacChannel::receiveWatchdogDelay (
epicsGuard < epicsMutex > & ) const
{
return - DBL_MAX;
}
bool cacChannel::ca_v42_ok (
epicsGuard < epicsMutex > & ) const
epicsGuard < epicsMutex > & ) const
{
return true;
}
bool cacChannel::connected (
epicsGuard < epicsMutex > & ) const
epicsGuard < epicsMutex > & ) const
{
return true;
}
CACChannelPrivate ::
CACChannelPrivate ::
CACChannelPrivate() :
_refLocalHostName ( localHostNameCache.getReference () )
{
}
inline unsigned CACChannelPrivate ::
inline unsigned CACChannelPrivate ::
getHostName ( char * pBuf, unsigned bufLength )
{
return _refLocalHostName->getName ( pBuf, bufLength );
}
inline const char * CACChannelPrivate ::
inline const char * CACChannelPrivate ::
pHostName ()
{
return _refLocalHostName->pointer ();
}
static CACChannelPrivate * pCACChannelPrivate = 0;
// runs once only for each process
extern "C" void cacChannelSetup ( void * )
{
@@ -117,7 +119,7 @@ extern "C" void cacChannelSetup ( void * )
}
// the default is to assume that it is a locally hosted channel
unsigned cacChannel::getHostName (
unsigned cacChannel::getHostName (
epicsGuard < epicsMutex > &,
char * pBuf, unsigned bufLength ) const throw ()
{

View File

@@ -3,29 +3,32 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
*
/*
*
*
* L O S A L A M O S
* Los Alamos National Laboratory
* Los Alamos, New Mexico 87545
*
*
* Copyright, 1986, The Regents of the University of California.
*
*
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
*
*
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
*/
#include "iocinf.h"
#define epicsExportSharedSymbols
#include "cacIO.h"
#undef epicsExportSharedSymbols
cacChannelNotify::~cacChannelNotify ()
cacChannelNotify::~cacChannelNotify ()
{
}

View File

@@ -3,11 +3,12 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
/*
*
* L O S A L A M O S
* Los Alamos National Laboratory
@@ -22,17 +23,19 @@
#include "iocinf.h"
#define epicsExportSharedSymbols
#include "cacIO.h"
#undef epicsExportSharedSymbols
cacContextNotify::~cacContextNotify ()
{
}
void cacContextNotify::callbackProcessingInitiateNotify ()
void cacContextNotify::callbackProcessingInitiateNotify ()
{
}
void cacContextNotify::callbackProcessingCompleteNotify ()
void cacContextNotify::callbackProcessingCompleteNotify ()
{
}

View File

@@ -3,7 +3,8 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
@@ -16,13 +17,13 @@
* Copyright, 1986, The Regents of the University of California.
*
*
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
* Author Jeffrey O. Hill
* johill@lanl.gov
* 505 665 1831
*/
#ifndef INC_cacIO_H
#define INC_cacIO_H
#ifndef cacIOh
#define cacIOh
//
// Open Issues
@@ -46,12 +47,20 @@
#include <new>
#include <stdarg.h>
#ifdef epicsExportSharedSymbols
# define cacIOh_restore_epicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#include "tsDLList.h"
#include "epicsMutex.h"
#include "epicsGuard.h"
#include "epicsThread.h"
#include "libCaAPI.h"
#ifdef cacIOh_restore_epicsExportSharedSymbols
# define epicsExportSharedSymbols
# include "shareLib.h"
#endif
class cacChannel;
@@ -60,7 +69,7 @@ typedef unsigned long arrayElementCount;
// 1) this should not be passing caerr.h status to the exception callback
// 2) needless-to-say the data should be passed here using the new data access API
class LIBCA_API cacWriteNotify {
class epicsShareClass cacWriteNotify {
public:
virtual ~cacWriteNotify () = 0;
virtual void completion ( epicsGuard < epicsMutex > & ) = 0;
@@ -73,7 +82,7 @@ public:
// 1) this should not be passing caerr.h status to the exception callback
// 2) needless-to-say the data should be passed here using the new data access API
class LIBCA_API cacReadNotify {
class epicsShareClass cacReadNotify {
public:
virtual ~cacReadNotify () = 0;
virtual void completion (
@@ -88,7 +97,7 @@ public:
// 1) this should not be passing caerr.h status to the exception callback
// 2) needless-to-say the data should be passed here using the new data access API
class LIBCA_API cacStateNotify {
class epicsShareClass cacStateNotify {
public:
virtual ~cacStateNotify () = 0;
virtual void current (
@@ -122,7 +131,7 @@ private:
bool f_operatorConfirmationRequest:1;
};
class LIBCA_API cacChannelNotify {
class epicsShareClass cacChannelNotify {
public:
virtual ~cacChannelNotify () = 0;
virtual void connectNotify ( epicsGuard < epicsMutex > & ) = 0;
@@ -160,7 +169,7 @@ private:
// but perhaps is a bad practice that should be eliminated? If so,
// then the IO should not store or use a pointer to the channel.
//
class LIBCA_API cacChannel {
class epicsShareClass cacChannel {
public:
typedef unsigned priLev;
static const priLev priorityMax;
@@ -264,11 +273,11 @@ protected:
private:
cacChannelNotify & callback;
cacChannel ( const cacChannel & );
cacChannel & operator = ( const cacChannel & );
cacChannel ( const cacChannel & );
cacChannel & operator = ( const cacChannel & );
};
class LIBCA_API cacContext {
class epicsShareClass cacContext {
public:
virtual ~cacContext ();
virtual cacChannel & createChannel (
@@ -287,7 +296,7 @@ public:
epicsGuard < epicsMutex > &, unsigned level ) const = 0;
};
class LIBCA_API cacContextNotify {
class epicsShareClass cacContextNotify {
public:
virtual ~cacContextNotify () = 0;
virtual cacContext & createNetworkContext (
@@ -307,7 +316,7 @@ public:
// **** Lock Hierarchy ****
// callbackControl must be taken before mutualExclusion if both are held at
// the same time
class LIBCA_API cacService {
class epicsShareClass cacService {
public:
virtual ~cacService () = 0;
virtual cacContext & contextCreate (
@@ -316,9 +325,9 @@ public:
cacContextNotify & ) = 0;
};
LIBCA_API void epicsStdCall caInstallDefaultService ( cacService & service );
epicsShareFunc void epicsShareAPI caInstallDefaultService ( cacService & service );
LIBCA_API extern epicsThreadPrivateId caClientCallbackThreadId;
epicsShareExtern epicsThreadPrivateId caClientCallbackThreadId;
inline cacChannel::cacChannel ( cacChannelNotify & notify ) :
callback ( notify )
@@ -380,4 +389,4 @@ inline bool caAccessRights::operatorConfirmationRequest () const
return this->f_operatorConfirmationRequest;
}
#endif // ifndef INC_cacIO_H
#endif // ifndef cacIOh

View File

@@ -3,11 +3,12 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
/*
*
* L O S A L A M O S
* Los Alamos National Laboratory
@@ -20,7 +21,9 @@
#include "iocinf.h"
#define epicsExportSharedSymbols
#include "cacIO.h"
#undef epicsExportSharedSymbols
cacReadNotify::~cacReadNotify ()
{

View File

@@ -3,11 +3,12 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
* EPICS BASE Versions 3.13.7
* and higher are distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
/*
*
* L O S A L A M O S
* Los Alamos National Laboratory
@@ -20,7 +21,9 @@
#include "iocinf.h"
#define epicsExportSharedSymbols
#include "cacIO.h"
#undef epicsExportSharedSymbols
cacStateNotify::~cacStateNotify ()
{

Some files were not shown because too many files have changed in this diff Show More