Compare commits

...

21 Commits

Author SHA1 Message Date
Andrew Johnson
37d103f9cd Clear SNAPSHOT in Base version for 7.0.1.1 2017-12-15 12:44:20 -06:00
Andrew Johnson
78c7e5d032 Update version numbers in documentation to 7.0.1.1
Also recreated README.1st from README.html
2017-12-15 12:41:25 -06:00
Andrew Johnson
2e964c8bb8 Added tag checking to make-tar.sh
Modified the default values for filename and tar prefix.
Also allows omitting the leading 'R' from a tag-name, so it will not
be included in the generated default filename and prefix values.
The combination of these changes is that it is now possible to make a
standard release tarfile just by running 'make-tar.sh 7.0.1.1'.
2017-12-15 12:33:27 -06:00
Andrew Johnson
6bf0b5247c Merge bug-fix from 3.16 branch into core/master 2017-12-15 11:47:56 -06:00
Andrew Johnson
b0f6451c6e Set SNAPSHOT after tagging release 2017-12-14 19:10:10 -06:00
Andrew Johnson
269f5fc58a Clear SNAPSHOT in Base version for 7.0.1 2017-12-14 19:07:09 -06:00
Andrew Johnson
7ee0f95a47 Update all submodules to tagged versions 2017-12-14 19:04:24 -06:00
Ralph Lange
b90014183b appveyor-ci: remove VS 2008, add VS 2017 2017-12-12 12:58:40 +01:00
Ralph Lange
bc522357a5 appveyor-ci: use curl for download of make.zip 2017-12-11 10:41:18 +01:00
Ralph Lange
683e803154 appveyor-ci: add submodule clone, set clone depth to 10 2017-12-11 10:33:27 +01:00
Andrew Johnson
5e0b80f462 Started updating Release Checklist for EPICS 7
Incomplete, needs instructions on updating and tagging submodules,
maybe other things too.
This uses version number 7.1.1 instead of 7.0.1, which was deliberate.
2017-12-11 00:33:56 -06:00
Andrew Johnson
fc52dfb2d7 Update pva2pva submodule 2017-12-11 00:28:28 -06:00
Andrew Johnson
28a8c06075 Set EPICS_HOST_ARCH in the environment, not just locally
This is essential for submodules, which now need that value to load
the right modules/RELEASE.<host>.local file which gives them their
path to EPICS_BASE (they can't set it for themselves without knowing
that path because the startup directory is part of core!).
2017-12-07 18:01:09 -06:00
Andrew Johnson
c9ca39ce70 Display rule activity in modules/Makefile 2017-12-07 14:44:26 -06:00
Andrew Johnson
933082c1c0 Another libcom fix, for separate module builds. 2017-12-07 11:59:14 -06:00
Andrew Johnson
28c96e2b8e libcom dependency fix 2017-12-07 11:24:30 -06:00
Andrew Johnson
488e9cb6b1 Update libcom with cross-build fix 2017-12-07 11:01:38 -06:00
Andrew Johnson
008ac76313 Fixes for sharing a build tree between Windows + Unix
Rename modules/RELEASE.local to RELEASE.<host>.local
Modify all submodule configure/RELEASE files to include that, and
update the template configure/RELEASE file to match.

Install Perl *ModuleDirs.pm files into bin/<host> since they contain
absolute paths which may be different on different host arch's.
Scripts that need a ModuleDirs module have been adjusted to look in
their bin/<host> directory for it.

Some additional submodule updates were also incorporated.
2017-12-06 23:27:38 -06:00
Andrew Johnson
8e2b782b7c Merge Release.pm fix from 3.15 into 3.16 2017-12-06 16:52:04 -06:00
Andrew Johnson
3b0f34e0be Fix recursive check in Release.pm 2017-12-06 16:29:31 -06:00
Andrew Johnson
0867af4654 Set snapshot to -rc1-DEV after tagging 2017-11-30 17:56:17 -06:00
23 changed files with 139 additions and 111 deletions

View File

@@ -16,7 +16,7 @@ init:
- git config --global core.autocrlf true
# Set clone depth (do not fetch complete history)
clone_depth: 2
clone_depth: 10
# Skipping commits affecting only specific files
skip_commits:
@@ -40,11 +40,12 @@ configuration:
# Environment variables: compiler toolchain
environment:
matrix:
- TOOLCHAIN: 9.0
- TOOLCHAIN: 10.0
- TOOLCHAIN: 11.0
- TOOLCHAIN: 12.0
- TOOLCHAIN: 14.0
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
TOOLCHAIN: 2017
- TOOLCHAIN: cygwin
- TOOLCHAIN: mingw
@@ -57,8 +58,6 @@ platform:
matrix:
exclude:
# VS Express installs don't have the 64 bit compiler
- platform: x64
TOOLCHAIN: 9.0
- platform: x64
TOOLCHAIN: 10.0
@@ -67,6 +66,7 @@ matrix:
#---------------------------------#
install:
- cmd: git submodule update --init --recursive --depth 10
- cmd: .ci/appveyor-prepare.bat
build_script:

View File

@@ -1,6 +1,6 @@
:: Universal build script for AppVeyor (https://ci.appveyor.com/)
:: Environment:
:: TOOLCHAIN - toolchain version [9.0/10.0/11.0/12.0/14.0/cygwin/mingw]
:: TOOLCHAIN - toolchain version [10.0/11.0/12.0/14.0/2017/cygwin/mingw]
:: CONFIGURATION - determines EPICS build [dynamic/static]
:: PLATFORM - architecture [x86/x64]
::
@@ -57,10 +57,22 @@ if "%TOOLCHAIN%"=="mingw" (
)
set "VSINSTALL=C:\Program Files (x86)\Microsoft Visual Studio %TOOLCHAIN%"
if not exist "%VSINSTALL%\" set "VSINSTALL=C:\Program Files (x86)\Microsoft Visual Studio\%TOOLCHAIN%\Community"
if not exist "%VSINSTALL%\" goto MSMissing
set "MAKE=C:\tools\make"
echo [INFO] APPVEYOR_BUILD_WORKER_IMAGE=%APPVEYOR_BUILD_WORKER_IMAGE%
if "%OS%"=="64BIT" (
set EPICS_HOST_ARCH=windows-x64%ST%
:: VS 2017
if exist "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat" (
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
call "%VSINSTALL%\VC\vcvarsall.bat" amd64
where cl
@@ -79,12 +91,19 @@ if "%OS%"=="64BIT" (
)
) else (
set EPICS_HOST_ARCH=win32-x86%ST%
:: VS 2017
if exist "%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat" (
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat"
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
call "%VSINSTALL%\VC\vcvarsall.bat" x86
where cl
if !ERRORLEVEL! NEQ 0 goto MSMissing
goto MSFound
)
)
if exist "%VSINSTALL%\VC\bin\vcvars32.bat" (
call "%VSINSTALL%\VC\bin\vcvars32.bat"
where cl

View File

@@ -65,6 +65,6 @@ if "%TOOLCHAIN%"=="mingw" (
)
echo [INFO] Installing Make 4.1
@powershell -Command "(new-object net.webclient).DownloadFile('https://www.aps.anl.gov/epics/download/tools/make-4.1-win64.zip', 'C:\tools\make-4.1.zip')"
curl -fsS --retry 3 -o C:\tools\make-4.1.zip https://www.aps.anl.gov/epics/download/tools/make-4.1-win64.zip
cd \tools
"C:\Program Files\7-Zip\7z" e make-4.1.zip

View File

@@ -18,23 +18,34 @@ then
cat <<EOF >&2
usage: $0 [rev] [outfile.tar.gz] [prefix/]
"<rev>" may be any git revision spec. (tag, branch, or commit id).
<rev> may be any git revision spec. (tag, branch, or commit id).
Output file may be .tar.gz, .tar.bz2, or any extension supported by "tar -a".
If output file name is omitted, then "<rev>.tar.gz" is the default.
If prefix is omitted, then the default is "<rev>/".
If output file name is omitted, "base-<rev>.tar.gz" will be used.
If <prefix> is omitted, the default prefix is "base-<rev>/".
EOF
exit 1
fi
[ "$FINALTAR" ] || FINALTAR="$TOPREV.tar.gz"
[ "$PREFIX" ] || PREFIX="$TOPREV/"
[ "$FINALTAR" ] || FINALTAR="base-$TOPREV.tar.gz"
[ "$PREFIX" ] || PREFIX="base-$TOPREV/"
case "$PREFIX" in
*/) ;;
*) die "Prefix must end with '/'";;
esac
# Check for both <tag> and R<tag>
if ! [ `git tag -l $TOPREV` ]
then
if [ `git tag -l R$TOPREV` ]
then
TOPREV="R$TOPREV"
else
die "No tags exist '$TOPREV' or 'R$TOPREV'"
fi
fi
# temporary directory w/ automatic cleanup
TDIR=`mktemp -d`
trap 'rm -rf "$TDIR"' EXIT INT QUIT TERM

2
.gitignore vendored
View File

@@ -7,7 +7,7 @@
/include/
/templates/
/configure/*.local
/modules/RELEASE.local
/modules/RELEASE.*.local
/modules/Makefile.local
O.*/
/QtC-*

View File

@@ -20,11 +20,12 @@ else
endif
# Provide a default if the user hasn't set EPICS_HOST_ARCH
ifeq ($(origin EPICS_HOST_ARCH), undefined)
# NB: We use a simply expanded variable here for performance:
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)
ifeq ($(strip $(EPICS_HOST_ARCH)),)
# NB: We must set the environment variable for submodules to include
# the correct modules/RELEASE.<host>.local file to set EPICS_BASE,
# they can't do this for themselves since CONFIG is relative to it:
export EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)
endif
#
-include $(CONFIG)/RELEASE
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)

View File

@@ -43,7 +43,7 @@ EPICS_MODIFICATION = 1
# EPICS_PATCH_LEVEL must be a number (win32 resource file requirement)
# Not included if zero
EPICS_PATCH_LEVEL = 0
EPICS_PATCH_LEVEL = 1
# This will end in -DEV between official releases
#EPICS_DEV_SNAPSHOT=-DEV
@@ -51,11 +51,11 @@ EPICS_PATCH_LEVEL = 0
#EPICS_DEV_SNAPSHOT=-pre1-DEV
#EPICS_DEV_SNAPSHOT=-pre2
#EPICS_DEV_SNAPSHOT=-pre2-DEV
EPICS_DEV_SNAPSHOT=-rc1
#EPICS_DEV_SNAPSHOT=-rc1
#EPICS_DEV_SNAPSHOT=-rc1-DEV
#EPICS_DEV_SNAPSHOT=-rc2
#EPICS_DEV_SNAPSHOT=-rc2-DEV
#EPICS_DEV_SNAPSHOT=
EPICS_DEV_SNAPSHOT=
# No changes should be needed below here

View File

@@ -1,6 +1,6 @@
Installation Instructions
EPICS Base Release 3.16.1
EPICS Base Release 7.0.1.1
--------------------------------------------------------------------------
@@ -225,13 +225,13 @@
required path and other environment variables.
EPICS_HOST_ARCH
Before you can build or use EPICS R3.15, the environment variable
EPICS_HOST_ARCH must be defined. A perl script EpicsHostArch.pl in the
base/startup directory has been provided to help set EPICS_HOST_ARCH.
You should have EPICS_HOST_ARCH set to your host operating system
followed by a dash and then your host architecture, e.g.
solaris-sparc. If you are not using the OS vendor's c/c++ compiler for
host builds, you will need another dash followed by the alternate
Before you can build or use EPICS Base, the environment variable
EPICS_HOST_ARCH should be defined. A perl script EpicsHostArch.pl in
the base/startup directory has been provided to help set
EPICS_HOST_ARCH. You should have EPICS_HOST_ARCH set to your host
operating system followed by a dash and then your CPU architecture,
e.g. linux-x86_64. If you are not using the OS vendor's c/c++ compiler
for host builds, you will need another dash followed by the alternate
compiler name (e.g. "-gnu" for GNU c/c++ compilers on a solaris host
or "-mingw" for MinGW c/c++ compilers on a WIN32 host). See
configure/CONFIG_SITE for a list of supported EPICS_HOST_ARCH values.
@@ -250,7 +250,7 @@
solaris systems you need uname in your path.
LD_LIBRARY_PATH
R3.15 shared libraries and executables normally contain the full path
EPICS shared libraries and executables normally contain the full path
to any libraries they require. However, if you move the EPICS files or
directories from their build-time location then in order for the
shared libraries to be found at runtime LD_LIBRARY_PATH must include
@@ -313,7 +313,7 @@
script will create a sample application that can be built and then
executed to try out this release of base.
Instructions for building and executing the 3.15 example application can
Instructions for building and executing the example IOC application can
be found in the section "Example Application" of Chapter 2, "Getting
Started", in the "IOC Application Developer's Guide" for this release.
The "Example IOC Application" section briefly explains how to create and

View File

@@ -9,7 +9,7 @@
<BODY>
<CENTER>
<H1>Installation Instructions</H1>
<H2>EPICS Base Release 7.0.1</H2><BR>
<H2>EPICS Base Release 7.0.1.1</H2><BR>
</CENTER>
<HR>
<H3> Table of Contents</H3>

View File

@@ -7,7 +7,7 @@
</head>
<body lang="en">
<h1 align="center">EPICS Release 7.0.1</h1>
<h1 align="center">EPICS Release 7.0.1.1</h1>
<!-- Insert new items immediately below this template ...

View File

@@ -39,14 +39,15 @@ that should be performed when creating production releases of EPICS Base.</p>
<p>The version released on the Feature Freeze date is designated the first
pre-release, <tt>-pre1</tt>. The first release candidate <tt>-rc1</tt> is the
first version that has undergone widespread testing and which has no known
problems in it that are slated to be fixed in this release. New versions should
be made at about weekly intervals during the testing and debugging period, and
will be designated as either pre-release or release candidate versions by the
Release Manager. After a release candidate has been available to the whole
community for testing for at least a week without any additional problems being
reported or significant changes being committed, the branch can be designated as
the final release version.</p>
first version that has undergone testing by the developers and has shown no
problems that must be fixed before release. New versions should be made at about
2-weekly intervals after the <tt>-pre1</tt> release, and designated as either
pre-release or release candidate versions by the Release Manager. Release
candidates are announced to the whole community via the tech-talk mailing list,
pre-releases are announced to to the developers via the core-talk list. After a
release candidate has been available for 2 weeks without any new problems being
reported or major changes having to be committed, the final release can be
made.</p>
<h3>Roles</h3>
@@ -77,7 +78,7 @@ the final release version.</p>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Email all developers about the upcoming release and ask for a list
of remaining jobs that must be finished.</td>
of remaining tasks that must be finished.</td>
</tr>
<tr>
<td>&nbsp;</td>
@@ -110,7 +111,7 @@ the final release version.</p>
<tr>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Review and update this document for the upcoming release.</td>
<td>Review and update this checklist for the upcoming release.</td>
</tr>
<tr>
<td>&nbsp;</td>
@@ -125,6 +126,7 @@ the final release version.</p>
<tr>
<td>&nbsp;</td>
<td>Release Manager</td>
<!-- Submodules... -->
<td>Edit and commit changes to the EPICS version number file
configure/CONFIG_BASE_VERSION.</td>
</tr>
@@ -134,37 +136,35 @@ the final release version.</p>
<td>Tag the module in Git using these tag conventions:
<ul>
<li>
<tt>R3.16.1-pre<i>n</i></tt>
<tt>R7.1.1-pre<i>n</i></tt>
&mdash; pre-release tag
</li>
<li>
<tt>R3.16.1-rc<i>n</i></tt>
<tt>R7.1.1-rc<i>n</i></tt>
&mdash; release candidate tag
</li>
</ul>
<blockquote><tt>
cd base-3.16<br />
git tag -m 'ANJ: Tagged for 3.16.1-rc1' R3.16.1-rc1
cd base-7.1<br />
git tag -m 'ANJ: Tagged for 7.1.1-rc1' R7.1.1-rc1
</tt></blockquote>
</td>
Note that submodules must <em>not</em> be tagged with the version used
for the top-level, they each have their own separate version numbers
that are only tagged at the final release.</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Export the tagged version into a tarfile. This command generates a
gzipped tarfile directly from the repository, excluding those files and
directories needed only for continuous integration:
<td>Export the tagged version into a tarfile. The <tt>make-tar.sh</tt>
script generates a gzipped tarfile directly from the tag, excluding the
files and directories that are only used for continuous integration:
<blockquote><tt>
cd base-3.16<br />
git archive
--prefix=base-3.16.1-rc1/
--output=../base-3.16.1-rc1.tar.gz
R3.16.1-rc1
configure documentation LICENSE Makefile README src startup
cd base-7.1<br />
.ci/make-tar.sh R7.1.1-rc1 base-7.1.1-rc1.tar.gz base-7.1.1-rc1/
</tt></blockquote>
Create a GPG signature file of the tarfile as follows:
<blockquote><tt>
gpg --armor --sign --detach-sig base-3.16.1-rc1.tar.gz
gpg --armor --sign --detach-sig base-7.1.1-rc1.tar.gz
</tt></blockquote>
</td>
</tr>
@@ -177,8 +177,9 @@ the final release version.</p>
<tr>
<td>&nbsp;</td>
<td>Website Manager</td>
<td>If necessary recreate the tarfile following the instructions above.
Copy the tar file to the Base download area of the website</td>
<td>Copy the tarfile and its signature to the Base download area of the
website and add the new files to the website Base download index
page.</td>
</tr>
<tr>
<td>&nbsp;</td>
@@ -195,11 +196,6 @@ the final release version.</p>
versions should use the page and URL for the final release version
number.</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>Website Manager</td>
<td>Add the new tar file to the website Base download index page.</td>
</tr>
<tr>
<th colspan="3">Testing</th>
</tr>
@@ -235,7 +231,7 @@ the final release version.</p>
<td>&nbsp;</td>
<td>Application Developers</td>
<td>Build external applications against this version of Base on all
available platforms and test as appropriate. Application code changes
available platforms and test as appropriate. Application code changes
may be necessary where the EPICS Base APIs have been modified.</td>
</tr>
<tr>
@@ -258,8 +254,8 @@ the final release version.</p>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Obtain a positive <q>Ok to release</q> from all platform developers
once a release candidate version has gone a whole week without any
issues being reported.</td>
once a release candidate version has gone for 2 weeks without any major
new issues being reported.</td>
</tr>
<tr>
<th colspan="3">Creating the final release version</th>
@@ -275,28 +271,24 @@ the final release version.</p>
<td>Release Manager</td>
<td>Tag the module in Git:
<blockquote><tt>
cd base-3.16<br />
git tag -m 'ANJ: Tagged for 3.16.1' R3.16.1</i>
cd base-7.1<br />
git tag -m 'ANJ: Tagged for 7.1.1' R7.1.1</i>
</tt></blockquote>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Export the tagged version into a tarfile. This command generates a
gzipped tarfile directly from the repository, excluding those files and
directories needed only for continuous integration:
<td>Export the tagged version into a tarfile. The <tt>make-tar.sh</tt>
script generates a gzipped tarfile directly from the tag, excluding the
files and directories that are only used for continuous integration:
<blockquote><tt>
cd base-3.16<br />
git archive
--prefix=base-3.16.1/
--output=../base-3.16.1.tar.gz
R3.16.1
configure documentation LICENSE Makefile README src startup
cd base-7.1<br />
.ci/make-tar.sh R7.1.1 base-7.1.1.tar.gz base-7.1.1/
</tt></blockquote>
Create a GPG signature file of the tarfile as follows:
<blockquote><tt>
gpg --armor --sign --detach-sig base-3.16.1.tar.gz
gpg --armor --sign --detach-sig base-7.1.1.tar.gz
</tt></blockquote>
</td>
</tr>
@@ -309,7 +301,8 @@ the final release version.</p>
<tr>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Upload the release tar file to the Launchpad download area.</td>
<td>Copy the tarfile and its signature to the Base download area of the
website.</td>
</tr>
<tr>
<td>&nbsp;</td>

View File

@@ -44,11 +44,15 @@ DIRS += $(subst /Makefile,,$(wildcard $(addsuffix /Makefile, $(SUBMODULES))))
include $(TOP)/configure/RULES_DIRS
# Ensure that RELEASE.local exists before doing anything else
all host $(DIRS) $(ARCHS) $(ACTIONS) $(dirActionTargets) $(dirArchTargets) \
$(dirActionArchTargets) $(actionArchTargets): | RELEASE.local
INSTALL_LOCATION_ABS := $(abspath $(INSTALL_LOCATION))
RELEASE_LOCAL := RELEASE.$(EPICS_HOST_ARCH).local
RELEASE.local:
@echo EPICS_BASE = $(abspath $(INSTALL_LOCATION))> $@
# Ensure that RELEASE.<host>.local exists before doing anything else
all host $(DIRS) $(ARCHS) $(ACTIONS) $(dirActionTargets) $(dirArchTargets) \
$(dirActionArchTargets) $(actionArchTargets): | $(RELEASE_LOCAL)
$(RELEASE_LOCAL):
$(ECHO) Creating $@, EPICS_BASE = $(INSTALL_LOCATION_ABS)
@echo EPICS_BASE = $(INSTALL_LOCATION_ABS)> $@
realclean:
$(RM) RELEASE.local
$(RM) $(RELEASE_LOCAL)

View File

@@ -1,13 +1,12 @@
# RELEASE - Location of external support modules
#
# IF YOU MAKE ANY CHANGES to this file you must subsequently
# do a "gnumake rebuild" in this application's top level
# directory.
# IF YOU CHANGE ANY PATHS in this file or make API changes to
# any modules it refers to, you should do a "make rebuild" in
# this application's top level directory.
#
# The build process does not check dependencies against files
# that are outside this application, thus you should do a
# "gnumake rebuild" in the top level directory after EPICS_BASE
# or any other external module pointed to below is rebuilt.
# The EPICS build process does not check dependencies against
# any files from outside the application, so it is safest to
# rebuild it completely if any modules it depends on change.
#
# Host- or target-specific settings can be given in files named
# RELEASE.$(EPICS_HOST_ARCH).Common
@@ -15,7 +14,7 @@
# RELEASE.$(EPICS_HOST_ARCH).$(T_A)
#
# This file is parsed by both GNUmake and an EPICS Perl script,
# so it can ONLY contain definititions of paths to other support
# so it may ONLY contain definititions of paths to other support
# modules, variable definitions that are used in module paths,
# and include statements that pull in other RELEASE files.
# Variables may be used before their values have been set.
@@ -36,8 +35,8 @@ EPICS_BASE = _EPICS_BASE_
# other than EPICS_BASE:
#RULES = $(MODULES)/build-rules
# These allow developers to override the RELEASE variable settings
# without having to modify the configure/RELEASE file itself.
# These lines allow developers to override these RELEASE settings
# without having to modify this file directly.
-include $(TOP)/../RELEASE.local
-include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local
-include $(TOP)/configure/RELEASE.local

View File

@@ -43,16 +43,16 @@ sub readReleaseFiles {
# Parse a configure/RELEASE* file and anything it includes
#
sub readRelease {
my ($file, $Rmacros, $Rapps, $Rdone) = @_;
# $Rmacros and $Rdone are hash-refs, $Rapps an array-ref
my ($file, $Rmacros, $Rapps, $Ractive) = @_;
# $Rmacros and $Ractive are hash-refs, $Rapps an array-ref
if (exists $Rdone->{$file}) {
if ($Ractive->{$file} > 0) {
die "Release.pm: Recursive loop found in RELEASE files,\n" .
"discovered in $file\n";
}
open(my $IN, '<', $file) or croak "Can't open $file: $!\n";
$Rdone->{$file}++;
$Ractive->{$file}++;
while (<$IN>) {
chomp;
s/ \r $//x; # Shouldn't need this, but sometimes...
@@ -77,11 +77,12 @@ sub readRelease {
my ($op, $path) = m/^ \s* (-? include) \s+ (.*)/x;
$path = expandMacros($path, $Rmacros);
if (-e $path) {
&readRelease($path, $Rmacros, $Rapps, $Rdone);
&readRelease($path, $Rmacros, $Rapps, $Ractive);
} elsif ($op eq "include") {
carp "EPICS/Release.pm: Include file '$path' not found\n";
}
}
$Ractive->{$file}--;
close $IN;
}