Compare commits
248 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8633e72026 | ||
|
|
1106ecd818 | ||
|
|
6e6cd59674 | ||
|
|
4cdc2575c5 | ||
|
|
9f52f7282d | ||
|
|
ed882fe82d | ||
|
|
d0e58f9aa7 | ||
|
|
2c13aa03e2 | ||
|
|
3717607892 | ||
|
|
cb72210d45 | ||
|
|
92d01c0e5f | ||
|
|
42506d8c1c | ||
|
|
dfccee739f | ||
|
|
35d07ffbda | ||
|
|
d158974870 | ||
|
|
2e922d7195 | ||
|
|
e405ebbbee | ||
|
|
da15507f8d | ||
|
|
8411adb987 | ||
|
|
c30c884687 | ||
|
|
21fe691d96 | ||
|
|
22e21f268b | ||
|
|
d45e1b13e4 | ||
|
|
8873934c9b | ||
|
|
c0c11c359f | ||
|
|
367e27d5f5 | ||
|
|
35bd1a76d1 | ||
|
|
a887ca44d1 | ||
|
|
dd273da508 | ||
|
|
245cf129ff | ||
|
|
36b1f9e4ff | ||
|
|
24a0197f88 | ||
|
|
e30e1159a2 | ||
|
|
42ea151881 | ||
|
|
ce201c6361 | ||
|
|
0784bbec71 | ||
|
|
84f9a59759 | ||
|
|
1f3ea0308f | ||
|
|
cd5a4be610 | ||
|
|
6560a3b0e8 | ||
|
|
b74ad51972 | ||
|
|
28ee04091d | ||
|
|
0dd7efb4a2 | ||
|
|
e7d51c5e30 | ||
|
|
0758661a87 | ||
|
|
5622816a92 | ||
|
|
9bf6bef12e | ||
|
|
9f95921260 | ||
|
|
bc0a241192 | ||
|
|
89717c16f4 | ||
|
|
20565b03eb | ||
|
|
0e2eddbcdb | ||
|
|
b68112ba6a | ||
|
|
dbbb6af9fd | ||
|
|
49d2ce69fb | ||
|
|
26a6df0652 | ||
|
|
4675c84bff | ||
|
|
d5de77bc5a | ||
|
|
cce78f0ec5 | ||
|
|
9c99a40de2 | ||
|
|
d6ab506379 | ||
|
|
e3c514ea9e | ||
|
|
fd33cf444e | ||
|
|
abb03fdfdf | ||
|
|
6edd359e47 | ||
|
|
bded68e14e | ||
|
|
eacaf67101 | ||
|
|
e35c8d0774 | ||
|
|
b9b48dfa77 | ||
|
|
fef72a5948 | ||
|
|
48c4992799 | ||
|
|
ac13592d0a | ||
|
|
c4184be87c | ||
|
|
4472f60249 | ||
|
|
088c35da63 | ||
|
|
bb0affc5ee | ||
|
|
44a9b25392 | ||
|
|
582a1aa0b5 | ||
|
|
3053584b56 | ||
|
|
6c4c063692 | ||
|
|
038ef5db8d | ||
|
|
bf51f20126 | ||
|
|
d2ac73f3ae | ||
|
|
ef9ed01e0c | ||
|
|
3035e9393c | ||
|
|
f7e9c7e1a1 | ||
|
|
2d50b04ca0 | ||
|
|
ce8fb13fe4 | ||
|
|
8c6d2ba91a | ||
|
|
7231e60a60 | ||
|
|
56fc694513 | ||
|
|
519f3d29cf | ||
|
|
2f5b606d4a | ||
|
|
89addc09d7 | ||
|
|
3b796aaf2d | ||
|
|
7fc94de997 | ||
|
|
e967392227 | ||
|
|
e31993bb84 | ||
|
|
4fb36b3104 | ||
|
|
cc06a46407 | ||
|
|
6f330ed44b | ||
|
|
95f694cfe7 | ||
|
|
5b1b3e80d8 | ||
|
|
fbc524d308 | ||
|
|
00c9d22936 | ||
|
|
31faca4b3d | ||
|
|
78b532ee75 | ||
|
|
ecc3206e11 | ||
|
|
4359938ed6 | ||
|
|
1fb594833b | ||
|
|
4202695246 | ||
|
|
5184d1807a | ||
|
|
9d14ea1a24 | ||
|
|
300af9164a | ||
|
|
5d13666e7b | ||
|
|
da00278de6 | ||
|
|
087f0afafb | ||
|
|
f973722d5a | ||
|
|
cd10c21647 | ||
|
|
6ea736d0ed | ||
|
|
ad9f577faf | ||
|
|
a892dffd12 | ||
|
|
8a65a17f68 | ||
|
|
0fc52db97b | ||
|
|
54868e8723 | ||
|
|
73b8c02bae | ||
|
|
ce29455411 | ||
|
|
2b85746e23 | ||
|
|
8d2b3ce0ea | ||
|
|
4f9530500b | ||
|
|
af35fa7eb8 | ||
|
|
b99238b93c | ||
|
|
e00b773830 | ||
|
|
d7b3f30111 | ||
|
|
8439f488f0 | ||
|
|
ec11da3a05 | ||
|
|
09d50b3213 | ||
|
|
12842d80dc | ||
|
|
e69481d196 | ||
|
|
c1f1511fac | ||
|
|
e80f7b4ce1 | ||
|
|
fecb32a960 | ||
|
|
1184e2ab21 | ||
|
|
0f74d195e1 | ||
|
|
44d234535e | ||
|
|
d719a6859c | ||
|
|
19dba4225a | ||
|
|
a50b83b918 | ||
|
|
b27dc431c8 | ||
|
|
a31f5e166c | ||
|
|
e5f47d5807 | ||
|
|
098d421a56 | ||
|
|
8faa55056d | ||
|
|
e186fde80c | ||
|
|
c811a766a2 | ||
|
|
a48245d385 | ||
|
|
6c9d48b8ff | ||
|
|
0034119588 | ||
|
|
3412fc65be | ||
|
|
d1d2a1bac8 | ||
|
|
0c8d2336b7 | ||
|
|
360c3f4a36 | ||
|
|
7e1db8bc95 | ||
|
|
e536c949e1 | ||
|
|
13fcc63153 | ||
|
|
af073e289d | ||
|
|
14d410cddb | ||
|
|
b9fb6caffb | ||
|
|
9b2d79a5c8 | ||
|
|
b0d5f21a87 | ||
|
|
952387a9dc | ||
|
|
c4bf96b4f8 | ||
|
|
956ddf6695 | ||
|
|
803f0bccbb | ||
|
|
f24895c325 | ||
|
|
e38db3e6d3 | ||
|
|
d96c061366 | ||
|
|
7bff35a687 | ||
|
|
9991b7300f | ||
|
|
b17bb61e68 | ||
|
|
55b72128e4 | ||
|
|
7455d3df07 | ||
|
|
a2d4436b83 | ||
|
|
e13dafb8af | ||
|
|
6661789143 | ||
|
|
a02b3b243e | ||
|
|
4428ca3661 | ||
|
|
9dc92c9b03 | ||
|
|
bb92682ed1 | ||
|
|
faf5bc3b0e | ||
|
|
10414b4429 | ||
|
|
44031b3e94 | ||
|
|
7cf94abe78 | ||
|
|
025a73ca42 | ||
|
|
da56d5e2b8 | ||
|
|
067c0a3db1 | ||
|
|
84666e054e | ||
|
|
b697fc2acc | ||
|
|
a907bc4df3 | ||
|
|
835edde87d | ||
|
|
ac4890e5c9 | ||
|
|
a4c82bfd9f | ||
|
|
417dfcc191 | ||
|
|
86158b907d | ||
|
|
d777dc654d | ||
|
|
e70dba5bf9 | ||
|
|
3f61b69fa3 | ||
|
|
1e2a950e0b | ||
|
|
a2b2ef414d | ||
|
|
fb3dfef5e8 | ||
|
|
1fef904a9e | ||
|
|
6ee9656f43 | ||
|
|
ac128fc048 | ||
|
|
7f56802052 | ||
|
|
ad6be99ae4 | ||
|
|
1ac82bb6bd | ||
|
|
d97ca30986 | ||
|
|
cd8b21fafc | ||
|
|
ccd94cd911 | ||
|
|
c6464b8797 | ||
|
|
03e7db8ff0 | ||
|
|
c8a106a50d | ||
|
|
773c12becc | ||
|
|
37476c6482 | ||
|
|
5f61e9c2fc | ||
|
|
6463589276 | ||
|
|
ee4b51b2f9 | ||
|
|
1a9f922454 | ||
|
|
29aad6c0c0 | ||
|
|
686990ccfa | ||
|
|
004b21a7a5 | ||
|
|
884514bb7a | ||
|
|
7b5ad4c8f2 | ||
|
|
d25ea19815 | ||
|
|
c606ecf428 | ||
|
|
8b0e1c88c4 | ||
|
|
83753fb9e6 | ||
|
|
8ecceef706 | ||
|
|
d5020308aa | ||
|
|
fee9dce2a0 | ||
|
|
5a9320525c | ||
|
|
8a6cbfde20 | ||
|
|
a063a2f0a9 | ||
|
|
2612b722fa | ||
|
|
12e97d5e91 | ||
|
|
78313c62f9 | ||
|
|
1e84246cb7 | ||
|
|
6d5061781c |
@@ -21,7 +21,8 @@ include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
|
||||
|
||||
SHRLIB_SUFFIX = .sl
|
||||
|
||||
AR = ar -rc
|
||||
AR = ar
|
||||
ARFLAGS = -rc
|
||||
|
||||
# Configure OS vendor C compiler
|
||||
ACC = cc
|
||||
|
||||
@@ -45,7 +45,7 @@ ACC_SFLAGS_NO=
|
||||
ACC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic
|
||||
ACC_SLIBS_NO=
|
||||
ACC_SHRLIB_CFLAGS_YES =
|
||||
ACC_SHRLIB_LDFLAGS_YES = -G -h $@ -z ignore -z combreloc -z lazyload
|
||||
ACC_SHRLIB_LDFLAGS_YES = -G -h $@
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
CCC = $(SPARCWORKS)/bin/CC
|
||||
@@ -63,7 +63,7 @@ CCC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic
|
||||
CCC_SLIBS_NO=
|
||||
CCC_DEPENDS_FLAG = -xM1
|
||||
CCC_SHRLIB_CFLAGS_YES =
|
||||
CCC_SHRLIB_LDFLAGS_YES = -G -h $@ -z ignore -z combreloc -z lazyload
|
||||
CCC_SHRLIB_LDFLAGS_YES = -G -h $@
|
||||
|
||||
SOLARIS_VERSION = $(subst 5.,,$(shell uname -r))
|
||||
ARCH_DEP_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
|
||||
@@ -83,4 +83,6 @@ SYS_DLL_LIBS_solaris += posix4 pthread $(SYS_DLL_LIBS_solaris_$(SOLARIS_VERSION)
|
||||
RUNTIME_LDFLAGS =$(addprefix -R,$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)\
|
||||
$(EPICS_EXTENSIONS)/lib/$(EPICS_HOST_ARCH))
|
||||
|
||||
OP_SYS_LDFLAGS = -z ignore -z combreloc -z lazyload
|
||||
|
||||
|
||||
|
||||
@@ -7,24 +7,8 @@
|
||||
# and higher are distributed subject to a Software License Agreement found
|
||||
# in file LICENSE that is included with this distribution.
|
||||
#*************************************************************************
|
||||
TOP=../../..
|
||||
include $(TOP)/configure/CONFIG
|
||||
# $Id$
|
||||
|
||||
INC += camacLib.h
|
||||
INC += fast_lock.h
|
||||
INC += drvTS.h
|
||||
INC += devLib.h
|
||||
INC += epicsDynLink.h
|
||||
INC += module_types.h
|
||||
INC += task_params.h
|
||||
# solaris-sparc is the new name for solaris
|
||||
-include $(EPICS_BASE)/config/CONFIG.Host.solaris
|
||||
|
||||
SRCS += drvTS.c
|
||||
SRCS += devLib.c
|
||||
SRCS += devLibVxWorks.c
|
||||
SRCS += veclist.c
|
||||
SRCS += epicsDynLink.c
|
||||
|
||||
OBJLIB_vxWorks += vxCom
|
||||
OBJLIB_SRCS = $(SRCS)
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
14
config/CONFIG.Host.solaris-sparc-staticlib
Normal file
14
config/CONFIG.Host.solaris-sparc-staticlib
Normal file
@@ -0,0 +1,14 @@
|
||||
#*************************************************************************
|
||||
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
# National Laboratory.
|
||||
# Copyright (c) 2002 The Regents of the University of California, as
|
||||
# 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.
|
||||
#*************************************************************************
|
||||
# $Id$
|
||||
|
||||
# solaris-sparc is the new name for solaris
|
||||
-include $(EPICS_BASE)/config/CONFIG.Host.solaris
|
||||
|
||||
13
config/CONFIG.Vx.vxWorks-ppc603-long
Normal file
13
config/CONFIG.Vx.vxWorks-ppc603-long
Normal file
@@ -0,0 +1,13 @@
|
||||
#*************************************************************************
|
||||
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
# National Laboratory.
|
||||
# Copyright (c) 2002 The Regents of the University of California, as
|
||||
# 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.
|
||||
#*************************************************************************
|
||||
# $Id$
|
||||
|
||||
# vxWorks-ppc603 is the new R3.14 name for ppc603
|
||||
include $(EPICS_BASE)/config/CONFIG.Vx.ppc603_long
|
||||
13
config/CONFIG.Vx.vxWorks-ppc604-long
Normal file
13
config/CONFIG.Vx.vxWorks-ppc604-long
Normal file
@@ -0,0 +1,13 @@
|
||||
#*************************************************************************
|
||||
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
# National Laboratory.
|
||||
# Copyright (c) 2002 The Regents of the University of California, as
|
||||
# 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.
|
||||
#*************************************************************************
|
||||
# $Id$
|
||||
|
||||
# vxWorks-ppc604 is the new R3.14 name for ppc604
|
||||
include $(EPICS_BASE)/config/CONFIG.Vx.ppc604_long
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
EPICS_VERSION=3
|
||||
EPICS_REVISION=14
|
||||
EPICS_MODIFICATION=2
|
||||
EPICS_MODIFICATION=4
|
||||
EPICS_UPDATE_NAME=
|
||||
EPICS_UPDATE_LEVEL=0
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
#Syntax:
|
||||
# ARCH_<host_arch> = <epics_host_arch>
|
||||
ARCH_solarisGnu = solaris-sparc-gnu
|
||||
#ARCH_solaris = solaris-sparc-static
|
||||
#ARCH_solaris = solaris-sparc-debug
|
||||
ARCH_solaris = solaris-sparc
|
||||
ARCH_sun4 = sun4-sparc
|
||||
ARCH_Linux = linux-x86
|
||||
|
||||
13
config/CONFIG_HOST_ARCH.solaris-sparc-debug
Normal file
13
config/CONFIG_HOST_ARCH.solaris-sparc-debug
Normal file
@@ -0,0 +1,13 @@
|
||||
#*************************************************************************
|
||||
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
# National Laboratory.
|
||||
# Copyright (c) 2002 The Regents of the University of California, as
|
||||
# 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.
|
||||
#*************************************************************************
|
||||
# $Id$
|
||||
|
||||
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solaris
|
||||
|
||||
@@ -9,5 +9,5 @@
|
||||
#*************************************************************************
|
||||
# $Id$
|
||||
|
||||
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solaris
|
||||
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solarisGnu
|
||||
|
||||
|
||||
13
config/CONFIG_HOST_ARCH.solaris-sparc-staticlib
Normal file
13
config/CONFIG_HOST_ARCH.solaris-sparc-staticlib
Normal file
@@ -0,0 +1,13 @@
|
||||
#*************************************************************************
|
||||
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||
# National Laboratory.
|
||||
# Copyright (c) 2002 The Regents of the University of California, as
|
||||
# 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.
|
||||
#*************************************************************************
|
||||
# $Id$
|
||||
|
||||
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solaris
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $Id$
|
||||
|
||||
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solaris
|
||||
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solarisGnu
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# CONFIG_HOST_ARCH.solaris
|
||||
# CONFIG_HOST_ARCH.solarisGnu
|
||||
#
|
||||
# Override values in CONFIG.Vx
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
# solarisGnu (GNU compiler)
|
||||
# solaris-x86
|
||||
# sun4
|
||||
|
||||
#
|
||||
# HOST_ARCH now an environment variable
|
||||
# HOST_ARCH=$(shell /usr/local/epics/startup/HostArch)
|
||||
@@ -31,29 +32,18 @@ ifndef HOST_ARCH
|
||||
HOST_ARCH=unsupported
|
||||
endif
|
||||
|
||||
# The architectures to build EPICS for
|
||||
# The R3.14 architectures to build EPICS for
|
||||
#
|
||||
# Currently Supporting:
|
||||
# frc40
|
||||
# frc5ce
|
||||
# hkbaja47
|
||||
# hkv2f
|
||||
# mv147
|
||||
# mv1604
|
||||
# mv162
|
||||
# mv162lc
|
||||
# mv167
|
||||
# mv177
|
||||
# mv2700
|
||||
# niCpu030
|
||||
# pc486
|
||||
# ppc603
|
||||
# ppc604
|
||||
# ppc603_long (over 32MB)
|
||||
# ppc604_long (over 32MB)
|
||||
# sbs_pc6
|
||||
# vxipc
|
||||
#
|
||||
# vxWorks-486
|
||||
# vxWorks-68040
|
||||
# vxWorks-68040lc
|
||||
# vxWorks-68060
|
||||
# vxWorks-ppc603
|
||||
# vxWorks-ppc604
|
||||
# vxWorks-ppc603_long
|
||||
# vxWorks-ppc604_long
|
||||
|
||||
CROSS_COMPILER_TARGET_ARCHS=
|
||||
|
||||
|
||||
|
||||
4
config/CONFIG_SITE.Host.solaris-sparc-debug
Normal file
4
config/CONFIG_SITE.Host.solaris-sparc-debug
Normal file
@@ -0,0 +1,4 @@
|
||||
# $Id$
|
||||
|
||||
# solaris-sparc is the new name for solaris
|
||||
-include $(EPICS_BASE)/config/CONFIG_SITE.Host.solaris
|
||||
4
config/CONFIG_SITE.Host.solaris-sparc-staticlib
Normal file
4
config/CONFIG_SITE.Host.solaris-sparc-staticlib
Normal file
@@ -0,0 +1,4 @@
|
||||
# $Id$
|
||||
|
||||
# solaris-sparc is the new name for solaris
|
||||
-include $(EPICS_BASE)/config/CONFIG_SITE.Host.solaris
|
||||
@@ -204,7 +204,7 @@ ifdef DBDEXPAND
|
||||
$(DBDNAME): ../$(DBDEXPAND)
|
||||
@echo "Expanding dbd"
|
||||
@$(RM) $@
|
||||
$(DBEXPAND) $(DBDFLAGS) $< > $@
|
||||
$(DBEXPAND) $(DBDFLAGS) -o $@ $<
|
||||
endif
|
||||
|
||||
##################################################### Dependencies
|
||||
|
||||
@@ -463,10 +463,12 @@ endif #ifdef PROD
|
||||
# Java classes and packages
|
||||
#
|
||||
|
||||
ifdef JAVA
|
||||
DIRECTORY_TARGETS += $(INSTALL_JAVA)
|
||||
ifdef PACKAGE
|
||||
DIRECTORY_TARGETS += $(INSTALL_JAVA)/$(PACKAGE)
|
||||
endif
|
||||
endif
|
||||
|
||||
vpath %.class $(INSTALL_JAVA)/$(PACKAGE)
|
||||
|
||||
@@ -722,7 +724,7 @@ ifdef DBDEXPAND
|
||||
$(DBDNAME): ../$(DBDEXPAND)
|
||||
@echo Expanding dbd
|
||||
@$(RM) $@
|
||||
$(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) $(DBDFLAGS) $< > $@
|
||||
$(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) $(DBDFLAGS) -o $@ $<
|
||||
|
||||
ifneq (,$(wildcard ../base.dbd))
|
||||
$(DBDNAME): ../base.dbd
|
||||
|
||||
@@ -221,7 +221,7 @@ ifdef DBDEXPAND
|
||||
$(DBDNAME): ../$(DBDEXPAND)
|
||||
@echo expanding dbd
|
||||
@$(RM) $@
|
||||
$(EPICS_BASE_HOST_BIN)/dbExpand $(DBDFLAGS) $< > $@
|
||||
$(EPICS_BASE_HOST_BIN)/dbExpand $(DBDFLAGS) -o $@ $<
|
||||
|
||||
ifneq (,$(wildcard ../base.dbd))
|
||||
$(DBDNAME): ../base.dbd
|
||||
|
||||
@@ -248,7 +248,7 @@ ifdef DBDEXPAND
|
||||
$(DBDNAME): ../$(DBDEXPAND)
|
||||
@echo Expanding dbd
|
||||
@$(RM) $@
|
||||
$(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) $(DBDFLAGS) $< > $@
|
||||
$(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) $(DBDFLAGS) -o $@ $<
|
||||
endif
|
||||
|
||||
$(LIBNAME): $(LIBOBJS)
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
# Common build definitions
|
||||
#
|
||||
|
||||
ifndef CONFIG
|
||||
CONFIG = $(TOP)/configure
|
||||
endif
|
||||
CONFIG ?= $(TOP)/configure
|
||||
|
||||
-include $(CONFIG)/os/CONFIG_COMPAT
|
||||
|
||||
-include $(CONFIG)/RELEASE
|
||||
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)
|
||||
-include $(CONFIG)/RELEASE.Common.$(T_A)
|
||||
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)
|
||||
|
||||
include $(CONFIG)/CONFIG_COMMON
|
||||
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
# LIBRARY products to build and install
|
||||
# LIBRARY_HOST products to build and install
|
||||
# LIBRARY_IOC products to build and install
|
||||
# LOADABLE_LIBRARY module to build and install
|
||||
# LOADABLE_LIBRARY_HOST module to build and install
|
||||
# SCRIPTS scripts and install
|
||||
# SCRIPTS_HOST host system scripts to install
|
||||
# SCRIPTS_IOC ioc system scripts to install
|
||||
@@ -169,17 +171,6 @@ LIB_LDFLAGS+=$(LIB_LDFLAGS_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
# check for special includes:
|
||||
#
|
||||
ifneq ($(strip $(INC_$(OS_CLASS))),)
|
||||
# os-specific includes go to the include/os-directory:
|
||||
INC += $(subst -nil-,,$(INC_$(OS_CLASS)))
|
||||
else
|
||||
ifdef INC_DEFAULT
|
||||
INC += $(INC_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
# concat specific library contents (if defined)
|
||||
#
|
||||
ifneq ($(strip $(LIBSRCS_$(OS_CLASS))),)
|
||||
@@ -326,6 +317,22 @@ LIBRARY_HOST+=$(LIBRARY_HOST_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(LOADABLE_LIBRARY_$(OS_CLASS))),)
|
||||
LOADABLE_LIBRARY+=$(subst -nil-,,$(LOADABLE_LIBRARY_$(OS_CLASS)))
|
||||
else
|
||||
ifneq (,$(strip $(LOADABLE_LIBRARY_DEFAULT)))
|
||||
LOADABLE_LIBRARY+=$(LOADABLE_LIBRARY_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(LOADABLE_LIBRARY_HOST_$(OS_CLASS))),)
|
||||
LOADABLE_LIBRARY_HOST+=$(subst -nil-,,$(LOADABLE_LIBRARY_HOST_$(OS_CLASS)))
|
||||
else
|
||||
ifneq (,$(strip $(LOADABLE_LIBRARY_HOST_DEFAULT)))
|
||||
LOADABLE_LIBRARY_HOST+=$(LOADABLE_LIBRARY_HOST_DEFAULT)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(strip $(PROD_LIBS_$(OS_CLASS))),)
|
||||
PROD_LIBS += $(subst -nil-,,$(PROD_LIBS_$(OS_CLASS)))
|
||||
else
|
||||
|
||||
@@ -56,15 +56,15 @@ BASE_CPPFLAGS += $(OSITHREAD_DEFAULT_STACK_FLAGS_$(OSITHREAD_USE_DEFAULT_STACK))
|
||||
#---------------------------------------------------------------
|
||||
# Epics base build tools and tool flags
|
||||
|
||||
MAKEBPT = $(EPICS_BASE_HOST_BIN)/makeBpt$(HOSTEXE)
|
||||
DBEXPAND = $(EPICS_BASE_HOST_BIN)/dbExpand$(HOSTEXE)
|
||||
DBTORECORDTYPEH = $(EPICS_BASE_HOST_BIN)/dbToRecordtypeH$(HOSTEXE)
|
||||
DBTOMENUH = $(EPICS_BASE_HOST_BIN)/dbToMenuH$(HOSTEXE)
|
||||
MAKEBPT = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/makeBpt$(HOSTEXE))
|
||||
DBEXPAND = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/dbExpand$(HOSTEXE))
|
||||
DBTORECORDTYPEH = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/dbToRecordtypeH$(HOSTEXE))
|
||||
DBTOMENUH = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/dbToMenuH$(HOSTEXE))
|
||||
REGISTERRECORDDEVICEDRIVER = $(PERL) $(EPICS_BASE_HOST_BIN)/registerRecordDeviceDriver.pl
|
||||
|
||||
# private versions of lex/yacc from EPICS
|
||||
EYACC = $(EPICS_BASE_HOST_BIN)/antelope$(HOSTEXE)
|
||||
ELEX = $(EPICS_BASE_HOST_BIN)/e_flex$(HOSTEXE) -S$(EPICS_BASE)/include/flex.skel.static
|
||||
EYACC = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/antelope$(HOSTEXE))
|
||||
ELEX = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/e_flex$(HOSTEXE)) -S$(EPICS_BASE)/include/flex.skel.static
|
||||
|
||||
YACC = $(EYACC)
|
||||
LEX = $(ELEX)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
EPICS_VERSION=3
|
||||
EPICS_REVISION=14
|
||||
EPICS_MODIFICATION=2
|
||||
EPICS_MODIFICATION=4
|
||||
EPICS_UPDATE_NAME=
|
||||
EPICS_UPDATE_LEVEL=0
|
||||
|
||||
@@ -27,3 +27,4 @@ EPICS_VERSION_STRING="EPICS Version ${EPICS_VERSION}.${EPICS_REVISION}.${EPICS_M
|
||||
CVS_DATE="\$$Date$$"
|
||||
CVS_TAG="\$$Name$$"
|
||||
|
||||
BASE_3_14=YES
|
||||
|
||||
@@ -319,6 +319,7 @@ 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_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)
|
||||
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
|
||||
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)
|
||||
@@ -352,6 +353,7 @@ INSTALL_INC += $(foreach inc, $(INC), \
|
||||
$(OS_INSTALL_INC) \
|
||||
$(GENERIC_INSTALL_INC) \
|
||||
$(GENERATED_INSTALL_INC) ) )
|
||||
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )
|
||||
|
||||
#
|
||||
# Rule 1
|
||||
|
||||
@@ -98,12 +98,15 @@ CXXCMPLR=STRICT
|
||||
# NOTE: os/CONFIG.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files and
|
||||
# os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files may override
|
||||
#
|
||||
# NOTE WIN32: YES results in a DLL.
|
||||
# NOTE WIN32: YES results in a DLL. Valid settings are
|
||||
# SHARED_LIBRARIES=YES and STATIC_BUILD=NO
|
||||
# SHARED_LIBRARIES=NO and STATIC_BUILD=YES
|
||||
#
|
||||
SHARED_LIBRARIES=YES
|
||||
|
||||
# Build client objects statically ?
|
||||
# must be either YES or NO
|
||||
#
|
||||
STATIC_BUILD=NO
|
||||
|
||||
# Should header dependancy files be automatically generated
|
||||
|
||||
@@ -211,8 +211,7 @@ $(COMMON_DIR)/%.dbd: %Include.dbd
|
||||
@$(DBDDEPENDS_CMD)
|
||||
@echo "Expanding dbd"
|
||||
@$(RM) $@
|
||||
$(DBEXPAND) $(DBDFLAGS) $< > dbExpand.tmp
|
||||
$(MV) dbExpand.tmp $@
|
||||
$(DBEXPAND) $(DBDFLAGS) -o $@ $<
|
||||
|
||||
$(INSTALL_DBD)/%: %
|
||||
@echo "Installing dbd file $@"
|
||||
@@ -277,7 +276,7 @@ dbInstalls: $(DB_INSTALLS)
|
||||
|
||||
%_registerRecordDeviceDriver.cpp: %.dbd
|
||||
@$(RM) $@
|
||||
$(REGISTERRECORDDEVICEDRIVER) $< > $@
|
||||
$(REGISTERRECORDDEVICEDRIVER) $< $(basename $@) > $@
|
||||
|
||||
.PRECIOUS: %_registerRecordDeviceDriver.cpp
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ install: buildInstall
|
||||
|
||||
buildInstall: $(TARGETS)
|
||||
|
||||
cdCommands: $(wildcard $(TOP)/configure/RELEASE*) \
|
||||
envPaths cdCommands: $(wildcard $(TOP)/configure/RELEASE*) \
|
||||
$(TOP)/configure/CONFIG $(TOP)/bin
|
||||
@$(RM) $@
|
||||
ifeq ($(IOCS_APPL_TOP),)
|
||||
@@ -25,5 +25,5 @@ else
|
||||
endif
|
||||
|
||||
clean:
|
||||
@$(RM) cdCommands
|
||||
@$(RM) cdCommands envPaths
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ include $(CONFIG)/CONFIG_ADDONS
|
||||
|
||||
ifeq ($(findstring Host,$(VALID_BUILDS)),Host)
|
||||
LIBRARY += $(LIBRARY_HOST)
|
||||
LOADABLE_LIBRARY += $(LOADABLE_LIBRARY_HOST)
|
||||
OBJS += $(OBJS_HOST)
|
||||
PROD += $(PROD_HOST)
|
||||
SCRIPTS += $(SCRIPTS_HOST)
|
||||
@@ -74,15 +75,15 @@ endif
|
||||
#---------------------------------------------------------------
|
||||
# Create included Makefile for prod,testprod, and library targets
|
||||
|
||||
ifneq (,$(strip $(PROD) $(TESTPROD) $(LIBRARY)))
|
||||
ifneq (,$(strip $(PROD) $(TESTPROD) $(LIBRARY) $(LOADABLE_LIBRARY)))
|
||||
|
||||
MakefileInclude: ../Makefile
|
||||
@$(RM) $@
|
||||
@$(PERL) $(TOOLS)/makeMakefileInclude.pl $(PROD) $(TESTPROD) $(LIBRARY) $@
|
||||
@$(PERL) $(TOOLS)/makeMakefileInclude.pl $(PROD) $(TESTPROD) $(LIBRARY) $(LOADABLE_LIBRARY) $@
|
||||
|
||||
-include MakefileInclude
|
||||
|
||||
endif # PROD, TESTPROD, or LIBRARY defined
|
||||
endif # PROD, TESTPROD, LIBRARY, or LOADABLE_LIBRARY defined
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Products and Object libraries
|
||||
@@ -93,10 +94,10 @@ PRODTARGETS += $(PRODNAME) $(MUNCHNAME) $(CTDT_SRCS) $(CTDT_OBJS) $(NMS)
|
||||
# Libraries
|
||||
#
|
||||
|
||||
LIBTARGETS += $(LIBNAME)
|
||||
LIBTARGETS += $(INSTALL_LIBS)
|
||||
LIBTARGETS += $(SHRLIBNAME) $(INSTALL_SHRLIBS) \
|
||||
$(DLL_LINK_LIBNAME) $(INSTALL_DLL_LINK_LIBS)
|
||||
LIBTARGETS += $(LIBNAME) $(INSTALL_LIBS) \
|
||||
$(SHRLIBNAME) $(INSTALL_SHRLIBS) \
|
||||
$(DLL_LINK_LIBNAME) $(INSTALL_DLL_LINK_LIBS) \
|
||||
$(LOADABLE_SHRLIBNAME) $(INSTALL_LOADABLE_SHRLIBS)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
ifneq ($(CONFIG),$(TOP)/configure)
|
||||
@@ -137,7 +138,7 @@ clean::
|
||||
@echo "Cleaning"
|
||||
@$(RM) *.i *$(OBJ) *.a $(TESTPRODNAME) $(LIBNAME) $(SHRLIBNAME)\
|
||||
$(INC) *$(RES) $(TARGETS) $(DLL_LINK_LIBNAME) $(TDS) \
|
||||
*.out MakefileInclude \
|
||||
*.out MakefileInclude $(LOADABLE_SHRLIBNAME) \
|
||||
$(COMMON_INC) $(HDEPENDS_FILES) $(PRODTARGETS)
|
||||
ifdef BAF
|
||||
@$(RM) $(PROD_BAF) $(LIB_BAF) *$(BOF)
|
||||
@@ -268,6 +269,10 @@ $(SHRLIBNAME):$(LIB_PREFIX)%$(SHRLIB_SUFFIX): $(LIBRARY_OBJS) $(LIBRARY_RESS) $(
|
||||
@$(RM) $@
|
||||
$(LINK.shrlib)
|
||||
|
||||
$(LOADABLE_SHRLIBNAME):$(LOADABLE_SHRLIB_PREFIX)%$(LOADABLE_SHRLIB_SUFFIX): $(LIBRARY_OBJS) $(LIBRARY_RESS) $(SHRLIB_DEPLIBS)
|
||||
@$(RM) $@
|
||||
$(LINK.loadable_shrlib)
|
||||
|
||||
# C++ munching for VxWorks
|
||||
%.nm : %$(EXE)
|
||||
@$(RM) $@
|
||||
@@ -340,6 +345,10 @@ $(INSTALL_TCLLIB)/%: ../%
|
||||
@$(INSTALL) -d -m 555 $< $(INSTALL_TCLLIB)
|
||||
endif
|
||||
|
||||
$(INSTALL_LOADABLE_SHRLIBS): $(INSTALL_SHRLIB)/%: %
|
||||
@echo "Installing loadable shared library $@"
|
||||
@$(INSTALL_LIBRARY) -d -m 555 $< $(INSTALL_SHRLIB)
|
||||
|
||||
$(INSTALL_CONFIG)/%: %
|
||||
@echo "Installing config file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
@@ -16,11 +16,11 @@
|
||||
|
||||
JAVA_INC = $(JAVA_DIR)/include
|
||||
JAVA_BIN = $(JAVA_DIR)/bin
|
||||
JAVA_INCLUDES += -I${JAVA_INC} -I${JAVA_INC}/${OS_CLASS}
|
||||
JAVA_INCLUDES += -I$(JAVA_INC) -I$(JAVA_INC)/$(OS_CLASS) -I$(COMMON_DIR)
|
||||
|
||||
JAVACCMD = $(subst \,/,$(JAVA_BIN)/javac$(EXE) $(CLASSPATH) $(SOURCEPATH) $(JAVACFLAGS))
|
||||
JAVAHCMD = $(subst \,/,$(JAVA_BIN)/javah$(EXE) -d $(COMMON_DIR) -force $(CLASSPATH) $(JAVAHFLAGS))
|
||||
JARCMD = $(subst \,/,$(JAVA_BIN)/jar$(EXE) $(JAR_OPTIONS) $(COMMON_JAR) $(JARINPUT))
|
||||
JARCMD = $(subst \,/,$(JAVA_BIN)/jar$(EXE) $(JAR_OPTIONS) $(COMMON_JAR) $(JARINPUT) $(JARPACKAGES))
|
||||
|
||||
#-------------------------------------------------------
|
||||
vpath %.java ..
|
||||
@@ -28,13 +28,20 @@ vpath %.java ..
|
||||
CLASSPATH=-classpath $(INSTALL_JAVA)$(addprefix :,$(USR_CLASSPATH))
|
||||
SOURCEPATH=-sourcepath .:..:../..
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Java directory
|
||||
|
||||
ifdef JAVA
|
||||
JAVA_DIRECTORY_TARGETS += $(INSTALL_JAVA)
|
||||
endif
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Java native method C header files
|
||||
|
||||
JAVAHFLAGS += $(USR_JAVAHFLAGS)
|
||||
COMMON_JAVAINC += $(addprefix $(COMMON_DIR)/,$(JAVAINC))
|
||||
JAVAINC_CLASSFILES += $(addprefix $(INSTALL_JAVA)/,$(subst _,/,$(subst .h,.class,$(JAVAINC))))
|
||||
JAVAINC_CLASSNAMES += $(subst _,.,$(subst .h,,$(JAVAINC)))
|
||||
COMMON_JAVAINC += $(addprefix $(COMMON_DIR)/,$(JAVAINC))
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Java class files
|
||||
@@ -53,9 +60,11 @@ DEPTESTJAVA += $(subst .class,.java,$(TESTCLASSES))
|
||||
|
||||
COMMON_JAR += $(addprefix $(COMMON_DIR)/,$(JAR))
|
||||
INSTALL_JAR =$(addprefix $(INSTALL_JAVA)/,$(JAR))
|
||||
JARMANIFEST += $(firstword $(trim $(MANIFEST) $(JAR_MANIFEST)))
|
||||
JARMANIFEST += $(firstword $(MANIFEST) $(JAR_MANIFEST))
|
||||
JARINPUT += $(subst .java,.class,$(JAR_INPUT))
|
||||
JARDEPFILES += $(JARINPUT) $(JARMANIFEST)
|
||||
JARDEPFILES += $(addprefix $(INSTALL_JAVA)/,$(subst .java,.class,$(JAVA))) $(JARINPUT)
|
||||
JARPACKAGES += $(foreach pkg,$(JAR_PACKAGES),-C $(INSTALL_JAVA) $(subst .,/,$(pkg)))
|
||||
|
||||
ifneq ($(JARMANIFEST),)
|
||||
JAR_OPTIONS = cvmf $(JARMANIFEST)
|
||||
else
|
||||
@@ -64,10 +73,10 @@ endif
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Java doc definitions
|
||||
ifeq ($(JAVADOC),YES)
|
||||
ifdef JAVADOC
|
||||
JAVADOCFLAGS += $(USR_JAVADOCFLAGS)
|
||||
JAVADOCCMD = $(subst \,/,$(JAVA_BIN)/javadoc$(EXE) $(CLASSPATH) $(SOURCEPATH) $(JAVADOCFLAGS))
|
||||
INSTALL_JAVADOC = $(CLASSES:%.class=$(INSTALL_HTML)/%.html)
|
||||
INSTALL_JAVADOC = $(addprefix $(INSTALL_HTML)/,$(JAVADOC))/index.html
|
||||
endif
|
||||
|
||||
#-------------------------------------------------------
|
||||
@@ -81,7 +90,7 @@ buildInstall : build
|
||||
|
||||
rebuild: clean install
|
||||
|
||||
inc: $(INSTALL_CLASSES) $(COMMON_JAVAINC)
|
||||
inc: $(JAVA_DIRECTORY_TARGETS) $(INSTALL_CLASSES) $(COMMON_JAVAINC)
|
||||
|
||||
build: inc
|
||||
|
||||
@@ -95,8 +104,10 @@ clean::
|
||||
@$(RM) $(INSTALL_JAR) $(INSTALL_JAVADOC)
|
||||
@$(RM) $(COMMON_TESTCLASSES) $(COMMON_JAR) $(COMMON_JAVAINC)
|
||||
|
||||
$(INSTALL_JAVA):
|
||||
ifdef JAVA_DIRECTORY_TARGETS
|
||||
$(JAVA_DIRECTORY_TARGETS):
|
||||
$(MKDIR) -p $@
|
||||
endif
|
||||
|
||||
$(COMMON_JAVAINC):$(JAVAINC_CLASSFILES)
|
||||
@echo Creating header files $(COMMON_JAVAINC)
|
||||
@@ -108,23 +119,26 @@ $(COMMON_TESTCLASSES): $(addprefix ../,$(DEPTESTJAVA))
|
||||
@$(RM) $@
|
||||
$(JAVACCMD) -d $(COMMON_DIR) $^
|
||||
|
||||
$(INSTALL_CLASSES): $(INSTALL_JAVA) $(addprefix ../,$(DEPJAVA))
|
||||
$(INSTALL_CLASSES): $(addprefix ../,$(DEPJAVA))
|
||||
@echo Creating java class files
|
||||
@$(RM) $@
|
||||
$(JAVACCMD) -d $(INSTALL_JAVA) $^
|
||||
|
||||
$(INSTALL_JAVADOC): $(INSTALL_JAVA) $(addprefix ../,$(DEPJAVA))
|
||||
@echo Creating java class files
|
||||
$(INSTALL_JAVADOC): $(addprefix ../,$(JAVA))
|
||||
@echo Creating java doc files
|
||||
@$(RM) $@
|
||||
$(JAVADOCCMD) -d $(INSTALL_JAVA) $^
|
||||
$(JAVADOCCMD) -d $(addprefix $(INSTALL_HTML)/,$(JAVADOC)) $^
|
||||
|
||||
$(COMMON_DIR)/%.jar: $(JARDEPFILES)
|
||||
@echo Creating java jar file $@
|
||||
@$(RM) $@
|
||||
$(JARCMD)
|
||||
|
||||
$(INSTALL_JAVA)/%.jar: $(INSTALL_JAVA) $(COMMON_DIR)/%.jar
|
||||
$(INSTALL_JAVA)/%.jar: $(COMMON_DIR)/%.jar
|
||||
@echo "Installing java jar file $@"
|
||||
@$(INSTALL) -d -m 644 $< $(@D)
|
||||
|
||||
.PHONY: all install buildInstall rebuild clean build inc
|
||||
|
||||
.PRECIOUS: $(COMMON_JAVAINC)
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\
|
||||
# Although RTEMS uses gcc, it wants to use gcc its own way
|
||||
CROSS_CPPFLAGS =
|
||||
CROSS_LDFLAGS =
|
||||
SHRLIB_CFLAGS =
|
||||
|
||||
#--------------------------------------------------
|
||||
# operating system class (include/os/<os_class>)
|
||||
|
||||
@@ -24,6 +24,8 @@ OBJ = .o
|
||||
LIB_PREFIX = lib
|
||||
LIB_SUFFIX = .a
|
||||
SHRLIB_SUFFIX = .so$(addprefix .,$(SHRLIB_VERSION))
|
||||
LOADABLE_SHRLIB_SUFFIX = .so$(addprefix .,$(SHRLIB_VERSION))
|
||||
LOADABLE_SHRLIB_PREFIX = lib
|
||||
|
||||
#-------------------------------------------------------
|
||||
# names of libraries to build
|
||||
@@ -31,19 +33,18 @@ SHRLIB_SUFFIX = .so$(addprefix .,$(SHRLIB_VERSION))
|
||||
LIBNAME = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(LIB_SUFFIX))
|
||||
# <lib> -> lib<lib>.so.<version>
|
||||
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(SHRLIB_SUFFIX))
|
||||
LOADABLE_SHRLIBNAME = $(LOADABLE_BUILD_LIBRARY:%=$(LOADABLE_SHRLIB_PREFIX)%$(LOADABLE_SHRLIB_SUFFIX))
|
||||
|
||||
#-------------------------------------------------------
|
||||
# shrlib: DEPLIBS, LDFLAGS, and LDLIBS definitions
|
||||
|
||||
LIB_EXT = $(LIB_SUFFIX)
|
||||
|
||||
# SHRLIB_LIBS deprecated
|
||||
LIB_LIBS += $(SHRLIB_LIBS)
|
||||
|
||||
SHRLIB_DEPLIBS=$(foreach lib, $(LIB_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).*, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
|
||||
|
||||
SHRLIB_LDLIBS = $(addprefix -l, $($*_LDLIBS) $(LIB_LIBS) $(USR_LIBS) \
|
||||
@@ -58,7 +59,7 @@ SHRLIBDIR_LDFLAGS += $(sort $(SHRLIB_DEPLIB_DIRS:%=-L%))
|
||||
PROD_DEPLIBS=$(foreach lib,$(PROD_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).*, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
|
||||
|
||||
PROD_LDLIBS = $(addprefix -l, $($*_LDLIBS) $(PROD_LIBS) $(USR_LIBS)\
|
||||
@@ -78,6 +79,8 @@ LINK.cpp = $(CCC) -o $@ $(STATIC_LDFLAGS) $(PRODDIR_LDFLAGS) $(LDFLAGS)
|
||||
LINK.cpp += $(PROD_LDFLAGS) $(PROD_LD_OBJS) $(PROD_LD_RESS) $(PROD_LDLIBS)
|
||||
LINK.shrlib = $(CCC) -o $@ $(SHRLIB_LDFLAGS) $(SHRLIBDIR_LDFLAGS) $(LDFLAGS)
|
||||
LINK.shrlib += $(LIB_LDFLAGS) $(LIBRARY_LD_OBJS) $(LIBRARY_LD_RESS) $(SHRLIB_LDLIBS)
|
||||
LINK.loadable_shrlib = $(CCC) -o $@ $(LOADABLE_SHRLIB_LDFLAGS) $(SHRLIBDIR_LDFLAGS) $(LDFLAGS)
|
||||
LINK.loadable_shrlib += $(LIB_LDFLAGS) $(LIBRARY_LD_OBJS) $(LIBRARY_LD_RESS) $(SHRLIB_LDLIBS)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Operating system definitions
|
||||
|
||||
25
configure/os/CONFIG.Common.aix-ppc
Normal file
25
configure/os/CONFIG.Common.aix-ppc
Normal file
@@ -0,0 +1,25 @@
|
||||
# CONFIG.Common.aix-ppc
|
||||
#
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for aix-ppc target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.aix-ppc
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include definitions common to all Unix targets
|
||||
include $(CONFIG)/os/CONFIG.Common.UnixCommon
|
||||
|
||||
#
|
||||
# Set OS-specific information
|
||||
#
|
||||
OS_CLASS = AIX
|
||||
ARCH_CLASS = ppc
|
||||
|
||||
CODE_CPPFLAGS = -D_REENTRANT
|
||||
|
||||
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS -D_XOPEN_SOURCE=500 -D_ALL_SOURCE
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_LDLIBS_YES = -lpthread
|
||||
|
||||
#SHARED_LIBRARIES=NO
|
||||
|
||||
11
configure/os/CONFIG.Common.aix-ppc-gnu
Normal file
11
configure/os/CONFIG.Common.aix-ppc-gnu
Normal file
@@ -0,0 +1,11 @@
|
||||
# CONFIG.Common.aix-ppc-gnu
|
||||
#
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for aix-ppc target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.aix-ppc
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include definitions common to all aix-ppc target archs
|
||||
include $(CONFIG)/os/CONFIG.Common.aix-ppc
|
||||
|
||||
@@ -55,3 +55,4 @@ LDLIBS_READLINE = -lreadline
|
||||
# line in CONFIG_SITE.darwin-ppc.Common to use GNU readline
|
||||
# command-line editing:
|
||||
#COMMANDLINE_LIBRARY=READLINE
|
||||
|
||||
|
||||
@@ -21,12 +21,13 @@ OP_SYS_CFLAGS = -D_HPUX_SOURCE
|
||||
OP_SYS_CXXFLAGS =
|
||||
|
||||
SHRLIB_SUFFIX = .sl$(addprefix .,$(SHRLIB_VERSION))
|
||||
LOADABLE_SHRLIB_SUFFIX = .sl$(addprefix .,$(SHRLIB_VERSION))
|
||||
LOADABLE_SHRLIB_PREFIX =
|
||||
|
||||
# Set runtime path for shared libraries
|
||||
empty:= # trick from the make docs...
|
||||
space:= $(empty) $(empty)
|
||||
RUNTIME_LDFLAGS_YES = -Wl,+b$(subst $(space),:,$(sort $(SHRLIB_SEARCH_DIRS))),+s
|
||||
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
|
||||
RUNTIME_LDFLAGS = -Wl,+b$(subst $(space),:,$(sort $(SHRLIB_SEARCH_DIRS))),+s
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=parisc-hp-unix
|
||||
|
||||
@@ -27,8 +27,7 @@ OP_SYS_LDLIBS = -lrt
|
||||
#ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
|
||||
# Set runtime path for shared libraries
|
||||
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%)
|
||||
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
|
||||
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%)
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=ppc_82xx
|
||||
|
||||
@@ -28,8 +28,7 @@ ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
ARCH_DEP_CFLAGS += -mcpu=pentium
|
||||
|
||||
# Set runtime path for shared libraries
|
||||
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%)
|
||||
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
|
||||
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%)
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=i586-pc-linux-gnu
|
||||
|
||||
33
configure/os/CONFIG.Common.linux-x86-borland
Normal file
33
configure/os/CONFIG.Common.linux-x86-borland
Normal file
@@ -0,0 +1,33 @@
|
||||
# CONFIG.Common.linux-x86-borland
|
||||
#
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for linux-x86 target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.Common.linux-x86-borland
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include definitions common to all Unix targets
|
||||
include $(CONFIG)/os/CONFIG.Common.UnixCommon
|
||||
|
||||
OS_CLASS = Linux
|
||||
ARCH_CLASS = x86
|
||||
|
||||
POSIX_CPPFLAGS_NO =
|
||||
POSIX_LDLIBS_YES = libpthread.so
|
||||
|
||||
OP_SYS_CPPFLAGS += -D_BSD_SOURCE -D_SVID_SOURCE
|
||||
OP_SYS_CPPFLAGS += -Dlinux
|
||||
OP_SYS_LDLIBS = libc.so libm.so libdl.so librt.so
|
||||
|
||||
ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
ARCH_DEP_CFLAGS += -mcpu=pentium
|
||||
|
||||
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=i586-pc-linux-gnu
|
||||
CMPLR_SUFFIX=
|
||||
CMPLR_PREFIX=$(addsuffix -,$(GNU_TARGET))
|
||||
endif
|
||||
|
||||
@@ -28,8 +28,7 @@ POSIX_LDLIBS_YES += -lposix4 -lpthread $(POSIX_LDLIBS_YES_$(SOLARIS_VERSION))
|
||||
OP_SYS_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
|
||||
|
||||
# Set runtime path for shared libraries
|
||||
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-R%)
|
||||
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
|
||||
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-R%)
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=sparc-sun-solaris2
|
||||
|
||||
@@ -29,8 +29,7 @@ OP_SYS_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
|
||||
ARCH_DEP_CPPFLAGS = -D_X86_
|
||||
|
||||
# Set runtime path for shared libraries
|
||||
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-R%)
|
||||
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
|
||||
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-R%)
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=x86-sun-solaris2
|
||||
|
||||
@@ -24,8 +24,7 @@ OP_SYS_CPPFLAGS = -DSUNOS4
|
||||
ARCH_DEP_CPPFLAGS += -D_X86_
|
||||
|
||||
# Set runtime path for shared libraries
|
||||
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-R%)
|
||||
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
|
||||
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-R%)
|
||||
|
||||
ifdef CROSS
|
||||
GNU_TARGET=x86-sun-sunos4
|
||||
|
||||
@@ -21,7 +21,6 @@ EXE =
|
||||
OBJ = .o
|
||||
LIB_PREFIX =lib
|
||||
LIB_SUFFIX = .a
|
||||
LIB_EXT = .a
|
||||
MUNCH_SUFFIX = .munch
|
||||
|
||||
#-------------------------------------------------------
|
||||
@@ -34,7 +33,7 @@ LIBNAME = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(LIB_SUFFIX))
|
||||
PROD_DEPLIBS=$(foreach lib,$(PROD_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).*, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
|
||||
|
||||
|
||||
|
||||
12
configure/os/CONFIG.aix-ppc-gnu.Common
Normal file
12
configure/os/CONFIG.aix-ppc-gnu.Common
Normal file
@@ -0,0 +1,12 @@
|
||||
# CONFIG.aix-ppc-gnu.Common
|
||||
#
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for aix-ppc gnu compiler host builds
|
||||
# Sites may override these definitions in CONFIG_SITE.aix-ppc-gnu.Common
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to aix-ppc hosts
|
||||
include $(CONFIG)/os/CONFIG.aix-ppc.Common
|
||||
|
||||
22
configure/os/CONFIG.aix-ppc-gnu.aix-ppc-gnu
Normal file
22
configure/os/CONFIG.aix-ppc-gnu.aix-ppc-gnu
Normal file
@@ -0,0 +1,22 @@
|
||||
# CONFIG.aix-ppc.aix-ppc
|
||||
#
|
||||
#
|
||||
# Definitions for aix-ppc host - aix-ppc target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.aix-ppc.aix-ppc
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include common gnu compiler definitions
|
||||
include $(CONFIG)/CONFIG.gnuCommon
|
||||
|
||||
GNU_DIR = /usr/common/usg/gcc/3.2.1
|
||||
|
||||
CC = $(GNU_BIN)/gcc
|
||||
CCC = $(GNU_BIN)/g++
|
||||
|
||||
AR = ar
|
||||
ARFLAGS = rcv
|
||||
RANLIB = ranlib -t
|
||||
|
||||
SHRLIB_LDFLAGS = -shared
|
||||
LOADABLE_SHRLIB_LDFLAGS = -shared
|
||||
|
||||
10
configure/os/CONFIG.aix-ppc.Common
Normal file
10
configure/os/CONFIG.aix-ppc.Common
Normal file
@@ -0,0 +1,10 @@
|
||||
# CONFIG.aix-ppc.Common
|
||||
#
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for aix-ppc host builds
|
||||
# Sites may override these definitions in CONFIG_SITE.aix-ppc.Common
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to unix hosts
|
||||
include $(CONFIG)/os/CONFIG.UnixCommon.Common
|
||||
@@ -21,9 +21,11 @@ SHRLIB_LDFLAGS = -dynamiclib -flat_namespace -undefined suppress \
|
||||
-install_name $(firstword $(SHRLIB_SEARCH_DIRS))/$@ \
|
||||
-compatibility_version $(EPICS_VERSION).$(EPICS_REVISION) \
|
||||
-current_version $(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
|
||||
SHRLIB_SUFFIX = $(addprefix .,$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)).dylib
|
||||
SHRLIB_SUFFIX = .$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION).dylib
|
||||
SHRLIB_VERSION = $(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
|
||||
|
||||
LOADABLE_SHRLIB_LDFLAGS = -bundle -flat_namespace -undefined suppress
|
||||
|
||||
#
|
||||
# Position-independent code is the default on Darwin.
|
||||
#
|
||||
|
||||
@@ -16,10 +16,11 @@ AR = ar -rc
|
||||
RANLIB=
|
||||
LD = ld -r
|
||||
|
||||
# Always keep libc shared to force using the one supplied with the
|
||||
# target machine (HP system and libc must match - important e.g. for
|
||||
# multi-CPU-systems)
|
||||
STATIC_LDFLAGS_YES = -static -l:libc.sl
|
||||
STATIC_LDFLAGS_YES= -Wl,-a,archive
|
||||
STATIC_LDFLAGS_NO =
|
||||
|
||||
STATIC_LDLIBS_YES = -Wl,-a,default
|
||||
STATIC_LDLIBS_NO =
|
||||
|
||||
# Switch explicitly from default DCE threads to posix threads
|
||||
POSIX_CPPFLAGS_YES += -D_REENTRANT -D_PTHREADS -D_POSIX_C_SOURCE=199506L
|
||||
@@ -27,3 +28,4 @@ USR_SYS_LIBS += pthread
|
||||
|
||||
# C++ templates need PIC definition also in link phase
|
||||
SHRLIB_LDFLAGS += -shared -fPIC
|
||||
LOADABLE_SHRLIB_LDFLAGS += $(SHRLIB_LDFLAGS)
|
||||
|
||||
@@ -43,15 +43,13 @@ WARN_CXXFLAGS_NO =
|
||||
OPT_CXXFLAGS_YES = +O3
|
||||
OPT_CXXFLAGS_NO = -g
|
||||
|
||||
# Always keep libc shared to force using the one supplied with the
|
||||
# target machine (HP system and libc must match - important e.g. for
|
||||
# multi-CPU-systems)
|
||||
STATIC_LDFLAGS_YES= -Wl,-a,archive -l:libc.sl
|
||||
STATIC_LDFLAGS_YES= -Wl,-a,archive
|
||||
STATIC_LDFLAGS_NO =
|
||||
|
||||
STATIC_LDLIBS_YES =
|
||||
STATIC_LDLIBS_YES = -Wl,-a,default
|
||||
STATIC_LDLIBS_NO =
|
||||
|
||||
TARGET_LDFLAGS += -AA -mt
|
||||
|
||||
SHRLIB_LDFLAGS = -b
|
||||
LOADABLE_SHRLIB_LDFLAGS = $(SHRLIB_LDFLAGS)
|
||||
|
||||
@@ -11,3 +11,12 @@ GNU_DIR = /usr
|
||||
|
||||
CC = $(GNU_BIN)/gcc
|
||||
CCC = $(GNU_BIN)/g++
|
||||
|
||||
STATIC_LDFLAGS_YES= -Wl,-Bstatic
|
||||
STATIC_LDFLAGS_NO=
|
||||
STATIC_LDLIBS_YES= -Wl,-Bdynamic
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS += -shared -z defs
|
||||
LOADABLE_SHRLIB_LDFLAGS = -shared
|
||||
|
||||
|
||||
13
configure/os/CONFIG.linux-x86-borland.Common
Normal file
13
configure/os/CONFIG.linux-x86-borland.Common
Normal file
@@ -0,0 +1,13 @@
|
||||
# CONFIG.linux-x86-borland.Common
|
||||
#
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Definitions for linux-x86-borland host builds
|
||||
# Sites may override these definitions in CONFIG_SITE.linux-x86-borland.Common
|
||||
#-------------------------------------------------------
|
||||
|
||||
#Include definitions common to unix hosts
|
||||
include $(CONFIG)/os/CONFIG.UnixCommon.Common
|
||||
|
||||
WIND_HOST_TYPE = x86-linux
|
||||
223
configure/os/CONFIG.linux-x86-borland.linux-x86-borland
Normal file
223
configure/os/CONFIG.linux-x86-borland.linux-x86-borland
Normal file
@@ -0,0 +1,223 @@
|
||||
# CONFIG.linux-x86-borland.linux-x86-borland
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Definitions for linux-x86-borland host - linux-x86-borland target builds
|
||||
# Sites may override these definitions in CONFIG_SITE.linux-x86-borland.linux-x86-borland
|
||||
#-------------------------------------------------------
|
||||
|
||||
# Include common gnu compiler definitions
|
||||
include $(CONFIG)/CONFIG.gnuCommon
|
||||
SHRLIB_CFLAGS =
|
||||
|
||||
GNU_DIR = /usr
|
||||
|
||||
KYLIX=1
|
||||
|
||||
BORLAND_INC_STLPORT = $(BORLAND)/include/stlport
|
||||
BORLAND_INC = $(BORLAND)/include
|
||||
BORLAND_LIB = $(BORLAND)/lib
|
||||
BORLAND_BIN = $(BORLAND)/bin
|
||||
|
||||
WINLINK = $(BORLAND_BIN)/ilink -q
|
||||
#
|
||||
# Configure Borland C compiler
|
||||
# -q suppress compiler identification banner
|
||||
# -a8 quad word alignment
|
||||
#CCLINKOPT = -q -a8 -I/usr/include
|
||||
CCLINKOPT = -q -a8
|
||||
CC = $(BORLAND_BIN)/bc++ $(CCLINKOPT)
|
||||
LD = $(BORLAND_BIN)/bc++ -r
|
||||
|
||||
#
|
||||
# __STDC__=0 works but not as cleanly as with
|
||||
# Microsoft Visual C++.
|
||||
# The Borland header files use ifdef __STDC__
|
||||
# to disable many nice things. This is overridden
|
||||
# by defining NO_BORLAND_STDC in the Makefile.
|
||||
#
|
||||
ifdef NO_BORLAND_STDC
|
||||
CONFORM_CFLAGS_ANSI =
|
||||
CONFORM_CFLAGS_STRICT =
|
||||
else
|
||||
CONFORM_CFLAGS_ANSI = -D__STDC__=0
|
||||
CONFORM_CFLAGS_STRICT = -D__STDC__=0
|
||||
endif
|
||||
CONFORM_CFLAGS_TRAD =
|
||||
|
||||
# -w display warnings on
|
||||
# -g0 no limit to warning messages
|
||||
# some warning message here are always disabled because they are
|
||||
# trivial and numerous
|
||||
# -w-8012 Comparing signed and unsigned values
|
||||
# -w-8060 Possibly incorrect assignment
|
||||
# -w-8071 Conversion may lose significant digits
|
||||
WARN_CFLAGS_YES = -w -g0 -w-8012 -w-8060 -w-8071 -w-dup
|
||||
# -w- display warnings off
|
||||
WARN_CFLAGS_NO = -w-
|
||||
|
||||
#
|
||||
# -k- turn off standard stack frame
|
||||
# -H- turn off precompiled headers
|
||||
# -R- don't include browser info in .obj files
|
||||
# -O1 optimization for size
|
||||
# -v- turn off source debugging
|
||||
# -vi control expansion of inline functions
|
||||
OPT_CFLAGS_YES = -k- -H- -R- -O1 -v- -vi
|
||||
#
|
||||
OPT_CFLAGS_NO =
|
||||
|
||||
# OS vendor c preprocessor
|
||||
CPP = $(BORLAND_BIN)/bcpp
|
||||
|
||||
# Configure OS vendor C++ compiler
|
||||
#
|
||||
# __STDC__=0 works but not as cleanly as with
|
||||
# Microsoft Visual C++.
|
||||
# The Borland header files use ifdef __STDC__
|
||||
# to disable many nice things. This is overridden
|
||||
# by defining NO_BORLAND_STDC in the Makefile.
|
||||
#
|
||||
CCC = $(BORLAND_BIN)/bc++ $(CCLINKOPT)
|
||||
ifndef NO_BORLAND_STDC
|
||||
CONFORM_CXXFLAGS_NORMAL = -D__STDC__=0
|
||||
CONFORM_CXXFLAGS_STRICT = -D__STDC__=0
|
||||
endif
|
||||
|
||||
# -w display warnings on
|
||||
# -g0 no limit to warning messages
|
||||
# -w-8012 Comparing signed and unsigned values
|
||||
# -w-8060 Possibly incorrect assignment
|
||||
# -w-8071 Conversion may lose significant digits
|
||||
# -w-8008 Condition is always true or always false (compile time
|
||||
# know template parameters causes this to spew garbage)
|
||||
# -w-8027 Functions containing reserved words are not expanded inline
|
||||
# (Some compilers are better than others with inline)
|
||||
# -w-8066 Unreachable code (compile time know template parameters
|
||||
# causes this to spew garbage)
|
||||
# -w-8080 'identifier' declared but never used
|
||||
# (instantiating unused static const external parameters is
|
||||
# anachronistic compiler practice)
|
||||
# -w-8004 'identifier' is assigned a value that is never used
|
||||
# (compile time know template parameters
|
||||
# causes this to spew garbage)
|
||||
# -w-8026 Functions with exception specifications are not expanded inline
|
||||
#
|
||||
WARN_CXXFLAGS_YES = -w -g0 -w-8012 -w-8060 -w-8071 -w-8008 -w-8027 -w-8066 -w-8080 -w-8004 -w-8026
|
||||
# -w- display warnings off
|
||||
WARN_CXXFLAGS_NO = -w-
|
||||
|
||||
#
|
||||
# -k- turn off standard stack frame
|
||||
# -H- Turn off precompiled headers
|
||||
# -R- Don't include browser info in .obj files
|
||||
# -O1 optimization for size
|
||||
# -v- turn off source debugging
|
||||
# -vi control expansion of inline functions
|
||||
OPT_CXXFLAGS_YES = -k- -H- -R- -O1 -v- -vi
|
||||
#
|
||||
OPT_CXXFLAGS_NO =
|
||||
|
||||
# -c case sensitive linking
|
||||
# -C clear state before linking
|
||||
# -Gi generate import library
|
||||
# -Gn no state files
|
||||
# -Tpd targets a Windows .DLL file
|
||||
# -x no map
|
||||
# -w display warnings on
|
||||
#LINK_OPT_FLAGS_YES = -c -C -Gi -Gn -Tpd -x -w
|
||||
#LINK_OPT_FLAGS_NO = -c -C -Gi -Gn -Tpd -x -w-
|
||||
#Linux_DLLFLAGS = $(LINK_OPT_FLAGS_$(HOST_OPT)) $(TARGET_LDFLAGS) $(LIB_LDFLAGS)
|
||||
OPT_LDFLAGS =
|
||||
|
||||
ARCH_DEP_CFLAGS=
|
||||
|
||||
# to identify the general architecture class:
|
||||
# should be BSD, SYSV, WIN32, ...
|
||||
# is: WIN32, sun4, hpux, linux, ...
|
||||
#
|
||||
OS_CLASS=Linux
|
||||
|
||||
|
||||
OBJ=.o
|
||||
|
||||
# Problem: BorlandC does not recognize *.cc as C++ source,
|
||||
# we have to compile xx.cc using the flag -P xx.cc,
|
||||
SOURCE_CXXFLAG = -P
|
||||
|
||||
# Operating system flags
|
||||
OP_SYS_CFLAGS =
|
||||
|
||||
#
|
||||
# Borland specific include files
|
||||
#
|
||||
OP_SYS_INCLUDES = -I/usr/include
|
||||
#
|
||||
|
||||
#-------------------------------------------------------
|
||||
# Prod: DEPLIBS, LDFLAGS, and LDLIBS definitions
|
||||
|
||||
PROD_DEPLIBS= $(foreach lib,$(PROD_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).so, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).a, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
|
||||
|
||||
SHRLIB_DEPLIBS= $(foreach lib,$(LIB_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).so, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).a, \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
|
||||
|
||||
PROD_SYS_DEPLIBS= $(foreach lib,$(PROD_SYS_LIBS), \
|
||||
$(firstword $(wildcard \
|
||||
/lib/$(LIB_PREFIX)$(lib).so \
|
||||
/lib/$(LIB_PREFIX)$(lib).a \
|
||||
/usr/lib/$(LIB_PREFIX)$(lib).so \
|
||||
/usr/lib/$(LIB_PREFIX)$(lib).a) \
|
||||
$(lib)))
|
||||
|
||||
PROD_LDLIBS = $(addprefix lib, $($*_LDLIBS)) \
|
||||
$(notdir $(PROD_DEPLIBS)) \
|
||||
$(notdir $(PROD_SYS_DEPLIBS)) \
|
||||
$(addprefix lib, $($*_SYS_LIBS) $(USR_SYS_LIBS))
|
||||
|
||||
SHRLIB_LDLIBS = $(addprefix lib, $($*_LDLIBS)) \
|
||||
$(notdir $(SHRLIB_DEPLIBS)) \
|
||||
$(addprefix lib, $($*_SYS_LIBS) $(LIB_SYS_LIBS) $(USR_SYS_LIBS)) $(LDLIBS)
|
||||
|
||||
LDLIBS_STATIC_YES = LDLIBS
|
||||
LDLIBS_SHARED_NO = LDLIBS
|
||||
LDLIBS_SHARED_YES = LDLIBS
|
||||
PROD_LDLIBS += $($(firstword $(LDLIBS_STATIC_$(STATIC_BUILD)) \
|
||||
$(LDLIBS_SHARED_$(SHARED_LIBRARIES))))
|
||||
|
||||
empty:=
|
||||
space:= $(empty) $(empty)
|
||||
PROD_DEPLIB_DIRS = $(dir $($*_DEPLIBS)) $(dir $(PROD_DEPLIBS))
|
||||
SHRLIB_DEPLIB_DIRS = $(dir $($*_DEPLIBS)) $(dir $(SHRLIB_DEPLIBS))
|
||||
|
||||
PRODDIR_LDFLAGS = -L$(subst $(space),:,$(sort $(PROD_DEPLIB_DIRS) $(BORLAND_LIB)))
|
||||
SHRLIBDIR_LDFLAGS = -L$(subst $(space),:,$(sort $(SHRLIB_DEPLIB_DIRS) $(BORLAND_LIB)))
|
||||
|
||||
# -c case sensitive linking
|
||||
# -C clear state before linking
|
||||
# -Gn no state files
|
||||
# -Tpe targets a Windows .EXE file
|
||||
# -x no map
|
||||
# -w display warnings on
|
||||
LDFLAGS += -c -C -Gn -x -w
|
||||
LINKLIBS=rtl.a visualclx.a rtle.a libborcrtl.a libborstl.a libborunwind.a
|
||||
|
||||
LINK.cpp = $(WINLINK) $(STATIC_LDFLAGS) $(PRODDIR_LDFLAGS) $(LDFLAGS) -Tpe -w-dup
|
||||
LINK.cpp += $(PROD_LDFLAGS) borinit.o /usr/lib/crt1.o $(PROD_LD_OBJS)
|
||||
LINK.cpp += , $@ ,,$(LINKLIBS) $(PROD_LDLIBS)
|
||||
|
||||
LINK.shrlib = $(WINLINK) $(STATIC_LDFLAGS) $(SHRLIBDIR_LDFLAGS) $(LDFLAGS) -Tpd -Gi
|
||||
LINK.shrlib+= $(LIB_LDFLAGS) borinitso.o $(LIBRARY_LD_OBJS)
|
||||
LINK.shrlib+= , $@ ,,$(LINKLIBS) $(SHRLIB_LDLIBS)
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
#Include definitions common to unix hosts
|
||||
include $(CONFIG)/os/CONFIG.UnixCommon.Common
|
||||
|
||||
WIND_HOST_TYPE = i386-linux2
|
||||
WIND_HOST_TYPE = x86-linux
|
||||
|
||||
@@ -14,4 +14,11 @@ GNU_DIR = /usr
|
||||
CC = $(GNU_BIN)/gcc
|
||||
CCC = $(GNU_BIN)/g++
|
||||
|
||||
STATIC_LDFLAGS_YES= -Wl,-Bstatic
|
||||
STATIC_LDFLAGS_NO=
|
||||
STATIC_LDLIBS_YES= -Wl,-Bdynamic
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS += -shared -z defs
|
||||
LOADABLE_SHRLIB_LDFLAGS = -shared
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ STATIC_LDLIBS_YES= -Bdynamic
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS = -shared
|
||||
LOADABLE_SHRLIB_LDFLAGS = $(SHRLIB_LDFLAGS)
|
||||
|
||||
############# ???????????
|
||||
#####ACC_SFLAGS_YES= -non_shared
|
||||
|
||||
@@ -18,11 +18,12 @@ AR = ar -rc
|
||||
RANLIB=
|
||||
LD = ld -r
|
||||
|
||||
STATIC_LDFLAGS_YES= -Bstatic
|
||||
STATIC_LDFLAGS_YES= -Wl,-Bstatic
|
||||
STATIC_LDFLAGS_NO=
|
||||
STATIC_LDLIBS_YES= -Bdynamic
|
||||
STATIC_LDLIBS_YES= -Wl,-Bdynamic
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS = -G -h $@ -z ignore -z combreloc -z lazyload
|
||||
SHRLIB_LDFLAGS += -z defs
|
||||
LOADABLE_SHRLIB_LDFLAGS = -G -h $@ -z ignore -z combreloc -z lazyload
|
||||
|
||||
|
||||
@@ -52,9 +52,8 @@ STATIC_LDFLAGS_NO=
|
||||
STATIC_LDLIBS_YES= -Bdynamic
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_CFLAGS += -KPIC
|
||||
SHRLIB_LDFLAGS += -G -h $@
|
||||
SHRLIB_LDFLAGS += -z defs
|
||||
SHRLIB_LDFLAGS += -z defs -KPIC -G -h $@
|
||||
LOADABLE_SHRLIB_LDFLAGS += -KPIC -G -h $@
|
||||
|
||||
OP_SYS_LDFLAGS += -z ignore -z combreloc -z lazyload
|
||||
|
||||
|
||||
@@ -18,8 +18,8 @@ AR = ar -rc
|
||||
RANLIB=
|
||||
LD = ld -r
|
||||
|
||||
SHRLIB_LDFLAGS = -G -h $@
|
||||
SHRLIB_LDFLAGS += -z defs
|
||||
SHRLIB_LDFLAGS = -z defs -G -h $@
|
||||
LOADABLE_SHRLIB_LDFLAGS += -G -h $@
|
||||
|
||||
OP_SYS_LDFLAGS = -z ignore -z combreloc -z lazyload
|
||||
|
||||
|
||||
@@ -51,9 +51,8 @@ STATIC_LDFLAGS_NO=
|
||||
STATIC_LDLIBS_YES= -Bdynamic
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_CFLAGS += -KPIC
|
||||
SHRLIB_LDFLAGS = -G -h $@
|
||||
SHRLIB_LDFLAGS += -z defs
|
||||
SHRLIB_LDFLAGS = -z defs -KPIC -G -h $@
|
||||
LOADABLE_SHRLIB_LDFLAGS = -KPIC -G -h $@
|
||||
|
||||
OP_SYS_LDFLAGS = -z ignore -z combreloc -z lazyload
|
||||
OP_SYS_LDFLAGS = -z ignore -z combreloc -z lazyload
|
||||
|
||||
|
||||
@@ -45,4 +45,5 @@ STATIC_LDLIBS_YES= -Bdynamic
|
||||
STATIC_LDLIBS_NO=
|
||||
|
||||
SHRLIB_LDFLAGS = -assert pure-text -h $@
|
||||
LOADABLE_SHRLIB_LDFLAGS = -assert pure-text -h $@
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ VALID_BUILDS = Host Ioc
|
||||
|
||||
#-------------------------------------------------------
|
||||
|
||||
BUILD_LIBRARY += $(LOADABLE_BUILD_LIBRARY)
|
||||
|
||||
BORLAND_INC = $(BORLAND)\\include
|
||||
BORLAND_LIB = $(BORLAND)\\lib
|
||||
BORLAND_BIN = $(BORLAND)\\bin
|
||||
@@ -185,12 +187,12 @@ OP_SYS_INCLUDES = -I$(BORLAND_INC)
|
||||
# specify dll .def file only if it exists
|
||||
#
|
||||
#DLL_DEF_FLAG = $(addprefix /def:,$(wildcard ../$(addsuffix .def,$(LIBRARY))))
|
||||
DLL_DEF_FLAG = $(subst /,\\,$(wildcard ../$(addsuffix .def,$(LIBRARY))))
|
||||
DLL_DEF_FLAG = $(subst /,\\,$(wildcard ../$(addsuffix .def,$*)))
|
||||
|
||||
#
|
||||
# A WIN32 dll has three parts:
|
||||
# x.dll: the real dll (SHRLIBNAME)
|
||||
# x.lib: what you link to progs that use the dll (LIBNAME)
|
||||
# x.lib: what you link to progs that use the dll (DLL_LINK_LIBNAME)
|
||||
# x.exp: what you need to build the dll (in no variable)
|
||||
#
|
||||
LINK.shrlib = $(WINLINK) $(WIN32_DLLFLAGS) -L$(BORLAND_LIB) -L$(BORLAND_LIB)\\Psdk c0d32.obj
|
||||
@@ -207,29 +209,19 @@ SHRLIB_SUFFIX=.dll
|
||||
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
|
||||
|
||||
#
|
||||
# Under WIN32 we have the unique situation where the DLL link creates the
|
||||
# DLL link library xxx.lib and we need to be very careful to avoid replacing
|
||||
# the xxx.lib created by the dll link with an xxx.lib created by $(AR).
|
||||
# Therefore, the object library is named xxxObj.lib
|
||||
#
|
||||
# SHARED_LIBRARIES is YES if we are building a DLL and NO if we aren't
|
||||
# When SHARED_LIBRARIES is YES we are building a DLL link library
|
||||
# and when SHARED_LIBRARIES is NO we are building an object library
|
||||
#
|
||||
DLL_LINK_LIBNAME_YES = $(BUILD_LIBRARY:%=%.lib)
|
||||
DLL_LINK_LIBNAME = $(DLL_LINK_LIBNAME_$(SHARED_LIBRARIES))
|
||||
LIB_PREFIX=
|
||||
LIB_SUFFIX=Obj.lib
|
||||
LIBNAME = $(BUILD_LIBRARY:%=%$(LIB_SUFFIX))
|
||||
LIB_SUFFIX=.lib
|
||||
LIBNAME_NO = $(BUILD_LIBRARY:%=%.lib)
|
||||
LIBNAME = $(LIBNAME_$(SHARED_LIBRARIES))
|
||||
|
||||
# dll install location
|
||||
INSTALL_SHRLIB = $(INSTALL_BIN)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Object lib name suffix
|
||||
LIB_EXT_YES = Obj.lib # object library extension for static build
|
||||
LIB_EXT_NO = .lib # library extension for dynamic build
|
||||
LIB_EXT = $(LIB_EXT_$(STATIC_BUILD))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Products dependancy definitions
|
||||
|
||||
@@ -237,9 +229,9 @@ LIB_EXT = $(LIB_EXT_$(STATIC_BUILD))
|
||||
# Use PROD_SYS_LIBS
|
||||
|
||||
PROD_DEPLIBS=$(foreach lib, $(PROD_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
|
||||
|
||||
PROD_LDLIBS += $($*_DEPLIBS) $(PROD_DEPLIBS)
|
||||
@@ -265,9 +257,9 @@ LIB_SYS_LIBS += $(SYS_DLL_LIBS)
|
||||
# (it isnt necessary to rebuild the dll if these change)
|
||||
|
||||
SHRLIB_DEPLIBS += $(foreach lib, $(LIB_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
|
||||
|
||||
SHRLIB_LDLIBS += $($*_DLL_DEPLIBS) $($*_DEPLIBS) $(SHRLIB_DEPLIBS)
|
||||
|
||||
@@ -16,6 +16,8 @@ PATH_FILTER = $(subst /,\\,$(1))
|
||||
|
||||
#-------------------------------------------------------
|
||||
|
||||
BUILD_LIBRARY += $(LOADABLE_BUILD_LIBRARY)
|
||||
|
||||
#
|
||||
# "\ " forces gnu make to keep this as one token
|
||||
#
|
||||
@@ -200,12 +202,12 @@ WIN32_DLLFLAGS = /subsystem:windows /dll $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(LIB_
|
||||
#
|
||||
# specify dll .def file only if it exists
|
||||
#
|
||||
DLL_DEF_FLAG = $(addprefix /def:,$(wildcard ../$(addsuffix .def,$(LIBRARY))))
|
||||
DLL_DEF_FLAG = $(addprefix /def:,$(wildcard ../$(addsuffix .def,$*)))
|
||||
|
||||
#
|
||||
# A WIN32 dll has three parts:
|
||||
# x.dll: the real dll (SHRLIBNAME)
|
||||
# x.lib: what you link to progs that use the dll (LIBNAME)
|
||||
# x.lib: what you link to progs that use the dll (DLL_LINK_LIBNAME)
|
||||
# x.exp: what you need to build the dll (in no variable)
|
||||
#
|
||||
LINK.shrlib = $(WINLINK) /nologo $(WIN32_DLLFLAGS) /implib:$*.lib /out:$*.dll $(DLL_DEF_FLAG)
|
||||
@@ -222,27 +224,19 @@ SHRLIB_SUFFIX=.dll
|
||||
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
|
||||
|
||||
#
|
||||
# Under WIN32 we have the unique situation where the DLL link creates the
|
||||
# DLL link library xxx.lib and we need to be very careful to avoid replacing
|
||||
# the xxx.lib created by the dll link with an xxx.lib created by $(AR).
|
||||
# Therefore, the object library is named xxxObj.lib
|
||||
#
|
||||
# SHARED_LIBRARIES is YES if we are building a DLL and NO if we aren't
|
||||
# When SHARED_LIBRARIES is YES we are building a DLL link library
|
||||
# and when SHARED_LIBRARIES is NO we are building an object library
|
||||
#
|
||||
DLL_LINK_LIBNAME_YES = $(BUILD_LIBRARY:%=%.lib)
|
||||
DLL_LINK_LIBNAME = $(DLL_LINK_LIBNAME_$(SHARED_LIBRARIES))
|
||||
LIB_PREFIX=
|
||||
LIB_SUFFIX=Obj.lib
|
||||
LIBNAME = $(BUILD_LIBRARY:%=%$(LIB_SUFFIX))
|
||||
LIB_SUFFIX=.lib
|
||||
LIBNAME_NO = $(BUILD_LIBRARY:%=%.lib)
|
||||
LIBNAME = $(LIBNAME_$(SHARED_LIBRARIES))
|
||||
|
||||
# dll install location
|
||||
INSTALL_SHRLIB = $(INSTALL_BIN)
|
||||
|
||||
#--------------------------------------------------
|
||||
# Object lib name suffix
|
||||
LIB_EXT_YES = Obj.lib # object library extension for static build
|
||||
LIB_EXT_NO = .lib # object library extension for dynamic build
|
||||
LIB_EXT = $(LIB_EXT_$(STATIC_BUILD))
|
||||
|
||||
#--------------------------------------------------
|
||||
# Products dependancy definitions
|
||||
@@ -251,9 +245,9 @@ LIB_EXT = $(LIB_EXT_$(STATIC_BUILD))
|
||||
# Use PROD_SYS_LIBS
|
||||
|
||||
PROD_DEPLIBS=$(foreach lib, $(PROD_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
|
||||
|
||||
PROD_LDLIBS += $($*_DEPLIBS) $(PROD_DEPLIBS)
|
||||
@@ -279,9 +273,9 @@ LIB_SYS_LIBS += $(SYS_DLL_LIBS)
|
||||
# (it isnt necessary to rebuild the dll if these change)
|
||||
|
||||
SHRLIB_DEPLIBS += $(foreach lib, $(LIB_LIBS) $(USR_LIBS), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
|
||||
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
|
||||
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
|
||||
|
||||
SHRLIB_LDLIBS += $($*_DLL_DEPLIBS) $($*_DEPLIBS) $(SHRLIB_DEPLIBS)
|
||||
|
||||
11
configure/os/CONFIG_SITE.darwin-ppc.Common
Normal file
11
configure/os/CONFIG_SITE.darwin-ppc.Common
Normal file
@@ -0,0 +1,11 @@
|
||||
# CONFIG_SITE.darwin-ppc.Common
|
||||
#
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Site override definitions for darwin-ppc host builds
|
||||
#-------------------------------------------------------
|
||||
|
||||
# JBA test override values
|
||||
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 solaris-sparc
|
||||
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
|
||||
12
configure/os/CONFIG_SITE.linux-x86-borland.Common
Normal file
12
configure/os/CONFIG_SITE.linux-x86-borland.Common
Normal file
@@ -0,0 +1,12 @@
|
||||
# CONFIG_SITE.linux-x86-borland.Common
|
||||
#
|
||||
# $Id$
|
||||
# This file is maintained by the build community.
|
||||
#
|
||||
# Site override definitions for linux-x86-borland host builds
|
||||
#-------------------------------------------------------
|
||||
|
||||
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 solaris-sparc
|
||||
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
|
||||
|
||||
BORLAND = /share2/kylix3
|
||||
@@ -39,9 +39,12 @@ $hostarch = $opt_h if ($opt_h);
|
||||
|
||||
# Find $top from current path; NB only works under iocBoot/* and configure/*
|
||||
$top = $cwd;
|
||||
$top =~ s/^\/cygdrive\/(\w)\//$1:\//;
|
||||
#$top =~ s/^\/cygdrive\/(\w)\//$1:\//;
|
||||
$top =~ s/\/iocBoot.*$//;
|
||||
$top =~ s/\/configure.*$//;
|
||||
if ($^O eq "cygwin") {
|
||||
chomp($top = `cygpath -m $top`);
|
||||
}
|
||||
|
||||
# The IOC may need a different path to get to $top
|
||||
if ($opt_t) {
|
||||
@@ -59,7 +62,8 @@ unless (@ARGV == 1) {
|
||||
print "Usage: convertRelease.pl [-a arch] [-h hostarch] [-t ioctop] outfile\n";
|
||||
print " where outfile is be one of:\n";
|
||||
print "\tcheckRelease - checks consistency with support apps\n";
|
||||
print "\tcdCommands - generate cd path strings for IOC use\n";
|
||||
print "\tcdCommands - generate cd path strings for vxWorks IOCs\n";
|
||||
print "\tenvPaths - generate epicsEnvSet commands for other IOCs\n";
|
||||
print "\tCONFIG_APP_INCLUDE - additional build variables\n";
|
||||
print "\tRULES_INCLUDE - supports installable build rules\n";
|
||||
exit 2;
|
||||
@@ -76,8 +80,16 @@ die "Can't find configure/RELEASE file" unless (-r $relfile);
|
||||
&readRelease($relfile, \%macros, \@apps);
|
||||
|
||||
if ($hostarch) {
|
||||
$relfile .= ".$hostarch";
|
||||
&readRelease($relfile, \%macros, \@apps) if (-r $relfile);
|
||||
my ($hrelfile) = "$relfile.$hostarch";
|
||||
&readRelease($hrelfile, \%macros, \@apps) if (-r $hrelfile);
|
||||
}
|
||||
if ($arch) {
|
||||
my ($crelfile) = "$relfile.Common.$arch";
|
||||
&readRelease($crelfile, \%macros, \@apps) if (-r $crelfile);
|
||||
if ($hostarch) {
|
||||
my ($arelfile) = "$relfile.$hostarch.$arch";
|
||||
&readRelease($arelfile, \%macros, \@apps) if (-r $arelfile);
|
||||
}
|
||||
}
|
||||
&expandRelease(\%macros, \@apps);
|
||||
|
||||
@@ -87,6 +99,7 @@ for ($outfile) {
|
||||
/CONFIG_APP_INCLUDE/ and do { &configAppInclude; last; };
|
||||
/RULES_INCLUDE/ and do { &rulesInclude; last; };
|
||||
/cdCommands/ and do { &cdCommands; last; };
|
||||
/envPaths/ and do { &envPaths; last; };
|
||||
/checkRelease/ and do { &checkRelease; last; };
|
||||
die "Output file type \'$outfile\' not supported";
|
||||
}
|
||||
@@ -155,6 +168,10 @@ sub configAppInclude {
|
||||
print OUT "# be lost when the application is next rebuilt.\n\n";
|
||||
|
||||
if ($arch) {
|
||||
print OUT "export TOP\n";
|
||||
foreach $app (@includes) {
|
||||
print OUT "export ${app}\n";
|
||||
}
|
||||
foreach $app (@includes) {
|
||||
$path = $macros{$app};
|
||||
next unless (-d "$path/bin/$hostarch");
|
||||
@@ -224,19 +241,41 @@ sub cdCommands {
|
||||
open(OUT,">$outfile") or die "$! creating $outfile";
|
||||
|
||||
$startup = $cwd;
|
||||
$startup =~ s/^$root/$iocroot/ if ($opt_t);
|
||||
$startup =~ s/^$root/$iocroot/o if ($opt_t);
|
||||
|
||||
print OUT "startup = \"$startup\"\n";
|
||||
|
||||
foreach $app (@includes) {
|
||||
$iocpath = $path = $macros{$app};
|
||||
$iocpath =~ s/^$root/$iocroot/ if ($opt_t);
|
||||
$iocpath =~ s/^$root/$iocroot/o if ($opt_t);
|
||||
$app_lc = lc($app);
|
||||
print OUT "$app_lc = \"$iocpath\"\n" if (-d $path);
|
||||
$app_uc = uc($app);
|
||||
print OUT "$app_lc = \"$iocpath\"\n" if (-d $path);
|
||||
print OUT "putenv \"$app_uc=$iocpath\"\n" if (-d $path);
|
||||
print OUT "${app_lc}bin = \"$iocpath/bin/$arch\"\n" if (-d "$path/bin/$arch");
|
||||
}
|
||||
close OUT;
|
||||
}
|
||||
sub envPaths {
|
||||
die "Architecture not set (use -a option)" unless ($arch);
|
||||
@includes = grep !/^TEMPLATE_TOP$/, @apps;
|
||||
|
||||
unlink($outfile);
|
||||
open(OUT,">$outfile") or die "$! creating $outfile";
|
||||
|
||||
$ioc = $cwd;
|
||||
$ioc =~ s/^.*\///;
|
||||
|
||||
print OUT "epicsEnvSet(ARCH,\"$arch\")\n";
|
||||
print OUT "epicsEnvSet(IOC,\"$ioc\")\n";
|
||||
|
||||
foreach $app (@includes) {
|
||||
$iocpath = $path = $macros{$app};
|
||||
$iocpath =~ s/^$root/$iocroot/o if ($opt_t);
|
||||
print OUT "epicsEnvSet($app,\"$iocpath\")\n" if (-d $path);
|
||||
}
|
||||
close OUT;
|
||||
}
|
||||
sub checkRelease {
|
||||
$status = 0;
|
||||
delete $macros{TOP};
|
||||
|
||||
@@ -101,12 +101,13 @@ foreach $name ( @nameList ) {
|
||||
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LDLIBS),\\\n";
|
||||
print OUT " \$(firstword \$(wildcard \$(addsuffix /\$(LIB_PREFIX)\$(lib)\*,\\\n";
|
||||
print OUT " \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS)))\\\n";
|
||||
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_EXT),\\\n";
|
||||
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_SUFFIX),\\\n";
|
||||
print OUT " \$(firstword \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS))\/)))\n";
|
||||
print OUT "${name}\$(EXE): \$(${name}_OBJSNAME) \$(${name}_RESS) \$(${name}_DEPLIBS)\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "\n";
|
||||
print OUT "ifeq (\$(filter ${name},\$(LIBRARY)),${name})\n";
|
||||
print OUT "ifneq (\$(filter ${name},\$(LOADABLE_LIBRARY)),${name})\n";
|
||||
print OUT "ifneq (,\$(strip \$(${name}_OBJS) \$(LIBRARY_OBJS)))\n";
|
||||
print OUT "BUILD_LIBRARY += ${name}\n";
|
||||
print OUT "endif\n";
|
||||
@@ -120,7 +121,7 @@ foreach $name ( @nameList ) {
|
||||
print OUT "${name}_DLL_DEPLIBS=\$(foreach lib, \$(${name}_DLL_LIBS),\\\n";
|
||||
print OUT " \$(firstword \$(wildcard \$(addsuffix /\$(LIB_PREFIX)\$(lib)\*,\\\n";
|
||||
print OUT " \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS)))\\\n";
|
||||
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_EXT),\\\n";
|
||||
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_SUFFIX),\\\n";
|
||||
print OUT " \$(firstword \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS))\/)))\n";
|
||||
print OUT "\$(LIB_PREFIX)${name}\$(LIB_SUFFIX):\$(${name}_OBJSNAME) \$(${name}_RESS)\n";
|
||||
print OUT "\$(LIB_PREFIX)${name}\$(LIB_SUFFIX):\$(${name}_DEPLIBS)\n";
|
||||
@@ -128,6 +129,27 @@ foreach $name ( @nameList ) {
|
||||
print OUT "\$(LIB_PREFIX)${name}\$(SHRLIB_SUFFIX):\$(${name}_DEPLIBS)\n";
|
||||
print OUT "\$(LIB_PREFIX)${name}\$(SHRLIB_SUFFIX):\$(${name}_DLL_DEPLIBS)\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "ifeq (\$(filter ${name},\$(LOADABLE_LIBRARY)),${name})\n";
|
||||
print OUT "ifneq (,\$(strip \$(${name}_OBJS) \$(LIBRARY_OBJS)))\n";
|
||||
print OUT "LOADABLE_BUILD_LIBRARY += ${name}\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "${name}_RESS+=\$(addsuffix \$(RES),\$(basename \$(${name}_RCS)))\n";
|
||||
print OUT "${name}_OBJSNAME+=\$(addsuffix \$(OBJ),\$(basename \$(${name}_OBJS)))\n";
|
||||
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LDLIBS),\\\n";
|
||||
print OUT " \$(firstword \$(wildcard \$(addsuffix /\$(LIB_PREFIX)\$(lib)\*,\\\n";
|
||||
print OUT " \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS)))\\\n";
|
||||
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_SUFFIX),\\\n";
|
||||
print OUT " \$(firstword \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS))\/)))\n";
|
||||
print OUT "${name}_DLL_DEPLIBS=\$(foreach lib, \$(${name}_DLL_LIBS),\\\n";
|
||||
print OUT " \$(firstword \$(wildcard \$(addsuffix /\$(LIB_PREFIX)\$(lib)\*,\\\n";
|
||||
print OUT " \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS)))\\\n";
|
||||
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_SUFFIX),\\\n";
|
||||
print OUT " \$(firstword \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS))\/)))\n";
|
||||
print OUT "\$(LOADABLE_SHRLIB_PREFIX)${name}\$(LOADABLE_SHRLIB_SUFFIX):\$(${name}_OBJSNAME) \$(${name}_RESS)\n";
|
||||
print OUT "\$(LOADABLE_SHRLIB_PREFIX)${name}\$(LOADABLE_SHRLIB_SUFFIX):\$(${name}_DEPLIBS)\n";
|
||||
print OUT "\$(LOADABLE_SHRLIB_PREFIX)${name}\$(LOADABLE_SHRLIB_SUFFIX):\$(${name}_DLL_DEPLIBS)\n";
|
||||
print OUT "endif\n";
|
||||
print OUT "\n";
|
||||
}
|
||||
close OUT or die "Cannot close $outfile: $!";
|
||||
|
||||
@@ -102,8 +102,8 @@ from the st.cmd files in the iocBoot subdirectories.
|
||||
<p>Remove</p>
|
||||
<pre>ld < iocCore
|
||||
</pre>
|
||||
<p>Immediately after the dbLoadDatabase command add</p>
|
||||
<pre>registerRecordDeviceDriver(pdbbase)
|
||||
<p>Immediately after the dbLoadDatabase(xxx.dbd) command add</p>
|
||||
<pre>xxx_registerRecordDeviceDriver(pdbbase)
|
||||
</pre>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>Converting an EPICS R3.13 application to R3.14.2</h2>
|
||||
<h2>Converting an EPICS R3.13 application to R3.14.4</h2>
|
||||
</center>
|
||||
|
||||
<p><br>
|
||||
This document describes how to convert a R3.13 vxWorks application so that it
|
||||
builds with release R3.14.2. It describes procedures such that:</p>
|
||||
builds with release R3.14.4. It describes procedures such that:</p>
|
||||
<ul>
|
||||
<li>The application uses the configure rules which are new to R3.14.</li>
|
||||
</ul>
|
||||
@@ -50,7 +50,7 @@ If sequence programs (*.st or *.stt files) exist in your application, add the
|
||||
SNCSEQ location definition for the R3.14 seq external module</p>
|
||||
|
||||
<p><tt>SNCSEQ =<full path to seq module top></tt></p>
|
||||
The R3.14 seq module must exist and be built with EPICS base R3.14.2
|
||||
The R3.14 seq module must exist and be built with EPICS base R3.14.4
|
||||
|
||||
<h3>Modify the Makefiles in <top>/*App directories.</h3>
|
||||
|
||||
@@ -167,6 +167,134 @@ example_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary
|
||||
<p>After these changes are made the following files are no longer needed:
|
||||
baseLIBOBS, Makefile.Host, and Makefile.Vx</p>
|
||||
|
||||
<h3>File base.dbd no longer needed</h3>
|
||||
|
||||
<blockquote>
|
||||
You now can add the line include "base.dbd" to your
|
||||
<appname>Include.dbd file and remove the file
|
||||
<name>App/src/base.dbd from your src directory. The base.dbd from
|
||||
base/dbd will be included. However, if you only want a subset of
|
||||
record definitions from base you should keep your base.dbd
|
||||
file.</blockquote>
|
||||
|
||||
<h3>Record support</h3>
|
||||
|
||||
<blockquote>
|
||||
Add the following line after all existing #includes
|
||||
|
||||
<blockquote>
|
||||
<pre>#include "epicsExport.h"</pre>
|
||||
</blockquote>
|
||||
The structure rset is now a typedef so change
|
||||
|
||||
<blockquote>
|
||||
<pre>struct rset <recordname>RSET={ ...</pre>
|
||||
</blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
<pre>rset <recordname>RSET={ ...</pre>
|
||||
</blockquote>
|
||||
and add the following line after the "rset <recordname>RSET="
|
||||
definition.
|
||||
|
||||
<blockquote>
|
||||
<pre>epicsExportAddress(rset,xxxRSET);</pre>
|
||||
</blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>Device support</h3>
|
||||
|
||||
<blockquote>
|
||||
Add the following line after all existing #includes
|
||||
|
||||
<blockquote>
|
||||
<pre>#include "epicsExport.h"</pre>
|
||||
</blockquote>
|
||||
and add the following line after the dset dev<devname> definition
|
||||
|
||||
<blockquote>
|
||||
<pre>epicsExportAddress(dset,dev<devname>);</pre>
|
||||
</blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>Driver support</h3>
|
||||
|
||||
<blockquote>
|
||||
Add the following line after all existing #includes
|
||||
|
||||
<blockquote>
|
||||
<pre>#include "epicsExport.h"</pre>
|
||||
</blockquote>
|
||||
and add the following line after the drvet dev<devname> definition
|
||||
|
||||
<blockquote>
|
||||
<pre>epicsExportAddress(drvet,drv<devname>);</pre>
|
||||
</blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>Registration code changed</h3>
|
||||
|
||||
<blockquote>
|
||||
Registration code for application specific functions, e.g. subroutine
|
||||
record init and process functions, has been changed as follows
|
||||
|
||||
<p>1) Include the registration support header files:</p>
|
||||
|
||||
<blockquote>
|
||||
<pre>#include "dbDefs.h"
|
||||
#include "registryFunction.h"</pre>
|
||||
</blockquote>
|
||||
2) Include the export definitions header file after including all other
|
||||
header files:
|
||||
|
||||
<blockquote>
|
||||
<pre>#include "epicsExport.h"</pre>
|
||||
</blockquote>
|
||||
3) Make the application specific functions static functions, e.g.
|
||||
|
||||
<blockquote>
|
||||
<pre>static long mySubInit(subRecord *precord,processMethod process)
|
||||
static long mySubProcess(subRecord *precord)</pre>
|
||||
</blockquote>
|
||||
4) Define a registryFunctionRef array of the application specific functions
|
||||
to be registered, e.g.
|
||||
|
||||
<blockquote>
|
||||
<pre>static registryFunctionRef mySubRef[] = {
|
||||
{"mySubInit",(REGISTRYFUNCTION)mySubInit},
|
||||
{"mySubProcess",(REGISTRYFUNCTION)mySubProcess}
|
||||
};</pre>
|
||||
</blockquote>
|
||||
5) Add a new function to do the registration of the registryFunctionRef
|
||||
array elements, e.g.
|
||||
|
||||
<blockquote>
|
||||
<pre>void mySub(void)
|
||||
{
|
||||
registryFunctionRefAdd(mySubRef,NELEMENTS(mySubRef));
|
||||
}</pre>
|
||||
</blockquote>
|
||||
6) Call the epicsExportRegistrar with the new registration function: e.g.
|
||||
|
||||
<blockquote>
|
||||
<pre>epicsExportRegistrar(mySub);</pre>
|
||||
</blockquote>
|
||||
7) Remove the existing function lines in <appname>Include.dbd: e.g.
|
||||
remove
|
||||
|
||||
<blockquote>
|
||||
<pre>function("mySubInit")
|
||||
function("mySubProcess")</pre>
|
||||
</blockquote>
|
||||
8) Add a registrar statement to <name>Include.dbd with the new
|
||||
registration function as parameter: e.g. add
|
||||
|
||||
<blockquote>
|
||||
<pre>registrar("mySub")</pre>
|
||||
</blockquote>
|
||||
</blockquote>
|
||||
|
||||
<h3>Modify the Makefiles in <top>/iocBoot directory.</h3>
|
||||
|
||||
<p>Change " i<tt>nclude $(TOP)/config/CONFIG_APP" </tt>to "<tt>include
|
||||
@@ -196,7 +324,11 @@ $(TOP)/configure/RULES.ioc"</tt></p>
|
||||
|
||||
<p>If it exists remove the line</p>
|
||||
|
||||
<p><tt>buildInstall: cdCommands</tt></p>
|
||||
<p><tt>buildInstall: cdCommands </tt></p>
|
||||
|
||||
<p>Add the line</p>
|
||||
<p><tt>TARGETS = cdCommands</tt></p>
|
||||
<p>befor the include for RULES.ioc line.</p>
|
||||
|
||||
<h3>Modify st.cmd in <top>/iocBoot/ioc* directories.</h3>
|
||||
|
||||
@@ -207,13 +339,17 @@ ld < iocCore</pre>
|
||||
<p>Change "<tt>ld < <libname>Lib</tt>" to "<tt>ld <
|
||||
<libname>.munch"</tt></p>
|
||||
|
||||
<p>Change "<tt>cd appbin</tt>" to "<tt>cd topbin</tt>"</p>
|
||||
|
||||
<p>Change the statement:</p>
|
||||
|
||||
<p><tt>dbLoadDatabase("../../dbd/exampleApp.dbd")</tt> <br>
|
||||
</p>
|
||||
to
|
||||
<pre>dbLoadDatabase("../../dbd/<name>.dbd")
|
||||
registerRecordDeviceDriver(pdbbase)</pre>
|
||||
<name>_registerRecordDeviceDriver(pdbbase)</pre>
|
||||
|
||||
<p>where <name> is replaced with the name of your dbd file.</p>
|
||||
|
||||
<h3>recGbl calls</h3>
|
||||
|
||||
@@ -230,18 +366,13 @@ base.dbd. If these record types are used at your site, they
|
||||
downloaded and built with base R3.14 by your EPICS administrator. To update
|
||||
the R3.14 location of these record types in your application you must add
|
||||
appropriate module definitions to your application's config/RELEASE file and
|
||||
change the <tt>LIBOBJS</tt> definitions.</p>
|
||||
add <tt>LIBOBJS</tt> definitions to the src Makefile.</p>
|
||||
|
||||
<p>For example add</p>
|
||||
|
||||
<p> <tt>PID=<full path to modules directory>/pid</tt></p>
|
||||
|
||||
<p>to config/RELEASE. <br>
|
||||
Remove</p>
|
||||
|
||||
<p> <tt>LIBOBJS += $(EPICS_BASE_BIN)/pidRecord.o</tt></p>
|
||||
|
||||
<p>from baseLIBOBJS, and add</p>
|
||||
<p>to config/RELEASE and add <br>
|
||||
|
||||
<p></p>
|
||||
|
||||
@@ -298,8 +429,7 @@ administrator. dbLoadTemplate is still supported on iocs.
|
||||
application, db files are created from template and substitution files you
|
||||
should add the definition</p>
|
||||
|
||||
<p><tt>EPICS_EXTENSIONS=<full path name to epics extensions
|
||||
directory></tt></p>
|
||||
<p><tt>MSI=<full path name to msi executable></tt></p>
|
||||
|
||||
<p>to your application config/RELEASE file.</p>
|
||||
<br>
|
||||
|
||||
37
documentation/ConvertingR3.14.2AppsToR3.14.3.html
Normal file
37
documentation/ConvertingR3.14.2AppsToR3.14.3.html
Normal file
@@ -0,0 +1,37 @@
|
||||
<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="Author" content="jba">
|
||||
<meta name="GENERATOR" content="Mozilla/4.77 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]"></head>
|
||||
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>Converting an EPICS R3.14.2 application to R3.14.3</h2></center>
|
||||
|
||||
<p>This document describes how to convert a R3.14.2 application
|
||||
so that it builds and runs properly with release R3.14.3.</p>
|
||||
|
||||
<h3>registerRecordDeviceDriver Name Change</h3>
|
||||
|
||||
<p>All application iocBoot/iocxxx/st.cmd files must be modified for R3.14.3 as
|
||||
the generated routine that registers record device and driver support has been
|
||||
renamed to incorporate the name of the dbd file it came from. The change to
|
||||
the startup script is straightforward; any pair of lines like this:</p>
|
||||
|
||||
<blockquote>
|
||||
<pre>dbLoadDatabase("dbd/<i>something</i>.dbd",0,0)
|
||||
registerRecordDeviceDriver(pdbbase)</pre>
|
||||
</blockquote>
|
||||
|
||||
<p>must have the second line changed so the result looks like this:</p>
|
||||
|
||||
<blockquote>
|
||||
<pre>dbLoadDatabase("dbd/<i>something</i>.dbd",0,0)
|
||||
<i>something</i>_registerRecordDeviceDriver(pdbbase)</pre>
|
||||
</blockquote>
|
||||
|
||||
<p>There may be other pathname components in the dbLoadDatabase line which
|
||||
should remain exactly as before.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
17
documentation/ConvertingR3.14.3AppsToR3.14.4.html
Normal file
17
documentation/ConvertingR3.14.3AppsToR3.14.4.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="Author" content="jba">
|
||||
<meta name="GENERATOR" content="Mozilla/4.77 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]"></head>
|
||||
|
||||
<body>
|
||||
|
||||
<center>
|
||||
<h2>Converting an EPICS R3.14.3 application to R3.14.4</h2></center>
|
||||
|
||||
<p>This document describes how to convert a R3.14.3 application
|
||||
so that it builds and runs properly with release R3.14.4.</p>
|
||||
|
||||
</p><h3>No changes required.</h3>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -8,10 +8,10 @@
|
||||
<meta name="GENERATOR" content="amaya 5.1" />
|
||||
</head>
|
||||
|
||||
<h4> April 5, 2003</h4>
|
||||
|
||||
<body>
|
||||
<h1 style="text-align: center">EPICS base R3.14.2: Known Problems</h1>
|
||||
<h1 style="text-align: center">EPICS base R3.14.4: Known Problems</h1>
|
||||
|
||||
<h3>Known Bugs</h3>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -4,7 +4,7 @@ README.1st
|
||||
|
||||
EPICS base
|
||||
|
||||
Release 3.14.2
|
||||
Release 3.14.4
|
||||
|
||||
What is EPICS base?
|
||||
|
||||
@@ -440,11 +440,12 @@ Example application and extension
|
||||
install location bin/<hostarch> directory during the base build.
|
||||
|
||||
Instructions for building and executing the 3.14 example application
|
||||
can be found in the section "Example Application" of Chapter 2, "Getting
|
||||
Started", in the "IOC Application Developer's Guide R3.14.2". 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 a host
|
||||
system and run an example channel access client on the host system.
|
||||
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 a host system and run an example channel access client
|
||||
on the host system.
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ Compiling EPICS and Building IOC Applications on HPUX 11 (hpux-parisc)
|
||||
======================================================================
|
||||
|
||||
Please mail questions, comments, corrections, additional examples, etc.
|
||||
to Ralph.Lange@mail.bessy.de
|
||||
to Ralph.Lange@bessy.de
|
||||
|
||||
NOTE: 3.14 will ONLY compile on HPUX 11 systems. HPUX 10 does not have
|
||||
the necessary posix thread support and will never ever be
|
||||
|
||||
@@ -17,7 +17,7 @@ EPICS base</h2></center>
|
||||
|
||||
<center>
|
||||
<h2>
|
||||
Release 3.14.2</h2></center>
|
||||
Release 3.14.4</h2></center>
|
||||
|
||||
<h3>
|
||||
What is EPICS base?</h3>
|
||||
@@ -590,13 +590,13 @@ scripts are installed into the install location bin/<hostarch> directory
|
||||
during the base build.</blockquote>
|
||||
|
||||
<blockquote>
|
||||
Instructions for building and executing the 3.14 example application
|
||||
can be found in the section "Example Application" of Chapter 2, "Getting
|
||||
Started", in the "IOC Application Developer's Guide R3.14.2". 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 a host
|
||||
system and run an example channel access client on the host system.
|
||||
Instructions for building and executing the 3.14 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 <top> directory. It also explains how to
|
||||
run the example application on a vxWorks ioc or a host system and run an
|
||||
example channel access client on the host system.
|
||||
</blockquote>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -3,90 +3,353 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<title>EPICS Release baseR3.14 </title>
|
||||
<title>EPICS Base Release R3.14.4</title>
|
||||
</head>
|
||||
|
||||
<body lang="en">
|
||||
|
||||
<center>
|
||||
<h1>EPICS Release base 3.14.2</h1>
|
||||
<h1>EPICS Base Release 3.14.4</h1>
|
||||
|
||||
<h1>May 21 2003</h1>
|
||||
<h1>????4 September 2003</h1>
|
||||
</center>
|
||||
|
||||
<center>
|
||||
<h2>Changes since 3.14.3</h2>
|
||||
</center>
|
||||
|
||||
<h4>Format string checking</h4</h4>
|
||||
<p>'printf-style' functions like errlogPrintf have their arguments verified
|
||||
against their format string when compiled with gcc.</p>
|
||||
|
||||
<h4>IOC shell command-line editing on vxWorks</h4>
|
||||
|
||||
<p>The IOC shell now uses the vxWorks ledLib routines so command-line editing
|
||||
is now the same in the IOC shell as it is in the vxWorks shell.</p>
|
||||
|
||||
<h4>CA client library crashes when the same PV name is on multiple
|
||||
servers</h4>
|
||||
|
||||
<p>If the CA client library was searching for a PV name that was hosted on
|
||||
more than one server a segmentation violation occurred when printing a
|
||||
diagnostic message resulting in a failure of the CA client library. The bug
|
||||
was introduced in R3.14.3. The code was tested on WIN32 prior to release, but
|
||||
the problem has so far been reproduced only on Linux.</p>
|
||||
|
||||
<p>Thanks to Ernest Williams at the SNS for discovering and helping to
|
||||
diagnose the problem.</p>
|
||||
|
||||
<h4>Disconnection callback function called when CA channel known to be
|
||||
disconnected</h4>
|
||||
|
||||
<p>If a CA circuit timed out during the connect sequence then the CA client
|
||||
library called the applications's disconnect callback function indicating a
|
||||
disconnect state transition when the channel was already known to be
|
||||
disconnected. This has caused the sequencer to improperly maintain its
|
||||
connected channel count. Other CA client side tools may also be impacted.</p>
|
||||
|
||||
<p>Recent versions of vxWorks appear to experience a connect failure if the
|
||||
vxWorks IP kernel reassigns the same ephemeral TCP port number as was
|
||||
assigned during a previous lifetime. The IP kernel on the vxWorks system
|
||||
hosting the CA server might have a stale entry for this ephemeral port that
|
||||
has not yet timed out which prevents the client from connecting with the
|
||||
ephemeral port assigned by the IP kernel. Eventually, after EPICS_CA_CONN_TMO
|
||||
seconds, the TCP connect sequence is aborted and the client library closes
|
||||
the socket, opens a new socket, receives a new ephemeral port assignment, and
|
||||
successfully connects.</p>
|
||||
|
||||
<p>Thanks to Mark Rivers for initially reporting the bug and energetically
|
||||
assisting with identifying the cause.</p>
|
||||
|
||||
<center>
|
||||
<h2>Changes since 3.14.2</h2>
|
||||
</center>
|
||||
|
||||
<h4>TPRO output</h4>
|
||||
|
||||
<p>The record processing trace output generated when the <code>.TPRO</code>
|
||||
field of a record is non-zero now includes the name of the thread that is
|
||||
actually doing the processing.</p>
|
||||
|
||||
<h4>calcRecord and calcoutRecord</h4>
|
||||
|
||||
<p>Previously if a dbGetLink failed on one of the input links, dbGetLink was
|
||||
not called for the remaining links. Now it is.</p>
|
||||
|
||||
<h4>put notify</h4>
|
||||
|
||||
<p>put notify did not act properly if a record had disp=TRUE, i.e. if puts
|
||||
are disabled. It now returns putNotifyPutDisabled.</p>
|
||||
|
||||
<h4>fastlock.h</h4>
|
||||
|
||||
<p>This is no longer supported</p>
|
||||
|
||||
<h4>devLib</h4>
|
||||
|
||||
<p>devLib is now supported on vxWorks and RTEMS. It has been moved from
|
||||
src/vxWorks/src to src/libCom/osi. devLibVirtualOS has been extended to
|
||||
support allocating A24 addresss and an init method.</p>
|
||||
|
||||
<h4>vxWorks dependent modules moved</h4>
|
||||
The following have been moved from src/vxWorks/src to
|
||||
src/libCom/osi/os/vxWorks: camacLib.h, drvTS.c, drvTS.h, epicsDynLink.c,
|
||||
epicsDynLink.h, module_types.h, task_params.h, veclist.c. Brief documentation
|
||||
has been added to the Application Developer's Guide.
|
||||
|
||||
<h4>Close-On-Exec flag set for all sockets created in EPICS base</h4>
|
||||
|
||||
<p>On POSIX systems if a Channel Access application spawns off 3rd party
|
||||
software with an exec() call then all open file desriptors are inherited
|
||||
unless the close-on-exec flag is set for each file descriptor. A new wrapper
|
||||
function was created so that all sockets created in EPICS base will have the
|
||||
close-on-exec flag set on POSIX systems. The function which spawns the CA
|
||||
repeater with exec() used to close all open files except stdin/stdout/stderr.
|
||||
This step was no longer required and therefore was removed from the code.</p>
|
||||
|
||||
<h4>Temporary Files on Windows</h4>
|
||||
|
||||
<p>The tmpfile() function on windows requires that all temporary files be
|
||||
stored in the root folder. The antelope (yacc) tool in base was calling
|
||||
tmpfile() and this was causing problems at sites where win32 systems use
|
||||
remotely mounted secure file systems. A wrapper function called "FILE *
|
||||
epicsTempFile()" that creates a temporary file on WIN32 with a name epicsNNN
|
||||
using one of the following paths was installed into libCom. It searches
|
||||
starting with (1) below and stops when it finds a specified path that exists.
|
||||
On POSIX systems, and systems that default to POSIX behavior, epicsTempFile()
|
||||
simply calls tmpfile().</p>
|
||||
<ol>
|
||||
<li>where the TMP environment variable specifies</li>
|
||||
<li>in c:\tmp</li>
|
||||
<li>in the current working directory</li>
|
||||
</ol>
|
||||
|
||||
<h4>envPaths file</h4>
|
||||
|
||||
<p>For operating systems other than vxWorks, there is now a target file
|
||||
created in each <code>iocBoot/ioc</code> directory called
|
||||
<code>envPaths</code>, which performs the same functions as the
|
||||
<code>cdCommands</code> file in vxWorks but using environment variables. The
|
||||
entries in <code>envPaths</code> are derived from the contents of the
|
||||
application's <code>configure/RELEASE</code> file.</p>
|
||||
|
||||
<h4>Macros in database filenames</h4>
|
||||
|
||||
<p>Database (<code>.db</code> and <code>.dbd</code>) filenames passed to
|
||||
<code>dbLoadDatabase</code>, <code>dbLoadRecords</code> and inside
|
||||
<code>dbLoadTemplate</code> substitutions files will now have environment
|
||||
variable macros expanded before opening. These are expressed using the
|
||||
standard <code>${MACRO}</code> syntax. Inside a template substitutions file
|
||||
the filename must be enclosed in double quotation marks if macros are
|
||||
used.</p>
|
||||
|
||||
<h4>registerRecordDeviceDriver output subroutine renamed</h4>
|
||||
|
||||
<p>The registration routine generated by the registerRecordDeviceDriver.pl
|
||||
perl script now includes the name of the application, thus requiring a
|
||||
one-line change to any IOC startup files produced with earlier R3.14 releases
|
||||
of base. The actual name is taken from a second command line argument
|
||||
supplied to the script by the modified make rules, and is derived from the
|
||||
name of the fully expanded dbd file from which the necessary information is
|
||||
extracted. The change needed to every startup script involves using this new
|
||||
name in place of the old <code>registerRecordDeviceDriver</code>. Assuming
|
||||
that your application's fully expanded dbd file is called
|
||||
<code>example.dbd</code> you would modify the lines</p>
|
||||
|
||||
<blockquote>
|
||||
<pre>dbLoadDatabase("dbd/example.dbd",0,0)
|
||||
registerRecordDeviceDriver(pdbbase)</pre>
|
||||
</blockquote>
|
||||
|
||||
<p>to become</p>
|
||||
|
||||
<blockquote>
|
||||
<pre>dbLoadDatabase("dbd/example.dbd",0,0)
|
||||
example_registerRecordDeviceDriver(pdbbase)</pre>
|
||||
</blockquote>
|
||||
|
||||
<h4>dbExpand <code>-o outfile</code> option</h4>
|
||||
|
||||
<p>A commandline option <code>-o</code> has been added to the dbExpand
|
||||
program to allow the name of its output file to be specified. If there are
|
||||
any errors in the input file(s) the output file will not be generated or
|
||||
modified at all. The rules to expand DBD files have been changed to make use
|
||||
of this.</p>
|
||||
|
||||
<h4>New keyword <code>variable()</code> supported in dbd files</h4>
|
||||
|
||||
<p>Database definition (.dbd) files can now contain declarations of simple
|
||||
static variables, a facility intended for driver debugging purposes. These
|
||||
<code>variable(name)</code> or <code>variable(name,type)</code> declarations
|
||||
are preserved by dbExpand (<code>type</code> is <code>int</code> if omitted),
|
||||
and will be converted by registerRecordDeviceDriver.pl into code that
|
||||
registers them with iocsh. The variables themselves must be defined in some
|
||||
existing C or C++ code and marked using the macro
|
||||
<code>epicsExportAddress(type,name)</code>. Only plain <code>int</code> and
|
||||
<code>double</code> types are supported.</p>
|
||||
|
||||
<p><strong>macEnvExpand</strong></p>
|
||||
|
||||
<p>A facility for performing macro expansion using environment variables as
|
||||
macro definitions has been added to libCom/macLib. The ioc shell now performs
|
||||
macro expansion using this on all input lines (other than comments) before
|
||||
printing and executing the line.</p>
|
||||
|
||||
<p><strong>iocsh var command</strong></p>
|
||||
|
||||
<p>For simple applications such as controlling the value of debugging flags.
|
||||
Devlopers with more complex expression handling requirements should consider
|
||||
use of the <strong>cexp</strong> package. The available variables are defined
|
||||
by the new <code>variable</code> dbd file keyword.</p>
|
||||
|
||||
<p><strong>iocshArgPersistentString</strong></p>
|
||||
|
||||
<p>Tell iocsh to make a copy of the argument string before passing it to the
|
||||
handler function.</p>
|
||||
|
||||
<p><strong>epicsStrDup</strong></p>
|
||||
|
||||
<p>Operating-system independent replacement for strdup().</p>
|
||||
|
||||
<p><strong>epicsMessageQueue</strong></p>
|
||||
|
||||
<p>The epicsMessageQueue API has been changed. All functions and methods to
|
||||
receive a message now have an additional argument which specifies the size of
|
||||
the receiver buffer. The receive functions/methods return -1 and the
|
||||
received message is discarded if the received message will not fit in the
|
||||
buffer. See the Application Developer's Guide (libCom OSI) for details.</p>
|
||||
|
||||
<p>This is an incompatible change. All R3.14.2 applications which use
|
||||
epicsMessageQueue must be modified before they can be compiled and used with
|
||||
R3.14.3</p>
|
||||
|
||||
<h4>Error Message Logging</h4>
|
||||
|
||||
<p>A bug occurring only in Microsoft Windows port of the error message
|
||||
logging client was fixed. The symptoms were problems getting a Microsoft
|
||||
Windows based IOC to make entries in the log file.</p>
|
||||
|
||||
<p>A bug occurring in the error message logging server where a partial
|
||||
message arrives w/o a <CR> and then a <CR> from a previous
|
||||
message was found in the input buffer was fixed. The problem must have
|
||||
existed for a long time but probably was not occurring frequently. The
|
||||
symptom was garbled output in the log file.</p>
|
||||
|
||||
<p>An IP kernel deadlock vulnerability occurring when vxWorks's tNetTask
|
||||
calls logMsg because of a transient mbuf starvation situation has been fixed.
|
||||
The fix was to not call logFdAdd for the log client's socket and instead
|
||||
create a specialized vxWorks device driver which calls errlogPrintf for each
|
||||
incoming message and then call logFdAdd for a file descriptor opened with
|
||||
that device driver. The desirable functional change being errlogPrintf's
|
||||
capability to discard messages when it gets behind (because of a transient
|
||||
mbuf starvation situation). The fix also means that any code that calls
|
||||
errlogAddListener on vxWorks, e.g. CMLOG, will now receive the logMsg
|
||||
messages.</p>
|
||||
|
||||
<h4>Channel Access Client Library Client Context Cleanup Race Condition</h4>
|
||||
|
||||
<p>The symptom is a CA client program that fails with a segmentation
|
||||
violation on Linux shortly after calling ca_task_exit()or
|
||||
ca_context_destroy(). A fix will show up in R3.14.3. Regression tests were
|
||||
updated to detect this type of problem.</p>
|
||||
|
||||
<h4>Red Hat 7.3 Linux Process Rundown Bug</h4>
|
||||
|
||||
<p>There appears to be a bug in the Red Hat 7.3 process rundown where posix
|
||||
thread support is defective when file scope destructors are being run. The
|
||||
symptom was a hang during process exit. A workaround was installed.</p>
|
||||
|
||||
<h4>Multiple CA Servers on MAC OSX</h4>
|
||||
|
||||
<p>A patch was made to allow multiple CA servers on MAC OSX. OSX is a recent
|
||||
branch off of BSD and therefore requires socket option SO_REUSEPORT.</p>
|
||||
|
||||
<center>
|
||||
<h2>Changes since 3.14.1</h2>
|
||||
</center>
|
||||
|
||||
<p><strong>Build System</strong></p>
|
||||
<p>Major changes have been made to the build system.
|
||||
The good news is that the rules for support and ioc applications
|
||||
are now greatly simplified. The bad news is that it does mean
|
||||
changes for existing 3.14.1 applications. Please see:</p>
|
||||
<p><a href="ConvertingR3.14.1AppsToR3.14.2.html">ConvertingR3.14.1AppsToR3.14.2</a></p>
|
||||
<p>for details. If you are using the <strong>function</strong> DBD keyword it no
|
||||
longer exists. Please read this conversion document for details.</p>
|
||||
|
||||
<p>Major changes have been made to the build system. The good news is that
|
||||
the rules for support and ioc applications are now greatly simplified. The
|
||||
bad news is that it does mean changes for existing 3.14.1 applications.
|
||||
Please see:</p>
|
||||
|
||||
<p><a
|
||||
href="ConvertingR3.14.1AppsToR3.14.2.html">ConvertingR3.14.1AppsToR3.14.2</a></p>
|
||||
|
||||
<p>for details. If you are using the <strong>function</strong> DBD keyword it
|
||||
no longer exists. Please read this conversion document for details.</p>
|
||||
|
||||
<p><strong>Application Developer's Guide</strong></p>
|
||||
<p>The old chapter "New Feature's for 3.14" has been replaced by
|
||||
a new chapter "Getting Started". Please read it. It provides
|
||||
a simplified set of rules that can be used to build most
|
||||
support and ioc applications. Many minor changes have also been made.</p>
|
||||
|
||||
<p>The old chapter "New Feature's for 3.14" has been replaced by a new
|
||||
chapter "Getting Started". Please read it. It provides a simplified set of
|
||||
rules that can be used to build most support and ioc applications. Many minor
|
||||
changes have also been made.</p>
|
||||
|
||||
<p><strong>dbGetLink</strong></p>
|
||||
<p>A bug in dbGetLink resulted in nRequest not being given the value 0
|
||||
if the link is a constant link. This in turn caused the waveform
|
||||
record to always set NORD=NELEM. Thus if an application trys
|
||||
to write a waveform via the steps:</p>
|
||||
<pre>
|
||||
prset->get_array_info(paddr,&no_elements,&offset);
|
||||
<< write nNew elements into array >>
|
||||
prset->put_array_info(paddr,nNew);
|
||||
</pre>
|
||||
<p>This sets NORD = nNew.
|
||||
But because of the dbGetLink bug, the soft device support attached to
|
||||
the waveform record sets NORD to NELM.</p>
|
||||
|
||||
<p>A bug in dbGetLink resulted in nRequest not being given the value 0 if the
|
||||
link is a constant link. This in turn caused the waveform record to always
|
||||
set NORD=NELEM. Thus if an application trys to write a waveform via the
|
||||
steps:</p>
|
||||
<pre> prset->get_array_info(paddr,&no_elements,&offset);
|
||||
write nNew elements into array >>
|
||||
prset->put_array_info(paddr,nNew);</pre>
|
||||
|
||||
<p>This sets NORD = nNew. But because of the dbGetLink bug, the soft device
|
||||
support attached to the waveform record sets NORD to NELM.</p>
|
||||
|
||||
<p>This problem is fixed. The actual bug was in macros in dbAccessDefs.h</p>
|
||||
|
||||
<p><strong>Access Security</strong></p>
|
||||
<p>The host names are now converted to lower case.
|
||||
This fixes incompatibilities between various platforms.</p>
|
||||
|
||||
<p>The host names are now converted to lower case. This fixes
|
||||
incompatibilities between various platforms.</p>
|
||||
|
||||
<p><strong>string records</strong></p>
|
||||
<p>Both the stringin and stringout records have two new DBF_MENU fields:
|
||||
APST and MPST. These control whether CA monitors are fired if the new VAL
|
||||
field string is identical to the old one. The default (zero) menu value is
|
||||
"On Change" with behaviour identical to before,
|
||||
set to "Always" if you want a record to fire monitors every time the record
|
||||
is processed (analagous to setting ADEL/MDEL=-1 for numeric record types).</p>
|
||||
|
||||
<p>Both the stringin and stringout records have two new DBF_MENU fields: APST
|
||||
and MPST. These control whether CA monitors are fired if the new VAL field
|
||||
string is identical to the old one. The default (zero) menu value is "On
|
||||
Change" with behaviour identical to before, set to "Always" if you want a
|
||||
record to fire monitors every time the record is processed (analagous to
|
||||
setting ADEL/MDEL=-1 for numeric record types).</p>
|
||||
|
||||
<p><strong>epicsMessageQueue</strong></p>
|
||||
<p>A new facility that provides the capabilities of vxWorks msgQLib.
|
||||
See the Application Developer's Guide (libCom OSI) for details.</p>
|
||||
|
||||
<p>A new facility that provides the capabilities of vxWorks msgQLib. See the
|
||||
Application Developer's Guide (libCom OSI) for details.</p>
|
||||
|
||||
<p><strong>epicsStdio and errlogPrintf</strong></p>
|
||||
<p>A new facility has been added to libCom described by epicsStdio.h.
|
||||
It contains the functions epicsSnprintf and epicsVsnprintf.
|
||||
These are like the C99 functions snprintf and vsnprintf,
|
||||
which are like sprintf and vsprintf except that they accept a argument
|
||||
limiting the number of characters written.</p>
|
||||
<p>The errlogPrintf facility has been modified to use this facility.
|
||||
Thus it is not longer subject to a possible buffer overflow.</p>
|
||||
|
||||
<p>A new facility has been added to libCom described by epicsStdio.h. It
|
||||
contains the functions epicsSnprintf and epicsVsnprintf. These are like the
|
||||
C99 functions snprintf and vsnprintf, which are like sprintf and vsprintf
|
||||
except that they accept a argument limiting the number of characters
|
||||
written.</p>
|
||||
|
||||
<p>The errlogPrintf facility has been modified to use this facility. Thus it
|
||||
is not longer subject to a possible buffer overflow.</p>
|
||||
|
||||
<p><strong>scanPeriod</strong></p>
|
||||
<p>This is a new function provided by the Database Scanning facility.
|
||||
Given an index for the choices defined by menuScan.h, it returns
|
||||
the scan period in seconds. The argument can just be the scan field
|
||||
of a database record. If the index is not associated with a periodic
|
||||
scan rate, the value 0.0 is returned.</p>
|
||||
|
||||
<p>This is a new function provided by the Database Scanning facility. Given
|
||||
an index for the choices defined by menuScan.h, it returns the scan period in
|
||||
seconds. The argument can just be the scan field of a database record. If the
|
||||
index is not associated with a periodic scan rate, the value 0.0 is
|
||||
returned.</p>
|
||||
|
||||
<p><strong>New epicsString.h function</strong></p>
|
||||
<p>A new function epicsStrCaseCmp has been added. It is like strcmp
|
||||
except that it ignores case.</p>
|
||||
|
||||
<p>A new function epicsStrCaseCmp has been added. It is like strcmp except
|
||||
that it ignores case.</p>
|
||||
|
||||
<p><strong>macLib</strong></p>
|
||||
<p>macParseDefns did not check for handle==NULL.
|
||||
The documentation for macParseDefns was not correct.</p>
|
||||
|
||||
<p>macParseDefns did not check for handle==NULL. The documentation for
|
||||
macParseDefns was not correct.</p>
|
||||
|
||||
<center>
|
||||
<h2>Changes since beta2</h2>
|
||||
@@ -97,12 +360,12 @@ The documentation for macParseDefns was not correct.</p>
|
||||
<p>dbStaticLib and related programs now accept a new keyword in DBD files:</p>
|
||||
<pre>function(name)</pre>
|
||||
|
||||
<p>Where '<span style="font-family: courier">name</span>' is the name of a
|
||||
function with "C" linkage that is included in the IOC binary. This function
|
||||
will be automatically registered with the registry at the same time as the
|
||||
record/device/driver tables, and is intended to make using subroutine records
|
||||
much easier on non-vxWorks systems.. Prior R3.14 releases required there to
|
||||
be a static registration routine for such subroutines.</p>
|
||||
<p>Where <code>name</code> is the name of a function with "C" linkage that is
|
||||
included in the IOC binary. This function will be automatically registered
|
||||
with the registry at the same time as the record/device/driver tables, and is
|
||||
intended to make using subroutine records much easier on non-vxWorks
|
||||
systems.. Prior R3.14 releases required there to be a static registration
|
||||
routine for such subroutines.</p>
|
||||
|
||||
<p>dbStaticLib has two additional routines to support this, dbDumpFunction()
|
||||
and dbWriteFunctionFP(). dbDumpFunction has been added to the iocsh command
|
||||
@@ -116,8 +379,8 @@ errors are being reported.</p>
|
||||
|
||||
<p><strong>Solaris build requirement</strong></p>
|
||||
|
||||
<p><span style="font-family: courier">uname</span> must be defined for builds
|
||||
on solaris hosts because it is used to determine the solaris version.</p>
|
||||
<p><code>uname</code> must be defined for builds on solaris hosts because it
|
||||
is used to determine the solaris version.</p>
|
||||
|
||||
<p><strong>Linux build note</strong></p>
|
||||
|
||||
@@ -129,13 +392,9 @@ such absolute paths to the new make variable SHRLIB_SEARCH_DIRS
|
||||
|
||||
<p><strong>RULES.Db</strong></p>
|
||||
|
||||
<p>A <span style="font-family: courier">*[</span><span
|
||||
style="font-family: courier">nn</span><span
|
||||
style="font-family: courier">].</span><span
|
||||
style="font-family: courier">db</span> file will be created from an <span
|
||||
style="font-family: courier">*.template</span> and a <span
|
||||
style="font-family: courier">*[nn].substitutions</span> file ,where <span
|
||||
style="font-family: courier">nn</span> has a value between 0 and 99.</p>
|
||||
<p>A <code>*[nn].db</code> file will be created from an
|
||||
<code>*.template</code> and a <code>*[nn].substitutions</code> file ,where
|
||||
<code>nn</code> has a value between 0 and 99.</p>
|
||||
|
||||
<p><strong>Support for 64 bit long</strong></p>
|
||||
|
||||
@@ -373,9 +632,9 @@ value recGblSetSevr(psel,SOFT_ALARM,MAJOR_ALARM) is called.</p>
|
||||
<p><strong>cdCommands file</strong></p>
|
||||
|
||||
<p>Fixed a bug and revised the use of the IOCS_APPL_TOP setting in an
|
||||
application's <top>/configure/CONFIG file (which specifies the path to
|
||||
<top>as seen by the IOC) to apply the same modifications to all paths output
|
||||
in the cdCommands file.</p>
|
||||
application's <top>/configure/CONFIG file (which specifies the path to
|
||||
<top> as seen by the IOC) to apply the same modifications to all paths
|
||||
output in the cdCommands file.</p>
|
||||
|
||||
<p><strong>dbStaticLib</strong></p>
|
||||
|
||||
@@ -435,130 +694,140 @@ release.</p>
|
||||
Build modifications in alpha2 require the following changes to existing R3.14
|
||||
applications.
|
||||
<ul>
|
||||
<li> Remove the now unused RULES files</li>
|
||||
<li><ul>
|
||||
./configure/RULES.Db <br>
|
||||
./configure/RULES.registerRecordDeviceDriver <br>
|
||||
</ul>
|
||||
<li>Remove the now unused RULES files
|
||||
|
||||
<blockquote>
|
||||
./configure/RULES.Db<br>
|
||||
./configure/RULES.registerRecordDeviceDriver</blockquote>
|
||||
</li>
|
||||
<li>Delete the following line in ./configure/RULES
|
||||
<ul>
|
||||
<br>
|
||||
include $(TOP)/configure/RULES.registerRecordDeviceDriver</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li> In <top>/configure/Makefile change
|
||||
<ul>
|
||||
<br>
|
||||
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(T_A) $@ $(TOP)</ul>
|
||||
</li>
|
||||
to
|
||||
<ul>
|
||||
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(EPICS_HOST_ARCH) $(T_A) $@
|
||||
$(TOP) <br>
|
||||
</ul>
|
||||
and add the line
|
||||
<ul>
|
||||
<br>
|
||||
depends: install <br>
|
||||
</ul>
|
||||
to the bottom of the Makefile.
|
||||
<ul>
|
||||
</ul>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>In all *App/*Db/Makefileschange
|
||||
<ul>
|
||||
<br>
|
||||
include $(TOP)/configure/RULES.Db</ul>
|
||||
</li>
|
||||
to
|
||||
<ul>
|
||||
include $(TOP)/configure/RULES</ul>
|
||||
<li>In all *App/src/Makefile files
|
||||
<ul>
|
||||
</ul>
|
||||
</li>
|
||||
change DBDNAME = <name>App
|
||||
to DBD += <name>
|
||||
<ul>
|
||||
</ul>
|
||||
and remove the line <br>
|
||||
|
||||
<ul>
|
||||
DBDEXPAND = <name>Include.dbd <br>
|
||||
</ul>
|
||||
NOTE: If any of your *App/*Db/Makefiles contain "DBDNAME =" lines you
|
||||
should make these same changes in that *Db dirctory. <br>
|
||||
|
||||
<ul>
|
||||
<li>In all *App/src/Makefile Makefiles</li>
|
||||
</ul>
|
||||
<ul>
|
||||
</ul>
|
||||
change RECTYPES=<name>.h
|
||||
to DBDINC+=<name>
|
||||
<ul>
|
||||
</ul>
|
||||
change MENUS=<name>.h
|
||||
to DBDINC+=<name></ul>
|
||||
<ul>
|
||||
change BPTS
|
||||
to DBD
|
||||
|
||||
<p>change INSTALLDB
|
||||
to DB</p>
|
||||
<blockquote>
|
||||
include $(TOP)/configure/RULES.registerRecordDeviceDriver</blockquote>
|
||||
</li>
|
||||
<li>In <top>/configure/Makefile change
|
||||
|
||||
<p>change DBDINSTALL
|
||||
to DBD <br>
|
||||
</p>
|
||||
<blockquote>
|
||||
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(T_A) $@ $(TOP)</blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(EPICS_HOST_ARCH) $(T_A) $@
|
||||
$(TOP)</blockquote>
|
||||
and add the line
|
||||
|
||||
<blockquote>
|
||||
depends: install</blockquote>
|
||||
to the bottom of the Makefile.</li>
|
||||
<li>In all *App/*Db/Makefiles change
|
||||
|
||||
<blockquote>
|
||||
include $(TOP)/configure/RULES.Db</blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
include $(TOP)/configure/RULES</blockquote>
|
||||
</li>
|
||||
<li>In all *App/src/Makefile files change
|
||||
|
||||
<blockquote>
|
||||
DBDNAME = <name>App</blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
DBD += <name></blockquote>
|
||||
and remove the line<br>
|
||||
|
||||
|
||||
<blockquote>
|
||||
DBDEXPAND = <name>Include.dbd </blockquote>
|
||||
NOTE: If any of your *App/*Db/Makefiles contain "DBDNAME =" lines you
|
||||
should make these same changes in that *Db dirctory.</li>
|
||||
<li>In all *App/src/Makefile Makefiles change
|
||||
|
||||
<blockquote>
|
||||
RECTYPES=<name>.h </blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
DBDINC+=<name> </blockquote>
|
||||
change
|
||||
|
||||
<blockquote>
|
||||
MENUS=<name>.h </blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
DBDINC+=<name> </blockquote>
|
||||
change
|
||||
|
||||
<blockquote>
|
||||
BPTS </blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
DBD </blockquote>
|
||||
change
|
||||
|
||||
<blockquote>
|
||||
INSTALLDB </blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
DB </blockquote>
|
||||
change
|
||||
|
||||
<blockquote>
|
||||
DBDINSTALL </blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
DBD </blockquote>
|
||||
</li>
|
||||
<li>In all example *App/src/Makefile files change
|
||||
<ul>
|
||||
<br>
|
||||
example_SRCS_DEFAULT += registerRecordDeviceDriver.c</ul>
|
||||
|
||||
<blockquote>
|
||||
example_SRCS_DEFAULT += registerRecordDeviceDriver.c </blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
example_SRCS_DEFAULT += <name>_registerRecordDeviceDriver.cpp
|
||||
</blockquote>
|
||||
where <name> is the base name of a <name>.dbd file which was
|
||||
created from a <name>Include.dbd file and which will be loaded in a
|
||||
st.cmd or stcmd.host script (e.g. example).</li>
|
||||
<li>In ./iocBoot/ioc<name>/st.cmd files change
|
||||
|
||||
<blockquote>
|
||||
dbLoadDatabase("dbd/exampleApp.dbd") </blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
dbLoadDatabase("dbd/example.dbd") </blockquote>
|
||||
</li>
|
||||
to
|
||||
<ul>
|
||||
example_SRCS_DEFAULT += <name>_registerRecordDeviceDriver.cpp <br>
|
||||
</ul>
|
||||
where <name> is the base name of a <name>.dbd file which was
|
||||
created from a <name>Include.dbd file and which will be loaded in a
|
||||
st.cmd or stcmd.host script (e.g. example). <br>
|
||||
|
||||
<ul>
|
||||
<li>In ./iocBoot/ioc<name>/st.cmd files change</li>
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
dbLoadDatabase("dbd/exampleApp.dbd")</ul>
|
||||
to
|
||||
<ul>
|
||||
dbLoadDatabase("dbd/example.dbd") <br>
|
||||
</ul>
|
||||
<li>In <top>/iocBoot/ioc<name>/stcmd.host files change
|
||||
<ul>
|
||||
<br>
|
||||
dbLoadDatabase("../../dbd/exampleApp.dbd",0,0)</ul>
|
||||
|
||||
<blockquote>
|
||||
dbLoadDatabase("../../dbd/exampleApp.dbd",0,0)</blockquote>
|
||||
to
|
||||
|
||||
<blockquote>
|
||||
dbLoadDatabase("../../dbd/example.dbd",0,0)</blockquote>
|
||||
</li>
|
||||
to
|
||||
<ul>
|
||||
dbLoadDatabase("../../dbd/example.dbd",0,0)</ul>
|
||||
</ul>
|
||||
|
||||
<h3>EPICS_HOST_ARCH changes</h3>
|
||||
GNU compiler builds are now determined by the value of EPICS_HOST_ARCH and
|
||||
|
||||
<p>GNU compiler builds are now determined by the value of EPICS_HOST_ARCH and
|
||||
are no longer specified in CONFIG_SITE. All references to the ANSI
|
||||
(ACC/GCC) and CPLUSPLUS (CCC/G++) macros have been removed. <br>
|
||||
|
||||
(ACC/GCC) and CPLUSPLUS (CCC/G++) macros have been removed.</p>
|
||||
|
||||
<h3>libCom</h3>
|
||||
Most of the library routines and files starting with the prefix osi have been
|
||||
changed to start with epics. Several also had major changes to their user
|
||||
interface. See the latest version of the Application Developer's Guide for
|
||||
details. <br>
|
||||
|
||||
|
||||
<p>Most of the library routines and files starting with the prefix osi have
|
||||
been changed to start with epics. Several also had major changes to their
|
||||
user interface. See the latest version of the Application Developer's Guide
|
||||
for details.</p>
|
||||
|
||||
<center>
|
||||
<h2>EPICS Release base 3.14.0alpha1 Notes</h2>
|
||||
@@ -572,35 +841,44 @@ iocCore on platforms besides vxWorks.</p>
|
||||
|
||||
<p>iocCore is now supported on the following platforms:</p>
|
||||
<ul>
|
||||
<li>vxWorks</li>
|
||||
<br>
|
||||
Tornado II is required.
|
||||
<ul>
|
||||
<li>RTEMS</li>
|
||||
</ul>
|
||||
<br>
|
||||
An open source real time operating system. It has been tested on MVME167
|
||||
and MC68360 processors. RTEMS also supports powerPC.
|
||||
<ul>
|
||||
<li>solaris</li>
|
||||
</ul>
|
||||
<br>
|
||||
Has been tested on solaris 2.6 and solaris 8 with Sun workshop 6.0 (C++
|
||||
5.2). Sun workshop 5.0 (C++ 5.0) will not compile this version of EPICS.
|
||||
<ul>
|
||||
<li>Linux</li>
|
||||
</ul>
|
||||
<br>
|
||||
Has been tested on Redhat x86 platforms.
|
||||
<ul>
|
||||
<li>winNT</li>
|
||||
</ul>
|
||||
<br>
|
||||
Testing has been done with visual C++ 6.0.</ul>
|
||||
A new version of the Application Developers Guide is available. The following
|
||||
gives links to the new Application Developer's Guide and to RTEMS information.
|
||||
<li>vxWorks
|
||||
|
||||
<p>http://www.aps.anl.gov/epics/modules/base/R3-14.php</p>
|
||||
<blockquote>
|
||||
Tornado II is required.</blockquote>
|
||||
</li>
|
||||
<li>RTEMS
|
||||
|
||||
<blockquote>
|
||||
An open source real time operating system. It has been tested on
|
||||
MVME167 and MC68360 processors. RTEMS also supports
|
||||
powerPC.</blockquote>
|
||||
</li>
|
||||
<li>solaris
|
||||
|
||||
<blockquote>
|
||||
Has been tested on solaris 2.6 and solaris 8 with Sun workshop 6.0 (C++
|
||||
5.2). Sun workshop 5.0 (C++ 5.0) will not compile this version of
|
||||
EPICS.</blockquote>
|
||||
</li>
|
||||
<li>Linux
|
||||
|
||||
<blockquote>
|
||||
Has been tested on Redhat x86 platforms.</blockquote>
|
||||
</li>
|
||||
<li>winNT
|
||||
|
||||
<blockquote>
|
||||
Testing has been done with visual C++ 6.0.</blockquote>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>A new version of the Application Developers Guide is available. The
|
||||
following gives links to the new Application Developer's Guide and to RTEMS
|
||||
information.</p>
|
||||
|
||||
<blockquote>
|
||||
<a
|
||||
href="http://www.aps.anl.gov/epics/modules/base/R3-14.php">http://www.aps.anl.gov/epics/modules/base/R3-14.php</a></blockquote>
|
||||
|
||||
<p>Most of the Application Developer's Guide has only minor changes. The
|
||||
following are new.</p>
|
||||
@@ -621,7 +899,8 @@ It must be emphasized that this is an alpha release.</p>
|
||||
<li>HPUX - No support currently because we could not find good support for
|
||||
multithreading.</li>
|
||||
</ul>
|
||||
Building Applications
|
||||
|
||||
<h4>Building Applications</h4>
|
||||
<ul>
|
||||
<li>For new applications see Chapters 2 (New Features) and Chapter 4 (Build
|
||||
Facility) of the Application Developer's Guide.</li>
|
||||
|
||||
216
documentation/ReleaseChecklist.html
Normal file
216
documentation/ReleaseChecklist.html
Normal file
@@ -0,0 +1,216 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<title>EPICS Release Procedures Checklist</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>EPICS Base Release Procedures Checklist</h1>
|
||||
|
||||
<blockquote>
|
||||
<p>$Id$</p>
|
||||
</blockquote>
|
||||
|
||||
<p>This document is a checklist of things that must be done when creating a
|
||||
new release of EPICS Base. Additions and ammendments to this list are
|
||||
welcome.</p>
|
||||
|
||||
<p>The following roles are used, in addition to the names of individuals who
|
||||
have been responsible for specific tasks in the past:</p>
|
||||
<dl>
|
||||
<dt><strong>Release Manager</strong></dt>
|
||||
<dd>Responsible for the release</dd>
|
||||
<dt><strong>Platform Developers</strong></dt>
|
||||
<dd>Responsible for individual operating system platforms</dd>
|
||||
</dl>
|
||||
|
||||
<p></p>
|
||||
|
||||
<table border="1" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Check</th>
|
||||
<th>Who</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="3">Preparing for a release</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Marty Kraimer</td>
|
||||
<td>Email all developers about the upcoming release and ask for a list
|
||||
of remaining jobs that must be finished.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>All developers</td>
|
||||
<td>Check the Mantis bug tracker for any outstanding items and handle
|
||||
appropriately. All bugs that have been fixed should have been marked
|
||||
as resolved.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Marty Kraimer</td>
|
||||
<td>Set a date by which all CVS commits must be done, after which
|
||||
commits should only be to fix problems that show up during Final
|
||||
Testing.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Release Manager</td>
|
||||
<td>Ensure that documentation will be updated before the release date:
|
||||
<ul>
|
||||
<li>Application Developers Guide</li>
|
||||
<li>Release Notes</li>
|
||||
<li>Known Problems</li>
|
||||
<li>Other documents</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>?</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="3">Final testing</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Platform Developers</td>
|
||||
<td>Run the Soft IOC tests in mrkSoftTest on all available
|
||||
platforms.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Platform Developers</td>
|
||||
<td>Check that all makeBaseApp templates build and run properly, all
|
||||
xxxApp and xxxBoot types and any internal options, e.g. standalone
|
||||
sncExample appliction, STATIC_BUILD=YES.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Marty Kraimer</td>
|
||||
<td>Run the VME I/O tests in mrkHwdTest on all available vxWorks VME
|
||||
platforms.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Jeff Hill</td>
|
||||
<td>Run the CA client side regression tests on all available host
|
||||
platforms.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>?</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="3">Release Approval</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Release Manager</td>
|
||||
<td>Obtain a positive 'Ok to release' from all platform developers.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="3">Make the release</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Janet Anderson</td>
|
||||
<td>Edit and commit changes to the EPICS version number files,
|
||||
config/CONFIG_BASE_VERSION and configure/CONFIG_BASE_VERSION.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Janet Anderson</td>
|
||||
<td>Tag the module in CVS. Version tags take the form
|
||||
<code>R</code><i><code>x</code></i><code>-</code><i><code>y</code></i><code>-</code><i><code>z</code></i><code>[-{alpha,beta,</code><i><code>n</code></i><code>}]</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Janet Anderson</td>
|
||||
<td>Export the tagged version, "cvs export -kv -d base-x.y.z
|
||||
-r Rx-y-zepics/base", and create the
|
||||
baseR<i>x.y.z</i>[{alpha,beta}<i>n</i>].tar.gz file of the result</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Janet Anderson</td>
|
||||
<td>Test the tar file by extracting its contents and building it on at
|
||||
least one supported platform</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Janet Anderson</td>
|
||||
<td>Copy the tar file to the Base download area of the website</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Andrew Johnson</td>
|
||||
<td>Create a new website subdirectory to hold the release
|
||||
documentation, and copy in the files from the base/documentation
|
||||
directory of the tarfile</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Andrew Johnson</td>
|
||||
<td>Create a webpage for the new release with links to the release
|
||||
documents and tar file</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>?</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="3">Announce it</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Andrew Johnson</td>
|
||||
<td>Add the new release tar file to the website Base download index
|
||||
page</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Andrew Johnson</td>
|
||||
<td>Link to the release webpage from other relevent areas of the
|
||||
website - update front page and sidebars</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Andrew Johnson</td>
|
||||
<td>Add the new Version number to the Mantis bug tracker</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Andrew Johnson</td>
|
||||
<td>Close all Mantis bug reports that were marked as resolved and which
|
||||
have been fixed in this release</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Release Manager</td>
|
||||
<td>Email tech-talk</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>Andrew Johnson</td>
|
||||
<td>Add an entry to the website News page, linking to the new
|
||||
webpage</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>?</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -18,10 +18,10 @@ include $(TOP)/configure/CONFIG
|
||||
# for c++ build add the dirs gdd and cas after ca
|
||||
# (and uncomment the c++ files in src/lbCom/Makefile.Unix)
|
||||
#
|
||||
DIRS += toolsComm
|
||||
DIRS += makeBaseApp
|
||||
DIRS += makeBaseExt
|
||||
DIRS += libCom
|
||||
DIRS += toolsComm
|
||||
DIRS += ca
|
||||
DIRS += dbStatic
|
||||
DIRS += registry
|
||||
|
||||
@@ -43,40 +43,3 @@ int connectWithTimeout (int sfd,
|
||||
setsockopt (sfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&sv, sizeof sv);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* RTEMS does not have the getprotobyXXX routines.
|
||||
* Provide these simple-minded versions.
|
||||
*/
|
||||
static char *ip_alias[] = { "IP", NULL };
|
||||
static char *icmp_alias[] = { "ICMP", NULL };
|
||||
static char *tcp_alias[] = { "TCP", NULL };
|
||||
static char *udp_alias[] = { "UDP", NULL };
|
||||
static struct protoent prototab[] = {
|
||||
{ "IP", ip_alias, IPPROTO_IP },
|
||||
{ "ICMP", icmp_alias, IPPROTO_ICMP },
|
||||
{ "TCP", tcp_alias, IPPROTO_TCP },
|
||||
{ "UDP", udp_alias, IPPROTO_UDP },
|
||||
};
|
||||
struct protoent *
|
||||
getprotobyname (const char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0 ; i < (sizeof prototab / sizeof prototab[0]) ; i++) {
|
||||
if (strcasecmp (name, prototab[i].p_name) == 0)
|
||||
return (struct protoent *) &prototab[i];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
struct protoent *
|
||||
getprotobynumber (int proto)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0 ; i < (sizeof prototab / sizeof prototab[0]) ; i++) {
|
||||
if (proto == prototab[i].p_proto)
|
||||
return (struct protoent *) &prototab[i];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1159,7 +1159,7 @@ static ASG *asAsgAdd(char *asgName)
|
||||
&& ellCount(&pnext->ruleList)==0)
|
||||
return(pnext);
|
||||
}
|
||||
errMessage(S_asLib_dupAsg,NULL);
|
||||
errMessage(S_asLib_dupAsg,"asAsgAdd");
|
||||
return(NULL);
|
||||
}
|
||||
pnext = (ASG *)ellNext((ELLNODE *)pnext);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
* (505) 665 1831
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
|
||||
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
|
||||
|
||||
@@ -359,10 +359,9 @@ completely independent control systems that will share the same network. For
|
||||
instance, a site might set up an operational control system and a test
|
||||
control system on the same network. In this situation it is desirable for the
|
||||
test system and the operational system to use identical PV names without fear
|
||||
of collision. Usually the best choice is to assign new port numbers to the
|
||||
operational system and allow the test system to use the default CA
|
||||
port numbers. A site might also configure the CA port numbers because
|
||||
some other facility is already using the default port numbers.</p>
|
||||
of collision. A site might also configure the CA port numbers because
|
||||
some other facility is already using the default port numbers. The default
|
||||
Channel Access port numbers have been registered with IANA.</p>
|
||||
|
||||
<table cellspacing="1" cellpadding="1" width="80%" border="1">
|
||||
<col><tbody>
|
||||
|
||||
@@ -89,7 +89,7 @@ PROD_LIBS = ca Com
|
||||
PROD_SYS_LIBS_WIN32 = ws2_32 advapi32 user32
|
||||
|
||||
PROD_HOST += caRepeater catime acctst caConnTest casw caEventRate
|
||||
OBJS_IOC += catime acctst caConnTest casw caEventRate
|
||||
OBJS_IOC_vxWorks += catime acctst caConnTest casw caEventRate
|
||||
caRepeater_SRCS = caRepeater.cpp
|
||||
catime_SRCS = catimeMain.c catime.c
|
||||
acctst_SRCS = acctstMain.c acctst.c
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include <new>
|
||||
#include <float.h>
|
||||
|
||||
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
|
||||
|
||||
@@ -41,6 +42,7 @@
|
||||
#include "iocinf.h"
|
||||
#include "oldAccess.h"
|
||||
#include "autoPtrDestroy.h"
|
||||
#include "cac.h"
|
||||
|
||||
epicsThreadPrivateId caClientContextId;
|
||||
|
||||
@@ -116,7 +118,8 @@ const char * ca_message_text []
|
||||
"User destroyed channel",
|
||||
"Invalid channel priority",
|
||||
"Preemptive callback not enabled - additional threads may not join context",
|
||||
"Client's protocol revision does not support transfers exceeding 16k bytes"
|
||||
"Client's protocol revision does not support transfers exceeding 16k bytes",
|
||||
"Virtual circuit connection sequence aborted"
|
||||
};
|
||||
|
||||
static epicsThreadOnceId caClientContextIdOnce = EPICS_THREAD_ONCE_INIT;
|
||||
|
||||
@@ -2407,10 +2407,44 @@ void verifyChannelPriorities ( const char *pName, unsigned interestLevel )
|
||||
showProgressEnd ( interestLevel );
|
||||
}
|
||||
|
||||
void verifyImmediateTearDown ()
|
||||
void verifyImmediateTearDown ( const char * pName, unsigned interestLevel )
|
||||
{
|
||||
ca_task_initialize ();
|
||||
ca_task_exit ();
|
||||
unsigned i;
|
||||
|
||||
showProgressBegin ( "verifyImmediateTearDown", interestLevel );
|
||||
|
||||
for ( i = 0u; i < 1000; i++ ) {
|
||||
chid chan;
|
||||
int status;
|
||||
double value = i;
|
||||
ca_task_initialize ();
|
||||
status = ca_create_channel ( pName, 0, 0, 0, & chan );
|
||||
SEVCHK ( status, "immediate tear down channel create failed" );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "immediate tear down channel connect failed" );
|
||||
assert ( status == ECA_NORMAL );
|
||||
/*
|
||||
* verify that puts pending when we call ca_task_exit()
|
||||
* get flushed out
|
||||
*/
|
||||
if ( i > 0 ) {
|
||||
double currentValue = 0.0;
|
||||
status = ca_get ( DBR_DOUBLE, chan, & currentValue );
|
||||
SEVCHK ( status, "immediate tear down channel get failed" );
|
||||
status = ca_pend_io ( timeoutToPendIO );
|
||||
SEVCHK ( status, "immediate tear down channel get failed" );
|
||||
assert ( currentValue == i - 1 );
|
||||
}
|
||||
status = ca_put ( DBR_DOUBLE, chan, & value );
|
||||
SEVCHK ( status, "immediate tear down channel put failed" );
|
||||
ca_task_exit ();
|
||||
epicsThreadSleep ( 1e-15 );
|
||||
if ( i % 100 == 0 ) {
|
||||
showProgress ( interestLevel );
|
||||
}
|
||||
}
|
||||
|
||||
showProgressEnd ( interestLevel );
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2592,7 +2626,7 @@ int acctst ( char *pName, unsigned interestLevel, unsigned channelCount,
|
||||
epicsEnvSet ( "EPICS_CA_MAX_ARRAY_BYTES", tmpString );
|
||||
}
|
||||
|
||||
verifyImmediateTearDown ();
|
||||
verifyImmediateTearDown ( pName, interestLevel );
|
||||
|
||||
status = ca_context_create ( select );
|
||||
SEVCHK ( status, NULL );
|
||||
@@ -2664,7 +2698,8 @@ int acctst ( char *pName, unsigned interestLevel, unsigned channelCount,
|
||||
pend_event_delay_test ( 0.25 );
|
||||
|
||||
/* ca_channel_status ( 0 ); */
|
||||
ca_client_status ( 0u );
|
||||
ca_client_status ( 0 );
|
||||
/* ca_client_status ( 6u ); info about each channel */
|
||||
|
||||
pChans = calloc ( channelCount, sizeof ( *pChans ) );
|
||||
assert ( pChans );
|
||||
|
||||
@@ -33,16 +33,16 @@
|
||||
#endif
|
||||
|
||||
#include "tsFreeList.h"
|
||||
#include "cxxCompilerDependencies.h"
|
||||
#include "compilerDependencies.h"
|
||||
|
||||
#ifdef autoPtrFreeListh_epicsExportSharedSymbols
|
||||
# define epicsExportSharedSymbols
|
||||
#endif
|
||||
|
||||
template < class T >
|
||||
template < class T, unsigned N = 0x400, class MUTEX = epicsMutex >
|
||||
class autoPtrFreeList {
|
||||
public:
|
||||
autoPtrFreeList ( tsFreeList < T > &, T * );
|
||||
autoPtrFreeList ( tsFreeList < T, N, MUTEX > &, T * );
|
||||
~autoPtrFreeList ();
|
||||
T & operator * () const;
|
||||
T * operator -> () const;
|
||||
@@ -50,18 +50,19 @@ public:
|
||||
T * release ();
|
||||
private:
|
||||
T * p;
|
||||
tsFreeList < T > & freeList;
|
||||
tsFreeList < T, N, MUTEX > & freeList;
|
||||
// not implemented
|
||||
autoPtrFreeList & operator = ( const autoPtrFreeList & );
|
||||
autoPtrFreeList ( const autoPtrFreeList<T> & );
|
||||
autoPtrFreeList ( const autoPtrFreeList < T, N, MUTEX > & );
|
||||
};
|
||||
|
||||
template < class T >
|
||||
inline autoPtrFreeList<T>::autoPtrFreeList ( tsFreeList < T > & freeListIn, T * pIn ) :
|
||||
template < class T, unsigned N, class MUTEX >
|
||||
inline autoPtrFreeList < T, N, MUTEX >::autoPtrFreeList (
|
||||
tsFreeList < T, N, MUTEX > & freeListIn, T * pIn ) :
|
||||
p ( pIn ), freeList ( freeListIn ) {}
|
||||
|
||||
template < class T >
|
||||
inline autoPtrFreeList<T>::~autoPtrFreeList ()
|
||||
template < class T, unsigned N, class MUTEX >
|
||||
inline autoPtrFreeList < T, N, MUTEX >::~autoPtrFreeList ()
|
||||
{
|
||||
if ( this->p ) {
|
||||
this->p->~T();
|
||||
@@ -75,26 +76,26 @@ inline autoPtrFreeList<T>::~autoPtrFreeList ()
|
||||
}
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T & autoPtrFreeList<T>::operator * () const
|
||||
template < class T, unsigned N, class MUTEX >
|
||||
inline T & autoPtrFreeList < T, N, MUTEX >::operator * () const
|
||||
{
|
||||
return * this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrFreeList<T>::operator -> () const
|
||||
template < class T, unsigned N, class MUTEX >
|
||||
inline T * autoPtrFreeList < T, N, MUTEX >::operator -> () const
|
||||
{
|
||||
return this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrFreeList<T>::get () const
|
||||
template < class T, unsigned N, class MUTEX >
|
||||
inline T * autoPtrFreeList < T, N, MUTEX >::get () const
|
||||
{
|
||||
return this->p;
|
||||
}
|
||||
|
||||
template < class T >
|
||||
inline T * autoPtrFreeList<T>::release ()
|
||||
template < class T, unsigned N, class MUTEX >
|
||||
inline T * autoPtrFreeList < T, N, MUTEX >::release ()
|
||||
{
|
||||
T *pTmp = this->p;
|
||||
this->p = 0;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* Author: Jeff Hill
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
#include <limits.h>
|
||||
#include <float.h>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "tsDLList.h"
|
||||
#include "tsFreeList.h"
|
||||
#include "epicsTime.h"
|
||||
#include "cxxCompilerDependencies.h"
|
||||
#include "compilerDependencies.h"
|
||||
|
||||
#ifdef bhehEpicsExportSharedSymbols
|
||||
# define epicsExportSharedSymbols
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#define epicsExportSharedSymbols
|
||||
#include "iocinf.h"
|
||||
#include "oldAccess.h"
|
||||
#include "cac.h"
|
||||
|
||||
extern epicsThreadPrivateId caClientContextId;
|
||||
|
||||
@@ -46,7 +47,7 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
|
||||
{
|
||||
static const unsigned short PORT_ANY = 0u;
|
||||
|
||||
this->sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
this->sock = epicsSocketCreate ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
if ( this->sock == INVALID_SOCKET ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
@@ -64,7 +65,7 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
|
||||
if ( status < 0 ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
this->printf (
|
||||
"%s: non blocking IO set fail because \"%s\"\n",
|
||||
__FILE__, sockErrBuf );
|
||||
@@ -84,7 +85,7 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
|
||||
if ( status < 0 ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close (this->sock);
|
||||
epicsSocketDestroy (this->sock);
|
||||
this->printf (
|
||||
"CAC: unable to bind to an unconstrained "
|
||||
"address because = \"%s\"\n",
|
||||
@@ -100,12 +101,12 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
|
||||
if ( status < 0 ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
this->printf ( "CAC: getsockname () error was \"%s\"\n", sockErrBuf );
|
||||
throwWithLocation ( noSocket () );
|
||||
}
|
||||
if ( tmpAddr.sa.sa_family != AF_INET) {
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
this->printf ( "CAC: UDP socket was not inet addr family\n" );
|
||||
throwWithLocation ( noSocket () );
|
||||
}
|
||||
@@ -131,7 +132,7 @@ ca_client_context::~ca_client_context ()
|
||||
( *this->fdRegFunc )
|
||||
( this->fdRegArg, this->sock, false );
|
||||
}
|
||||
socket_close ( this->sock );
|
||||
epicsSocketDestroy ( this->sock );
|
||||
}
|
||||
|
||||
void ca_client_context::destroyChannel ( oldChannelNotify & chan )
|
||||
@@ -480,6 +481,7 @@ void ca_client_context::blockForEventAndEnableCallbacks (
|
||||
|
||||
void ca_client_context::callbackLock ()
|
||||
{
|
||||
|
||||
// if preemptive callback is enabled then this is a noop
|
||||
if ( this->pCallbackGuard.get() ) {
|
||||
bool sendNeeded = false;
|
||||
@@ -550,3 +552,56 @@ void ca_client_context::changeConnCallBack (
|
||||
}
|
||||
pConnCallBack = pfunc;
|
||||
}
|
||||
|
||||
void ca_client_context::registerService ( cacService &service )
|
||||
{
|
||||
this->pClientCtx->registerService ( service );
|
||||
}
|
||||
|
||||
cacChannel & ca_client_context::createChannel ( const char * name_str,
|
||||
oldChannelNotify & chan, cacChannel::priLev pri )
|
||||
{
|
||||
return this->pClientCtx->createChannel ( name_str, chan, pri );
|
||||
}
|
||||
|
||||
void ca_client_context::flushRequest ()
|
||||
{
|
||||
this->pClientCtx->flushRequest ();
|
||||
}
|
||||
|
||||
unsigned ca_client_context::connectionCount () const
|
||||
{
|
||||
return this->pClientCtx->connectionCount ();
|
||||
}
|
||||
|
||||
unsigned ca_client_context::beaconAnomaliesSinceProgramStart () const
|
||||
{
|
||||
return this->pClientCtx->beaconAnomaliesSinceProgramStart ();
|
||||
}
|
||||
|
||||
CASG * ca_client_context::lookupCASG ( unsigned id )
|
||||
{
|
||||
return this->pClientCtx->lookupCASG ( id );
|
||||
}
|
||||
|
||||
void ca_client_context::installCASG ( CASG &sg )
|
||||
{
|
||||
this->pClientCtx->installCASG ( sg );
|
||||
}
|
||||
|
||||
void ca_client_context::uninstallCASG ( CASG &sg )
|
||||
{
|
||||
this->pClientCtx->uninstallCASG ( sg );
|
||||
}
|
||||
|
||||
void ca_client_context::vSignal ( int ca_status, const char *pfilenm,
|
||||
int lineno, const char *pFormat, va_list args )
|
||||
{
|
||||
this->pClientCtx->vSignal ( ca_status, pfilenm,
|
||||
lineno, pFormat, args );
|
||||
}
|
||||
|
||||
void ca_client_context::selfTest ()
|
||||
{
|
||||
this->pClientCtx->selfTest ();
|
||||
}
|
||||
|
||||
231
src/ca/cac.cpp
231
src/ca/cac.cpp
@@ -43,6 +43,7 @@
|
||||
#include "bhe.h"
|
||||
#include "net_convert.h"
|
||||
#include "autoPtrDestroy.h"
|
||||
#include "autoPtrFreeList.h"
|
||||
|
||||
static const char *pVersionCAC =
|
||||
"@(#) " EPICS_VERSION_STRING
|
||||
@@ -135,11 +136,11 @@ extern "C" void cacOnceFunc ( void * )
|
||||
// cac::cac ()
|
||||
//
|
||||
cac::cac ( cacNotify & notifyIn ) :
|
||||
ipToAEngine ( "dnsQuery" ),
|
||||
programBeginTime ( epicsTime::getCurrent() ),
|
||||
connTMO ( CA_CONN_VERIFY_PERIOD ),
|
||||
cbMutex ( notifyIn ),
|
||||
globalServiceList ( globalServiceListCAC.getReference () ),
|
||||
ipToAEngine ( ipAddrToAsciiEngine::allocate () ),
|
||||
timerQueue ( epicsTimerQueueActive::allocate ( false,
|
||||
lowestPriorityLevelAbove(epicsThreadGetPrioritySelf()) ) ),
|
||||
pUserName ( 0 ),
|
||||
@@ -269,10 +270,15 @@ cac::~cac ()
|
||||
// this will block for oustanding sends to go out so dont
|
||||
// hold a lock while waiting
|
||||
//
|
||||
while ( this->serverList.count() ) {
|
||||
this->iiuUninstall.wait ();
|
||||
{
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
while ( this->serverList.count() ) {
|
||||
epicsGuardRelease < cacMutex > unguard ( guard );
|
||||
this->iiuUninstall.wait ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( this->pudpiiu ) {
|
||||
delete this->pudpiiu;
|
||||
}
|
||||
@@ -293,6 +299,8 @@ cac::~cac ()
|
||||
|
||||
this->timerQueue.release ();
|
||||
|
||||
this->ipToAEngine.release ();
|
||||
|
||||
errlogFlush ();
|
||||
|
||||
// its ok for channels and subscriptions to still
|
||||
@@ -526,15 +534,13 @@ bool cac::transferChanToVirtCircuit (
|
||||
return false;
|
||||
}
|
||||
|
||||
bool v41Ok, v42Ok;
|
||||
nciu *pChan;
|
||||
{
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
|
||||
/*
|
||||
* ignore search replies for deleted channels
|
||||
*/
|
||||
pChan = this->chanTable.lookup ( cid );
|
||||
nciu * pChan = this->chanTable.lookup ( cid );
|
||||
if ( ! pChan ) {
|
||||
return false;
|
||||
}
|
||||
@@ -548,8 +554,9 @@ bool cac::transferChanToVirtCircuit (
|
||||
char acc[64];
|
||||
pChan->getPIIU()->hostName ( acc, sizeof ( acc ) );
|
||||
msgForMultiplyDefinedPV * pMsg = new ( this->mdpvFreeList )
|
||||
msgForMultiplyDefinedPV ( *this, pChan->pName (), acc, addr );
|
||||
pMsg->ioInitiate ( this->ipToAEngine );
|
||||
msgForMultiplyDefinedPV ( this->ipToAEngine,
|
||||
*this, pChan->pName (), acc );
|
||||
pMsg->ioInitiate ( addr );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -566,7 +573,9 @@ bool cac::transferChanToVirtCircuit (
|
||||
}
|
||||
else {
|
||||
try {
|
||||
epics_auto_ptr < tcpiiu > pnewiiu ( new tcpiiu (
|
||||
autoPtrFreeList < tcpiiu, 32, epicsMutexNOOP > pnewiiu (
|
||||
this->freeListVirtualCircuit,
|
||||
new ( this->freeListVirtualCircuit ) tcpiiu (
|
||||
*this, this->cbMutex, this->connTMO, this->timerQueue,
|
||||
addr, this->comBufMemMgr, minorVersionNumber,
|
||||
this->ipToAEngine, pChan->getPriority() ) );
|
||||
@@ -596,36 +605,9 @@ bool cac::transferChanToVirtCircuit (
|
||||
this->pudpiiu->uninstallChan ( guard, *pChan );
|
||||
piiu->installChannel ( guard, *pChan, sid, typeCode, count );
|
||||
|
||||
v41Ok = piiu->ca_v41_ok ();
|
||||
v42Ok = piiu->ca_v42_ok ();
|
||||
|
||||
if ( ! v42Ok ) {
|
||||
if ( ! piiu->ca_v42_ok () ) {
|
||||
// connect to old server with lock applied
|
||||
pChan->connect ();
|
||||
// resubscribe for monitors from this channel
|
||||
this->connectAllIO ( guard, *pChan );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! v42Ok ) {
|
||||
// channel uninstal routine grabs the callback lock so
|
||||
// a channel will not be deleted while a call back is
|
||||
// in progress
|
||||
//
|
||||
// the callback lock is also taken when a channel
|
||||
// disconnects to prevent a race condition with the
|
||||
// code below - ie we hold the callback lock here
|
||||
// so a chanel cant be destroyed out from under us.
|
||||
pChan->connectStateNotify ( cbGuard );
|
||||
|
||||
/*
|
||||
* if less than v4.1 then the server will never
|
||||
* send access rights and we know that there
|
||||
* will always be access and also need to call
|
||||
* their call back here
|
||||
*/
|
||||
if ( ! v41Ok ) {
|
||||
pChan->accessRightsNotify ( cbGuard );
|
||||
pChan->connect ( cbGuard, guard );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1016,7 +998,7 @@ void cac::connectAllIO ( epicsGuard < cacMutex > & guard, nciu & chan )
|
||||
while ( pNetIO.valid () ) {
|
||||
tsDLIter < baseNMIU > next = pNetIO;
|
||||
next++;
|
||||
class netSubscription *pSubscr = pNetIO->isSubscription ();
|
||||
class netSubscription * pSubscr = pNetIO->isSubscription ();
|
||||
// disconnected channels should have only subscription IO attached
|
||||
assert ( pSubscr );
|
||||
try {
|
||||
@@ -1326,26 +1308,14 @@ bool cac::accessRightsRespAction (
|
||||
epicsGuard < callbackMutex > & cbGuard, tcpiiu &, // X aCC 431
|
||||
const epicsTime &, const caHdrLargeArray & hdr, void * /* pMsgBdy */ )
|
||||
{
|
||||
nciu * pChan;
|
||||
{
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
pChan = this->chanTable.lookup ( hdr.m_cid );
|
||||
if ( pChan ) {
|
||||
unsigned ar = hdr.m_available;
|
||||
caAccessRights accessRights (
|
||||
( ar & CA_PROTO_ACCESS_RIGHT_READ ) ? true : false,
|
||||
( ar & CA_PROTO_ACCESS_RIGHT_WRITE ) ? true : false);
|
||||
pChan->accessRightsStateChange ( accessRights );
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// the channel delete routine takes the call back lock so
|
||||
// that this will not be called when the channel is being
|
||||
// deleted.
|
||||
//
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
nciu * pChan = this->chanTable.lookup ( hdr.m_cid );
|
||||
if ( pChan ) {
|
||||
pChan->accessRightsNotify ( cbGuard );
|
||||
unsigned ar = hdr.m_available;
|
||||
caAccessRights accessRights (
|
||||
( ar & CA_PROTO_ACCESS_RIGHT_READ ) ? true : false,
|
||||
( ar & CA_PROTO_ACCESS_RIGHT_WRITE ) ? true : false);
|
||||
pChan->accessRightsStateChange ( accessRights, cbGuard, guard );
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1355,33 +1325,28 @@ bool cac::claimCIURespAction (
|
||||
epicsGuard < callbackMutex > &cbGuard, tcpiiu & iiu, // X aCC 431
|
||||
const epicsTime &, const caHdrLargeArray & hdr, void * /* pMsgBdy */ )
|
||||
{
|
||||
nciu * pChan;
|
||||
|
||||
{
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
pChan = this->chanTable.lookup ( hdr.m_cid );
|
||||
if ( pChan ) {
|
||||
unsigned sidTmp;
|
||||
if ( iiu.ca_v44_ok() ) {
|
||||
sidTmp = hdr.m_available;
|
||||
}
|
||||
else {
|
||||
sidTmp = pChan->getSID ();
|
||||
}
|
||||
pChan->connect ( hdr.m_dataType, hdr.m_count, sidTmp, iiu.ca_v41_ok() );
|
||||
this->connectAllIO ( guard, *pChan );
|
||||
}
|
||||
else if ( iiu.ca_v44_ok() ) {
|
||||
// this indicates a claim response for a resource that does
|
||||
// not exist in the client - so just remove it from the server
|
||||
iiu.clearChannelRequest ( guard, hdr.m_available, hdr.m_cid );
|
||||
}
|
||||
}
|
||||
// the callback lock is taken when a channel is unistalled or when
|
||||
// is disconnected to prevent race conditions here
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
nciu * pChan = this->chanTable.lookup ( hdr.m_cid );
|
||||
if ( pChan ) {
|
||||
pChan->connectStateNotify ( cbGuard );
|
||||
unsigned sidTmp;
|
||||
if ( iiu.ca_v44_ok() ) {
|
||||
sidTmp = hdr.m_available;
|
||||
}
|
||||
else {
|
||||
sidTmp = pChan->getSID ();
|
||||
}
|
||||
|
||||
// the callback lock is taken when a channel is unistalled or when
|
||||
// is disconnected to prevent race conditions here
|
||||
pChan->connect ( hdr.m_dataType, hdr.m_count, sidTmp,
|
||||
cbGuard, guard );
|
||||
}
|
||||
else if ( iiu.ca_v44_ok() ) {
|
||||
// this indicates a claim response for a resource that does
|
||||
// not exist in the client - so just remove it from the server
|
||||
iiu.clearChannelRequest ( guard, hdr.m_available, hdr.m_cid );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1406,11 +1371,8 @@ void cac::disconnectChannel (
|
||||
assert ( this->pudpiiu );
|
||||
this->disconnectAllIO ( guard, chan, true );
|
||||
chan.getPIIU()->uninstallChan ( guard, chan );
|
||||
chan.disconnect ( *this->pudpiiu );
|
||||
this->pudpiiu->installChannel ( currentTime, chan );
|
||||
epicsGuardRelease < cacMutex > autoMutexRelease ( guard );
|
||||
chan.connectStateNotify ( cbGuard );
|
||||
chan.accessRightsNotify ( cbGuard );
|
||||
chan.disconnect ( *this->pudpiiu, cbGuard, guard );
|
||||
this->pudpiiu->installDisconnectedChannel ( currentTime, chan );
|
||||
}
|
||||
|
||||
bool cac::badTCPRespAction ( epicsGuard < callbackMutex > &, tcpiiu & iiu,
|
||||
@@ -1497,6 +1459,7 @@ void cac::vSignal ( int ca_status, const char *pfilenm,
|
||||
|
||||
void cac::selfTest () const
|
||||
{
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
this->chanTable.verify ();
|
||||
this->ioTable.verify ();
|
||||
this->sgTable.verify ();
|
||||
@@ -1511,48 +1474,76 @@ void cac::disconnectNotify ( tcpiiu & iiu )
|
||||
|
||||
void cac::initiateAbortShutdown ( tcpiiu & iiu )
|
||||
{
|
||||
int exception = ECA_DISCONN;
|
||||
char hostNameTmp[64];
|
||||
bool exceptionNeeded = false;
|
||||
epicsGuard < callbackMutex > cbGuard ( this->cbMutex );
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
|
||||
iiu.initiateAbortShutdown ( cbGuard, guard );
|
||||
{
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
|
||||
// Disconnect all channels immediately from the timer thread
|
||||
// because on certain OS such as HPUX it's difficult to
|
||||
// unblock a blocking send() call, and we need immediate
|
||||
// disconnect notification.
|
||||
if ( iiu.channelCount() ) {
|
||||
char hostNameTmp[64];
|
||||
iiu.hostName ( hostNameTmp, sizeof ( hostNameTmp ) );
|
||||
genLocalExcep ( cbGuard, *this, ECA_DISCONN, hostNameTmp );
|
||||
if ( iiu.channelCount() ) {
|
||||
iiu.hostName ( hostNameTmp, sizeof ( hostNameTmp ) );
|
||||
if ( iiu.connecting () ) {
|
||||
exception = ECA_CONNSEQTMO;
|
||||
}
|
||||
exceptionNeeded = true;
|
||||
}
|
||||
|
||||
iiu.initiateAbortShutdown ( cbGuard, guard );
|
||||
|
||||
// Disconnect all channels immediately from the timer thread
|
||||
// because on certain OS such as HPUX it's difficult to
|
||||
// unblock a blocking send() call, and we need immediate
|
||||
// disconnect notification.
|
||||
iiu.removeAllChannels ( cbGuard, guard, *this );
|
||||
}
|
||||
|
||||
if ( exceptionNeeded ) {
|
||||
genLocalExcep ( cbGuard, *this, exception, hostNameTmp );
|
||||
}
|
||||
iiu.removeAllChannels ( cbGuard, guard, *this );
|
||||
}
|
||||
|
||||
void cac::uninstallIIU ( epicsGuard < callbackMutex > & cbGuard, tcpiiu & iiu )
|
||||
void cac::destroyIIU ( tcpiiu & iiu )
|
||||
{
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
if ( iiu.channelCount() ) {
|
||||
char hostNameTmp[64];
|
||||
iiu.hostName ( hostNameTmp, sizeof ( hostNameTmp ) );
|
||||
genLocalExcep ( cbGuard, *this, ECA_DISCONN, hostNameTmp );
|
||||
}
|
||||
osiSockAddr addr = iiu.getNetworkAddress();
|
||||
if ( addr.sa.sa_family == AF_INET ) {
|
||||
inetAddrID tmp ( addr.ia );
|
||||
bhe * pBHE = this->beaconTable.lookup ( tmp );
|
||||
if ( pBHE ) {
|
||||
pBHE->unregisterIIU ( iiu );
|
||||
{
|
||||
epicsGuard < callbackMutex > cbGuard ( this->cbMutex );
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
if ( iiu.channelCount() ) {
|
||||
char hostNameTmp[64];
|
||||
iiu.hostName ( hostNameTmp, sizeof ( hostNameTmp ) );
|
||||
genLocalExcep ( cbGuard, *this, ECA_DISCONN, hostNameTmp );
|
||||
}
|
||||
osiSockAddr addr = iiu.getNetworkAddress();
|
||||
if ( addr.sa.sa_family == AF_INET ) {
|
||||
inetAddrID tmp ( addr.ia );
|
||||
bhe * pBHE = this->beaconTable.lookup ( tmp );
|
||||
if ( pBHE ) {
|
||||
pBHE->unregisterIIU ( iiu );
|
||||
}
|
||||
}
|
||||
|
||||
assert ( this->pudpiiu );
|
||||
iiu.removeAllChannels ( cbGuard, guard, *this );
|
||||
}
|
||||
|
||||
assert ( this->pudpiiu );
|
||||
iiu.removeAllChannels ( cbGuard, guard, *this );
|
||||
|
||||
this->serverTable.remove ( iiu );
|
||||
this->serverList.remove ( iiu );
|
||||
{
|
||||
// this lock synchronizes with a blocking loop
|
||||
// in ~cac waiting until no circuits are installed.
|
||||
// After the cac lock is released here we must not
|
||||
// access any part of the cac (including the
|
||||
// callback lock) because ~cac is allowed to
|
||||
// complete.
|
||||
epicsGuard < cacMutex > guard ( this->mutex );
|
||||
|
||||
// signal iiu uninstal event so that cac can properly shut down
|
||||
this->iiuUninstall.signal();
|
||||
this->serverTable.remove ( iiu );
|
||||
this->serverList.remove ( iiu );
|
||||
iiu.~tcpiiu ();
|
||||
this->freeListVirtualCircuit.release ( & iiu );
|
||||
|
||||
// signal iiu uninstal event so that cac can properly shut down
|
||||
this->iiuUninstall.signal();
|
||||
}
|
||||
}
|
||||
|
||||
double cac::beaconPeriod ( const nciu & chan ) const
|
||||
@@ -1575,7 +1566,7 @@ double cac::beaconPeriod ( const nciu & chan ) const
|
||||
void cac::initiateConnect ( nciu & chan )
|
||||
{
|
||||
assert ( this->pudpiiu );
|
||||
this->pudpiiu->installChannel (
|
||||
this->pudpiiu->installNewChannel (
|
||||
epicsTime::getCurrent(), chan );
|
||||
}
|
||||
|
||||
|
||||
37
src/ca/cac.h
37
src/ca/cac.h
@@ -31,7 +31,7 @@
|
||||
# undef epicsExportSharedSymbols
|
||||
#endif
|
||||
|
||||
#include "cxxCompilerDependencies.h"
|
||||
#include "compilerDependencies.h"
|
||||
#include "ipAddrToAsciiAsynchronous.h"
|
||||
#include "msgForMultiplyDefinedPV.h"
|
||||
#include "epicsTimer.h"
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "cacIO.h"
|
||||
#include "netIO.h"
|
||||
#include "localHostName.h"
|
||||
#include "virtualCircuit.h"
|
||||
|
||||
class netWriteNotifyIO;
|
||||
class netReadNotifyIO;
|
||||
@@ -71,18 +72,6 @@ struct caHdrLargeArray;
|
||||
|
||||
extern epicsThreadPrivateId caClientCallbackThreadId;
|
||||
|
||||
class callbackMutex {
|
||||
public:
|
||||
callbackMutex ( cacNotify & );
|
||||
~callbackMutex ();
|
||||
void lock ();
|
||||
void unlock ();
|
||||
private:
|
||||
cacNotify & notify;
|
||||
callbackMutex ( callbackMutex & );
|
||||
callbackMutex & operator = ( callbackMutex & );
|
||||
};
|
||||
|
||||
class cacMutex {
|
||||
public:
|
||||
void lock ();
|
||||
@@ -109,6 +98,18 @@ public:
|
||||
epicsGuard < cacMutex > &, nciu & chan ) = 0;
|
||||
};
|
||||
|
||||
class callbackMutex {
|
||||
public:
|
||||
callbackMutex ( cacNotify & );
|
||||
~callbackMutex ();
|
||||
void lock ();
|
||||
void unlock ();
|
||||
private:
|
||||
cacNotify & notify;
|
||||
callbackMutex ( callbackMutex & );
|
||||
callbackMutex & operator = ( callbackMutex & );
|
||||
};
|
||||
|
||||
class cac : private cacRecycle, private cacDisconnectChannelPrivate,
|
||||
private callbackForMultiplyDefinedPV
|
||||
{
|
||||
@@ -133,7 +134,7 @@ public:
|
||||
unsigned cid, unsigned sid,
|
||||
ca_uint16_t typeCode, arrayElementCount count,
|
||||
unsigned minorVersionNumber, const osiSockAddr & );
|
||||
|
||||
void connectAllIO ( epicsGuard < cacMutex > &, nciu & chan );
|
||||
void destroyChannel ( nciu & );
|
||||
cacChannel & createChannel ( const char *name_str,
|
||||
cacChannelNotify &chan, cacChannel::priLev pri );
|
||||
@@ -189,11 +190,10 @@ public:
|
||||
static unsigned highestPriorityLevelBelow ( unsigned priority );
|
||||
void initiateAbortShutdown ( tcpiiu & );
|
||||
void disconnectNotify ( tcpiiu & );
|
||||
void uninstallIIU ( epicsGuard < callbackMutex > &, tcpiiu & iiu );
|
||||
void destroyIIU ( tcpiiu & iiu );
|
||||
|
||||
private:
|
||||
localHostName hostNameCache;
|
||||
ipAddrToAsciiEngine ipToAEngine;
|
||||
cacServiceList services;
|
||||
chronIntIdResTable < nciu > chanTable;
|
||||
//
|
||||
@@ -213,6 +213,9 @@ private:
|
||||
resTable < bhe, inetAddrID > beaconTable;
|
||||
resTable < tcpiiu, caServerID > serverTable;
|
||||
tsDLList < tcpiiu > serverList;
|
||||
tsFreeList
|
||||
< class tcpiiu, 32, epicsMutexNOOP >
|
||||
freeListVirtualCircuit;
|
||||
tsFreeList
|
||||
< class netReadNotifyIO, 1024, epicsMutexNOOP >
|
||||
freeListReadNotifyIO;
|
||||
@@ -239,6 +242,7 @@ private:
|
||||
epicsSingleton
|
||||
< cacServiceList >::reference
|
||||
globalServiceList;
|
||||
ipAddrToAsciiEngine & ipToAEngine;
|
||||
epicsTimerQueueActive & timerQueue;
|
||||
char * pUserName;
|
||||
class udpiiu * pudpiiu;
|
||||
@@ -251,7 +255,6 @@ private:
|
||||
unsigned beaconAnomalyCount;
|
||||
|
||||
void run ();
|
||||
void connectAllIO ( epicsGuard < cacMutex > &, nciu &chan );
|
||||
void disconnectAllIO ( epicsGuard < cacMutex > & locker, nciu & chan, bool enableCallbacks );
|
||||
void flushIfRequired ( epicsGuard < cacMutex > &, netiiu & );
|
||||
void recycleReadNotifyIO ( netReadNotifyIO &io );
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
|
||||
#include "tsDLList.h"
|
||||
#include "epicsMutex.h"
|
||||
#include "epicsSingleton.h"
|
||||
|
||||
#ifdef cacIOh_restore_epicsExportSharedSymbols
|
||||
# define epicsExportSharedSymbols
|
||||
@@ -250,6 +251,7 @@ private:
|
||||
};
|
||||
|
||||
template < class T > class epicsSingleton;
|
||||
|
||||
epicsShareExtern epicsSingleton < cacServiceList > globalServiceListCAC;
|
||||
|
||||
epicsShareFunc int epicsShareAPI ca_register_service ( cacService *pService );
|
||||
|
||||
@@ -142,6 +142,7 @@
|
||||
#define ECA_BADPRIORITY DEFMSG(CA_K_ERROR, 56)
|
||||
#define ECA_NOTTHREADED DEFMSG(CA_K_ERROR, 57)
|
||||
#define ECA_16KARRAYCLIENT DEFMSG(CA_K_WARNING, 58)
|
||||
#define ECA_CONNSEQTMO DEFMSG(CA_K_WARNING, 59)
|
||||
|
||||
#ifdef __STDC__
|
||||
#define CAERR_USE_FUNC_PROTO
|
||||
|
||||
@@ -86,7 +86,7 @@ int main ( int argc, char ** argv )
|
||||
}
|
||||
|
||||
if ( ! validCommandLine ) {
|
||||
printf ( "usage: \"%s <-i interestLevel>\"", argv[0] );
|
||||
printf ( "usage: casw <-i interestLevel>\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ int main ( int argc, char ** argv )
|
||||
|
||||
caStartRepeaterIfNotInstalled ( repeaterPort );
|
||||
|
||||
sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
sock = epicsSocketCreate ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
if ( sock == INVALID_SOCKET ) {
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
@@ -119,7 +119,7 @@ int main ( int argc, char ** argv )
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ( "casw: unable to bind to an unconstrained address because = \"%s\"\n",
|
||||
sockErrBuf );
|
||||
return -1;
|
||||
@@ -131,7 +131,7 @@ int main ( int argc, char ** argv )
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ( "casw: unable to set socket to nonblocking state because \"%s\"\n",
|
||||
sockErrBuf );
|
||||
return -1;
|
||||
@@ -153,7 +153,7 @@ int main ( int argc, char ** argv )
|
||||
|
||||
attemptNumber++;
|
||||
if ( attemptNumber > 100 ) {
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ( "casw: unable to register with the CA repeater\n" );
|
||||
return -1;
|
||||
}
|
||||
@@ -165,7 +165,7 @@ int main ( int argc, char ** argv )
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ( "casw: unable to set socket to blocking state because \"%s\"\n",
|
||||
sockErrBuf );
|
||||
return -1;
|
||||
@@ -181,7 +181,7 @@ int main ( int argc, char ** argv )
|
||||
char sockErrBuf[64];
|
||||
epicsSocketConvertErrnoToString (
|
||||
sockErrBuf, sizeof ( sockErrBuf ) );
|
||||
socket_close ( sock );
|
||||
epicsSocketDestroy ( sock );
|
||||
errlogPrintf ("casw: error from recv was = \"%s\"\n",
|
||||
sockErrBuf );
|
||||
return -1;
|
||||
@@ -247,7 +247,7 @@ int main ( int argc, char ** argv )
|
||||
if ( anomaly ) {
|
||||
char date[64];
|
||||
currentTime.strftime ( date, sizeof ( date ),
|
||||
"%a %b %d %Y %H:%M:%S.%f");
|
||||
"%Y-%m-%d %T.%09f");
|
||||
char host[64];
|
||||
ipAddrToA ( &ina, host, sizeof ( host ) );
|
||||
printf ( "%-40s %s\n",
|
||||
@@ -256,6 +256,7 @@ int main ( int argc, char ** argv )
|
||||
printf ( "\testimate=%f current=%f\n",
|
||||
pBHE->period (), currentTime - previousTime );
|
||||
}
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include "tsFreeList.h"
|
||||
#include "tsDLList.h"
|
||||
#include "osiWireFormat.h"
|
||||
#include "cxxCompilerDependencies.h"
|
||||
#include "compilerDependencies.h"
|
||||
|
||||
static const unsigned comBufSize = 0x4000;
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
* 505 665 1831
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
|
||||
#define epicsExportSharedSymbols
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
* 505 665 1831
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
|
||||
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
|
||||
|
||||
@@ -27,14 +27,16 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#if 0
|
||||
#include "iocinf.h"
|
||||
#endif
|
||||
#include "hostNameCache.h"
|
||||
#include "epicsGuard.h"
|
||||
|
||||
hostNameCache::hostNameCache ( const osiSockAddr &addr, ipAddrToAsciiEngine &engine ) :
|
||||
ipAddrToAsciiAsynchronous ( addr ),
|
||||
ioComplete ( false )
|
||||
hostNameCache::hostNameCache ( const osiSockAddr & addr, ipAddrToAsciiEngine & engine ) :
|
||||
dnsTransaction ( engine.createTransaction() ), ioComplete ( false )
|
||||
{
|
||||
this->ioInitiate ( engine );
|
||||
this->dnsTransaction.ipAddrToAscii ( addr, *this );
|
||||
}
|
||||
|
||||
void hostNameCache::destroy ()
|
||||
@@ -44,11 +46,14 @@ void hostNameCache::destroy ()
|
||||
|
||||
hostNameCache::~hostNameCache ()
|
||||
{
|
||||
this->dnsTransaction.release ();
|
||||
}
|
||||
|
||||
void hostNameCache::ioCompletionNotify ( const char *pHostNameIn )
|
||||
void hostNameCache::transactionComplete ( const char *pHostNameIn )
|
||||
{
|
||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||
if ( ! this->ioComplete ) {
|
||||
this->ioComplete = true;
|
||||
strncpy ( this->hostNameBuf, pHostNameIn, sizeof ( this->hostNameBuf ) );
|
||||
this->hostNameBuf[ sizeof ( this->hostNameBuf ) - 1 ] = '\0';
|
||||
}
|
||||
@@ -56,12 +61,13 @@ void hostNameCache::ioCompletionNotify ( const char *pHostNameIn )
|
||||
|
||||
void hostNameCache::hostName ( char *pBuf, unsigned bufSize ) const
|
||||
{
|
||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||
if ( this->ioComplete ) {
|
||||
strncpy ( pBuf, this->hostNameBuf, bufSize);
|
||||
pBuf [ bufSize - 1u ] = '\0';
|
||||
}
|
||||
else {
|
||||
osiSockAddr tmpAddr = this->address ();
|
||||
osiSockAddr tmpAddr = this->dnsTransaction.address ();
|
||||
sockAddrToDottedIP ( &tmpAddr.sa, pBuf, bufSize );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,22 +33,24 @@
|
||||
#endif
|
||||
|
||||
#include "ipAddrToAsciiAsynchronous.h"
|
||||
#include "tsFreeList.h"
|
||||
#include "epicsMutex.h"
|
||||
|
||||
#ifdef hostNameCache_epicsExportSharedSymbols
|
||||
# define epicsExportSharedSymbols
|
||||
#endif
|
||||
|
||||
class hostNameCache : public ipAddrToAsciiAsynchronous {
|
||||
class hostNameCache : public ipAddrToAsciiCallBack {
|
||||
public:
|
||||
hostNameCache ( const osiSockAddr &addr, ipAddrToAsciiEngine &engine );
|
||||
~hostNameCache ();
|
||||
void destroy ();
|
||||
void ioCompletionNotify ( const char *pHostName );
|
||||
void transactionComplete ( const char * pHostName );
|
||||
void hostName ( char *pBuf, unsigned bufLength ) const;
|
||||
private:
|
||||
bool ioComplete;
|
||||
char hostNameBuf [128];
|
||||
mutable epicsMutex mutex;
|
||||
ipAddrToAsciiTransaction & dnsTransaction;
|
||||
bool ioComplete;
|
||||
};
|
||||
|
||||
#endif // #ifndef hostNameCacheh
|
||||
|
||||
@@ -216,6 +216,7 @@ extern "C" void epicsShareAPI configureChannelAccessAddressList
|
||||
ellInit ( &bcastList ); // X aCC 392
|
||||
addr.ia.sin_family = AF_UNSPEC;
|
||||
osiSockDiscoverBroadcastAddresses ( &bcastList, sock, &addr );
|
||||
forcePort ( &bcastList, port );
|
||||
removeDuplicateAddresses ( &tmpList, &bcastList, 1 );
|
||||
if ( ellCount ( &tmpList ) == 0 ) { // X aCC 392
|
||||
osiSockAddrNode *pNewNode;
|
||||
@@ -234,9 +235,6 @@ extern "C" void epicsShareAPI configureChannelAccessAddressList
|
||||
errlogPrintf ( "configureChannelAccessAddressList(): no memory available for configuration\n" );
|
||||
}
|
||||
}
|
||||
else {
|
||||
forcePort ( &tmpList, port );
|
||||
}
|
||||
}
|
||||
addAddrToChannelAccessAddressList ( &tmpList, &EPICS_CA_ADDR_LIST, port );
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user