From: Mark Rivers
Sent: Monday, December 04, 2017 5:39 PM
To: [email protected]
Subject: Problem building base-7.0.1 with Windows on a Linux file system
I am having trouble building for EPICS_HOST_ARCH=windows-x64-static on a Linux file server. Previously when building EPICS base there were no RELEASE or RELEASE.local
files to worry about. This is not the case with 7.0.1.
The file modules/RELEASE.local contains
EPICS_BASE = /usr/local/epics/base-7.0.1
which is where I put it on Linux.
I tried creating a new file in that directory, RELEASE.local.windows-x64-static. It contains:
EPICS_BASE = H:/epics/base-7.0.1
which is the correct path for Windows. However, that file does not seem to get included and I get this error when I build:
make[2]: Entering directory 'H:/epics/base-7.0.1/modules/libcom'
configure/CONFIG:19: /usr/local/epics/base-7.0.1/configure/CONFIG: No such file or directory
configure/RULES_TOP:2: /usr/local/epics/base-7.0.1/configure/RULES_TOP: No such file or directory
make[2]: *** No rule to make target '/usr/local/epics/base-7.0.1/configure/RULES_TOP'. Stop.
make[2]: Leaving directory 'H:/epics/base-7.0.1/modules/libcom'
../configure/RULES_DIRS:84: recipe for target 'libcom.install' failed
make[1]: *** [libcom.install] Error 2
make[1]: Leaving directory 'H:/epics/base-7.0.1/modules'
configure/RULES_DIRS:84: recipe for target 'modules.install' failed
make: *** [modules.install] Error 2
I was able to work around the problem by going to the modules/libcom/configure directory and changing RELEASE as follows:
corvette:modules/libcom/configure>git diff .
diff --git a/configure/RELEASE b/configure/RELEASE
index 4a0b99a..bc22d30 100644
--- a/configure/RELEASE
+++ b/configure/RELEASE
@@ -35,3 +35,5 @@
# without having to modify the configure/RELEASE file itself.
-include $(TOP)/../RELEASE.local
-include $(TOP)/configure/RELEASE.local
+-include $(TOP)/../RELEASE.local.$(EPICS_HOST_ARCH)
+-include $(TOP)/configure/RELEASE.local.$(EPICS_HOST_ARCH)
This involves editing the RELEASE file, which is discouraged. The alternative is to create:
modules/libcom/configure/RELEASE.windows-x64-static.Common
which contains the lines I added to RELEASE above.
I think this solution is quite ugly. I need to build for many following Windows architectures:
win32-x86
win32-x86-static
windows-x64
windows-x64-static
windows-x64-static-vs2015
…
This means that for 7.0.1 I would need to create at least 5 new RELEASE.$(EPICS_HOST_ARCH).Common files in each of these directories:
./ca/configure
./database/configure
./libcom/configure
./normativeTypes/configure
./pvAccess/configure
./pvData/configure
./pvDatabase/configure
./pva2pva/configure
./pvaClient/configure
That is 45 new files I need to create.
It seems like it would be much cleaner if the distributed RELEASE file in each of those directories was changed as I showed above.
Perhaps it needs to be more complex, to also include $(TOP)/../RELEASE.local.$(EPICS_HOST_ARCH).$(T_A), etc.?
It would be very nice if all I need to do is to create modules/RELEASE.local.$(EPICS_HOST_ARCH) to define EPICS_BASE and everything else just built out of the box. As
it is now I need to edit configure/RELEASE in 9 directories.
Perhaps I am missing something?
Thanks,
Mark