diff --git a/ci/travis-build.sh b/ci/travis-build.sh
index a3ca3fd16..2ee5d652f 100644
--- a/ci/travis-build.sh
+++ b/ci/travis-build.sh
@@ -17,7 +17,7 @@ ticker() {
CACHEKEY=1
-EPICS_HOST_ARCH=`sh startup/EpicsHostArch`
+EPICS_HOST_ARCH=`perl src/tools/EpicsHostArch.pl`
[ -e configure/os/CONFIG_SITE.Common.linux-x86 ] || die "Wrong location: $PWD"
diff --git a/configure/CONFIG b/configure/CONFIG
index 6fe6b9b55..f5ba0b780 100644
--- a/configure/CONFIG
+++ b/configure/CONFIG
@@ -20,11 +20,15 @@ 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)
-endif
#
+ifeq ($(origin EPICS_HOST_ARCH), undefined)
+ # Bootstrapping ...
+ EHA := $(firstword $(wildcard $(EPICS_BASE)/lib/perl/EpicsHostArch.pl \
+ $(TOP)/src/tools/EpicsHostArch.pl))
+ # NB: We use a simply expanded variable here for performance:
+ export EPICS_HOST_ARCH := $(shell perl $(EHA))
+ undefine EHA
+endif
-include $(CONFIG)/os/CONFIG_COMPAT
diff --git a/documentation/README.1st b/documentation/README.1st
index 462ac460a..7a6e77033 100644
--- a/documentation/README.1st
+++ b/documentation/README.1st
@@ -221,14 +221,11 @@
base/startup directory - contains scripts to set environment and path
- EpicsHostArch C shell script to set EPICS_HOST_ARCH env variable
- EpicsHostArch.pl Perl script to set EPICS_HOST_ARCH env variable
- Site.profile bourne shell script to set path and env variables
- Site.cshrc c shell script to set path and env variables
- borland.bat WIN32 bat file to set borland path and env variables
- cygwin.bat WIN32 bat file to set cygwin path and env variables
- win32.bat WIN32 bat file to set path and env variables
- win32-debug.bat WIN32 debug bat file to set debug path and env variables
+ EpicsHostArch Shell script to set EPICS_HOST_ARCH env variable
+ unix.csh C shell script to set path and env variables
+ unix.sh Bourne shell script to set path and env variables
+ win32.bat Bat file example to configure win32-x86 target
+ windows.bat Bat file example to configure windows-x64 target
base/configure directory - contains build definitions and rules
diff --git a/documentation/README.darwin.html b/documentation/README.darwin.html
index cbc290178..dd11ce857 100644
--- a/documentation/README.darwin.html
+++ b/documentation/README.darwin.html
@@ -21,7 +21,7 @@ of my Bash login script (~/.bash_login):
#
EPICS_BASE="${HOME}/src/EPICS/base"
EPICS_EXTENSIONS="${HOME}/src/EPICS/extensions"
-. "${EPICS_BASE}"/startup/Site.profile
+. "${EPICS_BASE}"/startup/unix.sh
diff --git a/documentation/README.html b/documentation/README.html
index a8a572372..98ec1b107 100644
--- a/documentation/README.html
+++ b/documentation/README.html
@@ -230,14 +230,11 @@
base/startup directory - contains scripts to set environment and path
- EpicsHostArch C shell script to set EPICS_HOST_ARCH env variable
- EpicsHostArch.pl Perl script to set EPICS_HOST_ARCH env variable
- Site.profile bourne shell script to set path and env variables
- Site.cshrc c shell script to set path and env variables
- borland.bat WIN32 bat file to set borland path and env variables
- cygwin.bat WIN32 bat file to set cygwin path and env variables
- win32.bat WIN32 bat file to set path and env variables
- win32-debug.bat WIN32 debug bat file to set debug path and env variables
+ EpicsHostArch Shell script to set EPICS_HOST_ARCH env variable
+ unix.csh C shell script to set path and env variables
+ unix.sh Bourne shell script to set path and env variables
+ win32.bat Bat file example to configure win32-x86 target
+ windows.bat Bat file example to configure windows-x64 target
base/configure directory - contains build definitions and rules
diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html
index bb7dd93da..900dc5fb5 100644
--- a/documentation/RELEASE_NOTES.html
+++ b/documentation/RELEASE_NOTES.html
@@ -16,6 +16,45 @@ Base-3.15 series or to EPICS 7.
+Cleanup of startup directory
+
+The files in the startup directory have not been maintained in recent years
+and have grown crufty (technical term). This release includes the following
+updates to these files:
+
+
+
+- The Perl EpicsHostArch.pl script has been rewritten, and support
+for a few previously missing host architectures has been added to it.
+
+- The EpicsHostArch.pl script has also been moved into the standard
+src/tools directory, from where it will be installed into
+lib/perl. In this new location it is no longer executable, so it must
+be run by the perl executable.
+
+- The build system has been adjusted to look for EpicsHostArch.pl in
+both places if the EPICS_HOST_ARCH environment variable has not been
+set at build-time.
+
+- Sites that used the original Perl script to set EPICS_HOST_ARCH as
+part of their standard environment will need to adjust their scripts when they
+upgrade to this release.
+
+- The EpicsHostArch shell script has been replaced with a wrapper
+routine that calls the Perl EpicsHostArch.pl script. Sites that rely on
+this script to set EPICS_HOST_ARCH should consider switching to the
+Perl script instead.
+
+- The Site.cshrc and Site.profile files have been renamed to
+unix.csh and unix.sh, respectively.
+
+- The existing win32.bat file has been cleaned up and a new
+windows.bat file added for 64-bit targets. The contents of these files
+should be seen as examples, don't uncomment or install parts for software that
+you don't explicitly know that you need.
+
+
+
Recent Apple XCode Build Issues
The latest version of XCode will not compile calls to system() or
diff --git a/src/tools/EpicsHostArch.pl b/src/tools/EpicsHostArch.pl
new file mode 100644
index 000000000..e8e49bc5e
--- /dev/null
+++ b/src/tools/EpicsHostArch.pl
@@ -0,0 +1,55 @@
+#!/usr/bin/env perl
+#*************************************************************************
+# Copyright (c) 2018 UChicago Argonne LLC, as Operator of Argonne
+# National Laboratory.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in file LICENSE that is included with this distribution.
+#*************************************************************************
+
+# Returns an architecture name for EPICS_HOST_ARCH that should be
+# appropriate for the CPU that this version of Perl was built for.
+# Any arguments to the program will be appended with separator '-'
+# to allow flags like -gnu -debug and/or -static to be added.
+
+# Before Base has been built, use a command like this:
+# bash$ export EPICS_HOST_ARCH=`perl src/tools/EpicsHostArch.pl`
+#
+# If Base is already built, use
+# tcsh% setenv EPICS_HOST_ARCH `perl base/lib/perl/EpicsHostArch.pl`
+
+# If your architecture is not recognized by this script, please send
+# the output from running 'perl --version' to the EPICS tech-talk
+# mailing list to have it added.
+
+use strict;
+
+use Config;
+use POSIX;
+
+print join('-', HostArch(), @ARGV), "\n";
+
+sub HostArch {
+ my $arch = $Config{archname};
+ for ($arch) {
+ return 'linux-x86_64' if m/^x86_64-linux/;
+ return 'linux-x86' if m/^i[3-6]86-linux/;
+ return 'linux-arm' if m/^arm-linux/;
+ return 'windows-x64' if m/^MSWin32-x64/;
+ return 'win32-x86' if m/^MSWin32-x86/;
+ return "cygwin-x86_64" if m/^x86_64-cygwin/;
+ return "cygwin-x86" if m/^i[3-6]86-cygwin/;
+ return 'solaris-sparc' if m/^sun4-solaris/;
+ return 'solaris-x86' if m/^i86pc-solaris/;
+
+ my ($kernel, $hostname, $release, $version, $cpu) = uname;
+ if (m/^darwin/) {
+ for ($cpu) {
+ return 'darwin-x86' if m/^(i386|x86_64)/;
+ return 'darwin-ppc' if m/Power Macintosh/;
+ }
+ die "$0: macOS CPU type '$cpu' not recognized\n";
+ }
+
+ die "$0: Architecture '$arch' not recognized\n";
+ }
+}
diff --git a/src/tools/Makefile b/src/tools/Makefile
index bcf12700d..c54470364 100644
--- a/src/tools/Makefile
+++ b/src/tools/Makefile
@@ -16,6 +16,9 @@ PERL_MODULES += EPICS/Path.pm
PERL_MODULES += EPICS/Release.pm
PERL_MODULES += EPICS/Getopts.pm
+# This goes into lib/perl, not bin/
+PERL_MODULES += EpicsHostArch.pl
+
PERL_SCRIPTS += convertRelease.pl
PERL_SCRIPTS += cvsclean.pl
PERL_SCRIPTS += dos2unix.pl
diff --git a/startup/EpicsHostArch b/startup/EpicsHostArch
old mode 100755
new mode 100644
index 8861ac56c..de7f3d525
--- a/startup/EpicsHostArch
+++ b/startup/EpicsHostArch
@@ -1,84 +1,21 @@
#!/bin/sh
-#*************************************************************************
-# Copyright (c) 2011 UChicago Argonne LLC, 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 is distributed subject to a Software License Agreement found
-# in file LICENSE that is included with this distribution.
-#*************************************************************************
-#
-# EpicsHostArch - returns the Epics host architecture suitable
-# for assigning to the EPICS_HOST_ARCH variable
+# Script to find and run the Perl EpicsHostArch.pl script.
-if [ "x${1}" != "x" ]
-then
- suffix="-"${1}
-else
- suffix=""
-fi
+# This script is provided for backwards-compatibility only and may be
+# dropped from future releases of Base. Please adjust callers to run
+# the Perl version directly as this startup directory isn't copied to
+# INSTALL_LOCATION by the EPICS build system.
-sysname=`uname`
+EHA=EpicsHostArch.pl
-case $sysname in
- Linux )
- os=linux
- cpu=`uname -m`
- case $cpu in
- i386 | i486 | i586 | i686 )
- cpu=x86 ;;
- x86_64 )
- ;; # $cpu is correct
- armv6l | armv7l )
- cpu=arm ;;
- esac
- echo ${os}-${cpu}${suffix}
- ;;
- Darwin )
- os=darwin
- cpu=`uname -m`
- case $cpu in
- "Power Macintosh")
- cpu=ppc ;;
- i386 | x86_64 )
- cpu=x86 ;;
- esac
- echo ${os}-${cpu}${suffix}
- ;;
- SunOS )
- version=`uname -r | sed '1s/^\([0-9]*\).*$/\1/'`
- if [ ${version} -ge 5 ]; then
- os=solaris
- else
- os=sun4
- fi
- cpu=`uname -m`
- case $cpu in
- sun4*)
- cpu=sparc
- ;;
- i86pc)
- cpu=x86
- ;;
- esac
- echo ${os}-${cpu}${suffix}
- ;;
- * )
- sysname=`uname -o`
- case $sysname in
- Cygwin )
- os=cygwin
- cpu=`uname -m`
- case $cpu in i386 | i486 | i586 | i686 )
- cpu=x86
- ;;
- esac
- echo ${os}-${cpu}${suffix}
- ;;
- * )
- echo unsupported
- ;;
- esac
- ;;
-esac
+cd "$(dirname "$0")/.."
+# Perl script will be installed into lib/perl
+[[ -f lib/perl/$EHA ]] && exec perl lib/perl/$EHA $*
+
+# If Base hasn't been built yet, use the source Luke
+[[ -f src/tools/$EHA ]] && exec perl src/tools/$EHA $*
+
+# Die with an error message
+echo "$0: Can't find $EHA" >&2
+exit 1
diff --git a/startup/EpicsHostArch.pl b/startup/EpicsHostArch.pl
deleted file mode 100755
index 09f7ffddd..000000000
--- a/startup/EpicsHostArch.pl
+++ /dev/null
@@ -1,47 +0,0 @@
-eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
- if $running_under_some_shell; # EpicsHostArch.pl
-#*************************************************************************
-# Copyright (c) 2011 UChicago Argonne LLC, 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 is distributed subject to a Software License Agreement found
-# in file LICENSE that is included with this distribution.
-#*************************************************************************
-
-# Returns the Epics host architecture suitable
-# for assigning to the EPICS_HOST_ARCH variable
-
-use Config;
-use POSIX;
-
-$suffix="";
-$suffix="-".$ARGV[0] if ($ARGV[0] ne "");
-
-$EpicsHostArch = GetEpicsHostArch();
-print "$EpicsHostArch$suffix";
-
-sub GetEpicsHostArch { # no args
- $arch=$Config{'archname'};
- if ($arch =~ /sun4-solaris/) { return "solaris-sparc";
- } elsif ($arch =~ m/i86pc-solaris/) { return "solaris-x86";
- } elsif ($arch =~ m/i[3-6]86-linux/){ return "linux-x86";
- } elsif ($arch =~ m/x86_64-linux/) { return "linux-x86_64";
- } elsif ($arch =~ m/arm-linux/) { return "linux-arm";
- } elsif ($arch =~ m/MSWin32-x86/) { return "win32-x86";
- } elsif ($arch =~ m/MSWin32-x64/) { return "windows-x64";
- } elsif ($arch =~ m/cygwin/) {
- my($kernel, $hostname, $release, $version, $cpu) = POSIX::uname();
- if ($cpu =~ m/x86_64/) { return "cygwin-x86_64"; }
- return "cygwin-x86";
- } elsif ($arch =~ m/darwin/) {
- my($kernel, $hostname, $release, $version, $cpu) = POSIX::uname();
- if ($cpu =~ m/Power Macintosh/) { return "darwin-ppc"; }
- elsif ($cpu =~ m/i386/) { return "darwin-x86"; }
- elsif ($cpu =~ m/x86_64/) { return "darwin-x86"; }
- else { return "unsupported"; }
- } else { return "unsupported"; }
-}
-
-#EOF EpicsHostArch.pl
-
diff --git a/startup/Site.cshrc b/startup/Site.cshrc
deleted file mode 100755
index 23453cb91..000000000
--- a/startup/Site.cshrc
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/bin/csh -f
-#*************************************************************************
-# 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.
-#*************************************************************************
-# Site-specific EPICS environment settings
-#
-# sites should modify these definitions
-
-# Location of epics base
-if ( ! $?EPICS_BASE ) then
- set EPICS_BASE=/usr/local/epics/base
-endif
-
-# Location of epics extensions
-if ( ! $?EPICS_EXTENSIONS ) then
- setenv EPICS_EXTENSIONS /usr/local/epics/extensions
-endif
-
-# Postscript printer definition needed by some extensions (eg medm, dp, dm, ...)
-if ( ! $?PSPRINTTER ) then
- setenv PSPRINTER lp
-endif
-
-# Needed only by medm extension
-#setenv EPICS_DISPLAY_PATH
-# Needed only by medm extension
-setenv BROWSER firefox
-
-# Needed only by orbitscreen extension
-if ( ! $?ORBITSCREENHOME ) then
- setenv ORBITSCREENHOME $EPICS_EXTENSIONS/src/orbitscreen
-endif
-
-# Needed only by adt extension
-if ( ! $?ADTHOME ) then
- setenv ADTHOME /usr/local/oag/apps/src/appconfig/adt
- echo $ADTHOME
-endif
-
-# Needed only by ar extension (archiver)
-setenv EPICS_AR_PORT 7002
-
-# Needed for java extensions
-if ( $?CLASSPATH ) then
- setenv CLASSPATH "${CLASSPATH}:${EPICS_EXTENSIONS}/javalib"
-else
- setenv CLASSPATH "${EPICS_EXTENSIONS}/javalib"
-endif
-
-# Allow private versions of extensions without a bin subdir
-if ( $?EPICS_EXTENSIONS_PVT ) then
- set path = ( $path $EPICS_EXTENSIONS_PVT)
-endif
-
-##################################################################
-
-# Start of set R3.14 environment variables
-
-setenv EPICS_HOST_ARCH `$EPICS_BASE/startup/EpicsHostArch.pl`
-
-# Allow private versions of base
-if ( $?EPICS_BASE_PVT ) then
- if ( -e $EPICS_BASE_PVT/bin/$EPICS_HOST_ARCH ) then
- set path = ( $path $EPICS_BASE_PVT/bin/$EPICS_HOST_ARCH)
- endif
-endif
-
-# Allow private versions of extensions
-if ( $?EPICS_EXTENSIONS_PVT ) then
- if ( -e $EPICS_EXTENSIONS_PVT/bin/$EPICS_HOST_ARCH ) then
- set path = ( $path $EPICS_EXTENSIONS_PVT/bin/$EPICS_HOST_ARCH)
- endif
-endif
-set path = ( $path $EPICS_EXTENSIONS/bin/$EPICS_HOST_ARCH )
-
-# End of set R3.14 environment variables
-##################################################################
-
-
-## Start of set pre R3.14 environment variables
-#
-## Time service:
-## EPICS_TS_MIN_WEST the local time difference from GMT.
-#setenv EPICS_TS_MIN_WEST 360
-#
-#if ( -e /usr/local/etc/setup/HostArch.pl ) then
-# setenv HOST_ARCH `/usr/local/etc/setup/HostArch.pl`
-#else
-# setenv HOST_ARCH `/usr/local/epics/startup/HostArch.pl`
-#endif
-#
-## Allow private versions of extensions
-#if ( $?EPICS_EXTENSIONS_PVT ) then
-# if ( -e $EPICS_EXTENSIONS_PVT/bin/$HOST_ARCH ) then
-# set path = ( $path $EPICS_EXTENSIONS_PVT/bin/$HOST_ARCH)
-# endif
-# # Needed if shared extension libraries are built
-# if ( -e $EPICS_EXTENSIONS_PVT/lib/$HOST_ARCH ) then
-# if ( $?LD_LIBRARY_PATH ) then
-# setenv LD_LIBRARY_PATH "${LD_LIBRARY_PATH}:${EPICS_EXTENSIONS_PVT}/lib/${HOST_ARCH}"
-# else
-# setenv LD_LIBRARY_PATH "${EPICS_EXTENSIONS_PVT}/lib/${HOST_ARCH}"
-# endif
-# endif
-#endif
-#
-#set path = ( $path $EPICS_EXTENSIONS/bin/$HOST_ARCH )
-## Needed if shared extension libraries are built
-#setenv LD_LIBRARY_PATH "${LD_LIBRARY_PATH}:${EPICS_EXTENSIONS}/lib/${HOST_ARCH}"
-
-# End of set pre R3.14 environment variables
-##################################################################
diff --git a/startup/Site.profile b/startup/Site.profile
deleted file mode 100755
index 5cb9b0273..000000000
--- a/startup/Site.profile
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/bin/sh
-#*************************************************************************
-# 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.
-#*************************************************************************
-# Site-specific EPICS environment settings
-#
-# sites should modify these definitions
-
-# Location of epics base
-if [ -z "${MY_EPICS_BASE}" ] ; then
- MY_EPICS_BASE=/usr/local/epics/base
-fi
-
-# Location of epics extensions (medm, msi, etc.)
-if [ -z "${EPICS_EXTENSIONS}" ] ; then
- EPICS_EXTENSIONS=/usr/local/epics/extensions
-fi
-
-# Postscript printer definition needed by some extensions (eg medm, dp, dm, ...)
-if [ -z "${PSPRINTER}" ] ; then
- export PSPRINTER=lp
-fi
-
-#Needed only by the idl and ezcaIDL extensions.
-#export EPICS_EXTENSIONS
-
-# Needed only by medm extension
-#export EPICS_DISPLAY_PATH=/path/to/adl/files
-export BROWSER=firefox
-
-# Needed only by orbitscreen extension
-#if [ -z "${ORBITSCREENHOME}" ] ; then
-# export "ORBITSCREENHOME=${EPICS_EXTENSIONS/src/orbitscreen}"
-#fi
-
-# Needed only by adt extension
-#if [ -z "${ADTHOME}" ] ; then
-# ADTHOME=
-# export ADTHOME
-#fi
-
-# Needed only by ar extension (archiver)
-#EPICS_AR_PORT=7002
-#export EPICS_AR_PORT
-
-# Needed for java extensions
-if [ -z "${CLASSPATH}" ] ; then
- CLASSPATH="${EPICS_EXTENSIONS}/javalib"
-else
- CLASSPATH="${CLASSPATH}:${EPICS_EXTENSIONS}/javalib"
-fi
-export CLASSPATH
-
-# Allow private versions of extensions without a bin subdir
-if [ -n "${EPICS_EXTENSIONS_PVT}" ] ; then
- PATH="${PATH}:${EPICS_EXTENSIONS_PVT}"
-fi
-
-#---------------------------------------------------------------
-# Start of set R3.14 environment variables
-#
-EPICS_HOST_ARCH=`"${MY_EPICS_BASE}"/startup/EpicsHostArch.pl`
-export EPICS_HOST_ARCH
-
-# Allow private versions of base
-if [ -n "${EPICS_BASE_PVT}" ] ; then
- if [ -d "${EPICS_BASE_PVT}/bin/${EPICS_HOST_ARCH}" ]; then
- PATH="${PATH}:${EPICS_BASE_PVT}/bin/${EPICS_HOST_ARCH}"
- fi
-fi
-
-# Allow private versions of extensions
-if [ -n "${EPICS_EXTENSIONS_PVT}" ] ; then
- if [ -d "${EPICS_EXTENSIONS_PVT}/bin/${EPICS_HOST_ARCH}" ]; then
- PATH="${PATH}:${EPICS_EXTENSIONS_PVT}/bin/${EPICS_HOST_ARCH}"
- fi
-fi
-PATH="${PATH}:${EPICS_EXTENSIONS}/bin/${EPICS_HOST_ARCH}"
-
-# End of set R3.14 environment variables
-
-#---------------------------------------------------------------
-#
-## Start of set pre R3.14 environment variables
-#
-## Time service:
-## EPICS_TS_MIN_WEST the local time difference from GMT.
-#EPICS_TS_MIN_WEST=360
-#export EPICS_TS_MIN_WEST
-#
-#HOST_ARCH=`"${MY_EPICS_BASE}"/startup/HostArch`
-#export HOST_ARCH
-#
-## Allow private versions of base
-#if [ -n "${EPICS_BASE_PVT}" ] ; then
-# if [ -d "${EPICS_BASE_PVT}/bin/${HOST_ARCH}" ]; then
-# PATH="${PATH}:${EPICS_BASE_PVT}/bin/${HOST_ARCH}"
-# fi
-#fi
-#
-## Allow private versions of extensions
-#if [ -n "${EPICS_EXTENSIONS_PVT}" ] ; then
-# if [ -d "${EPICS_EXTENSIONS_PVT}/bin/${HOST_ARCH}" ]; then
-# PATH="${PATH}:${EPICS_EXTENSIONS_PVT}/bin/${HOST_ARCH}"
-# fi
-#fi
-#
-#PATH="${PATH}:${EPICS_EXTENSIONS}/lib/${HOST_ARCH}"
-#
-# End of set pre R3.14 environment variables
-
-#---------------------------------------------------------------
diff --git a/startup/cygwin.bat b/startup/cygwin.bat
deleted file mode 100755
index ff75b5335..000000000
--- a/startup/cygwin.bat
+++ /dev/null
@@ -1,122 +0,0 @@
-@ECHO OFF
-REM *************************************************************************
-REM Copyright (c) 2002 The University of Chicago, as Operator of Argonne
-REM National Laboratory.
-REM Copyright (c) 2002 The Regents of the University of California, as
-REM Operator of Los Alamos National Laboratory.
-REM EPICS BASE Versions 3.13.7
-REM and higher are distributed subject to a Software License Agreement found
-REM in file LICENSE that is included with this distribution.
-REM *************************************************************************
-REM
-REM Site-specific EPICS environment settings
-REM
-REM sites should modify these definitions
-
-REM ======================================================
-REM ====== REQUIRED ENVIRONMENT VARIABLES FOLLOW ======
-REM ======================================================
-
-REM ======================================================
-REM ---------------- WINDOWS ---------------------------
-REM ======================================================
-REM ----- WIN95 -----
-REM set PATH=C:\WINDOWS;C:\WINDOWS\COMMAND
-REM ----- WINNT, WIN2000 -----
-REM set PATH=C:\WINNT;C:\WINNT\SYSTEM32
-REM ----- WINXP, Vista, Windows 7 -----
-set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\Wbem
-
-REM ======================================================
-REM ---------------- make and perl ---------------------
-REM ======================================================
-
-REM --------------- ActiveState perl -------------------
-set PATH=C:\Perl\bin;%PATH%
-
-REM --------------- mingw make ------------------------
-REM set PATH=C:\mingw-make\bin;%PATH%
-REM set PATH=C:\mingw-make82-3\bin;%PATH%
-
-REM --------------- gnuwin32 make ----------------------
-set PATH=C:\gnuwin32\bin;%PATH%
-
-REM ======================================================
-REM ---------------- cygwin tools ------------------------
-REM ======================================================
-REM (make & perl if above perl and make are REMs)
-REM Dont use cygwin GNU make and Perl!
-REM cygwin contains tk/tcl, vim, perl, and many unix tools
-REM need grep from here NOT from cvs directory
-set PATH=%PATH%;.;..
-set PATH=%PATH%;c:\cygwin\bin
-
-REM ======================================================
-REM --------------- EPICS --------------------------------
-REM ======================================================
-set EPICS_HOST_ARCH=cygwin-x86
-set PATH=%PATH%;G:\epics\base\bin\%EPICS_HOST_ARCH%
-set PATH=%PATH%;G:\epics\extensions\bin\%EPICS_HOST_ARCH%
-
-REM ======================================================
-REM ------- OPTIONAL ENVIRONMENT VARIABLES FOLLOW --------
-REM ======================================================
-
-REM ======================================================
-REM ----------------- remote CVS -------------------------
-REM ======================================================
-REM set CVS_RSH=c:/cygwin/bin/ssh.exe
-REM set CVSROOT=:ext:jba@aps.anl.gov:/usr/local/epicsmgr/cvsroot
-REM set HOME=c:/users/%USERNAME%
-REM set HOME=c:/users/jba
-
-REM ======================================================
-REM ------------------- Bazaar ---------------------------
-REM ======================================================
-set PATH=%PATH%;C:\Program files\Bazaar
-
-REM ======================================================
-REM ----------------- GNU make flags ---------------------
-REM ======================================================
-set MAKEFLAGS=-w
-
-REM ======================================================
-REM -------------- vim (use cygwin vim ) -----------------
-REM ======================================================
-REM HOME needed by vim to write .viminfo file.
-REM VIM needed by vim to find _vimrc file.
-REM set VIM=c:\cygwin
-
-REM ======================================================
-REM --------------- Epics Channel Access -----------------
-REM Modify and uncomment the following lines
-REM to override the base/configure/CONFIG_ENV defaults
-REM ======================================================
-REM set EPICS_CA_ADDR_LIST=n.n.n.n n.n.n.n
-REM set EPICS_CA_AUTO_ADDR_LIST=YES
-
-REM set EPICS_CA_CONN_TMO=30.0
-REM set EPICS_CA_BEACON_PERIOD=15.0
-REM set EPICS_CA_REPEATER_PORT=5065
-REM set EPICS_CA_SERVER_PORT=5064
-REM set EPICS_TS_MIN_WEST=420
-
-REM ======================================================
-REM --------------- JAVA ---------------------------------
-REM ======================================================
-REM Needed for java extensions
-REM set CLASSPATH=G:\epics\extensions\javalib
-REM set PATH=%PATH%;C:\j2sdk1.4.1_01\bin
-REM set CLASSPATH=%CLASSPATH%;C:\j2sdk1.4.1_01\lib\tools.jar
-
-REM ======================================================
-REM --------------- Exceed -------------------------------
-REM Needed for X11 extensions
-REM ======================================================
-REM set EX_VER=7.10
-REM set EX_VER=12.00
-REM set EX_VER=14.00
-REM set PATH=%PATH%;C:\Exceed%EX_VER%\XDK\
-REM set PATH=%PATH%;C:\Program Files\Hummingbird\Connectivity\%EX_VER%\Exceed\
-
-
diff --git a/startup/unix.csh b/startup/unix.csh
new file mode 100644
index 000000000..788a639e6
--- /dev/null
+++ b/startup/unix.csh
@@ -0,0 +1,96 @@
+#*************************************************************************
+# 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.
+#*************************************************************************
+#
+# Site-specific EPICS environment settings
+#
+# Attempts to set EPICS_HOST_ARCH. Optionally, adds the EPICS Base
+# install host architecture bin directory to PATH.
+#
+
+#-----------------------------------------------------------------------
+# Site serviceable parts (These definitions may be modified)
+#-----------------------------------------------------------------------
+
+# Automatically set up the environment when possible ("yes" or "no").
+# If set to yes, as much of the environment will be set up as possible.
+# If set to no, just the minimum environment will be set up. More
+# specific _auto_* definitions take precedence over this definition.
+set _auto=no
+
+# Automatically append to PATH ("yes" or "no"). If set to yes, the
+# EPICS Base install host architecture bin directory will be added to
+# PATH if possible. If set to no, the bin directory will not be added
+# to PATH.
+set _auto_path_append=$_auto
+
+# The program used to run Perl scripts (pathname).
+set _perl_prog=perl
+
+# The EPICS host architecture specification for EPICS_HOST_ARCH
+# (-[-] as defined in configure/CONFIG_SITE). If
+# nonempty, the value will be used as the value of EPICS_HOST_ARCH. If
+# empty, an attempt will be made to automatically determine the value
+# with EpicsHostArch.pl.
+set _epics_host_arch=
+
+# The install location of EPICS Base (pathname). If nonempty, the
+# EpicsHostArch.pl script from it, if it exists, will be used to
+# determine EPICS_HOST_ARCH. If nonempty and EPICS_HOST_ARCH was
+# determined successfully, it will be used to add the host architecture
+# bin directory to PATH if _auto_path_append is yes.
+set _epics_base=
+
+# The source location of EPICS Base (pathname). If nonempty, the
+# EpicsHostArch.pl script from it, if it exists and _epics_base is empty
+# or it did not exist in the _epics_base location, will be used to
+# determine EPICS_HOST_ARCH.
+set _epics_base_src=
+
+#-----------------------------------------------------------------------
+# Internal parts (There is typically no need to modify these)
+#-----------------------------------------------------------------------
+
+# Define the possible locations of EpicsHostArch.pl
+set _epics_host_arch_pl=
+set _src_epics_host_arch_pl=
+if ("$_epics_base" != '') then
+ set _epics_host_arch_pl="$_epics_base/lib/perl/EpicsHostArch.pl"
+endif
+if ("$_epics_base_src" != '') then
+ set _src_epics_host_arch_pl="$_epics_base_src/src/tools/EpicsHostArch.pl"
+endif
+
+# Set the EPICS host architecture specification
+if ("$_epics_host_arch" != '') then
+ setenv EPICS_HOST_ARCH "$_epics_host_arch"
+else if (-e "$_epics_host_arch_pl") then
+ set _epics_host_arch=`"$_perl_prog" "$_epics_host_arch_pl"`
+ setenv EPICS_HOST_ARCH "$_epics_host_arch"
+else if (-e "$_src_epics_host_arch_pl") then
+ set _epics_host_arch=`"$_perl_prog" "$_src_epics_host_arch_pl"`
+ setenv EPICS_HOST_ARCH "$_epics_host_arch"
+endif
+
+# Add the EPICS Base host architecture bin directory to PATH
+if ("$_auto_path_append" == yes) then
+ if ("$_epics_base" != '' && "$_epics_host_arch" != '') then
+ setenv PATH "${PATH}:$_epics_base/bin/$_epics_host_arch"
+ endif
+endif
+
+# Don't leak variables into the environment
+unset _auto
+unset _auto_path_append
+unset _perl_prog
+unset _epics_host_arch
+unset _epics_base
+unset _epics_base_src
+unset _epics_host_arch_pl
+unset _src_epics_host_arch_pl
diff --git a/startup/unix.sh b/startup/unix.sh
new file mode 100644
index 000000000..a8d8328ec
--- /dev/null
+++ b/startup/unix.sh
@@ -0,0 +1,100 @@
+#*************************************************************************
+# 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.
+#*************************************************************************
+#
+# Site-specific EPICS environment settings
+#
+# Attempts to set EPICS_HOST_ARCH. Optionally, adds the EPICS Base
+# install host architecture bin directory to PATH.
+#
+
+#-----------------------------------------------------------------------
+# Site serviceable parts (These definitions may be modified)
+#-----------------------------------------------------------------------
+
+# Automatically set up the environment when possible ("yes" or "no").
+# If set to yes, as much of the environment will be set up as possible.
+# If set to no, just the minimum environment will be set up. More
+# specific _auto_* definitions take precedence over this definition.
+_auto=no
+
+# Automatically append to PATH ("yes" or "no"). If set to yes, the
+# EPICS Base install host architecture bin directory will be added to
+# PATH if possible. If set to no, the bin directory will not be added
+# to PATH.
+_auto_path_append=$_auto
+
+# The program used to run Perl scripts (pathname).
+_perl_prog=perl
+
+# The EPICS host architecture specification for EPICS_HOST_ARCH
+# (-[-] as defined in configure/CONFIG_SITE). If
+# nonempty, the value will be used as the value of EPICS_HOST_ARCH. If
+# empty, an attempt will be made to automatically determine the value
+# with EpicsHostArch.pl.
+_epics_host_arch=
+
+# The install location of EPICS Base (pathname). If nonempty, the
+# EpicsHostArch.pl script from it, if it exists, will be used to
+# determine EPICS_HOST_ARCH. If nonempty and EPICS_HOST_ARCH was
+# determined successfully, it will be used to add the host architecture
+# bin directory to PATH if _auto_path_append is yes.
+_epics_base=
+
+# The source location of EPICS Base (pathname). If nonempty, the
+# EpicsHostArch.pl script from it, if it exists and _epics_base is empty
+# or it did not exist in the _epics_base location, will be used to
+# determine EPICS_HOST_ARCH.
+_epics_base_src=
+
+#-----------------------------------------------------------------------
+# Internal parts (There is typically no need to modify these)
+#-----------------------------------------------------------------------
+
+# Define the possible locations of EpicsHostArch.pl
+_epics_host_arch_pl=
+_src_epics_host_arch_pl=
+if [ -n "$_epics_base" ]; then
+ _epics_host_arch_pl="$_epics_base/lib/perl/EpicsHostArch.pl"
+fi
+if [ -n "$_epics_base_src" ]; then
+ _src_epics_host_arch_pl="$_epics_base_src/src/tools/EpicsHostArch.pl"
+fi
+
+# Set the EPICS host architecture specification
+if [ -n "$_epics_host_arch" ]; then
+ EPICS_HOST_ARCH=$_epics_host_arch
+ export EPICS_HOST_ARCH
+elif [ -e "$_epics_host_arch_pl" ]; then
+ _epics_host_arch=$("$_perl_prog" "$_epics_host_arch_pl")
+ EPICS_HOST_ARCH=$_epics_host_arch
+ export EPICS_HOST_ARCH
+elif [ -e "$_src_epics_host_arch_pl" ]; then
+ _epics_host_arch=$("$_perl_prog" "$_src_epics_host_arch_pl")
+ EPICS_HOST_ARCH=$_epics_host_arch
+ export EPICS_HOST_ARCH
+fi
+
+# Add the EPICS Base host architecture bin directory to PATH
+if [ "$_auto_path_append" = yes ]; then
+ if [ -n "$_epics_base" ] && [ -n "$_epics_host_arch" ]; then
+ PATH="$PATH:$_epics_base/bin/$_epics_host_arch"
+ export PATH
+ fi
+fi
+
+# Don't leak variables into the environment
+unset _auto
+unset _auto_path_append
+unset _perl_prog
+unset _epics_host_arch
+unset _epics_base
+unset _epics_base_src
+unset _epics_host_arch_pl
+unset _src_epics_host_arch_pl
diff --git a/startup/win32.bat b/startup/win32.bat
index af9155dd7..6652fc97c 100644
--- a/startup/win32.bat
+++ b/startup/win32.bat
@@ -1,147 +1,105 @@
-@ECHO OFF
-REM *************************************************************************
-REM Copyright (c) 2002 The University of Chicago, as Operator of Argonne
-REM National Laboratory.
-REM Copyright (c) 2002 The Regents of the University of California, as
-REM Operator of Los Alamos National Laboratory.
-REM EPICS BASE Versions 3.13.7
-REM and higher are distributed subject to a Software License Agreement found
-REM in file LICENSE that is included with this distribution.
-REM *************************************************************************
-REM
-REM Site-specific EPICS environment settings
-REM
-REM sites should modify these definitions
-
-REM ======================================================
-REM ====== REQUIRED ENVIRONMENT VARIABLES FOLLOW ======
-REM ======================================================
-
-REM ======================================================
-REM ---------------- WINDOWS ---------------------------
-REM ======================================================
-REM ----- WIN95 -----
-REM set PATH=C:\WINDOWS;C:\WINDOWS\COMMAND
-REM ----- WINNT, WIN2000 -----
-REM set PATH=C:\WINNT;C:\WINNT\SYSTEM32
-REM ----- WINXP, Vista, Windows 7 -----
-set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\Wbem
-
-REM ======================================================
-REM ---------------- make and perl ---------------------
-REM ======================================================
-
-REM --------------- ActiveState perl -------------------
-set PATH=C:\Perl\bin;%PATH%
-
-REM --------------- mingw make ------------------------
-REM set PATH=C:\mingw-make\bin;%PATH%
-REM set PATH=C:\mingw-make82-3\bin;%PATH%
-
-REM --------------- gnuwin32 make ----------------------
-set PATH=C:\gnuwin32\bin;%PATH%
-
-REM ======================================================
-REM ---------------- cygwin tools ------------------------
-REM ======================================================
-REM (make & perl if above perl and make are REMs)
-REM Dont use cygwin GNU make and Perl!
-REM cygwin contains tk/tcl, vim, perl, and many unix tools
-REM need grep from here NOT from cvs directory
-REM set PATH=%PATH%;.;..
-REM set PATH=%PATH%;c:\cygwin\bin
-
-REM ======================================================
-REM --------------- Visual c++ -------------------------
-REM ======================================================
-
-REM ------ Microsoft Visual Studio 2005 ------
-REM call "C:\Program files\Microsoft Visual Studio 8\VC\vcvarsall.bat" x86_amd64
-REM set PATH=%PATH%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
-REM set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include
-REM REM set LIBPATH=%LIBPATH%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib
-REM set LIB=%LIB%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib
-
-REM ------ Microsoft Visual Studio 2008 ------
-REM call "C:\Program files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"
-REM call "C:\Program files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86_amd64
-REM set PATH=C:\Program Files\Microsoft SDKs\Windows\v7.0\bin;%PATH%
-REM set INCLUDE=C:\Program Files\Microsoft SDKs\Windows\v7.0\include;%INCLUDE%
-REM set LIBPATH=C:\Program Files\Microsoft SDKs\Windows\v7.0\lib;%LIBPATH%
-REM set LIB=C:\Program Files\Microsoft SDKs\Windows\v7.0\lib;%LIB%
-
-REM ----- Visual Studion 2010 -----
-REM -- windows-x64 ---
-REM call "C:\Program files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x64
-REM -- win32-x86 ---
-call "C:\Program files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
-
-REM ======================================================
-REM --------------- EPICS --------------------------------
-REM ======================================================
-REM set EPICS_HOST_ARCH=windows-x64
-set EPICS_HOST_ARCH=win32-x86
-set PATH=%PATH%;G:\epics\base\bin\%EPICS_HOST_ARCH%
-set PATH=%PATH%;G:\epics\extensions\bin\%EPICS_HOST_ARCH%
-
-REM ======================================================
-REM ------- OPTIONAL ENVIRONMENT VARIABLES FOLLOW --------
-REM ======================================================
-
-REM ======================================================
-REM ----------------- remote CVS -------------------------
-REM ======================================================
-REM set CVS_RSH=c:/cygwin/bin/ssh.exe
-REM set CVSROOT=:ext:jba@aps.anl.gov:/usr/local/epicsmgr/cvsroot
-REM set HOME=c:/users/%USERNAME%
-REM set HOME=c:/users/jba
-
-REM ======================================================
-REM ------------------- Bazaar ---------------------------
-REM ======================================================
-set PATH=%PATH%;C:\Program files\Bazaar
-
-REM ======================================================
-REM ----------------- GNU make flags ---------------------
-REM ======================================================
-set MAKEFLAGS=-w
-
-REM ======================================================
-REM -------------- vim (use cygwin vim ) -----------------
-REM ======================================================
-REM HOME needed by vim to write .viminfo file.
-REM VIM needed by vim to find _vimrc file.
-REM set VIM=c:\cygwin
-
-REM ======================================================
-REM --------------- Epics Channel Access -----------------
-REM Modify and uncomment the following lines
-REM to override the base/configure/CONFIG_ENV defaults
-REM ======================================================
-REM set EPICS_CA_ADDR_LIST=n.n.n.n n.n.n.n
-REM set EPICS_CA_AUTO_ADDR_LIST=YES
-
-REM set EPICS_CA_CONN_TMO=30.0
-REM set EPICS_CA_BEACON_PERIOD=15.0
-REM set EPICS_CA_REPEATER_PORT=5065
-REM set EPICS_CA_SERVER_PORT=5064
-REM set EPICS_TS_MIN_WEST=420
-
-REM ======================================================
-REM --------------- JAVA ---------------------------------
-REM ======================================================
-REM Needed for java extensions
-REM set CLASSPATH=G:\epics\extensions\javalib
-REM set PATH=%PATH%;C:\j2sdk1.4.1_01\bin
-REM set CLASSPATH=%CLASSPATH%;C:\j2sdk1.4.1_01\lib\tools.jar
-
-REM ======================================================
-REM --------------- Exceed -------------------------------
-REM Needed for X11 extensions
-REM ======================================================
-REM set EX_VER=7.10
-REM set EX_VER=12.00
-REM set EX_VER=14.00
-REM set PATH=%PATH%;C:\Exceed%EX_VER%\XDK\
-REM set PATH=%PATH%;C:\Program Files\Hummingbird\Connectivity\%EX_VER%\Exceed\
-
+@echo off
+rem *************************************************************************
+rem Copyright (c) 2017 UChicago Argonne LLC, as Operator of Argonne
+rem National Laboratory.
+rem Copyright (c) 2002 The Regents of the University of California, as
+rem Operator of Los Alamos National Laboratory.
+rem EPICS BASE is distributed subject to a Software License Agreement found
+rem in file LICENSE that is included with this distribution.
+rem *************************************************************************
+rem
+rem Site-specific EPICS environment settings
+rem
+rem Sets EPICS_HOST_ARCH and the environment for Microsoft Visual Studio.
+rem Optionally, resets PATH, adds Strawberry Perl to PATH, and adds the
+rem EPICS Base install host architecture bin directory to PATH.
+rem
+
+rem ----------------------------------------------------------------------
+rem Site serviceable parts (These definitions may be modified)
+rem ----------------------------------------------------------------------
+
+rem The values of the definitions in this section must not contain
+rem double-quotes.
+rem
+rem * Right: set _foo=C:\foo
+rem * Right: set "_foo=C:\foo"
+rem * Wrong: set _foo="C:\foo"
+
+rem Automatically set up the environment when possible ("yes" or "no").
+rem If set to yes, as much of the environment will be set up as possible.
+rem If set to no, just the minimum environment will be set up. More
+rem specific _auto_* definitions take precedence over this definition.
+set _auto=no
+
+rem Automatically reset PATH ("yes" or "no"). If set to yes, PATH will
+rem be reset to the value of _path_new. If set to no, PATH will not be
+rem reset.
+set _auto_path_reset=%_auto%
+
+rem Automatically append to PATH ("yes" or "no"). If set to yes, the
+rem EPICS Base install host architecture bin directory will be added to
+rem PATH if possible. If set to no, the bin directory will not be added
+rem to PATH.
+set _auto_path_append=%_auto%
+
+rem The new value for PATH. If _auto_path_reset is yes, PATH will be set
+rem to it.
+set _path_new=C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem
+
+rem The location of Strawberry Perl (pathname). If empty, Strawberry Perl
+rem is assumed to already be in PATH and will not be added. If nonempty,
+rem Strawberry Perl will be added to PATH.
+set _strawberry_perl_home=C:\Strawberry
+
+rem The location of Microsoft Visual Studio (pathname).
+set _visual_studio_home=C:\Program Files (x86)\Microsoft Visual Studio 14.0
+
+rem The EPICS host architecture specification for EPICS_HOST_ARCH
+rem (-[-] as defined in configure/CONFIG_SITE).
+set _epics_host_arch=win32-x86
+
+rem The install location of EPICS Base (pathname). If nonempty and
+rem _auto_path_append is yes, it will be used to add the host architecture
+rem bin directory to PATH.
+set _epics_base=
+
+rem ----------------------------------------------------------------------
+rem Internal parts (There is typically no need to modify these)
+rem ----------------------------------------------------------------------
+
+rem Reset PATH
+if "%_auto_path_reset%" == "yes" (
+ set "PATH=%_path_new%"
+)
+
+rem Add Strawberry Perl to PATH
+if "%_strawberry_perl_home%" == "" goto after_add_strawberry_perl
+rem Can't do this inside parentheses because PATH would be read only once
+set "PATH=%PATH%;%_strawberry_perl_home%\c\bin"
+set "PATH=%PATH%;%_strawberry_perl_home%\perl\site\bin"
+set "PATH=%PATH%;%_strawberry_perl_home%\perl\bin"
+:after_add_strawberry_perl
+
+rem Set the environment for Microsoft Visual Studio
+call "%_visual_studio_home%\VC\vcvarsall.bat" x86
+
+rem Set the EPICS host architecture specification
+set "EPICS_HOST_ARCH=%_epics_host_arch%"
+
+rem Add the EPICS Base host architecture bin directory to PATH
+if "%_auto_path_append%" == "yes" (
+ if not "%_epics_base%" == "" (
+ set "PATH=%PATH%;%_epics_base%\bin\%_epics_host_arch%"
+ )
+)
+
+rem Don't leak variables into the environment
+set _auto=
+set _auto_path_reset=
+set _auto_path_append=
+set _path_new=
+set _strawberry_perl_home=
+set _visual_studio_home=
+set _epics_host_arch=
+set _epics_base=
diff --git a/startup/windows.bat b/startup/windows.bat
new file mode 100644
index 000000000..877c0d5a9
--- /dev/null
+++ b/startup/windows.bat
@@ -0,0 +1,105 @@
+@echo off
+rem *************************************************************************
+rem Copyright (c) 2017 UChicago Argonne LLC, as Operator of Argonne
+rem National Laboratory.
+rem Copyright (c) 2002 The Regents of the University of California, as
+rem Operator of Los Alamos National Laboratory.
+rem EPICS BASE is distributed subject to a Software License Agreement found
+rem in file LICENSE that is included with this distribution.
+rem *************************************************************************
+rem
+rem Site-specific EPICS environment settings
+rem
+rem Sets EPICS_HOST_ARCH and the environment for Microsoft Visual Studio.
+rem Optionally, resets PATH, adds Strawberry Perl to PATH, and adds the
+rem EPICS Base install host architecture bin directory to PATH.
+rem
+
+rem ----------------------------------------------------------------------
+rem Site serviceable parts (These definitions may be modified)
+rem ----------------------------------------------------------------------
+
+rem The values of the definitions in this section must not contain
+rem double-quotes.
+rem
+rem * Right: set _foo=C:\foo
+rem * Right: set "_foo=C:\foo"
+rem * Wrong: set _foo="C:\foo"
+
+rem Automatically set up the environment when possible ("yes" or "no").
+rem If set to yes, as much of the environment will be set up as possible.
+rem If set to no, just the minimum environment will be set up. More
+rem specific _auto_* definitions take precedence over this definition.
+set _auto=no
+
+rem Automatically reset PATH ("yes" or "no"). If set to yes, PATH will
+rem be reset to the value of _path_new. If set to no, PATH will not be
+rem reset.
+set _auto_path_reset=%_auto%
+
+rem Automatically append to PATH ("yes" or "no"). If set to yes, the
+rem EPICS Base install host architecture bin directory will be added to
+rem PATH if possible. If set to no, the bin directory will not be added
+rem to PATH.
+set _auto_path_append=%_auto%
+
+rem The new value for PATH. If _auto_path_reset is yes, PATH will be set
+rem to it.
+set _path_new=C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem
+
+rem The location of Strawberry Perl (pathname). If empty, Strawberry Perl
+rem is assumed to already be in PATH and will not be added. If nonempty,
+rem Strawberry Perl will be added to PATH.
+set _strawberry_perl_home=C:\Strawberry
+
+rem The location of Microsoft Visual Studio (pathname).
+set _visual_studio_home=C:\Program Files (x86)\Microsoft Visual Studio 14.0
+
+rem The EPICS host architecture specification for EPICS_HOST_ARCH
+rem (-[-] as defined in configure/CONFIG_SITE).
+set _epics_host_arch=windows-x64
+
+rem The install location of EPICS Base (pathname). If nonempty and
+rem _auto_path_append is yes, it will be used to add the host architecture
+rem bin directory to PATH.
+set _epics_base=
+
+rem ----------------------------------------------------------------------
+rem Internal parts (There is typically no need to modify these)
+rem ----------------------------------------------------------------------
+
+rem Reset PATH
+if "%_auto_path_reset%" == "yes" (
+ set "PATH=%_path_new%"
+)
+
+rem Add Strawberry Perl to PATH
+if "%_strawberry_perl_home%" == "" goto after_add_strawberry_perl
+rem Can't do this inside parentheses because PATH would be read only once
+set "PATH=%PATH%;%_strawberry_perl_home%\c\bin"
+set "PATH=%PATH%;%_strawberry_perl_home%\perl\site\bin"
+set "PATH=%PATH%;%_strawberry_perl_home%\perl\bin"
+:after_add_strawberry_perl
+
+rem Set the environment for Microsoft Visual Studio
+call "%_visual_studio_home%\VC\vcvarsall.bat" x64
+
+rem Set the EPICS host architecture specification
+set "EPICS_HOST_ARCH=%_epics_host_arch%"
+
+rem Add the EPICS Base host architecture bin directory to PATH
+if "%_auto_path_append%" == "yes" (
+ if not "%_epics_base%" == "" (
+ set "PATH=%PATH%;%_epics_base%\bin\%_epics_host_arch%"
+ )
+)
+
+rem Don't leak variables into the environment
+set _auto=
+set _auto_path_reset=
+set _auto_path_append=
+set _path_new=
+set _strawberry_perl_home=
+set _visual_studio_home=
+set _epics_host_arch=
+set _epics_base=