26 Commits

Author SHA1 Message Date
Ralph Lange
ba5508b39e travis: update README
(fixes #19)
2020-05-20 18:59:45 +02:00
Ralph Lange
d5eab412b4 Readme: small updates and fixes 2020-05-20 18:42:04 +02:00
Ralph Lange
fff4249771 appveyor: fix VisualStudio parallel build for older Base versions 2020-05-14 18:18:50 +02:00
Ralph Lange
11e2f1852b Do not run 'make test-results' on Base 3.14
- also add tests for this
2020-05-13 12:35:38 +02:00
Ralph Lange
53e23e3684 appveyor: update README
- fixes #37
2020-05-11 09:10:42 +02:00
Ralph Lange
f0ce39129c appveyor: clean-up install; move 'prepare' to 'build_script'
fixes #38
2020-05-07 18:47:35 +02:00
Ralph Lange
1583d41197 Skip running test-results target if not defined 2020-05-05 11:59:25 +02:00
Ralph Lange
98bc1d8f1f Readme: add links to lower level readme pages, fix badge URL 2020-04-30 15:23:56 +02:00
Ralph Lange
4484a9c302 appveyor: explicitly set default build worker image
- also update paragraph on worker images to AppVeyor README
2020-04-30 12:00:15 +02:00
Ralph Lange
ebc4b5ca2a Readme: update references; advise to clear cache after update 2020-04-30 11:21:50 +02:00
Ralph Lange
26c268eb28 Merge pull request #36 from mdavidsaver:msi314
- updated with a required change to the AppVeyor script
2020-04-30 09:41:51 +02:00
Ralph Lange
02c1c016c4 example: add host-side expanded substitutions file
- checks availablity of a working MSI tool (see #20 and #36)
2020-04-30 09:34:04 +02:00
Michael Davidsaver
27a1224d6d Refresh MSI 3.14 patch to allow using it
- set MSI to $EPICS_BASE_BIN/msi
- make patch file more symmetrical (patch with -p1)
- closes #20 (again), closes #36
2020-04-30 09:19:03 +02:00
Ralph Lange
157a7af098 appveyor: move init part of debugging settings to init section 2020-04-29 16:58:12 +02:00
Ralph Lange
3c1e223dc7 appveyor: don't build for changes in .travis.yml 2020-04-28 15:31:59 +02:00
Ralph Lange
4f4f76a5db appveyor: log name of build worker image 2020-04-28 14:37:30 +02:00
Ralph Lange
e91a588370 travis: copy RELEASE.local to top of checkout
- closes #32
  (fix is in AppVeyor do.py script as per 88831439)
2020-04-27 11:34:01 +02:00
Ralph Lange
29e657d585 Run tests using parallel make (reducing build time) 2020-04-27 11:34:01 +02:00
Ralph Lange
4413c7d75e travis: fix build.sh (set EPICS_BASE correctly) for BASE=SELF 2020-04-24 19:16:12 +02:00
Ralph Lange
48b15417a6 travis: fix RTEMS cross builds for Base 3.15 2020-04-24 19:12:20 +02:00
Ralph Lange
1ac8bf7479 appveyor: fix behavior when BASE set in setup file 2020-04-24 16:16:50 +02:00
Ralph Lange
d0f93f1920 travis: fix for EXTRA arguments with spaces/quotes
- feed EXTRA variables into an array to be properly expanded
2020-04-24 12:27:30 +02:00
Ralph Lange
27f823139a appveyor: don't walk() through the file system in host_info()
- was taking ~3min on AppVeyor builders
2020-04-23 14:12:03 +02:00
Ralph Lange
88831439b1 appveyor: consider base build (BASE=SELF) 2020-04-23 14:11:18 +02:00
Ralph Lange
177dfd4615 travis: fix /etc/hosts issue on bionic image 2020-04-23 14:11:17 +02:00
Ralph Lange
3bd2bb6dff travis: consider base build (BASE=SELF) 2020-04-22 13:36:16 +02:00
15 changed files with 427 additions and 129 deletions

View File

@@ -15,14 +15,6 @@
cache: cache:
- C:\Users\appveyor\.tools -> appveyor\do.py - C:\Users\appveyor\.tools -> appveyor\do.py
#---------------------------------#
# additional packages #
#---------------------------------#
install:
# for the sequencer
- cinst re2c
#---------------------------------# #---------------------------------#
# repository cloning # # repository cloning #
#---------------------------------# #---------------------------------#
@@ -31,6 +23,8 @@ install:
init: init:
# Set autocrlf to make batch files work # Set autocrlf to make batch files work
- git config --global core.autocrlf true - git config --global core.autocrlf true
# print the connection info for RDP connections (see 'debugging' below)
- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# Set clone depth (do not fetch complete history) # Set clone depth (do not fetch complete history)
clone_depth: 50 clone_depth: 50
@@ -42,12 +36,25 @@ skip_commits:
- 'templates/*' - 'templates/*'
- '**/*.html' - '**/*.html'
- '**/*.md' - '**/*.md'
- '.travis.yml'
#---------------------------------#
# additional packages #
#---------------------------------#
install:
# fetch submodules (like ci-scripts)
- cmd: git submodule update --init --recursive
# for the sequencer
- cinst re2c
#---------------------------------# #---------------------------------#
# build matrix configuration # # build matrix configuration #
#---------------------------------# #---------------------------------#
# Default build worker image
image: Visual Studio 2015
# Build Configurations: dll/static, regular/debug # Build Configurations: dll/static, regular/debug
configuration: configuration:
- dynamic - dynamic
@@ -65,12 +72,12 @@ environment:
matrix: matrix:
- CMP: vs2019 - CMP: vs2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
SET: test00 SET: test00
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
- CMP: mingw - CMP: mingw
- CMP: vs2019 - CMP: vs2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
VV: 0 VV: 0
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
- CMP: vs2019 - CMP: vs2019
BASE: 3.15 BASE: 3.15
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
@@ -141,7 +148,6 @@ test_script:
## so you may want to adjust the build matrix above to just build the one of interest ## so you may want to adjust the build matrix above to just build the one of interest
#on_failure: #on_failure:
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) # - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))

View File

@@ -49,7 +49,7 @@ example.
## Supported CI Services ## Supported CI Services
### Travis-CI ### [Travis-CI](https://travis-ci.org/)
- Use different compilers (gcc, clang) - Use different compilers (gcc, clang)
- Use different gcc versions - Use different gcc versions
- Cross-compile for Windows 32bit and 64bit using MinGW and WINE - Cross-compile for Windows 32bit and 64bit using MinGW and WINE
@@ -57,12 +57,16 @@ example.
- Compile on MacOS - Compile on MacOS
- Built dependencies are cached (for faster builds) - Built dependencies are cached (for faster builds)
### AppVeyor See specific **[ci-scripts on Travis-CI README](travis/README.md)** for more details.
### [AppVeyor](https://www.appveyor.com/)
- Use different compilers (Visual Studio, MinGW) - Use different compilers (Visual Studio, MinGW)
- Use different Visual Studio versions: \ - Use different Visual Studio versions: \
2008, 2010, 2012, 2013, 2015, 2017, 2019 2008, 2010, 2012, 2013, 2015, 2017, 2019
- Compile for Windows 32bit and 64bit - Compile for Windows 32bit and 64bit
See specific **[ci-scripts on AppVeyor README](appveyor/README.md)** for more details.
## How to Use the CI-Scripts ## How to Use the CI-Scripts
1. Get an account on a supported CI service provider platform. 1. Get an account on a supported CI service provider platform.
@@ -194,19 +198,30 @@ specific job will run the job with high verbosity,
printing every command as it is being executed and switching the dependency printing every command as it is being executed and switching the dependency
builds to higher verbosity. builds to higher verbosity.
For local debugging, you may set `CACHEDIR` to change the location for the For debugging on your local machine, you may set `CACHEDIR` to change the
dependency builds. [default is `$HOME/.cache`] location for the dependency builds. [default is `$HOME/.cache`]
## References: EPICS Modules Using ci-scripts ## References: EPICS Modules Using ci-scripts
EPICS Base: [pvData](https://github.com/epics-base/pvDataCPP), [EPICS Base](https://github.com/epics-base/epics-base) and its submodules
[pvData](https://github.com/epics-base/pvDataCPP),
[pvAccess](https://github.com/epics-base/pvAccessCPP), [pvAccess](https://github.com/epics-base/pvAccessCPP),
[pva2pva](https://github.com/epics-base/pva2pva) [pva2pva](https://github.com/epics-base/pva2pva)
EPICS Modules: [PCAS](https://github.com/epics-modules/pcas), EPICS Modules:
[ASYN](https://github.com/epics-modules/asyn) [ASYN](https://github.com/epics-modules/asyn),
[devlib2](https://github.com/epics-modules/devlib2),
[ecmc](https://github.com/epics-modules/ecmc),
[ip](https://github.com/epics-modules/ip),
[lua](https://github.com/epics-modules/lua),
[MCoreUtils](https://github.com/epics-modules/MCoreUtils),
[modbus](https://github.com/epics-modules/modbus),
[motor](https://github.com/epics-modules/motor),
[PCAS](https://github.com/epics-modules/pcas),
[sscan](https://github.com/epics-modules/sscan),
[vac](https://github.com/epics-modules/vac)
ESS: [Motor driver (model 3) for EtherCAT Motion Controller][ref.ethercatmc] ESS: [EtherCAT MC Motor Driver][ref.ethercatmc]
ITER: [OPC UA Device Support](https://github.com/ralphlange/opcua) ITER: [OPC UA Device Support](https://github.com/ralphlange/opcua)
@@ -221,22 +236,27 @@ This will make all builds (not just for your module) verbose.
Update the submodule in `.ci` first, then change your CI configuration Update the submodule in `.ci` first, then change your CI configuration
(if needed) and commit both to your module. E.g., to update your Travis (if needed) and commit both to your module. E.g., to update your Travis
setup to release 2.2.1 of ci-scripts: setup to release 2.3.5 of ci-scripts:
```bash ```bash
cd .ci cd .ci
git pull origin v2.2.1 git pull origin v2.3.5
cd - cd -
git add .ci git add .ci
# if needed: # if needed:
edit .travis.yml edit .travis.yml
git add .travis.yml git add .travis.yml
git commit -m "Update ci-scripts submodule to v2.2.1" git commit -m "Update ci-scripts submodule to v2.3.5"
``` ```
Check the example configuration files inside ci-scripts (and their Check the example configuration files inside ci-scripts (and their
changes) to see what might be needed and/or interesting to change changes) to see what might be needed and/or interesting to change
in your configuration. in your configuration.
Depending on the changes contained in the ci-scripts update, it might
be advisable to clear the CI caches after updating ci-scripts. E.g.,
a change in setting up EPICS Base will not be applied if Base is found
in the cache.
**Why does running the scripts locally on my MacOS machine fail?** **Why does running the scripts locally on my MacOS machine fail?**
The ci-scripts for Travis-CI require Bash version 4. The ci-scripts for Travis-CI require Bash version 4.
@@ -273,7 +293,7 @@ in file LICENSE that is included with this distribution.
<!-- Links --> <!-- Links -->
[badge.version]: https://badge.fury.io/gh/epics-base%2Fci-scripts.svg [badge.version]: https://badge.fury.io/gh/epics-base%2Fci-scripts.svg
[badge.travis]: https://travis-ci.org/epics-base/ci-scripts.svg?branch=master [badge.travis]: https://travis-ci.org/epics-base/ci-scripts.svg?branch=master
[badge.appveyor]: https://ci.appveyor.com/api/projects/status/xwdv8fpxu0byp3hn?svg=true [badge.appveyor]: https://ci.appveyor.com/api/projects/status/8b578alg974axvux?svg=true
[reddit.bash]: https://www.reddit.com/r/bash/comments/393oqv/why_is_the_version_of_bash_included_in_os_x_so_old/ [reddit.bash]: https://www.reddit.com/r/bash/comments/393oqv/why_is_the_version_of_bash_included_in_os_x_so_old/

View File

@@ -1,7 +1,39 @@
diff -ruN ../3.14/src/dbtools/Makefile ./src/dbtools/Makefile diff --git a/config/RULES.Db b/config/RULES.Db
--- ../3.14/src/dbtools/Makefile 2017-03-16 21:37:51.278140900 +0100 index b4946c7aa..90b76ed08 100644
+++ ./src/dbtools/Makefile 2020-04-06 12:40:51.723550846 +0200 --- a/config/RULES.Db
@@ -11,6 +11,11 @@ +++ b/config/RULES.Db
@@ -12,11 +12,7 @@
#
MAKEBPT = $(EPICS_BASE_HOST_BIN)/makeBpt$(EXE)
-ifndef MSI
-# Tool from R3.14 extensions bin, R3.13 extensions bin, or user path
-MSI = $(firstword $(wildcard $(EPICS_EXTENSIONS_HOST_BIN)/msi$(HOSTEXE) \
- $(EPICS_EXTENSIONS)/bin/$(HOST_ARCH)/msi$(HOSTEXE)) msi$(HOSTEXE))
-endif
+MSI = $(EPICS_BASE_HOST_BIN)/msi$(HOSTEXE)
DBEXPAND = $(EPICS_BASE_HOST_BIN)/dbExpand$(EXE)
DBST = dbst
diff --git a/configure/CONFIG_BASE b/configure/CONFIG_BASE
index 7ee5a5b89..9a9793093 100644
--- a/configure/CONFIG_BASE
+++ b/configure/CONFIG_BASE
@@ -112,8 +112,5 @@ ifndef DBST
DBST = dbst
endif
-ifndef MSI
-MSI = msi
-endif
-
+MSI = $(EPICS_BASE_HOST_BIN)/msi$(HOSTEXE)
diff --git a/src/dbtools/Makefile b/src/dbtools/Makefile
index 38ed52c9e..8655a5337 100644
--- a/src/dbtools/Makefile
+++ b/src/dbtools/Makefile
@@ -11,6 +11,11 @@ TOP=../..
include $(TOP)/configure/CONFIG include $(TOP)/configure/CONFIG
@@ -13,9 +45,11 @@ diff -ruN ../3.14/src/dbtools/Makefile ./src/dbtools/Makefile
INC += dbLoadTemplate.h INC += dbLoadTemplate.h
INC += dbtoolsIocRegister.h INC += dbtoolsIocRegister.h
diff -ruN ../3.14/src/dbtools/msi.c ./src/dbtools/msi.c diff --git a/src/dbtools/msi.c b/src/dbtools/msi.c
--- ../3.14/src/dbtools/msi.c 1970-01-01 01:00:00.000000000 +0100 new file mode 100644
+++ ./src/dbtools/msi.c 2013-05-13 19:00:43.000000000 +0200 index 000000000..525d4f25b
--- /dev/null
+++ b/src/dbtools/msi.c
@@ -0,0 +1,798 @@ @@ -0,0 +1,798 @@
+/*************************************************************************\ +/*************************************************************************\
+* Copyright (c) 2002 The University of Chicago, as Operator of Argonne +* Copyright (c) 2002 The University of Chicago, as Operator of Argonne

View File

@@ -308,9 +308,11 @@ class TestSetupForBuild(unittest.TestCase):
platform = os.environ['PLATFORM'] platform = os.environ['PLATFORM']
cc = os.environ['CMP'] cc = os.environ['CMP']
args = Namespace(paths=[]) args = Namespace(paths=[])
do.building_base = True
def setUp(self): def setUp(self):
os.environ.pop('EPICS_HOST_ARCH', None) os.environ.pop('EPICS_HOST_ARCH', None)
do.clear_lists()
def tearDown(self): def tearDown(self):
os.environ['CONFIGURATION'] = self.configuration os.environ['CONFIGURATION'] = self.configuration
@@ -380,6 +382,47 @@ class TestSetupForBuild(unittest.TestCase):
self.assertTrue(re.search('strawberry', os.environ['PATH'], flags=re.IGNORECASE), self.assertTrue(re.search('strawberry', os.environ['PATH'], flags=re.IGNORECASE),
'Strawberry Perl location not in PATH for vs2019') 'Strawberry Perl location not in PATH for vs2019')
def setBase314(self, yesno):
cfg_base_version = os.path.join('configure', 'CONFIG_BASE_VERSION')
fout = open(cfg_base_version, 'w')
print('# test file for base version detection', file=fout)
print('BASE_3_14={0}'.format(yesno), file=fout)
fout.close()
def setTestResultsTarget(self, target):
rules_build = os.path.join('configure', 'RULES_BUILD')
fout = open(rules_build, 'w')
print('# test file for target detection', file=fout)
print('{0}: something'.format(target), file=fout)
fout.close()
def test_DetectionBase314No(self):
self.setBase314('NO')
do.setup_for_build(self.args)
self.assertFalse(do.isbase314, 'Falsely detected Base 3.14')
def test_DetectionBase314Yes(self):
self.setBase314('YES')
do.setup_for_build(self.args)
self.assertTrue(do.isbase314, 'Base 3.14 = YES not detected')
def test_DetectionTestResultsTarget314No(self):
self.setBase314('YES')
self.setTestResultsTarget('nottherighttarget')
do.setup_for_build(self.args)
self.assertFalse(do.has_test_results, 'Falsely detected test-results target')
def test_DetectionTestResultsTarget314Yes(self):
self.setBase314('YES')
self.setTestResultsTarget('test-results')
do.setup_for_build(self.args)
self.assertFalse(do.has_test_results, 'Falsely found test-results on Base 3.14')
def test_DetectionTestResultsTargetNot314Yes(self):
self.setBase314('NO')
self.setTestResultsTarget('test-results')
do.setup_for_build(self.args)
self.assertTrue(do.has_test_results, 'Target test-results not detected')
if __name__ == "__main__": if __name__ == "__main__":
if 'VV' in os.environ and os.environ['VV'] == '1': if 'VV' in os.environ and os.environ['VV'] == '1':

View File

@@ -12,14 +12,6 @@
cache: cache:
- C:\Users\appveyor\.tools - C:\Users\appveyor\.tools
#---------------------------------#
# additional packages #
#---------------------------------#
install:
# for the sequencer
- cinst re2c
#---------------------------------# #---------------------------------#
# repository cloning # # repository cloning #
#---------------------------------# #---------------------------------#
@@ -28,6 +20,8 @@ install:
init: init:
# Set autocrlf to make batch files work # Set autocrlf to make batch files work
- git config --global core.autocrlf true - git config --global core.autocrlf true
# print the connection info for RDP connections (see 'debugging' below)
#- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# Set clone depth (do not fetch complete history) # Set clone depth (do not fetch complete history)
clone_depth: 50 clone_depth: 50
@@ -39,6 +33,17 @@ skip_commits:
- 'templates/*' - 'templates/*'
- '**/*.html' - '**/*.html'
- '**/*.md' - '**/*.md'
- '.travis.yml'
#---------------------------------#
# additional packages #
#---------------------------------#
install:
# fetch submodules (like ci-scripts)
- cmd: git submodule update --init --recursive
# for the sequencer
- cinst re2c
#---------------------------------# #---------------------------------#
# build matrix configuration # # build matrix configuration #
@@ -48,6 +53,9 @@ skip_commits:
# are executed sequentially, each one taking 10-15 minutes. # are executed sequentially, each one taking 10-15 minutes.
# Consider this when defining your build matrix. (A full matrix build takes more than 8 hours.) # Consider this when defining your build matrix. (A full matrix build takes more than 8 hours.)
# Default build worker image
image: Visual Studio 2015
# Build Configurations: dll/static, regular/debug # Build Configurations: dll/static, regular/debug
configuration: configuration:
- dynamic - dynamic
@@ -62,8 +70,8 @@ environment:
matrix: matrix:
- CMP: vs2019 - CMP: vs2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
SET: test00 SET: test00
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
- CMP: mingw - CMP: mingw
- CMP: vs2019 - CMP: vs2019
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
@@ -107,11 +115,8 @@ matrix:
# building & testing # # building & testing #
#---------------------------------# #---------------------------------#
install:
- cmd: git submodule update --init --recursive
- cmd: python .ci/appveyor/do.py prepare
build_script: build_script:
- cmd: python .ci/appveyor/do.py prepare
- cmd: python .ci/appveyor/do.py build - cmd: python .ci/appveyor/do.py build
test_script: test_script:
@@ -129,9 +134,8 @@ on_finish:
## note that you will need to connect within the usual build timeout limit (60 minutes) ## note that you will need to connect within the usual build timeout limit (60 minutes)
## so you may want to adjust the build matrix above to just build the one of interest ## so you may want to adjust the build matrix above to just build the one of interest
# print the connection info # to print the RDP connection info
#init: # uncomment the appropriate line in the init: section above
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
# block a failed build (until the watchdog barks) # block a failed build (until the watchdog barks)
#on_failure: #on_failure:

View File

@@ -17,6 +17,12 @@ skip_commits:
- 'templates/*' - 'templates/*'
- '**/*.html' - '**/*.html'
- '**/*.md' - '**/*.md'
- '.travis.yml'
install:
- cmd: git submodule update --init --recursive
image: Visual Studio 2019
# Build Configurations: dll/static, regular/debug # Build Configurations: dll/static, regular/debug
configuration: configuration:
@@ -32,10 +38,8 @@ environment:
matrix: matrix:
- CMP: vs2019 - CMP: vs2019
BASE: 7.0 BASE: 7.0
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
- CMP: vs2019 - CMP: vs2019
BASE: 3.15 BASE: 3.15
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
# Platform: processor architecture # Platform: processor architecture
platform: platform:
@@ -53,11 +57,8 @@ matrix:
- platform: x64 - platform: x64
CMP: vs2008 CMP: vs2008
install:
- cmd: git submodule update --init --recursive
- cmd: python .ci/appveyor/do.py prepare
build_script: build_script:
- cmd: python .ci/appveyor/do.py prepare
- cmd: python .ci/appveyor/do.py build - cmd: python .ci/appveyor/do.py build
test_script: test_script:

View File

@@ -12,7 +12,7 @@
1. Get an account on [AppVeyor](https://www.appveyor.com/), connect 1. Get an account on [AppVeyor](https://www.appveyor.com/), connect
it to your GitHub account and activate your support module's it to your GitHub account and activate your support module's
repository. For more details, please refer to the repository. For more details, please see below and refer to the
[AppVeyor documentation](https://www.appveyor.com/docs/). [AppVeyor documentation](https://www.appveyor.com/docs/).
2. Add the ci-scripts respository as a Git Submodule 2. Add the ci-scripts respository as a Git Submodule
@@ -45,11 +45,68 @@
Your builds will take long. \ Your builds will take long. \
AppVeyor only grants a single worker VM - all jobs of the matrix are AppVeyor only grants a single worker VM - all jobs of the matrix are
executed sequentially. Each job will take around 10 minutes. executed sequentially. Each job will take between 6 and 15 minutes,
plus testing time.
The `matrix: / exclude:` setting can be used to reduce the number of The `matrix: / exclude:` setting can be used to reduce the number of
jobs. Check the [AppVeyor docs](https://www.appveyor.com/docs/build-configuration/#build-matrix) jobs. Check the [AppVeyor docs][appveyor.doc.matrix]
for more ways to reduce the build matrix size. for more ways to reduce the build matrix size.
E.g., you can opt for not creating matrix axes for `configuration:`
and`platform:` by moving these configurations into the job lines
under `environment: / matrix:`.
6. Push your changes and check 6. Push your changes and check
[ci.appveyor.com](https://ci.appveyor.com/) for your build results. [ci.appveyor.com](https://ci.appveyor.com/) for your build results.
## GitHub / AppVeyor Integration and Authentication
### Security
Enabling Two-Factor-Authentication (2FA) is always a good idea, for all
your web based services, including GitHub and AppVeyor. \
Get an app for your phone (Authy works fine for me, but there are plenty),
and your phone will generate one-time passwords to verify your identity
to the service if required (e.g., when logging in from a new device).
### Authentication
You can use different ways and services to authenticate when you log into
your AppVeyor account. The easiest way - at least when you're using the
service with repositories on GitHub - is to use GitHub authentication.
### GitHub Integration
AppVeyor offers two ways to integrate with GitHub: through a GitHub
application or through an OAuth application. GitHub applications are using
the newer API, allow easier fine-grained access rights tuning and are
preferred.
The differences are mostly visible when you work with repositories under
organizational GitHub accounts: Using OAuth, AppVeyor always has the full
rights of your personal GitHub account.
GitHub applications on the other hand have separate instances and
configuration for every organizational account you are using on GitHub.
### Enabling Builds for your Repository
On the 'Projects' tab of your AppVeyor web interface, create a new project.
If the repository is not listed on the project creation page,
verify the Integration settings. Most of the relevant configuration
is taken from GitHub and has to be set up there.
### AppVeyor Account Sharing
You can always invite other AppVeyor users to have access to an AppVeyor
account, forming a team. Such additional shared accounts are a way to make
the AppVeyor limits (e.g., one parallel builder per account) more manageable.
## Known Issues
#### Build Worker Images
The AppVeyor documentation on build worker images doesn't seem to fully
describe the way things are handled internally.
The tested and suggested reproducible way of defining the build worker image
is shown in the example configuration files:
- Set the default image using the `image:` tag.
- Override the image for specific jobs by setting the
`APPVEYOR_BUILD_WORKER_IMAGE` environment variable.
<!-- Links -->
[appveyor.doc.matrix]: https://www.appveyor.com/docs/build-configuration/#build-matrix

View File

@@ -41,26 +41,50 @@ else:
if 'CACHEDIR' in os.environ: if 'CACHEDIR' in os.environ:
cachedir = os.environ['CACHEDIR'] cachedir = os.environ['CACHEDIR']
vcvars_table = {
# https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#History
'vs2019':r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat',
'vs2017':r'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat',
'vs2015':r'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat',
'vs2013':r'C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat',
'vs2012':r'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat',
'vs2010':r'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat',
'vs2008':r'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat',
}
ciscriptsdir = os.path.abspath(os.path.dirname(sys.argv[0])) ciscriptsdir = os.path.abspath(os.path.dirname(sys.argv[0]))
if os.path.basename(ciscriptsdir) == 'appveyor': if os.path.basename(ciscriptsdir) == 'appveyor':
ciscriptsdir = ciscriptsdir.rstrip(os.pathsep+'appveyor') ciscriptsdir = ciscriptsdir.rstrip(os.pathsep+'appveyor')
if 'BASE' in os.environ and os.environ['BASE'] == 'SELF':
building_base = True
places['EPICS_BASE'] = '.'
else:
building_base = False
def modlist(): def modlist():
for var in ['ADD_MODULES', 'MODULES']: if building_base:
setup.setdefault(var, '') ret = []
if var in os.environ: else:
setup[var] = os.environ[var] for var in ['ADD_MODULES', 'MODULES']:
logger.debug('ENV assignment: %s = %s', var, setup[var]) setup.setdefault(var, '')
ret = ['BASE'] + setup['ADD_MODULES'].upper().split() + setup['MODULES'].upper().split() if var in os.environ:
setup[var] = os.environ[var]
logger.debug('ENV assignment: %s = %s', var, setup[var])
ret = ['BASE'] + setup['ADD_MODULES'].upper().split() + setup['MODULES'].upper().split()
logger.debug('Effective module list: %s', ret) logger.debug('Effective module list: %s', ret)
return ret return ret
zip7 = r'C:\Program Files\7-Zip\7z' zip7 = r'C:\Program Files\7-Zip\7z'
make = '' make = ''
isbase314 = False isbase314 = False
has_test_results = False
silent_dep_builds = True silent_dep_builds = True
def host_info(): def host_info():
print('{0}AppVeyor Build Worker Image:{1} {2}'
.format(ANSI_CYAN, ANSI_RESET, os.environ['APPVEYOR_BUILD_WORKER_IMAGE']))
print('{0}Python setup{1}'.format(ANSI_CYAN, ANSI_RESET)) print('{0}Python setup{1}'.format(ANSI_CYAN, ANSI_RESET))
print(sys.version) print(sys.version)
print('PYTHONPATH') print('PYTHONPATH')
@@ -69,20 +93,20 @@ def host_info():
print('platform =', distutils.util.get_platform()) print('platform =', distutils.util.get_platform())
print('{0}Available Visual Studio versions{1}'.format(ANSI_CYAN, ANSI_RESET)) print('{0}Available Visual Studio versions{1}'.format(ANSI_CYAN, ANSI_RESET))
from fnmatch import fnmatch for key in vcvars_table:
for base in (r'C:\Program Files (x86)', r'C:\Program Files'): if os.path.exists(vcvars_table[key]):
for root, dirs, files in os.walk(base): print('Found', key, 'in', vcvars_table[key])
for fname in files:
if fnmatch(fname, 'vcvarsall.bat'):
print('Found', os.path.join(root, fname))
sys.stdout.flush() sys.stdout.flush()
# Used from unittests # Used from unittests
def clear_lists(): def clear_lists():
global isbase314, has_test_results
del seen_setups[:] del seen_setups[:]
del modules_to_compile[:] del modules_to_compile[:]
setup.clear() setup.clear()
places.clear() places.clear()
isbase314 = False
has_test_results = False
# Error-handler to make shutil.rmtree delete read-only files on Windows # Error-handler to make shutil.rmtree delete read-only files on Windows
def remove_readonly(func, path, excinfo): def remove_readonly(func, path, excinfo):
@@ -310,7 +334,7 @@ def add_dependency(dep):
if 'BASE_3_14=YES' in f.read(): if 'BASE_3_14=YES' in f.read():
print('Adding MSI 1.7 to {0}'.format(place)) print('Adding MSI 1.7 to {0}'.format(place))
sys.stdout.flush() sys.stdout.flush()
sp.check_call(['patch', '-p0', '-i', os.path.join(ciscriptsdir, 'add-msi-to-314.patch')], sp.check_call(['patch', '-p1', '-i', os.path.join(ciscriptsdir, 'add-msi-to-314.patch')],
cwd=place) cwd=place)
else: else:
# force including RELEASE.local for non-base modules by overwriting their configure/RELEASE # force including RELEASE.local for non-base modules by overwriting their configure/RELEASE
@@ -337,7 +361,7 @@ def add_dependency(dep):
update_release_local(setup[dep+"_VARNAME"], place) update_release_local(setup[dep+"_VARNAME"], place)
def setup_for_build(args): def setup_for_build(args):
global make, isbase314 global make, isbase314, has_test_results
dllpaths = [] dllpaths = []
# there is no combined static and debug EPICS_HOST_ARCH target, # there is no combined static and debug EPICS_HOST_ARCH target,
@@ -377,18 +401,31 @@ def setup_for_build(args):
make = os.path.join(toolsdir, 'make.exe') make = os.path.join(toolsdir, 'make.exe')
with open(os.path.join(cachedir, 'RELEASE.local'), 'r') as f: base_place = '.'
lines = f.readlines() if not building_base:
for line in lines: with open(os.path.join(cachedir, 'RELEASE.local'), 'r') as f:
(mod, place) = line.strip().split('=') lines = f.readlines()
bindir = os.path.join(place, 'bin', os.environ['EPICS_HOST_ARCH']) for line in lines:
if os.path.isdir(bindir): (mod, place) = line.strip().split('=')
dllpaths.append(bindir) bindir = os.path.join(place, 'bin', os.environ['EPICS_HOST_ARCH'])
if mod == 'EPICS_BASE': if os.path.isdir(bindir):
base_place = place dllpaths.append(bindir)
with open(os.path.join(base_place, 'configure', 'CONFIG_BASE_VERSION')) as myfile: if mod == 'EPICS_BASE':
if 'BASE_3_14=YES' in myfile.read(): base_place = place
isbase314 = True
cfg_base_version = os.path.join(base_place, 'configure', 'CONFIG_BASE_VERSION')
if os.path.exists(cfg_base_version):
with open(cfg_base_version) as myfile:
if 'BASE_3_14=YES' in myfile.read():
isbase314 = True
if not isbase314:
rules_build = os.path.join(base_place, 'configure', 'RULES_BUILD')
if os.path.exists(rules_build):
with open(rules_build) as myfile:
for line in myfile:
if re.match('^test-results:', line):
has_test_results = True
bindir = os.path.join(os.getcwd(), 'bin', os.environ['EPICS_HOST_ARCH']) bindir = os.path.join(os.getcwd(), 'bin', os.environ['EPICS_HOST_ARCH'])
if os.path.isdir(bindir): if os.path.isdir(bindir):
@@ -433,9 +470,12 @@ def prepare(args):
[add_dependency(mod) for mod in modlist()] [add_dependency(mod) for mod in modlist()]
if os.path.isdir('configure'): if not building_base:
release_local = os.path.join(cachedir, 'RELEASE.local') if os.path.isdir('configure'):
shutil.copy(release_local, 'configure') targetdir = 'configure'
else:
targetdir = '.'
shutil.copy(os.path.join(cachedir, 'RELEASE.local'), targetdir)
print('{0}Configuring EPICS build system{1}'.format(ANSI_YELLOW, ANSI_RESET)) print('{0}Configuring EPICS build system{1}'.format(ANSI_YELLOW, ANSI_RESET))
@@ -452,6 +492,29 @@ def prepare(args):
else: else:
optitype = 'optimized' optitype = 'optimized'
# Enable/fix parallel build for VisualStudio compiler on older Base versions
add_vs_fix = True
config_win = os.path.join(places['EPICS_BASE'], 'configure', 'os', 'CONFIG.win32-x86.win32-x86')
with open(config_win) as myfile:
for line in myfile:
if re.match(r'^ifneq \(\$\(VisualStudioVersion\),11\.0\)', line):
add_vs_fix = False
if add_vs_fix:
with open(config_win, 'a') as myfile:
myfile.write('''
# Fix parallel build for some VisualStudio versions
ifneq ($(VisualStudioVersion),)
ifneq ($(VisualStudioVersion),11.0)
ifeq ($(findstring -FS,$(OPT_CXXFLAGS_NO)),)
OPT_CXXFLAGS_NO += -FS
OPT_CFLAGS_NO += -FS
endif
else
OPT_CXXFLAGS_NO := $(filter-out -FS,$(OPT_CXXFLAGS_NO))
OPT_CFLAGS_NO := $(filter-out -FS,$(OPT_CFLAGS_NO))
endif
endif''')
print('EPICS Base build system set up for {0} build with {1} linking' print('EPICS Base build system set up for {0} build with {1} linking'
.format(optitype, linktype)) .format(optitype, linktype))
@@ -487,21 +550,22 @@ def prepare(args):
sys.stdout.flush() sys.stdout.flush()
sp.check_call(['cl']) sp.check_call(['cl'])
for mod in modlist(): if not building_base:
place = places[setup[mod+"_VARNAME"]] for mod in modlist():
print('{0}Building dependency {1} in {2}{3}'.format(ANSI_YELLOW, mod, place, ANSI_RESET)) place = places[setup[mod+"_VARNAME"]]
call_make(cwd=place, silent=silent_dep_builds) print('{0}Building dependency {1} in {2}{3}'.format(ANSI_YELLOW, mod, place, ANSI_RESET))
call_make(cwd=place, silent=silent_dep_builds)
print('{0}Dependency module information{1}'.format(ANSI_CYAN, ANSI_RESET)) print('{0}Dependency module information{1}'.format(ANSI_CYAN, ANSI_RESET))
print('Module Tag Binaries Commit') print('Module Tag Binaries Commit')
print(100 * '-') print(100 * '-')
for mod in modlist(): for mod in modlist():
commit = sp.check_output(['git', 'log', '-n1', '--oneline'], cwd=places[setup[mod+"_VARNAME"]]).strip() commit = sp.check_output(['git', 'log', '-n1', '--oneline'], cwd=places[setup[mod+"_VARNAME"]]).strip()
print("%-10s %-12s %-11s %s" % (mod, setup[mod], 'rebuilt', commit)) print("%-10s %-12s %-11s %s" % (mod, setup[mod], 'rebuilt', commit))
print('{0}Contents of RELEASE.local{1}'.format(ANSI_CYAN, ANSI_RESET)) print('{0}Contents of RELEASE.local{1}'.format(ANSI_CYAN, ANSI_RESET))
with open(os.path.join(cachedir, 'RELEASE.local'), 'r') as f: with open(os.path.join(cachedir, 'RELEASE.local'), 'r') as f:
print(f.read().strip()) print(f.read().strip())
def build(args): def build(args):
setup_for_build(args) setup_for_build(args)
@@ -511,8 +575,9 @@ def build(args):
def test(args): def test(args):
setup_for_build(args) setup_for_build(args)
print('{0}Running the main module tests{1}'.format(ANSI_YELLOW, ANSI_RESET)) print('{0}Running the main module tests{1}'.format(ANSI_YELLOW, ANSI_RESET))
call_make(['tapfiles'], parallel=0) call_make(['tapfiles'])
call_make(['test-results'], parallel=0, silent=True) if has_test_results:
call_make(['test-results'], parallel=0, silent=True)
def doExec(args): def doExec(args):
'exec user command with vcvars' 'exec user command with vcvars'
@@ -530,26 +595,17 @@ def with_vcvars(cmd):
# cf. https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line # cf. https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line
info = { info = {
'python':sys.executable, 'python': sys.executable,
'self':sys.argv[0], 'self': sys.argv[0],
'cmd':cmd, 'cmd':cmd,
} }
info['arch'] = { info['arch'] = {
'x86':'x86', # 'amd64_x86' ?? 'x86': 'x86', # 'amd64_x86' ??
'x64':'amd64', 'x64': 'amd64',
}[os.environ['PLATFORM'].lower()] # 'x86' or 'x64' }[os.environ['PLATFORM'].lower()] # 'x86' or 'x64'
info['vcvars'] = { info['vcvars'] = vcvars_table[CC]
# https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#History
'vs2019':r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat',
'vs2017':r'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat',
'vs2015':r'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat',
'vs2013':r'C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat',
'vs2012':r'C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat',
'vs2010':r'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat',
'vs2008':r'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat',
}[CC]
script=''' script='''
call "{vcvars}" {arch} call "{vcvars}" {arch}

View File

@@ -9,6 +9,9 @@ DB += dbExample2.db
DB += dbSubExample.db DB += dbSubExample.db
DB += user.substitutions DB += user.substitutions
# Host-side expansion of substitutions file with MSI
DB += dbExample3.db
# If <anyname>.db template is not named <anyname>*.template add # If <anyname>.db template is not named <anyname>*.template add
# <anyname>_TEMPLATE = <templatename> # <anyname>_TEMPLATE = <templatename>

View File

@@ -0,0 +1,8 @@
# Example host-side substitutions file
file dbExample2.db {
pattern { user, no, scan }
{ "ralph", 4, "1 second" }
{ "ralph", 5, "2 second" }
{ "ralph", 6, "5 second" }
}

View File

@@ -53,6 +53,8 @@ script:
# SET source setup file # SET source setup file
# ADD_MODULES extra modules (for a specific job) # ADD_MODULES extra modules (for a specific job)
# EXTRA content will be added to make command line # EXTRA content will be added to make command line
# EXTRA1..5 additional arguments for the make command
# (one argument per variable)
# STATIC set to YES for static build (default: NO) # STATIC set to YES for static build (default: NO)
# TEST set to NO to skip running the tests (default: YES) # TEST set to NO to skip running the tests (default: YES)
# VV set to make build scripts verbose (default: unset) # VV set to make build scripts verbose (default: unset)

View File

@@ -43,3 +43,18 @@
6. Push your changes and check 6. Push your changes and check
[travis-ci.org](https://travis-ci.org/) for your build results. [travis-ci.org](https://travis-ci.org/) for your build results.
## Caches
Travis keeps the caches separate for different jobs. As soon as the job
description (in the `.travis.yml` configuration file) or its environment
settings change (adding a space character is enough), the cache is different
and will be rebuilt when the job runs.
This also means that changing a value inside a setup file will _not_
invalidate the cache - in that case you will have to manually delete the cache
through the Travis web interface. (Or add a space character in the job
configuration.)
Caches are automatically removed after approx. four weeks.
Your jobs will have to rebuild them once in a while.

View File

@@ -6,22 +6,41 @@ set -e
CACHEDIR=${CACHEDIR:-${HOME}/.cache} CACHEDIR=${CACHEDIR:-${HOME}/.cache}
eval $(grep "EPICS_BASE=" ${CACHEDIR}/RELEASE.local) if [ "$BASE" = "SELF" ]
then
EPICS_BASE=$CURDIR
else
eval $(grep "EPICS_BASE=" ${CACHEDIR}/RELEASE.local)
fi
export EPICS_BASE export EPICS_BASE
[ -z "$EPICS_HOST_ARCH" -a -f $EPICS_BASE/src/tools/EpicsHostArch.pl ] && EPICS_HOST_ARCH=$(perl $EPICS_BASE/src/tools/EpicsHostArch.pl) [ -z "$EPICS_HOST_ARCH" -a -f $EPICS_BASE/src/tools/EpicsHostArch.pl ] && EPICS_HOST_ARCH=$(perl $EPICS_BASE/src/tools/EpicsHostArch.pl)
[ -z "$EPICS_HOST_ARCH" -a -f $EPICS_BASE/startup/EpicsHostArch.pl ] && EPICS_HOST_ARCH=$(perl $EPICS_BASE/startup/EpicsHostArch.pl) [ -z "$EPICS_HOST_ARCH" -a -f $EPICS_BASE/startup/EpicsHostArch.pl ] && EPICS_HOST_ARCH=$(perl $EPICS_BASE/startup/EpicsHostArch.pl)
export EPICS_HOST_ARCH export EPICS_HOST_ARCH
make -j2 $EXTRA # Base 3.15 doesn't have -qemu target architecture and needs an extra define
[ -e $EPICS_BASE/configure/os/CONFIG.Common.RTEMS-pc386-qemu ] || EXTRA_QEMU=RTEMS_QEMU_FIXUPS=YES
# use array variable to get the quoting right while using separate words for arguments
[ -n "$EXTRA0" ] && EXTRA[0]="$EXTRA0"
[ -n "$EXTRA1" ] && EXTRA[1]="$EXTRA1"
[ -n "$EXTRA2" ] && EXTRA[2]="$EXTRA2"
[ -n "$EXTRA3" ] && EXTRA[3]="$EXTRA3"
[ -n "$EXTRA4" ] && EXTRA[4]="$EXTRA4"
[ -n "$EXTRA5" ] && EXTRA[5]="$EXTRA5"
make -j2 $EXTRA_QEMU "${EXTRA[@]}"
ret=0 ret=0
if [ "$TEST" != "NO" ] if [ "$TEST" != "NO" ]
then then
make tapfiles || ret=$? make -j2 tapfiles || ret=$?
make -s test-results if grep -q "BASE_3_14=NO" $EPICS_BASE/configure/CONFIG_BASE_VERSION
then
grep -q "^test-results:" $EPICS_BASE/configure/RULES_BUILD && make -sk test-results
fi
fi fi
exit $ret exit $ret

View File

@@ -29,6 +29,23 @@ CACHEDIR=${CACHEDIR:-${HOME}/.cache}
echo -e "${ANSI_YELLOW}Using bash version $BASH_VERSION${ANSI_RESET}" echo -e "${ANSI_YELLOW}Using bash version $BASH_VERSION${ANSI_RESET}"
if [ -f /etc/hosts ]
then
# The travis-ci "bionic" image throws us a curveball in /etc/hosts
# by including two entries for localhost. The first for 127.0.1.1
# which causes epicsSockResolveTest to fail.
# cat /etc/hosts
# ...
# 127.0.1.1 localhost localhost ip4-loopback
# 127.0.0.1 localhost nettuno travis vagrant travis-job-....
sudo sed -i -e '/^127\.0\.1\.1/ s|localhost\s*||g' /etc/hosts
echo "==== /etc/hosts"
cat /etc/hosts
echo "===="
fi
# Load settings # Load settings
# ------------- # -------------
@@ -45,23 +62,32 @@ fold_end load.settings
# Check out dependencies # Check out dependencies
# ---------------------- # ----------------------
fold_start check.out.dependencies "Checking/cloning dependencies" if [ "$BASE" != "SELF" ]
then
fold_start check.out.dependencies "Checking/cloning dependencies"
for mod in BASE $ADD_MODULES $MODULES for mod in BASE $ADD_MODULES $MODULES
do do
mod_uc=${mod^^} mod_uc=${mod^^}
eval add_dependency $mod_uc \${${mod_uc}:=master} eval add_dependency $mod_uc \${${mod_uc}:=master}
done done
[ -e ./configure ] && cp ${CACHEDIR}/RELEASE.local ./configure/RELEASE.local [ -d ./configure ] && target=./configure/RELEASE.local || target=./RELEASE.local
cp ${CACHEDIR}/RELEASE.local $target
fold_end check.out.dependencies fold_end check.out.dependencies
fi
# Set up compiler # Set up compiler
# --------------- # ---------------
fold_start set.up.epics_build "Setting up EPICS build system" fold_start set.up.epics_build "Setting up EPICS build system"
eval $(grep "EPICS_BASE=" ${CACHEDIR}/RELEASE.local) if [ "$BASE" = "SELF" ]
then
EPICS_BASE=$CURDIR
else
eval $(grep "EPICS_BASE=" ${CACHEDIR}/RELEASE.local)
fi
export EPICS_BASE export EPICS_BASE
echo "EPICS_BASE=$EPICS_BASE" echo "EPICS_BASE=$EPICS_BASE"
@@ -70,7 +96,7 @@ echo "EPICS_BASE=$EPICS_BASE"
export EPICS_HOST_ARCH export EPICS_HOST_ARCH
echo "EPICS_HOST_ARCH=$EPICS_HOST_ARCH" echo "EPICS_HOST_ARCH=$EPICS_HOST_ARCH"
if echo ${modules_to_compile} | grep -q "$EPICS_BASE" if echo ${modules_to_compile} | grep -q "$EPICS_BASE" || [ "$BASE" = "SELF" ]
then then
# requires wine and g++-mingw-w64-i686 # requires wine and g++-mingw-w64-i686
@@ -158,8 +184,10 @@ EOF
RTEMS_VERSION=$RTEMS RTEMS_VERSION=$RTEMS
RTEMS_BASE=$HOME/.rtems RTEMS_BASE=$HOME/.rtems
EOF EOF
# Base 3.15 doesn't have -qemu target architecture
[ -e $EPICS_BASE/configure/os/CONFIG.Common.RTEMS-pc386-qemu ] && QEMU=-qemu
cat << EOF >> $EPICS_BASE/configure/CONFIG_SITE cat << EOF >> $EPICS_BASE/configure/CONFIG_SITE
CROSS_COMPILER_TARGET_ARCHS += RTEMS-pc386-qemu CROSS_COMPILER_TARGET_ARCHS += RTEMS-pc386$QEMU
EOF EOF
fi fi
@@ -180,6 +208,8 @@ fold_end set.up.compiler
echo "\$ make --version" echo "\$ make --version"
make --version make --version
[ "$BASE" = "SELF" ] && exit 0
# Build required dependencies # Build required dependencies
# --------------------------- # ---------------------------

View File

@@ -185,7 +185,7 @@ add_dependency() {
if [ -e ${versionfile} ] && grep -q "BASE_3_14=YES" ${versionfile} if [ -e ${versionfile} ] && grep -q "BASE_3_14=YES" ${versionfile}
then then
echo "Adding MSI 1.7 to $CACHEDIR/$dirname-$TAG" echo "Adding MSI 1.7 to $CACHEDIR/$dirname-$TAG"
( cd $dirname-$TAG; patch -p0 < $SCRIPTDIR/../add-msi-to-314.patch ) ( cd $dirname-$TAG; patch -p1 < $SCRIPTDIR/../add-msi-to-314.patch )
fi fi
else else
# fix non-base modules that do not include the .local files in configure/RELEASE # fix non-base modules that do not include the .local files in configure/RELEASE