My apologies, in fact you are correct. Even with the fix_areaDetector branch the support/Makefile does not correctly handle the dependencies of areaDetector.
It was working for me because I used “make –j”. The timing of that worked out so that all of the areaDetector dependencies were in fact built before areaDetector needed them. However, that was just “luck”, and when I test without –j
I see the error you describe.
It does not build the modules in alphabetical order, it builds them in the following order:
ADSimDetector requires lots of other modules to be built first and that is not happening in a build without –j. I see the following error:
make: *** No rule to make target `../../../lib/linux-x86_64/libautosave.a', needed by `simDetectorNoIOCApp'. Stop.
make: Leaving directory `/home/epics/scratch/support/synApps/support/areaDetector-R3-7/ADSimDetector/iocs/simDetectorNoIOC/simDetectorNoIOCApp/src/O.linux-x86_64'
make: *** [install.linux-x86_64] Error 2
make: Leaving directory `/home/epics/scratch/support/synApps/support/areaDetector-R3-7/ADSimDetector/iocs/simDetectorNoIOC/simDetectorNoIOCApp/src'
make: *** [src.install] Error 2
The assemble_synApps.sh script in the fix_areaDetector branch of epics-synApps/support definitely works OK, I just tested it:
I just executed the following commands (recalled from “history”, removing commands that were not needed).
1240 14:12 git clone
1242 14:12 cd support/
1244 14:12 git checkout fix_areaDetector
1247 14:14 ./assemble_synApps.sh
1248 14:15 cd synApps/support/
1249 14:15 vi configure/RELEASE (I edited configure/RELEASE to set EPICS_BASE correctly)
1250 14:16 make release
1251 14:16 make -sj
1252 14:19 ls -l areaDetector-R3-7/ADSimDetector/iocs/simDetectorIOC/bin/linux-x86/
The build took under 3 minutes.
The last command shows that ADSimDetector was built correctly.
corvette:support/synApps/support>ls -l areaDetector-R3-7/ADSimDetector/iocs/simDetectorIOC/bin/linux-x86/
-r-xr-xr-x 1 epics domain users 75944 Oct 27 14:19 simDetectorApp
The xxx module was also built correctly:
corvette:support/synApps/support>ls -l xxx-R6-1/bin/linux-x86/
-r-xr-xr-x 1 epics domain users 137556 Oct 27 14:19 xxx
The assemble_synApps script itself calls "make release" as its final command. So the make knows where to look, but there's nothing there to find because that module hasn't
yet been built. For example, areaDetector depends on busy and calc, but the makefile tries to build them in alphabetical order. The script needs to know about dependencies, or at least take them into account when it creates the makefile.
You should not need to edit the Makefile.
After you ran assemble_synApps.sh and edited support/configure/RELEASE did you run this command:
You need to do that before then running
From: Tech-talk <firstname.lastname@example.org> on behalf of Siddons, David via Tech-talk <email@example.com>
Sent: Saturday, October 26, 2019 1:20 PM
To: EPICS Tech Talk
Subject: building synApps from Git
I just downloaded the latest synApps collection according to the instructions on its site, using the command:
followed, after setting some variables, "make".
It seems that the build works through the modules in alphabetical order, without regard to dependencies. In particular, it tries to build areaDetector very early, which fails because a bunch of libraries from other modules don't exist yet. I edited the Makefile
to move the areaDetector reference later in the list, and everything built OK.
Is this how it's supposed to be? Did I do something wrong?