<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.anl.gov/wiki_heliosdaq/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jta</id>
	<title>HELIOS Digital DAQ - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.anl.gov/wiki_heliosdaq/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jta"/>
	<link rel="alternate" type="text/html" href="https://wiki.anl.gov/heliosdaq/Special:Contributions/Jta"/>
	<updated>2026-06-23T23:13:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Digitizer_flushing&amp;diff=2014</id>
		<title>Digitizer flushing</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Digitizer_flushing&amp;diff=2014"/>
		<updated>2018-05-22T23:33:42Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* ServiceOneBuffer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Looking into the flushing of digitizers at run stop==&lt;br /&gt;
&lt;br /&gt;
This is one of many looks into the C source code found at /global/devel/gretTop/9-22/dgsDrivers/dgsDriverApp.  The code here is supposed to be the ATLAS-specific general drivers for triggers and digitizers.&lt;br /&gt;
&lt;br /&gt;
===inLoop.st===&lt;br /&gt;
The main data acquisition thread in the MVME5500 is the state machine &amp;quot;inloop&amp;quot;, found at /global/devel/gretTop/9-22/dgsDrivers/dgsDriverApp/src/inLoop.st.  There are variant versions of this code named inLoop.st.JTA (commented by me), inLoopDbg.st (a version that doesn&#039;t take data but allows you to dump various internal IOC information from the console port by setting a variable to different values).  Other variations of the inLoop name are probably temporary or deprecated versions.&lt;br /&gt;
&lt;br /&gt;
InLoop is written in &amp;quot;epics state machine language&amp;quot;, meaning that a set of states are named, and you can define things to do upon entry to the state, things to do when some condition becomes true during the state, and things to do when exiting the state.  General syntax is&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
   state StateName {&lt;br /&gt;
      entry {&lt;br /&gt;
        &amp;lt;&amp;lt;statements to be executed when state is entered from another state&amp;gt;&amp;gt;&lt;br /&gt;
      }&lt;br /&gt;
      when (&amp;lt;xxx&amp;gt;) {&lt;br /&gt;
        &amp;lt;&amp;lt;statements to be executed when condition &#039;xxx&#039; is true when in this state&amp;gt;&amp;gt;&lt;br /&gt;
      }  state NextState    &amp;lt;&amp;lt;&amp;lt;----  name of state to transition to when condition &amp;quot;xxx&amp;quot; is true, after executing statements in the braces&lt;br /&gt;
      exit {&lt;br /&gt;
       &amp;lt;&amp;lt;statements to be executed when exiting this state for any reason&amp;gt;&amp;gt;&lt;br /&gt;
       &amp;lt;&amp;lt;nominally could just be in when() condition braces but this works for *any* exit&amp;gt;&amp;gt;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When we look at what&#039;s going on during the run portion of inLoop.st, this shows that state &amp;quot;waitfordone&amp;quot; is supposed to be flushing the FIFOs of the digitizers after acquisition is stopped.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
   state run {&lt;br /&gt;
      option -e;	/* do entry every time */&lt;br /&gt;
      entry {&lt;br /&gt;
       %%if (readfifo_trace&amp;gt;5)	printf(&amp;quot;inLoop run&amp;quot;);&lt;br /&gt;
         dataReady = checkFIFO(boardNo, buildEnable);&lt;br /&gt;
      }&lt;br /&gt;
      when (!AcqRun) {&lt;br /&gt;
	      MLE=0; pvPut(MLE);&lt;br /&gt;
      } state waitfordone&lt;br /&gt;
      when (dataReady) {&lt;br /&gt;
        serviceOneBuffer(boardNo,dataReady);&lt;br /&gt;
      } state rundelay&lt;br /&gt;
      when (delay(tDly)) {&lt;br /&gt;
      }  state run&lt;br /&gt;
   }&lt;br /&gt;
   state waitfordone {&lt;br /&gt;
      option -e;	/* do entry every time */&lt;br /&gt;
      entry {&lt;br /&gt;
                %%if (readfifo_trace&amp;gt;5)	printf(&amp;quot;inLoop waitfordone&amp;quot;);&lt;br /&gt;
		dataReady = checkFIFO(boardNo, buildEnable);&lt;br /&gt;
      }&lt;br /&gt;
      when (dataReady &amp;gt; 1) {&lt;br /&gt;
        serviceOneBuffer(boardNo,dataReady);&lt;br /&gt;
      } state stopdelay&lt;br /&gt;
      when (delay(1)) {&lt;br /&gt;
         clearFIFO(boardNo);&lt;br /&gt;
      }  state setup&lt;br /&gt;
   }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The magic routine used in all cases to get data out of a digitizer is the routine &#039;&#039;serviceOneBuffer(boardNo,dataReady)&#039;&#039;.  It need be noted that this function is not &#039;&#039;event-based&#039;&#039; but is aligned to the amount of data that the MVME5500 considers a &#039;buffer&#039;.  &lt;br /&gt;
&lt;br /&gt;
===ServiceOneBuffer===&lt;br /&gt;
After a bit of looking you find the file readFIFO.c in the same directory as inLoop.st.  And you also find that within readFIFO.c there are at least &#039;&#039;&#039;four&#039;&#039;&#039; versions of &#039;&#039;serviceOneBuffer&#039;&#039; - one with that exact name, one called &#039;&#039;serviceOneBufferDGS&#039;&#039;, one named &#039;&#039;serviceOneBufferTrig&#039;&#039; and another named &#039;&#039;serviceOneBufferSim&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
You might think that &#039;&#039;serviceOneBufferDGS&#039;&#039; is for DGS digitizers, but you&#039;d be wrong.  The inLoop.st code calls &#039;&#039;serviceOneBuffer&#039;&#039;, not &#039;&#039;serviceOneBufferDGS&#039;&#039;.  Why?  Only the Deity knows.  Or maybe the guy in the place with fire and brimstone.  One of the two.  Not any of us.&lt;br /&gt;
&lt;br /&gt;
Anyway, the takeaway here is that the flushing problem appears to be in the back-end sorter code, not in the collection of data from the digitizers.  So we have to then figure out where all the buffer management junk is.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Digitizer_flushing&amp;diff=2013</id>
		<title>Digitizer flushing</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Digitizer_flushing&amp;diff=2013"/>
		<updated>2018-05-22T23:27:03Z</updated>

		<summary type="html">&lt;p&gt;Jta: Created page with &amp;quot;==Looking into the flushing of digitizers at run stop==  This is one of many looks into the C source code found at /global/devel/gretTop/9-22/dgsDrivers/dgsDriverApp.  The cod...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Looking into the flushing of digitizers at run stop==&lt;br /&gt;
&lt;br /&gt;
This is one of many looks into the C source code found at /global/devel/gretTop/9-22/dgsDrivers/dgsDriverApp.  The code here is supposed to be the ATLAS-specific general drivers for triggers and digitizers.&lt;br /&gt;
&lt;br /&gt;
===inLoop.st===&lt;br /&gt;
The main data acquisition thread in the MVME5500 is the state machine &amp;quot;inloop&amp;quot;, found at /global/devel/gretTop/9-22/dgsDrivers/dgsDriverApp/src/inLoop.st.  There are variant versions of this code named inLoop.st.JTA (commented by me), inLoopDbg.st (a version that doesn&#039;t take data but allows you to dump various internal IOC information from the console port by setting a variable to different values).  Other variations of the inLoop name are probably temporary or deprecated versions.&lt;br /&gt;
&lt;br /&gt;
InLoop is written in &amp;quot;epics state machine language&amp;quot;, meaning that a set of states are named, and you can define things to do upon entry to the state, things to do when some condition becomes true during the state, and things to do when exiting the state.  General syntax is&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
   state StateName {&lt;br /&gt;
      entry {&lt;br /&gt;
        &amp;lt;&amp;lt;statements to be executed when state is entered from another state&amp;gt;&amp;gt;&lt;br /&gt;
      }&lt;br /&gt;
      when (&amp;lt;xxx&amp;gt;) {&lt;br /&gt;
        &amp;lt;&amp;lt;statements to be executed when condition &#039;xxx&#039; is true when in this state&amp;gt;&amp;gt;&lt;br /&gt;
      }  state NextState    &amp;lt;&amp;lt;&amp;lt;----  name of state to transition to when condition &amp;quot;xxx&amp;quot; is true, after executing statements in the braces&lt;br /&gt;
      exit {&lt;br /&gt;
       &amp;lt;&amp;lt;statements to be executed when exiting this state for any reason&amp;gt;&amp;gt;&lt;br /&gt;
       &amp;lt;&amp;lt;nominally could just be in when() condition braces but this works for *any* exit&amp;gt;&amp;gt;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When we look at what&#039;s going on during the run portion of inLoop.st, this shows that state &amp;quot;waitfordone&amp;quot; is supposed to be flushing the FIFOs of the digitizers after acquisition is stopped.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
   state run {&lt;br /&gt;
      option -e;	/* do entry every time */&lt;br /&gt;
      entry {&lt;br /&gt;
       %%if (readfifo_trace&amp;gt;5)	printf(&amp;quot;inLoop run&amp;quot;);&lt;br /&gt;
         dataReady = checkFIFO(boardNo, buildEnable);&lt;br /&gt;
      }&lt;br /&gt;
      when (!AcqRun) {&lt;br /&gt;
	      MLE=0; pvPut(MLE);&lt;br /&gt;
      } state waitfordone&lt;br /&gt;
      when (dataReady) {&lt;br /&gt;
        serviceOneBuffer(boardNo,dataReady);&lt;br /&gt;
      } state rundelay&lt;br /&gt;
      when (delay(tDly)) {&lt;br /&gt;
      }  state run&lt;br /&gt;
   }&lt;br /&gt;
   state waitfordone {&lt;br /&gt;
      option -e;	/* do entry every time */&lt;br /&gt;
      entry {&lt;br /&gt;
                %%if (readfifo_trace&amp;gt;5)	printf(&amp;quot;inLoop waitfordone&amp;quot;);&lt;br /&gt;
		dataReady = checkFIFO(boardNo, buildEnable);&lt;br /&gt;
      }&lt;br /&gt;
      when (dataReady &amp;gt; 1) {&lt;br /&gt;
        serviceOneBuffer(boardNo,dataReady);&lt;br /&gt;
      } state stopdelay&lt;br /&gt;
      when (delay(1)) {&lt;br /&gt;
         clearFIFO(boardNo);&lt;br /&gt;
      }  state setup&lt;br /&gt;
   }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The magic routine used in all cases to get data out of a digitizer is the routine &#039;&#039;serviceOneBuffer(boardNo,dataReady)&#039;&#039;.  It need be noted that this function is not &#039;&#039;event-based&#039;&#039; but is aligned to the amount of data that the MVME5500 considers a &#039;buffer&#039;.  &lt;br /&gt;
&lt;br /&gt;
===ServiceOneBuffer===&lt;br /&gt;
After a bit of looking you find the file readFIFO.c in the same directory as inLoop.st.  And you also find that within readFIFO.c there are at least &#039;&#039;&#039;four&#039;&#039;&#039; versions of &#039;&#039;serviceOneBuffer&#039;&#039; - one with that exact name, one called &#039;&#039;serviceOneBufferDGS&#039;&#039;, one named &#039;&#039;serviceOneBufferTrig&#039;&#039; and another named &#039;&#039;serviceOneBufferSim&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=2012</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=2012"/>
		<updated>2018-05-22T21:55:04Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Goals for VME99 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
The IOC has been flashed with the most recent BSP file (devel7) and has been given in IP address on ONENET&lt;br /&gt;
 192.168.203.211&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.  Discussion of this is found at [[digitizer flushing]].&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
[[Other bugs found in DGS1 Gnote files]]&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- &amp;lt;s&amp;gt;Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.&amp;lt;/s&amp;gt;  (completed)&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;s&amp;gt;Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal &amp;lt;/s&amp;gt; (done)&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;s&amp;gt;Serial connect on the &amp;quot;new&amp;quot; linux machine (need root access) &amp;lt;/s&amp;gt; (done)&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details. HOWTO: &#039;&#039;pycd&#039;&#039; on &#039;&#039;dgs1&#039;&#039;, a number of &#039;&#039;build directories&#039;&#039; are there, &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; is the main program. &lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]: JTA and WJ working on this on CON5. Located, now looking for a simple Makefile that is &#039;&#039;flat&#039;&#039;. &#039;&#039;&#039;/global/devel/gretTop/9-22/dgsDrivers/Makefile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
===relevant documentation that is elsewhere ===&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/The_DGS/DFMA_EPICS_Implementation&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/Tim_Madden_software_documentation&lt;br /&gt;
&lt;br /&gt;
===Understanding how many Makes there are in the system===&lt;br /&gt;
&lt;br /&gt;
The general process for updating the PVs is to do the following:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
ssh con5&lt;br /&gt;
cd /global/devel/gretTop/9-22/dgsDrivers&lt;br /&gt;
make&lt;br /&gt;
cd ..&lt;br /&gt;
cd dgsIoc&lt;br /&gt;
make&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a cryptic comment in the Python code where the above is in comments, that says&lt;br /&gt;
&lt;br /&gt;
 #it may be devel or develbuild... depending on where you are building from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Breakdown of the make file ===&lt;br /&gt;
 [[MakeFile Archaeology]]&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattening_the_2nd_makefile&amp;diff=2011</id>
		<title>Flattening the 2nd makefile</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattening_the_2nd_makefile&amp;diff=2011"/>
		<updated>2018-05-22T21:53:56Z</updated>

		<summary type="html">&lt;p&gt;Jta: Created page with &amp;quot;==This page attempts to understand the dgsIoc makefile==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==This page attempts to understand the dgsIoc makefile==&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=2010</id>
		<title>MakeFile Archaeology</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=2010"/>
		<updated>2018-05-22T21:48:43Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Now for the 2nd makefile in the usual build */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digging up the make file and all that it refers to ==&lt;br /&gt;
&lt;br /&gt;
We start with the makefile itself, found at /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
The makefile presumes that it is being run from the top of the development tree, setting internal variable TOP to &amp;quot;.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The makefile then includes the contents of the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG.  &lt;br /&gt;
** This file includes the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP but all other lines are commented out.&lt;br /&gt;
*** File /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP itself then pulls in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but the other files are &#039;&#039;&#039;&#039;&#039;not included&#039;&#039;&#039;&#039;&#039; because the &amp;quot;-include&amp;quot; directive means &amp;quot;do not include&amp;quot;.  Guess that&#039;s a backwards way to comment out the line.&lt;br /&gt;
&lt;br /&gt;
    Thus at this point in the make what has realled happened is that we&#039;ve pulled in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but nothing else has occurred.&lt;br /&gt;
&lt;br /&gt;
=== File /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE ===&lt;br /&gt;
&lt;br /&gt;
*  defines a variable TEMPLATE_TOP that is not used later within this file,  and is dependent upon the definition of the variable EPICS_BASE that occurs later in this same file.&lt;br /&gt;
*  defines a variable GRETVME that parses out to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
*  defines a variable DATASERVER that parses out to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
*  defines a variable SNCSEQ to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
**  Obscure comment about needing SNCSEQ defined &amp;quot;if using the sequencer&amp;quot;, but at this point we don&#039;t know what a &amp;quot;sequencer&amp;quot; is.&lt;br /&gt;
*  defines a variable ASYN to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
**  No comment available but we guess that this is intended for later use to bring in the ASYN driver C++ stuff later.&lt;br /&gt;
*  defines the variable EPICS_BASE to the value /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
**  This is probably something that will be dependent upon which processor is in use as different processors may have different versions of EPICS.&lt;br /&gt;
*  and then a couple more commented-out lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    So at this point we have &lt;br /&gt;
    Variable TOP is set to /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
    Variable GRETVME is set to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
    Variable DATASERVER is set to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
    Variable SNCSEQ is set to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
    Variable ASYN is set to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
    Variable EPICS_BASE is set to /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
    Variable TEMPLATE_TOP is set to /global/develbuild/base/base-3.14.12.1/templates/makeBaseApp/top, because that is done with &amp;quot;=&amp;quot; (deferred assignment) as opposed to &amp;quot;:=&amp;quot; (immediate assignment).&lt;br /&gt;
&lt;br /&gt;
At this point we&#039;ve run down the chain of includes from /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG at the top of the makefile.  We now recurse back to the original makefile (found at /global/devel/gretTop/9-22/dgsDrivers/Makefile) to see what happens after the first include.&lt;br /&gt;
&lt;br /&gt;
=== Back up to original makefile ===&lt;br /&gt;
&lt;br /&gt;
* after including $(TOP)/configure/CONFIG, parsed out above, the main makefile then builds up the value to be stored in the variable DIRS.  It is inobvious until you read up on make, but the lines that say DIRS := ($DIRS) $(blahblahblah) is an implied concatenation, identical to DIRS += $(blahblahblah).&lt;br /&gt;
* the five lines with DIRS := are then a series of concatenations to fill DIRS with a list of values.&lt;br /&gt;
* Each of the value lists uses the &#039;&#039;filter-out&#039;&#039; operator, defined as &lt;br /&gt;
&lt;br /&gt;
     $(filter-out pattern…,text)&lt;br /&gt;
     Returns all whitespace-separated words in text that do not match any of the pattern words, removing the words that do match one or more. This is the exact opposite of the filter function.&lt;br /&gt;
&lt;br /&gt;
* The lines defining DIRS are not understood at this point, because we don&#039;t know what DIRS was originally defined to be; thus we can&#039;t understand why certain parts of an unknown tree are being excluded.&lt;br /&gt;
&lt;br /&gt;
=== main Makefile now includes $(TOP)/configure/RULES_TOP. ===&lt;br /&gt;
&lt;br /&gt;
* In what comes as no surprise at all, all this file does is include some other file $(EPICS_BASE)/configure/RULES_TOP.  That parses out to /global/develbuild/base/base-3.14.12.1/configure/RULES_TOP.&lt;br /&gt;
&lt;br /&gt;
=== What does RULES_TOP do? ===&lt;br /&gt;
&lt;br /&gt;
The first thing RULES_TOP does is include RULES_DIRS, but after that RULES_TOP actually has some real actions.  RULES_DIRS doesn&#039;t seem to include anything else, so we may have dug to the point where we can copy/paste from this tree of includes into a flat makefile that we can decode.&lt;br /&gt;
&lt;br /&gt;
[[Flattened Makefile 1]]&lt;br /&gt;
&lt;br /&gt;
==Now for the 2nd makefile in the usual build==&lt;br /&gt;
&lt;br /&gt;
The first makefile seems to be completely involved in building EPICS with nothing particularly specific to a given experiment. &lt;br /&gt;
The second makefile we usually run is found at /global/devel/gretTop/9-22/dgsIoc/Makefile.&lt;br /&gt;
&lt;br /&gt;
In what should be no surprise it looks the same as the other one, but probably some sub-included makefile is different.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Flattening the 2nd makefile]]&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=2009</id>
		<title>MakeFile Archaeology</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=2009"/>
		<updated>2018-05-22T21:48:01Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* What does RULES_TOP do? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digging up the make file and all that it refers to ==&lt;br /&gt;
&lt;br /&gt;
We start with the makefile itself, found at /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
The makefile presumes that it is being run from the top of the development tree, setting internal variable TOP to &amp;quot;.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The makefile then includes the contents of the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG.  &lt;br /&gt;
** This file includes the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP but all other lines are commented out.&lt;br /&gt;
*** File /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP itself then pulls in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but the other files are &#039;&#039;&#039;&#039;&#039;not included&#039;&#039;&#039;&#039;&#039; because the &amp;quot;-include&amp;quot; directive means &amp;quot;do not include&amp;quot;.  Guess that&#039;s a backwards way to comment out the line.&lt;br /&gt;
&lt;br /&gt;
    Thus at this point in the make what has realled happened is that we&#039;ve pulled in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but nothing else has occurred.&lt;br /&gt;
&lt;br /&gt;
=== File /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE ===&lt;br /&gt;
&lt;br /&gt;
*  defines a variable TEMPLATE_TOP that is not used later within this file,  and is dependent upon the definition of the variable EPICS_BASE that occurs later in this same file.&lt;br /&gt;
*  defines a variable GRETVME that parses out to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
*  defines a variable DATASERVER that parses out to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
*  defines a variable SNCSEQ to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
**  Obscure comment about needing SNCSEQ defined &amp;quot;if using the sequencer&amp;quot;, but at this point we don&#039;t know what a &amp;quot;sequencer&amp;quot; is.&lt;br /&gt;
*  defines a variable ASYN to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
**  No comment available but we guess that this is intended for later use to bring in the ASYN driver C++ stuff later.&lt;br /&gt;
*  defines the variable EPICS_BASE to the value /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
**  This is probably something that will be dependent upon which processor is in use as different processors may have different versions of EPICS.&lt;br /&gt;
*  and then a couple more commented-out lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    So at this point we have &lt;br /&gt;
    Variable TOP is set to /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
    Variable GRETVME is set to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
    Variable DATASERVER is set to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
    Variable SNCSEQ is set to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
    Variable ASYN is set to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
    Variable EPICS_BASE is set to /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
    Variable TEMPLATE_TOP is set to /global/develbuild/base/base-3.14.12.1/templates/makeBaseApp/top, because that is done with &amp;quot;=&amp;quot; (deferred assignment) as opposed to &amp;quot;:=&amp;quot; (immediate assignment).&lt;br /&gt;
&lt;br /&gt;
At this point we&#039;ve run down the chain of includes from /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG at the top of the makefile.  We now recurse back to the original makefile (found at /global/devel/gretTop/9-22/dgsDrivers/Makefile) to see what happens after the first include.&lt;br /&gt;
&lt;br /&gt;
=== Back up to original makefile ===&lt;br /&gt;
&lt;br /&gt;
* after including $(TOP)/configure/CONFIG, parsed out above, the main makefile then builds up the value to be stored in the variable DIRS.  It is inobvious until you read up on make, but the lines that say DIRS := ($DIRS) $(blahblahblah) is an implied concatenation, identical to DIRS += $(blahblahblah).&lt;br /&gt;
* the five lines with DIRS := are then a series of concatenations to fill DIRS with a list of values.&lt;br /&gt;
* Each of the value lists uses the &#039;&#039;filter-out&#039;&#039; operator, defined as &lt;br /&gt;
&lt;br /&gt;
     $(filter-out pattern…,text)&lt;br /&gt;
     Returns all whitespace-separated words in text that do not match any of the pattern words, removing the words that do match one or more. This is the exact opposite of the filter function.&lt;br /&gt;
&lt;br /&gt;
* The lines defining DIRS are not understood at this point, because we don&#039;t know what DIRS was originally defined to be; thus we can&#039;t understand why certain parts of an unknown tree are being excluded.&lt;br /&gt;
&lt;br /&gt;
=== main Makefile now includes $(TOP)/configure/RULES_TOP. ===&lt;br /&gt;
&lt;br /&gt;
* In what comes as no surprise at all, all this file does is include some other file $(EPICS_BASE)/configure/RULES_TOP.  That parses out to /global/develbuild/base/base-3.14.12.1/configure/RULES_TOP.&lt;br /&gt;
&lt;br /&gt;
=== What does RULES_TOP do? ===&lt;br /&gt;
&lt;br /&gt;
The first thing RULES_TOP does is include RULES_DIRS, but after that RULES_TOP actually has some real actions.  RULES_DIRS doesn&#039;t seem to include anything else, so we may have dug to the point where we can copy/paste from this tree of includes into a flat makefile that we can decode.&lt;br /&gt;
&lt;br /&gt;
[[Flattened Makefile 1]]&lt;br /&gt;
&lt;br /&gt;
==Now for the 2nd makefile in the usual build==&lt;br /&gt;
&lt;br /&gt;
The first makefile seems to be completely involved in building EPICS with nothing particularly specific to a given experiment. &lt;br /&gt;
The second makefile we usually run is found at /global/devel/gretTop/9-22/dgsIoc/Makefile.&lt;br /&gt;
&lt;br /&gt;
In what should be no surprise it looks the same as the other one, but probably some sub-included makefile is different.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=2008</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=2008"/>
		<updated>2018-05-22T21:41:54Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
This Wiki page traces through /global/devel/gretTop/9-22/dgsDrivers/Makefile.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
There is some basic EPICS documentation found at https://epics.anl.gov/base/R3-14/12-docs/AppDevGuide/node5.html  that hopefully will assist in understanding some of this makefile structure.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.3 expansion of include $(CONFIG)/CONFIG_BASE&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base directories&lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_HOST_BIN = $(EPICS_BASE)/bin/$(EPICS_HOST_ARCH)&lt;br /&gt;
EPICS_BASE_HOST_LIB = $(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
EPICS_BASE_LIB      = $(EPICS_BASE)/lib/$(T_A)&lt;br /&gt;
EPICS_BASE_BIN      = $(EPICS_BASE)/bin/$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base Ioc libraries &lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_IOC_LIBS += recIoc softDevIoc&lt;br /&gt;
EPICS_BASE_IOC_LIBS += miscIoc rsrvIoc dbtoolsIoc asIoc&lt;br /&gt;
EPICS_BASE_IOC_LIBS += dbIoc registryIoc dbStaticIoc ca Com &lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base Host libraries &lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_HOST_LIBS += cas gdd asHost dbStaticHost registryIoc&lt;br /&gt;
EPICS_BASE_HOST_LIBS += ca Com&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Version number for base shared libraries (and win32 products)&lt;br /&gt;
&lt;br /&gt;
ifdef BASE_TOP&lt;br /&gt;
SHRLIB_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)&lt;br /&gt;
PROD_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)&lt;br /&gt;
endif # BASE_TOP&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Base c preprocessor flags&lt;br /&gt;
&lt;br /&gt;
BASE_CPPFLAGS = &lt;br /&gt;
&lt;br /&gt;
# osithread default stack&lt;br /&gt;
OSITHREAD_USE_DEFAULT_STACK = NO&lt;br /&gt;
OSITHREAD_DEFAULT_STACK_FLAGS_YES = -DOSITHREAD_USE_DEFAULT_STACK&lt;br /&gt;
OSITHREAD_DEFAULT_STACK_FLAGS_NO =&lt;br /&gt;
BASE_CPPFLAGS += $(OSITHREAD_DEFAULT_STACK_FLAGS_$(OSITHREAD_USE_DEFAULT_STACK))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Where to find the installed build tools&lt;br /&gt;
&lt;br /&gt;
TOOLS = $(EPICS_BASE_HOST_BIN)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base build tools and tool flags&lt;br /&gt;
&lt;br /&gt;
MAKEBPT                    = $(call PATH_FILTER, $(TOOLS)/makeBpt$(HOSTEXE))&lt;br /&gt;
DBEXPAND                   = $(call PATH_FILTER, $(TOOLS)/dbExpand$(HOSTEXE))&lt;br /&gt;
DBTORECORDTYPEH            = $(call PATH_FILTER, $(TOOLS)/dbToRecordtypeH$(HOSTEXE))&lt;br /&gt;
DBTOMENUH                  = $(call PATH_FILTER, $(TOOLS)/dbToMenuH$(HOSTEXE))&lt;br /&gt;
REGISTERRECORDDEVICEDRIVER = $(PERL) $(TOOLS)/registerRecordDeviceDriver.pl&lt;br /&gt;
CONVERTRELEASE=$(PERL) $(TOOLS)/convertRelease.pl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# tools for installing libraries and products&lt;br /&gt;
INSTALL = $(PERL) $(TOOLS)/installEpics.pl&lt;br /&gt;
INSTALL_PRODUCT = $(INSTALL)&lt;br /&gt;
INSTALL_LIBRARY = $(INSTALL)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# tools for making header dependancies and variable replacement&lt;br /&gt;
MKMF                       = $(PERL) $(TOOLS)/mkmf.pl&lt;br /&gt;
REPLACEVAR                 = $(PERL) $(TOOLS)/replaceVAR.pl&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# private versions of lex/yacc from EPICS&lt;br /&gt;
EYACC = $(call PATH_FILTER, $(TOOLS)/antelope$(HOSTEXE))&lt;br /&gt;
ELEX = $(call PATH_FILTER, $(TOOLS)/e_flex$(HOSTEXE)) -S$(EPICS_BASE)/include/flex.skel.static&lt;br /&gt;
&lt;br /&gt;
YACC  = $(EYACC)&lt;br /&gt;
LEX   = $(ELEX)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# External tools and tool flags - must be in path or defined in application&lt;br /&gt;
&lt;br /&gt;
ifndef ADL2DL&lt;br /&gt;
ADL2DL = adl2dl&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# sch2edif compiler and flags&lt;br /&gt;
SCH2EDIF = sch2edif&lt;br /&gt;
SCH2EDIF_PATH =&lt;br /&gt;
SCH2EDIF_SYSFLAGS = -n -ap -p.+..+$(SCH2EDIF_PATH)+$(CAPFAST_TEMPLATES)/sym+&lt;br /&gt;
SCH2EDIF_FLAGS =&lt;br /&gt;
 &lt;br /&gt;
# e2db and flags&lt;br /&gt;
#    - again there is an assumption where edb.def is installed.&lt;br /&gt;
ifndef E2DB&lt;br /&gt;
E2DB = e2db&lt;br /&gt;
endif&lt;br /&gt;
E2DB_SYSFLAGS = -ate -d $(CAPFAST_TEMPLATES)/edb.def&lt;br /&gt;
E2DB_FLAGS =&lt;br /&gt;
&lt;br /&gt;
ifndef DBST&lt;br /&gt;
DBST = dbst&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifndef MSI&lt;br /&gt;
MSI = msi&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.3; return to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.4; expansion of include $(CONFIG)/CONFIG_SITE&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution.&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20110419200536-zulwts6vf1tr4uuc&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_SITE  - Global site configuration file&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
#  The host architecture performing the build, in the form&lt;br /&gt;
#       &amp;lt;operating system&amp;gt;-&amp;lt;architecture&amp;gt;[-&amp;lt;toolset&amp;gt;]&lt;br /&gt;
#&lt;br /&gt;
#  Currently Supporting:&lt;br /&gt;
#	aix-ppc                (IBM compiler used for host builds)&lt;br /&gt;
#	aix-ppc-gnu            (GNU compiler used for host builds)&lt;br /&gt;
#	cygwin-x86             (cygwin compiler used for host builds)&lt;br /&gt;
#	darwin-ppc             (PowerPC based Apple running OSX)&lt;br /&gt;
#	darwin-ppcx86          (Universal binaries for both CPUs)&lt;br /&gt;
#	darwin-x86             (Intel based Apple running OSX)&lt;br /&gt;
#	freebsd-x86            (GNU compiler used for host builds)&lt;br /&gt;
#	freebsd-x86_64         (GNU compiler used for host builds)&lt;br /&gt;
#	linux-ppc              (GNU compiler used for host builds)&lt;br /&gt;
#	linux-ppc64            (GNU compiler used for host builds)&lt;br /&gt;
#	linux-x86              (GNU compiler used for host builds)&lt;br /&gt;
#	linux-x86_64           (GNU compiler used for host builds)&lt;br /&gt;
#	linux-x86-borland      (Borland C++ compiler used for host builds)&lt;br /&gt;
#	solaris-sparc          (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-sparc-gnu      (GNU compiler used for host builds)&lt;br /&gt;
#	solaris-sparc64        (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-sparc64-gnu    (GNU compiler used for host builds)&lt;br /&gt;
#	solaris-x86            (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-x86-gnu        (GNU compiler used for host builds)&lt;br /&gt;
#	solaris-x86_64         (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-x86_64-gnu     (GNU compiler used for host builds)&lt;br /&gt;
#	win32-x86              (MS Visual C++ compiler used for host builds)&lt;br /&gt;
#	win32-x86-cygwin       (WIN32 API with cygwin GNU compiler used for host builds)&lt;br /&gt;
#	win32-x86-mingw        (MinGW compiler used for host builds)&lt;br /&gt;
#	windows-x64            (MS Visual C++ compiler used for host builds)&lt;br /&gt;
&lt;br /&gt;
#  Debugging builds &lt;br /&gt;
#	linux-x86-debug        (GNU compiler with -g option for host builds)&lt;br /&gt;
#	linux-x86_64-debug     (GNU compiler with -g option for host builds)&lt;br /&gt;
#	solaris-sparc-debug    (sun compiler no optimization,-g for debugging info)&lt;br /&gt;
#	win32-x86-debug        (MS Visual C++ compiler with debug option for host builds)&lt;br /&gt;
#	windows-x64-debug      (MS Visual C++ compiler with debug option for host builds)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#  EPICS_HOST_ARCH is a required environment variable&lt;br /&gt;
#  Do not set EPICS_HOST_ARCH in this file. &lt;br /&gt;
#  Use base/startup files to set EPICS_HOST_ARCH or &lt;br /&gt;
#  provide EPICS_HOST_ARCH on the GNU make command line.&lt;br /&gt;
&lt;br /&gt;
#  The cross-compiler architectures to build EPICS for&lt;br /&gt;
#&lt;br /&gt;
#  Currently Supporting:&lt;br /&gt;
&lt;br /&gt;
#       ios-arm&lt;br /&gt;
#       ios-386&lt;br /&gt;
#       linux-386               (linux-x86 host)&lt;br /&gt;
#       linux-486               (linux-x86 host)&lt;br /&gt;
#       linux-586               (linux-x86 host)&lt;br /&gt;
#       linux-686               (linux-x86 host)&lt;br /&gt;
#       linux-arm               (linux-x86 host)&lt;br /&gt;
#       linux-arm_eb            (linux-x86 host)&lt;br /&gt;
#       linux-arm_el            (linux-x86 host)&lt;br /&gt;
#       linux-athlon            (linux-x86 host)&lt;br /&gt;
#       linux-cris              (Axis GNU crosscompiler on linux-x86 host)&lt;br /&gt;
#       linux-cris_v10          (Axis GNU crosscompiler on linux-x86 host)&lt;br /&gt;
#       linux-cris_v32          (Axis GNU crosscompiler on linux-x86 host)&lt;br /&gt;
#       linux-xscale_be&lt;br /&gt;
#       vxWorks-486&lt;br /&gt;
#       vxWorks-68040&lt;br /&gt;
#       vxWorks-68040lc&lt;br /&gt;
#       vxWorks-68060&lt;br /&gt;
#       vxWorks-pentium&lt;br /&gt;
#       vxWorks-ppc32           (32-bit PowerPC CPUs with full FPU)&lt;br /&gt;
#       vxWorks-ppc32sf         (32-bit PowerPC CPUs without FPU)&lt;br /&gt;
#       vxWorks-ppc603&lt;br /&gt;
#       vxWorks-ppc603_long&lt;br /&gt;
#       vxWorks-ppc604&lt;br /&gt;
#       vxWorks-ppc604_long&lt;br /&gt;
#       vxWorks-ppc604_altivec&lt;br /&gt;
#       vxWorks-mpc8540&lt;br /&gt;
#       vxWorks-mpc8548&lt;br /&gt;
#       RTEMS-at91rm9200ek&lt;br /&gt;
#       RTEMS-beatnik&lt;br /&gt;
#       RTEMS-gen68360&lt;br /&gt;
#       RTEMS-mcp750&lt;br /&gt;
#       RTEMS-mvme167&lt;br /&gt;
#       RTEMS-mvme2100&lt;br /&gt;
#       RTEMS-mvme2700&lt;br /&gt;
#       RTEMS-mvme3100&lt;br /&gt;
#       RTEMS-mvme5500&lt;br /&gt;
#       RTEMS-pc386&lt;br /&gt;
#       RTEMS-psim&lt;br /&gt;
#       RTEMS-uC5282&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Definitions of CROSS_COMPILER_TARGET_ARCHS in&lt;br /&gt;
# configure/os/CONFIG_SITE.&amp;lt;host&amp;gt;.Common files will&lt;br /&gt;
# override &lt;br /&gt;
#&lt;br /&gt;
CROSS_COMPILER_TARGET_ARCHS=vxWorks-ppc604_long&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-ppc32&lt;br /&gt;
&lt;br /&gt;
#  If only a subset of the host architectures perform&lt;br /&gt;
#  the build for the CROSS_COMPILER_TARGET_ARCHS&lt;br /&gt;
#  uncomment the following line and specify them.&lt;br /&gt;
#&lt;br /&gt;
CROSS_COMPILER_HOST_ARCHS=solaris-sparc-gnu&lt;br /&gt;
&lt;br /&gt;
#  Build shared libraries?&lt;br /&gt;
#        must be either YES or NO&lt;br /&gt;
#     NOTE: os/CONFIG.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files and&lt;br /&gt;
#     os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files may override&lt;br /&gt;
#&lt;br /&gt;
#     NOTE WIN32: YES results in a DLL.  Valid settings are&lt;br /&gt;
#                   SHARED_LIBRARIES=YES and STATIC_BUILD=NO&lt;br /&gt;
#                   SHARED_LIBRARIES=NO  and STATIC_BUILD=YES&lt;br /&gt;
#&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
&lt;br /&gt;
#  Build client objects statically ?&lt;br /&gt;
#        must be either YES or NO&lt;br /&gt;
#&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
&lt;br /&gt;
#  Should header dependancy files be automatically generated&lt;br /&gt;
#  for each C/C++ created object file?&lt;br /&gt;
#        must be either YES or NO&lt;br /&gt;
HDEPENDS=YES&lt;br /&gt;
&lt;br /&gt;
#  Host build optimization&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
&lt;br /&gt;
#  Cross build optimization&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
&lt;br /&gt;
#  Generate Verbose Compiler Warnings for Host builds&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
&lt;br /&gt;
#  Create and/or install perl build tools for R3.13 extension builds?&lt;br /&gt;
#  must be either YES or NO&lt;br /&gt;
#&lt;br /&gt;
#  NOTE: Set to YES only if you have existing R3.13 extensions to be&lt;br /&gt;
#  built with this base&lt;br /&gt;
#&lt;br /&gt;
#COMPAT_TOOLS_313=YES&lt;br /&gt;
&lt;br /&gt;
#  Create and/or install files for R3.13 ioc application and extension builds?&lt;br /&gt;
#  must be either YES or NO&lt;br /&gt;
#&lt;br /&gt;
#  NOTE: Set to YES only if you have existing R3.13 ioc applications&lt;br /&gt;
#  and extensions to be built with this base&lt;br /&gt;
#&lt;br /&gt;
COMPAT_313=NO&lt;br /&gt;
&lt;br /&gt;
#  Installation directory&lt;br /&gt;
# If you don&#039;t want to install into $(TOP) dir then&lt;br /&gt;
# define INSTALL_LOCATION here&lt;br /&gt;
#INSTALL_LOCATION=&amp;lt;fullpathname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Use POSIX thread priority scheduling (YES or NO)&lt;br /&gt;
USE_POSIX_THREAD_PRIORITY_SCHEDULING = NO&lt;br /&gt;
&lt;br /&gt;
#  Site version number, if set will append &#039;-&#039; and this string to the&lt;br /&gt;
#  EPICS version number string that is reported by many tools&lt;br /&gt;
EPICS_SITE_VERSION =&lt;br /&gt;
&lt;br /&gt;
# For GNU compiler, use pipes rather than temporary files for communication &lt;br /&gt;
# between the various stages of compilation.&lt;br /&gt;
GCC_PIPE = NO&lt;br /&gt;
&lt;br /&gt;
#  Include RPATH when linking executables and libraries.&lt;br /&gt;
#       must be either YES or NO&lt;br /&gt;
LINKER_USE_RPATH=YES&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.4; return to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.2 Manual expansion of line include $(TOP)/configure/RULES_TOP&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#RULES_TOP&lt;br /&gt;
include $(EPICS_BASE)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.2.1 Manual expansion of line include $(EPICS_BASE)/configure/RULES_TOP&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/RULES_DIRS&lt;br /&gt;
&lt;br /&gt;
UNINSTALL_DIRS += $(INSTALL_DBD) $(INSTALL_INCLUDE) $(INSTALL_DOC)\&lt;br /&gt;
        $(INSTALL_HTML) $(INSTALL_JAVA) $(INSTALL_TEMPLATES) \&lt;br /&gt;
        $(INSTALL_DB)&lt;br /&gt;
UNINSTALL_DIRS += $(DIRECTORY_TARGETS)&lt;br /&gt;
&lt;br /&gt;
uninstallArchTargets = $(foreach arch,$(BUILD_ARCHS), uninstall$(DIVIDER)$(arch))&lt;br /&gt;
archPart = $(word 2, $(subst $(DIVIDER), ,$@))&lt;br /&gt;
&lt;br /&gt;
$(uninstallArchTargets): uninstallDirs&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)/$(archPart) $(INSTALL_LOCATION_LIB)/$(archPart) &lt;br /&gt;
&lt;br /&gt;
cleandirs:&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_BIN)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)&lt;br /&gt;
endif&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_LIB)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
endif&lt;br /&gt;
	@echo&lt;br /&gt;
# The echo above stops a &amp;quot;nothing to be done for cleandirs&amp;quot; message&lt;br /&gt;
&lt;br /&gt;
distclean: realclean realuninstall&lt;br /&gt;
&lt;br /&gt;
CVSCLEAN=$(firstword $(wildcard $(TOOLS)/cvsclean.pl $(TOP)/src/tools/cvsclean.pl))&lt;br /&gt;
&lt;br /&gt;
cvsclean:&lt;br /&gt;
	@$(PERL) $(CVSCLEAN) &lt;br /&gt;
&lt;br /&gt;
realuninstall:&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
uninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))&lt;br /&gt;
	@$(MAKE) -f Makefile  cleandirs&lt;br /&gt;
&lt;br /&gt;
uninstallDirs:&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Usage: gnumake [options] [target] ...&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by all Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install        - Builds and installs all targets (default rule)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     all            - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     buildInstall   - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean          - Removes the O.&amp;lt;arch&amp;gt; dirs created by running make&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      In O.&amp;lt;arch&amp;gt; dir, clean removes build created files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realclean      - Removes ALL O.&amp;lt;arch&amp;gt; dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      Cannot be used within an O.&amp;lt;arch&amp;gt; dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     rebuild        - Same as clean install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc            - Installs header files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build          - Builds all targets&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     archclean      - Removes O.&amp;lt;arch&amp;gt; dirs but not O.Common dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;\&amp;quot;Partial\&amp;quot; build targets supported by Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc.&amp;lt;arch&amp;gt;     - Installs &amp;lt;arch&amp;gt; only header files.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install.&amp;lt;arch&amp;gt; - Builds and installs &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean.&amp;lt;arch&amp;gt;   - Cleans &amp;lt;arch&amp;gt; binaries in O.&amp;lt;arch&amp;gt; dirs only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build.&amp;lt;arch&amp;gt;   - Builds &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by top level Makefile:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     uninstall      - Cleans directories created by the install.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realuninstall  - Removes ALL install dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     distclean      - Same as realclean realuninstall.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     cvsclean       - Removes cvs .#* files in all dirs of directory tree&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     help           - Prints this list of valid make targets &amp;quot;&lt;br /&gt;
	@echo &amp;quot;Indiv. object targets are supported by O.&amp;lt;arch&amp;gt; level Makefile .e.g&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     xxxRecord.o&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.PHONY : $(uninstallArchTargets)&lt;br /&gt;
.PHONY : uninstall help cleandirs distclean uninstallDirs realuninstall&lt;br /&gt;
.PHONY : cvsclean&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;END 1.2.1 Manual expansion of included file.  Back to level 1.2&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.2 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;END 1 Manual expansion of top makefile.&#039;&#039;&#039;==&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=2007</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=2007"/>
		<updated>2018-05-22T21:36:54Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* 1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
There is some basic EPICS documentation found at https://epics.anl.gov/base/R3-14/12-docs/AppDevGuide/node5.html  that hopefully will assist in understanding some of this makefile structure.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.3 expansion of include $(CONFIG)/CONFIG_BASE&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base directories&lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_HOST_BIN = $(EPICS_BASE)/bin/$(EPICS_HOST_ARCH)&lt;br /&gt;
EPICS_BASE_HOST_LIB = $(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
EPICS_BASE_LIB      = $(EPICS_BASE)/lib/$(T_A)&lt;br /&gt;
EPICS_BASE_BIN      = $(EPICS_BASE)/bin/$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base Ioc libraries &lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_IOC_LIBS += recIoc softDevIoc&lt;br /&gt;
EPICS_BASE_IOC_LIBS += miscIoc rsrvIoc dbtoolsIoc asIoc&lt;br /&gt;
EPICS_BASE_IOC_LIBS += dbIoc registryIoc dbStaticIoc ca Com &lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base Host libraries &lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_HOST_LIBS += cas gdd asHost dbStaticHost registryIoc&lt;br /&gt;
EPICS_BASE_HOST_LIBS += ca Com&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Version number for base shared libraries (and win32 products)&lt;br /&gt;
&lt;br /&gt;
ifdef BASE_TOP&lt;br /&gt;
SHRLIB_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)&lt;br /&gt;
PROD_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)&lt;br /&gt;
endif # BASE_TOP&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Base c preprocessor flags&lt;br /&gt;
&lt;br /&gt;
BASE_CPPFLAGS = &lt;br /&gt;
&lt;br /&gt;
# osithread default stack&lt;br /&gt;
OSITHREAD_USE_DEFAULT_STACK = NO&lt;br /&gt;
OSITHREAD_DEFAULT_STACK_FLAGS_YES = -DOSITHREAD_USE_DEFAULT_STACK&lt;br /&gt;
OSITHREAD_DEFAULT_STACK_FLAGS_NO =&lt;br /&gt;
BASE_CPPFLAGS += $(OSITHREAD_DEFAULT_STACK_FLAGS_$(OSITHREAD_USE_DEFAULT_STACK))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Where to find the installed build tools&lt;br /&gt;
&lt;br /&gt;
TOOLS = $(EPICS_BASE_HOST_BIN)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base build tools and tool flags&lt;br /&gt;
&lt;br /&gt;
MAKEBPT                    = $(call PATH_FILTER, $(TOOLS)/makeBpt$(HOSTEXE))&lt;br /&gt;
DBEXPAND                   = $(call PATH_FILTER, $(TOOLS)/dbExpand$(HOSTEXE))&lt;br /&gt;
DBTORECORDTYPEH            = $(call PATH_FILTER, $(TOOLS)/dbToRecordtypeH$(HOSTEXE))&lt;br /&gt;
DBTOMENUH                  = $(call PATH_FILTER, $(TOOLS)/dbToMenuH$(HOSTEXE))&lt;br /&gt;
REGISTERRECORDDEVICEDRIVER = $(PERL) $(TOOLS)/registerRecordDeviceDriver.pl&lt;br /&gt;
CONVERTRELEASE=$(PERL) $(TOOLS)/convertRelease.pl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# tools for installing libraries and products&lt;br /&gt;
INSTALL = $(PERL) $(TOOLS)/installEpics.pl&lt;br /&gt;
INSTALL_PRODUCT = $(INSTALL)&lt;br /&gt;
INSTALL_LIBRARY = $(INSTALL)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# tools for making header dependancies and variable replacement&lt;br /&gt;
MKMF                       = $(PERL) $(TOOLS)/mkmf.pl&lt;br /&gt;
REPLACEVAR                 = $(PERL) $(TOOLS)/replaceVAR.pl&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# private versions of lex/yacc from EPICS&lt;br /&gt;
EYACC = $(call PATH_FILTER, $(TOOLS)/antelope$(HOSTEXE))&lt;br /&gt;
ELEX = $(call PATH_FILTER, $(TOOLS)/e_flex$(HOSTEXE)) -S$(EPICS_BASE)/include/flex.skel.static&lt;br /&gt;
&lt;br /&gt;
YACC  = $(EYACC)&lt;br /&gt;
LEX   = $(ELEX)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# External tools and tool flags - must be in path or defined in application&lt;br /&gt;
&lt;br /&gt;
ifndef ADL2DL&lt;br /&gt;
ADL2DL = adl2dl&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# sch2edif compiler and flags&lt;br /&gt;
SCH2EDIF = sch2edif&lt;br /&gt;
SCH2EDIF_PATH =&lt;br /&gt;
SCH2EDIF_SYSFLAGS = -n -ap -p.+..+$(SCH2EDIF_PATH)+$(CAPFAST_TEMPLATES)/sym+&lt;br /&gt;
SCH2EDIF_FLAGS =&lt;br /&gt;
 &lt;br /&gt;
# e2db and flags&lt;br /&gt;
#    - again there is an assumption where edb.def is installed.&lt;br /&gt;
ifndef E2DB&lt;br /&gt;
E2DB = e2db&lt;br /&gt;
endif&lt;br /&gt;
E2DB_SYSFLAGS = -ate -d $(CAPFAST_TEMPLATES)/edb.def&lt;br /&gt;
E2DB_FLAGS =&lt;br /&gt;
&lt;br /&gt;
ifndef DBST&lt;br /&gt;
DBST = dbst&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifndef MSI&lt;br /&gt;
MSI = msi&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.3; return to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.4; expansion of include $(CONFIG)/CONFIG_SITE&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution.&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20110419200536-zulwts6vf1tr4uuc&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_SITE  - Global site configuration file&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
#  The host architecture performing the build, in the form&lt;br /&gt;
#       &amp;lt;operating system&amp;gt;-&amp;lt;architecture&amp;gt;[-&amp;lt;toolset&amp;gt;]&lt;br /&gt;
#&lt;br /&gt;
#  Currently Supporting:&lt;br /&gt;
#	aix-ppc                (IBM compiler used for host builds)&lt;br /&gt;
#	aix-ppc-gnu            (GNU compiler used for host builds)&lt;br /&gt;
#	cygwin-x86             (cygwin compiler used for host builds)&lt;br /&gt;
#	darwin-ppc             (PowerPC based Apple running OSX)&lt;br /&gt;
#	darwin-ppcx86          (Universal binaries for both CPUs)&lt;br /&gt;
#	darwin-x86             (Intel based Apple running OSX)&lt;br /&gt;
#	freebsd-x86            (GNU compiler used for host builds)&lt;br /&gt;
#	freebsd-x86_64         (GNU compiler used for host builds)&lt;br /&gt;
#	linux-ppc              (GNU compiler used for host builds)&lt;br /&gt;
#	linux-ppc64            (GNU compiler used for host builds)&lt;br /&gt;
#	linux-x86              (GNU compiler used for host builds)&lt;br /&gt;
#	linux-x86_64           (GNU compiler used for host builds)&lt;br /&gt;
#	linux-x86-borland      (Borland C++ compiler used for host builds)&lt;br /&gt;
#	solaris-sparc          (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-sparc-gnu      (GNU compiler used for host builds)&lt;br /&gt;
#	solaris-sparc64        (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-sparc64-gnu    (GNU compiler used for host builds)&lt;br /&gt;
#	solaris-x86            (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-x86-gnu        (GNU compiler used for host builds)&lt;br /&gt;
#	solaris-x86_64         (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-x86_64-gnu     (GNU compiler used for host builds)&lt;br /&gt;
#	win32-x86              (MS Visual C++ compiler used for host builds)&lt;br /&gt;
#	win32-x86-cygwin       (WIN32 API with cygwin GNU compiler used for host builds)&lt;br /&gt;
#	win32-x86-mingw        (MinGW compiler used for host builds)&lt;br /&gt;
#	windows-x64            (MS Visual C++ compiler used for host builds)&lt;br /&gt;
&lt;br /&gt;
#  Debugging builds &lt;br /&gt;
#	linux-x86-debug        (GNU compiler with -g option for host builds)&lt;br /&gt;
#	linux-x86_64-debug     (GNU compiler with -g option for host builds)&lt;br /&gt;
#	solaris-sparc-debug    (sun compiler no optimization,-g for debugging info)&lt;br /&gt;
#	win32-x86-debug        (MS Visual C++ compiler with debug option for host builds)&lt;br /&gt;
#	windows-x64-debug      (MS Visual C++ compiler with debug option for host builds)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#  EPICS_HOST_ARCH is a required environment variable&lt;br /&gt;
#  Do not set EPICS_HOST_ARCH in this file. &lt;br /&gt;
#  Use base/startup files to set EPICS_HOST_ARCH or &lt;br /&gt;
#  provide EPICS_HOST_ARCH on the GNU make command line.&lt;br /&gt;
&lt;br /&gt;
#  The cross-compiler architectures to build EPICS for&lt;br /&gt;
#&lt;br /&gt;
#  Currently Supporting:&lt;br /&gt;
&lt;br /&gt;
#       ios-arm&lt;br /&gt;
#       ios-386&lt;br /&gt;
#       linux-386               (linux-x86 host)&lt;br /&gt;
#       linux-486               (linux-x86 host)&lt;br /&gt;
#       linux-586               (linux-x86 host)&lt;br /&gt;
#       linux-686               (linux-x86 host)&lt;br /&gt;
#       linux-arm               (linux-x86 host)&lt;br /&gt;
#       linux-arm_eb            (linux-x86 host)&lt;br /&gt;
#       linux-arm_el            (linux-x86 host)&lt;br /&gt;
#       linux-athlon            (linux-x86 host)&lt;br /&gt;
#       linux-cris              (Axis GNU crosscompiler on linux-x86 host)&lt;br /&gt;
#       linux-cris_v10          (Axis GNU crosscompiler on linux-x86 host)&lt;br /&gt;
#       linux-cris_v32          (Axis GNU crosscompiler on linux-x86 host)&lt;br /&gt;
#       linux-xscale_be&lt;br /&gt;
#       vxWorks-486&lt;br /&gt;
#       vxWorks-68040&lt;br /&gt;
#       vxWorks-68040lc&lt;br /&gt;
#       vxWorks-68060&lt;br /&gt;
#       vxWorks-pentium&lt;br /&gt;
#       vxWorks-ppc32           (32-bit PowerPC CPUs with full FPU)&lt;br /&gt;
#       vxWorks-ppc32sf         (32-bit PowerPC CPUs without FPU)&lt;br /&gt;
#       vxWorks-ppc603&lt;br /&gt;
#       vxWorks-ppc603_long&lt;br /&gt;
#       vxWorks-ppc604&lt;br /&gt;
#       vxWorks-ppc604_long&lt;br /&gt;
#       vxWorks-ppc604_altivec&lt;br /&gt;
#       vxWorks-mpc8540&lt;br /&gt;
#       vxWorks-mpc8548&lt;br /&gt;
#       RTEMS-at91rm9200ek&lt;br /&gt;
#       RTEMS-beatnik&lt;br /&gt;
#       RTEMS-gen68360&lt;br /&gt;
#       RTEMS-mcp750&lt;br /&gt;
#       RTEMS-mvme167&lt;br /&gt;
#       RTEMS-mvme2100&lt;br /&gt;
#       RTEMS-mvme2700&lt;br /&gt;
#       RTEMS-mvme3100&lt;br /&gt;
#       RTEMS-mvme5500&lt;br /&gt;
#       RTEMS-pc386&lt;br /&gt;
#       RTEMS-psim&lt;br /&gt;
#       RTEMS-uC5282&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Definitions of CROSS_COMPILER_TARGET_ARCHS in&lt;br /&gt;
# configure/os/CONFIG_SITE.&amp;lt;host&amp;gt;.Common files will&lt;br /&gt;
# override &lt;br /&gt;
#&lt;br /&gt;
CROSS_COMPILER_TARGET_ARCHS=vxWorks-ppc604_long&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-ppc32&lt;br /&gt;
&lt;br /&gt;
#  If only a subset of the host architectures perform&lt;br /&gt;
#  the build for the CROSS_COMPILER_TARGET_ARCHS&lt;br /&gt;
#  uncomment the following line and specify them.&lt;br /&gt;
#&lt;br /&gt;
CROSS_COMPILER_HOST_ARCHS=solaris-sparc-gnu&lt;br /&gt;
&lt;br /&gt;
#  Build shared libraries?&lt;br /&gt;
#        must be either YES or NO&lt;br /&gt;
#     NOTE: os/CONFIG.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files and&lt;br /&gt;
#     os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files may override&lt;br /&gt;
#&lt;br /&gt;
#     NOTE WIN32: YES results in a DLL.  Valid settings are&lt;br /&gt;
#                   SHARED_LIBRARIES=YES and STATIC_BUILD=NO&lt;br /&gt;
#                   SHARED_LIBRARIES=NO  and STATIC_BUILD=YES&lt;br /&gt;
#&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
&lt;br /&gt;
#  Build client objects statically ?&lt;br /&gt;
#        must be either YES or NO&lt;br /&gt;
#&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
&lt;br /&gt;
#  Should header dependancy files be automatically generated&lt;br /&gt;
#  for each C/C++ created object file?&lt;br /&gt;
#        must be either YES or NO&lt;br /&gt;
HDEPENDS=YES&lt;br /&gt;
&lt;br /&gt;
#  Host build optimization&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
&lt;br /&gt;
#  Cross build optimization&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
&lt;br /&gt;
#  Generate Verbose Compiler Warnings for Host builds&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
&lt;br /&gt;
#  Create and/or install perl build tools for R3.13 extension builds?&lt;br /&gt;
#  must be either YES or NO&lt;br /&gt;
#&lt;br /&gt;
#  NOTE: Set to YES only if you have existing R3.13 extensions to be&lt;br /&gt;
#  built with this base&lt;br /&gt;
#&lt;br /&gt;
#COMPAT_TOOLS_313=YES&lt;br /&gt;
&lt;br /&gt;
#  Create and/or install files for R3.13 ioc application and extension builds?&lt;br /&gt;
#  must be either YES or NO&lt;br /&gt;
#&lt;br /&gt;
#  NOTE: Set to YES only if you have existing R3.13 ioc applications&lt;br /&gt;
#  and extensions to be built with this base&lt;br /&gt;
#&lt;br /&gt;
COMPAT_313=NO&lt;br /&gt;
&lt;br /&gt;
#  Installation directory&lt;br /&gt;
# If you don&#039;t want to install into $(TOP) dir then&lt;br /&gt;
# define INSTALL_LOCATION here&lt;br /&gt;
#INSTALL_LOCATION=&amp;lt;fullpathname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Use POSIX thread priority scheduling (YES or NO)&lt;br /&gt;
USE_POSIX_THREAD_PRIORITY_SCHEDULING = NO&lt;br /&gt;
&lt;br /&gt;
#  Site version number, if set will append &#039;-&#039; and this string to the&lt;br /&gt;
#  EPICS version number string that is reported by many tools&lt;br /&gt;
EPICS_SITE_VERSION =&lt;br /&gt;
&lt;br /&gt;
# For GNU compiler, use pipes rather than temporary files for communication &lt;br /&gt;
# between the various stages of compilation.&lt;br /&gt;
GCC_PIPE = NO&lt;br /&gt;
&lt;br /&gt;
#  Include RPATH when linking executables and libraries.&lt;br /&gt;
#       must be either YES or NO&lt;br /&gt;
LINKER_USE_RPATH=YES&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.4; return to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.2 Manual expansion of line include $(TOP)/configure/RULES_TOP&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#RULES_TOP&lt;br /&gt;
include $(EPICS_BASE)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.2.1 Manual expansion of line include $(EPICS_BASE)/configure/RULES_TOP&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/RULES_DIRS&lt;br /&gt;
&lt;br /&gt;
UNINSTALL_DIRS += $(INSTALL_DBD) $(INSTALL_INCLUDE) $(INSTALL_DOC)\&lt;br /&gt;
        $(INSTALL_HTML) $(INSTALL_JAVA) $(INSTALL_TEMPLATES) \&lt;br /&gt;
        $(INSTALL_DB)&lt;br /&gt;
UNINSTALL_DIRS += $(DIRECTORY_TARGETS)&lt;br /&gt;
&lt;br /&gt;
uninstallArchTargets = $(foreach arch,$(BUILD_ARCHS), uninstall$(DIVIDER)$(arch))&lt;br /&gt;
archPart = $(word 2, $(subst $(DIVIDER), ,$@))&lt;br /&gt;
&lt;br /&gt;
$(uninstallArchTargets): uninstallDirs&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)/$(archPart) $(INSTALL_LOCATION_LIB)/$(archPart) &lt;br /&gt;
&lt;br /&gt;
cleandirs:&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_BIN)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)&lt;br /&gt;
endif&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_LIB)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
endif&lt;br /&gt;
	@echo&lt;br /&gt;
# The echo above stops a &amp;quot;nothing to be done for cleandirs&amp;quot; message&lt;br /&gt;
&lt;br /&gt;
distclean: realclean realuninstall&lt;br /&gt;
&lt;br /&gt;
CVSCLEAN=$(firstword $(wildcard $(TOOLS)/cvsclean.pl $(TOP)/src/tools/cvsclean.pl))&lt;br /&gt;
&lt;br /&gt;
cvsclean:&lt;br /&gt;
	@$(PERL) $(CVSCLEAN) &lt;br /&gt;
&lt;br /&gt;
realuninstall:&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
uninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))&lt;br /&gt;
	@$(MAKE) -f Makefile  cleandirs&lt;br /&gt;
&lt;br /&gt;
uninstallDirs:&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Usage: gnumake [options] [target] ...&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by all Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install        - Builds and installs all targets (default rule)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     all            - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     buildInstall   - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean          - Removes the O.&amp;lt;arch&amp;gt; dirs created by running make&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      In O.&amp;lt;arch&amp;gt; dir, clean removes build created files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realclean      - Removes ALL O.&amp;lt;arch&amp;gt; dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      Cannot be used within an O.&amp;lt;arch&amp;gt; dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     rebuild        - Same as clean install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc            - Installs header files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build          - Builds all targets&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     archclean      - Removes O.&amp;lt;arch&amp;gt; dirs but not O.Common dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;\&amp;quot;Partial\&amp;quot; build targets supported by Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc.&amp;lt;arch&amp;gt;     - Installs &amp;lt;arch&amp;gt; only header files.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install.&amp;lt;arch&amp;gt; - Builds and installs &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean.&amp;lt;arch&amp;gt;   - Cleans &amp;lt;arch&amp;gt; binaries in O.&amp;lt;arch&amp;gt; dirs only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build.&amp;lt;arch&amp;gt;   - Builds &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by top level Makefile:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     uninstall      - Cleans directories created by the install.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realuninstall  - Removes ALL install dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     distclean      - Same as realclean realuninstall.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     cvsclean       - Removes cvs .#* files in all dirs of directory tree&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     help           - Prints this list of valid make targets &amp;quot;&lt;br /&gt;
	@echo &amp;quot;Indiv. object targets are supported by O.&amp;lt;arch&amp;gt; level Makefile .e.g&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     xxxRecord.o&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.PHONY : $(uninstallArchTargets)&lt;br /&gt;
.PHONY : uninstall help cleandirs distclean uninstallDirs realuninstall&lt;br /&gt;
.PHONY : cvsclean&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;END 1.2.1 Manual expansion of included file.  Back to level 1.2&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.2 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;END 1 Manual expansion of top makefile.&#039;&#039;&#039;==&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=2006</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=2006"/>
		<updated>2018-05-22T21:31:59Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* END 1.1.1.2.3; return to 1.1.1.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.3 expansion of include $(CONFIG)/CONFIG_BASE&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base directories&lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_HOST_BIN = $(EPICS_BASE)/bin/$(EPICS_HOST_ARCH)&lt;br /&gt;
EPICS_BASE_HOST_LIB = $(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
EPICS_BASE_LIB      = $(EPICS_BASE)/lib/$(T_A)&lt;br /&gt;
EPICS_BASE_BIN      = $(EPICS_BASE)/bin/$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base Ioc libraries &lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_IOC_LIBS += recIoc softDevIoc&lt;br /&gt;
EPICS_BASE_IOC_LIBS += miscIoc rsrvIoc dbtoolsIoc asIoc&lt;br /&gt;
EPICS_BASE_IOC_LIBS += dbIoc registryIoc dbStaticIoc ca Com &lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base Host libraries &lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_HOST_LIBS += cas gdd asHost dbStaticHost registryIoc&lt;br /&gt;
EPICS_BASE_HOST_LIBS += ca Com&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Version number for base shared libraries (and win32 products)&lt;br /&gt;
&lt;br /&gt;
ifdef BASE_TOP&lt;br /&gt;
SHRLIB_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)&lt;br /&gt;
PROD_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)&lt;br /&gt;
endif # BASE_TOP&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Base c preprocessor flags&lt;br /&gt;
&lt;br /&gt;
BASE_CPPFLAGS = &lt;br /&gt;
&lt;br /&gt;
# osithread default stack&lt;br /&gt;
OSITHREAD_USE_DEFAULT_STACK = NO&lt;br /&gt;
OSITHREAD_DEFAULT_STACK_FLAGS_YES = -DOSITHREAD_USE_DEFAULT_STACK&lt;br /&gt;
OSITHREAD_DEFAULT_STACK_FLAGS_NO =&lt;br /&gt;
BASE_CPPFLAGS += $(OSITHREAD_DEFAULT_STACK_FLAGS_$(OSITHREAD_USE_DEFAULT_STACK))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Where to find the installed build tools&lt;br /&gt;
&lt;br /&gt;
TOOLS = $(EPICS_BASE_HOST_BIN)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base build tools and tool flags&lt;br /&gt;
&lt;br /&gt;
MAKEBPT                    = $(call PATH_FILTER, $(TOOLS)/makeBpt$(HOSTEXE))&lt;br /&gt;
DBEXPAND                   = $(call PATH_FILTER, $(TOOLS)/dbExpand$(HOSTEXE))&lt;br /&gt;
DBTORECORDTYPEH            = $(call PATH_FILTER, $(TOOLS)/dbToRecordtypeH$(HOSTEXE))&lt;br /&gt;
DBTOMENUH                  = $(call PATH_FILTER, $(TOOLS)/dbToMenuH$(HOSTEXE))&lt;br /&gt;
REGISTERRECORDDEVICEDRIVER = $(PERL) $(TOOLS)/registerRecordDeviceDriver.pl&lt;br /&gt;
CONVERTRELEASE=$(PERL) $(TOOLS)/convertRelease.pl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# tools for installing libraries and products&lt;br /&gt;
INSTALL = $(PERL) $(TOOLS)/installEpics.pl&lt;br /&gt;
INSTALL_PRODUCT = $(INSTALL)&lt;br /&gt;
INSTALL_LIBRARY = $(INSTALL)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# tools for making header dependancies and variable replacement&lt;br /&gt;
MKMF                       = $(PERL) $(TOOLS)/mkmf.pl&lt;br /&gt;
REPLACEVAR                 = $(PERL) $(TOOLS)/replaceVAR.pl&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# private versions of lex/yacc from EPICS&lt;br /&gt;
EYACC = $(call PATH_FILTER, $(TOOLS)/antelope$(HOSTEXE))&lt;br /&gt;
ELEX = $(call PATH_FILTER, $(TOOLS)/e_flex$(HOSTEXE)) -S$(EPICS_BASE)/include/flex.skel.static&lt;br /&gt;
&lt;br /&gt;
YACC  = $(EYACC)&lt;br /&gt;
LEX   = $(ELEX)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# External tools and tool flags - must be in path or defined in application&lt;br /&gt;
&lt;br /&gt;
ifndef ADL2DL&lt;br /&gt;
ADL2DL = adl2dl&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# sch2edif compiler and flags&lt;br /&gt;
SCH2EDIF = sch2edif&lt;br /&gt;
SCH2EDIF_PATH =&lt;br /&gt;
SCH2EDIF_SYSFLAGS = -n -ap -p.+..+$(SCH2EDIF_PATH)+$(CAPFAST_TEMPLATES)/sym+&lt;br /&gt;
SCH2EDIF_FLAGS =&lt;br /&gt;
 &lt;br /&gt;
# e2db and flags&lt;br /&gt;
#    - again there is an assumption where edb.def is installed.&lt;br /&gt;
ifndef E2DB&lt;br /&gt;
E2DB = e2db&lt;br /&gt;
endif&lt;br /&gt;
E2DB_SYSFLAGS = -ate -d $(CAPFAST_TEMPLATES)/edb.def&lt;br /&gt;
E2DB_FLAGS =&lt;br /&gt;
&lt;br /&gt;
ifndef DBST&lt;br /&gt;
DBST = dbst&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifndef MSI&lt;br /&gt;
MSI = msi&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.3; return to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.4; expansion of include $(CONFIG)/CONFIG_SITE&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution.&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20110419200536-zulwts6vf1tr4uuc&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_SITE  - Global site configuration file&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
#  The host architecture performing the build, in the form&lt;br /&gt;
#       &amp;lt;operating system&amp;gt;-&amp;lt;architecture&amp;gt;[-&amp;lt;toolset&amp;gt;]&lt;br /&gt;
#&lt;br /&gt;
#  Currently Supporting:&lt;br /&gt;
#	aix-ppc                (IBM compiler used for host builds)&lt;br /&gt;
#	aix-ppc-gnu            (GNU compiler used for host builds)&lt;br /&gt;
#	cygwin-x86             (cygwin compiler used for host builds)&lt;br /&gt;
#	darwin-ppc             (PowerPC based Apple running OSX)&lt;br /&gt;
#	darwin-ppcx86          (Universal binaries for both CPUs)&lt;br /&gt;
#	darwin-x86             (Intel based Apple running OSX)&lt;br /&gt;
#	freebsd-x86            (GNU compiler used for host builds)&lt;br /&gt;
#	freebsd-x86_64         (GNU compiler used for host builds)&lt;br /&gt;
#	linux-ppc              (GNU compiler used for host builds)&lt;br /&gt;
#	linux-ppc64            (GNU compiler used for host builds)&lt;br /&gt;
#	linux-x86              (GNU compiler used for host builds)&lt;br /&gt;
#	linux-x86_64           (GNU compiler used for host builds)&lt;br /&gt;
#	linux-x86-borland      (Borland C++ compiler used for host builds)&lt;br /&gt;
#	solaris-sparc          (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-sparc-gnu      (GNU compiler used for host builds)&lt;br /&gt;
#	solaris-sparc64        (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-sparc64-gnu    (GNU compiler used for host builds)&lt;br /&gt;
#	solaris-x86            (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-x86-gnu        (GNU compiler used for host builds)&lt;br /&gt;
#	solaris-x86_64         (Sun compiler used for host builds)&lt;br /&gt;
#	solaris-x86_64-gnu     (GNU compiler used for host builds)&lt;br /&gt;
#	win32-x86              (MS Visual C++ compiler used for host builds)&lt;br /&gt;
#	win32-x86-cygwin       (WIN32 API with cygwin GNU compiler used for host builds)&lt;br /&gt;
#	win32-x86-mingw        (MinGW compiler used for host builds)&lt;br /&gt;
#	windows-x64            (MS Visual C++ compiler used for host builds)&lt;br /&gt;
&lt;br /&gt;
#  Debugging builds &lt;br /&gt;
#	linux-x86-debug        (GNU compiler with -g option for host builds)&lt;br /&gt;
#	linux-x86_64-debug     (GNU compiler with -g option for host builds)&lt;br /&gt;
#	solaris-sparc-debug    (sun compiler no optimization,-g for debugging info)&lt;br /&gt;
#	win32-x86-debug        (MS Visual C++ compiler with debug option for host builds)&lt;br /&gt;
#	windows-x64-debug      (MS Visual C++ compiler with debug option for host builds)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#  EPICS_HOST_ARCH is a required environment variable&lt;br /&gt;
#  Do not set EPICS_HOST_ARCH in this file. &lt;br /&gt;
#  Use base/startup files to set EPICS_HOST_ARCH or &lt;br /&gt;
#  provide EPICS_HOST_ARCH on the GNU make command line.&lt;br /&gt;
&lt;br /&gt;
#  The cross-compiler architectures to build EPICS for&lt;br /&gt;
#&lt;br /&gt;
#  Currently Supporting:&lt;br /&gt;
&lt;br /&gt;
#       ios-arm&lt;br /&gt;
#       ios-386&lt;br /&gt;
#       linux-386               (linux-x86 host)&lt;br /&gt;
#       linux-486               (linux-x86 host)&lt;br /&gt;
#       linux-586               (linux-x86 host)&lt;br /&gt;
#       linux-686               (linux-x86 host)&lt;br /&gt;
#       linux-arm               (linux-x86 host)&lt;br /&gt;
#       linux-arm_eb            (linux-x86 host)&lt;br /&gt;
#       linux-arm_el            (linux-x86 host)&lt;br /&gt;
#       linux-athlon            (linux-x86 host)&lt;br /&gt;
#       linux-cris              (Axis GNU crosscompiler on linux-x86 host)&lt;br /&gt;
#       linux-cris_v10          (Axis GNU crosscompiler on linux-x86 host)&lt;br /&gt;
#       linux-cris_v32          (Axis GNU crosscompiler on linux-x86 host)&lt;br /&gt;
#       linux-xscale_be&lt;br /&gt;
#       vxWorks-486&lt;br /&gt;
#       vxWorks-68040&lt;br /&gt;
#       vxWorks-68040lc&lt;br /&gt;
#       vxWorks-68060&lt;br /&gt;
#       vxWorks-pentium&lt;br /&gt;
#       vxWorks-ppc32           (32-bit PowerPC CPUs with full FPU)&lt;br /&gt;
#       vxWorks-ppc32sf         (32-bit PowerPC CPUs without FPU)&lt;br /&gt;
#       vxWorks-ppc603&lt;br /&gt;
#       vxWorks-ppc603_long&lt;br /&gt;
#       vxWorks-ppc604&lt;br /&gt;
#       vxWorks-ppc604_long&lt;br /&gt;
#       vxWorks-ppc604_altivec&lt;br /&gt;
#       vxWorks-mpc8540&lt;br /&gt;
#       vxWorks-mpc8548&lt;br /&gt;
#       RTEMS-at91rm9200ek&lt;br /&gt;
#       RTEMS-beatnik&lt;br /&gt;
#       RTEMS-gen68360&lt;br /&gt;
#       RTEMS-mcp750&lt;br /&gt;
#       RTEMS-mvme167&lt;br /&gt;
#       RTEMS-mvme2100&lt;br /&gt;
#       RTEMS-mvme2700&lt;br /&gt;
#       RTEMS-mvme3100&lt;br /&gt;
#       RTEMS-mvme5500&lt;br /&gt;
#       RTEMS-pc386&lt;br /&gt;
#       RTEMS-psim&lt;br /&gt;
#       RTEMS-uC5282&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Definitions of CROSS_COMPILER_TARGET_ARCHS in&lt;br /&gt;
# configure/os/CONFIG_SITE.&amp;lt;host&amp;gt;.Common files will&lt;br /&gt;
# override &lt;br /&gt;
#&lt;br /&gt;
CROSS_COMPILER_TARGET_ARCHS=vxWorks-ppc604_long&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-ppc32&lt;br /&gt;
&lt;br /&gt;
#  If only a subset of the host architectures perform&lt;br /&gt;
#  the build for the CROSS_COMPILER_TARGET_ARCHS&lt;br /&gt;
#  uncomment the following line and specify them.&lt;br /&gt;
#&lt;br /&gt;
CROSS_COMPILER_HOST_ARCHS=solaris-sparc-gnu&lt;br /&gt;
&lt;br /&gt;
#  Build shared libraries?&lt;br /&gt;
#        must be either YES or NO&lt;br /&gt;
#     NOTE: os/CONFIG.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files and&lt;br /&gt;
#     os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files may override&lt;br /&gt;
#&lt;br /&gt;
#     NOTE WIN32: YES results in a DLL.  Valid settings are&lt;br /&gt;
#                   SHARED_LIBRARIES=YES and STATIC_BUILD=NO&lt;br /&gt;
#                   SHARED_LIBRARIES=NO  and STATIC_BUILD=YES&lt;br /&gt;
#&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
&lt;br /&gt;
#  Build client objects statically ?&lt;br /&gt;
#        must be either YES or NO&lt;br /&gt;
#&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
&lt;br /&gt;
#  Should header dependancy files be automatically generated&lt;br /&gt;
#  for each C/C++ created object file?&lt;br /&gt;
#        must be either YES or NO&lt;br /&gt;
HDEPENDS=YES&lt;br /&gt;
&lt;br /&gt;
#  Host build optimization&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
&lt;br /&gt;
#  Cross build optimization&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
&lt;br /&gt;
#  Generate Verbose Compiler Warnings for Host builds&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds&lt;br /&gt;
#	must be either YES or NO&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
&lt;br /&gt;
#  Create and/or install perl build tools for R3.13 extension builds?&lt;br /&gt;
#  must be either YES or NO&lt;br /&gt;
#&lt;br /&gt;
#  NOTE: Set to YES only if you have existing R3.13 extensions to be&lt;br /&gt;
#  built with this base&lt;br /&gt;
#&lt;br /&gt;
#COMPAT_TOOLS_313=YES&lt;br /&gt;
&lt;br /&gt;
#  Create and/or install files for R3.13 ioc application and extension builds?&lt;br /&gt;
#  must be either YES or NO&lt;br /&gt;
#&lt;br /&gt;
#  NOTE: Set to YES only if you have existing R3.13 ioc applications&lt;br /&gt;
#  and extensions to be built with this base&lt;br /&gt;
#&lt;br /&gt;
COMPAT_313=NO&lt;br /&gt;
&lt;br /&gt;
#  Installation directory&lt;br /&gt;
# If you don&#039;t want to install into $(TOP) dir then&lt;br /&gt;
# define INSTALL_LOCATION here&lt;br /&gt;
#INSTALL_LOCATION=&amp;lt;fullpathname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Use POSIX thread priority scheduling (YES or NO)&lt;br /&gt;
USE_POSIX_THREAD_PRIORITY_SCHEDULING = NO&lt;br /&gt;
&lt;br /&gt;
#  Site version number, if set will append &#039;-&#039; and this string to the&lt;br /&gt;
#  EPICS version number string that is reported by many tools&lt;br /&gt;
EPICS_SITE_VERSION =&lt;br /&gt;
&lt;br /&gt;
# For GNU compiler, use pipes rather than temporary files for communication &lt;br /&gt;
# between the various stages of compilation.&lt;br /&gt;
GCC_PIPE = NO&lt;br /&gt;
&lt;br /&gt;
#  Include RPATH when linking executables and libraries.&lt;br /&gt;
#       must be either YES or NO&lt;br /&gt;
LINKER_USE_RPATH=YES&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.4; return to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.2 Manual expansion of line include $(TOP)/configure/RULES_TOP&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#RULES_TOP&lt;br /&gt;
include $(EPICS_BASE)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.2.1 Manual expansion of line include $(EPICS_BASE)/configure/RULES_TOP&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/RULES_DIRS&lt;br /&gt;
&lt;br /&gt;
UNINSTALL_DIRS += $(INSTALL_DBD) $(INSTALL_INCLUDE) $(INSTALL_DOC)\&lt;br /&gt;
        $(INSTALL_HTML) $(INSTALL_JAVA) $(INSTALL_TEMPLATES) \&lt;br /&gt;
        $(INSTALL_DB)&lt;br /&gt;
UNINSTALL_DIRS += $(DIRECTORY_TARGETS)&lt;br /&gt;
&lt;br /&gt;
uninstallArchTargets = $(foreach arch,$(BUILD_ARCHS), uninstall$(DIVIDER)$(arch))&lt;br /&gt;
archPart = $(word 2, $(subst $(DIVIDER), ,$@))&lt;br /&gt;
&lt;br /&gt;
$(uninstallArchTargets): uninstallDirs&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)/$(archPart) $(INSTALL_LOCATION_LIB)/$(archPart) &lt;br /&gt;
&lt;br /&gt;
cleandirs:&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_BIN)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)&lt;br /&gt;
endif&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_LIB)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
endif&lt;br /&gt;
	@echo&lt;br /&gt;
# The echo above stops a &amp;quot;nothing to be done for cleandirs&amp;quot; message&lt;br /&gt;
&lt;br /&gt;
distclean: realclean realuninstall&lt;br /&gt;
&lt;br /&gt;
CVSCLEAN=$(firstword $(wildcard $(TOOLS)/cvsclean.pl $(TOP)/src/tools/cvsclean.pl))&lt;br /&gt;
&lt;br /&gt;
cvsclean:&lt;br /&gt;
	@$(PERL) $(CVSCLEAN) &lt;br /&gt;
&lt;br /&gt;
realuninstall:&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
uninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))&lt;br /&gt;
	@$(MAKE) -f Makefile  cleandirs&lt;br /&gt;
&lt;br /&gt;
uninstallDirs:&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Usage: gnumake [options] [target] ...&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by all Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install        - Builds and installs all targets (default rule)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     all            - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     buildInstall   - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean          - Removes the O.&amp;lt;arch&amp;gt; dirs created by running make&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      In O.&amp;lt;arch&amp;gt; dir, clean removes build created files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realclean      - Removes ALL O.&amp;lt;arch&amp;gt; dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      Cannot be used within an O.&amp;lt;arch&amp;gt; dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     rebuild        - Same as clean install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc            - Installs header files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build          - Builds all targets&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     archclean      - Removes O.&amp;lt;arch&amp;gt; dirs but not O.Common dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;\&amp;quot;Partial\&amp;quot; build targets supported by Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc.&amp;lt;arch&amp;gt;     - Installs &amp;lt;arch&amp;gt; only header files.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install.&amp;lt;arch&amp;gt; - Builds and installs &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean.&amp;lt;arch&amp;gt;   - Cleans &amp;lt;arch&amp;gt; binaries in O.&amp;lt;arch&amp;gt; dirs only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build.&amp;lt;arch&amp;gt;   - Builds &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by top level Makefile:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     uninstall      - Cleans directories created by the install.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realuninstall  - Removes ALL install dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     distclean      - Same as realclean realuninstall.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     cvsclean       - Removes cvs .#* files in all dirs of directory tree&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     help           - Prints this list of valid make targets &amp;quot;&lt;br /&gt;
	@echo &amp;quot;Indiv. object targets are supported by O.&amp;lt;arch&amp;gt; level Makefile .e.g&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     xxxRecord.o&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.PHONY : $(uninstallArchTargets)&lt;br /&gt;
.PHONY : uninstall help cleandirs distclean uninstallDirs realuninstall&lt;br /&gt;
.PHONY : cvsclean&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;END 1.2.1 Manual expansion of included file.  Back to level 1.2&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.2 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;END 1 Manual expansion of top makefile.&#039;&#039;&#039;==&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=2005</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=2005"/>
		<updated>2018-05-22T21:29:52Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* END 1.1.1.2.2 Back to 1.1.1.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.3 expansion of include $(CONFIG)/CONFIG_BASE&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base directories&lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_HOST_BIN = $(EPICS_BASE)/bin/$(EPICS_HOST_ARCH)&lt;br /&gt;
EPICS_BASE_HOST_LIB = $(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
EPICS_BASE_LIB      = $(EPICS_BASE)/lib/$(T_A)&lt;br /&gt;
EPICS_BASE_BIN      = $(EPICS_BASE)/bin/$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base Ioc libraries &lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_IOC_LIBS += recIoc softDevIoc&lt;br /&gt;
EPICS_BASE_IOC_LIBS += miscIoc rsrvIoc dbtoolsIoc asIoc&lt;br /&gt;
EPICS_BASE_IOC_LIBS += dbIoc registryIoc dbStaticIoc ca Com &lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base Host libraries &lt;br /&gt;
&lt;br /&gt;
EPICS_BASE_HOST_LIBS += cas gdd asHost dbStaticHost registryIoc&lt;br /&gt;
EPICS_BASE_HOST_LIBS += ca Com&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Version number for base shared libraries (and win32 products)&lt;br /&gt;
&lt;br /&gt;
ifdef BASE_TOP&lt;br /&gt;
SHRLIB_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)&lt;br /&gt;
PROD_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)&lt;br /&gt;
endif # BASE_TOP&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Base c preprocessor flags&lt;br /&gt;
&lt;br /&gt;
BASE_CPPFLAGS = &lt;br /&gt;
&lt;br /&gt;
# osithread default stack&lt;br /&gt;
OSITHREAD_USE_DEFAULT_STACK = NO&lt;br /&gt;
OSITHREAD_DEFAULT_STACK_FLAGS_YES = -DOSITHREAD_USE_DEFAULT_STACK&lt;br /&gt;
OSITHREAD_DEFAULT_STACK_FLAGS_NO =&lt;br /&gt;
BASE_CPPFLAGS += $(OSITHREAD_DEFAULT_STACK_FLAGS_$(OSITHREAD_USE_DEFAULT_STACK))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Where to find the installed build tools&lt;br /&gt;
&lt;br /&gt;
TOOLS = $(EPICS_BASE_HOST_BIN)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Epics base build tools and tool flags&lt;br /&gt;
&lt;br /&gt;
MAKEBPT                    = $(call PATH_FILTER, $(TOOLS)/makeBpt$(HOSTEXE))&lt;br /&gt;
DBEXPAND                   = $(call PATH_FILTER, $(TOOLS)/dbExpand$(HOSTEXE))&lt;br /&gt;
DBTORECORDTYPEH            = $(call PATH_FILTER, $(TOOLS)/dbToRecordtypeH$(HOSTEXE))&lt;br /&gt;
DBTOMENUH                  = $(call PATH_FILTER, $(TOOLS)/dbToMenuH$(HOSTEXE))&lt;br /&gt;
REGISTERRECORDDEVICEDRIVER = $(PERL) $(TOOLS)/registerRecordDeviceDriver.pl&lt;br /&gt;
CONVERTRELEASE=$(PERL) $(TOOLS)/convertRelease.pl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# tools for installing libraries and products&lt;br /&gt;
INSTALL = $(PERL) $(TOOLS)/installEpics.pl&lt;br /&gt;
INSTALL_PRODUCT = $(INSTALL)&lt;br /&gt;
INSTALL_LIBRARY = $(INSTALL)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# tools for making header dependancies and variable replacement&lt;br /&gt;
MKMF                       = $(PERL) $(TOOLS)/mkmf.pl&lt;br /&gt;
REPLACEVAR                 = $(PERL) $(TOOLS)/replaceVAR.pl&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# private versions of lex/yacc from EPICS&lt;br /&gt;
EYACC = $(call PATH_FILTER, $(TOOLS)/antelope$(HOSTEXE))&lt;br /&gt;
ELEX = $(call PATH_FILTER, $(TOOLS)/e_flex$(HOSTEXE)) -S$(EPICS_BASE)/include/flex.skel.static&lt;br /&gt;
&lt;br /&gt;
YACC  = $(EYACC)&lt;br /&gt;
LEX   = $(ELEX)&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# External tools and tool flags - must be in path or defined in application&lt;br /&gt;
&lt;br /&gt;
ifndef ADL2DL&lt;br /&gt;
ADL2DL = adl2dl&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# sch2edif compiler and flags&lt;br /&gt;
SCH2EDIF = sch2edif&lt;br /&gt;
SCH2EDIF_PATH =&lt;br /&gt;
SCH2EDIF_SYSFLAGS = -n -ap -p.+..+$(SCH2EDIF_PATH)+$(CAPFAST_TEMPLATES)/sym+&lt;br /&gt;
SCH2EDIF_FLAGS =&lt;br /&gt;
 &lt;br /&gt;
# e2db and flags&lt;br /&gt;
#    - again there is an assumption where edb.def is installed.&lt;br /&gt;
ifndef E2DB&lt;br /&gt;
E2DB = e2db&lt;br /&gt;
endif&lt;br /&gt;
E2DB_SYSFLAGS = -ate -d $(CAPFAST_TEMPLATES)/edb.def&lt;br /&gt;
E2DB_FLAGS =&lt;br /&gt;
&lt;br /&gt;
ifndef DBST&lt;br /&gt;
DBST = dbst&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifndef MSI&lt;br /&gt;
MSI = msi&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.3; return to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.2 Manual expansion of line include $(TOP)/configure/RULES_TOP&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#RULES_TOP&lt;br /&gt;
include $(EPICS_BASE)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.2.1 Manual expansion of line include $(EPICS_BASE)/configure/RULES_TOP&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/RULES_DIRS&lt;br /&gt;
&lt;br /&gt;
UNINSTALL_DIRS += $(INSTALL_DBD) $(INSTALL_INCLUDE) $(INSTALL_DOC)\&lt;br /&gt;
        $(INSTALL_HTML) $(INSTALL_JAVA) $(INSTALL_TEMPLATES) \&lt;br /&gt;
        $(INSTALL_DB)&lt;br /&gt;
UNINSTALL_DIRS += $(DIRECTORY_TARGETS)&lt;br /&gt;
&lt;br /&gt;
uninstallArchTargets = $(foreach arch,$(BUILD_ARCHS), uninstall$(DIVIDER)$(arch))&lt;br /&gt;
archPart = $(word 2, $(subst $(DIVIDER), ,$@))&lt;br /&gt;
&lt;br /&gt;
$(uninstallArchTargets): uninstallDirs&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)/$(archPart) $(INSTALL_LOCATION_LIB)/$(archPart) &lt;br /&gt;
&lt;br /&gt;
cleandirs:&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_BIN)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)&lt;br /&gt;
endif&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_LIB)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
endif&lt;br /&gt;
	@echo&lt;br /&gt;
# The echo above stops a &amp;quot;nothing to be done for cleandirs&amp;quot; message&lt;br /&gt;
&lt;br /&gt;
distclean: realclean realuninstall&lt;br /&gt;
&lt;br /&gt;
CVSCLEAN=$(firstword $(wildcard $(TOOLS)/cvsclean.pl $(TOP)/src/tools/cvsclean.pl))&lt;br /&gt;
&lt;br /&gt;
cvsclean:&lt;br /&gt;
	@$(PERL) $(CVSCLEAN) &lt;br /&gt;
&lt;br /&gt;
realuninstall:&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
uninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))&lt;br /&gt;
	@$(MAKE) -f Makefile  cleandirs&lt;br /&gt;
&lt;br /&gt;
uninstallDirs:&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Usage: gnumake [options] [target] ...&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by all Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install        - Builds and installs all targets (default rule)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     all            - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     buildInstall   - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean          - Removes the O.&amp;lt;arch&amp;gt; dirs created by running make&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      In O.&amp;lt;arch&amp;gt; dir, clean removes build created files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realclean      - Removes ALL O.&amp;lt;arch&amp;gt; dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      Cannot be used within an O.&amp;lt;arch&amp;gt; dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     rebuild        - Same as clean install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc            - Installs header files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build          - Builds all targets&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     archclean      - Removes O.&amp;lt;arch&amp;gt; dirs but not O.Common dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;\&amp;quot;Partial\&amp;quot; build targets supported by Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc.&amp;lt;arch&amp;gt;     - Installs &amp;lt;arch&amp;gt; only header files.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install.&amp;lt;arch&amp;gt; - Builds and installs &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean.&amp;lt;arch&amp;gt;   - Cleans &amp;lt;arch&amp;gt; binaries in O.&amp;lt;arch&amp;gt; dirs only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build.&amp;lt;arch&amp;gt;   - Builds &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by top level Makefile:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     uninstall      - Cleans directories created by the install.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realuninstall  - Removes ALL install dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     distclean      - Same as realclean realuninstall.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     cvsclean       - Removes cvs .#* files in all dirs of directory tree&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     help           - Prints this list of valid make targets &amp;quot;&lt;br /&gt;
	@echo &amp;quot;Indiv. object targets are supported by O.&amp;lt;arch&amp;gt; level Makefile .e.g&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     xxxRecord.o&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.PHONY : $(uninstallArchTargets)&lt;br /&gt;
.PHONY : uninstall help cleandirs distclean uninstallDirs realuninstall&lt;br /&gt;
.PHONY : cvsclean&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;END 1.2.1 Manual expansion of included file.  Back to level 1.2&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.2 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;END 1 Manual expansion of top makefile.&#039;&#039;&#039;==&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Other_bugs_found_in_DGS1_Gnote_files&amp;diff=2004</id>
		<title>Other bugs found in DGS1 Gnote files</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Other_bugs_found_in_DGS1_Gnote_files&amp;diff=2004"/>
		<updated>2018-05-22T21:24:13Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* This information comes from looking in Gnote files on DGS1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==This information comes from looking in Gnote files on DGS1==&lt;br /&gt;
More than likely these are still mostly open issues.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Follow up: spreadsheet woes and CPLD registers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A couple months ago we tried to update spreadsheets and much evil ensued.  The whole EPICS database went crap and a couple of highly worrisome days of reverting and rebooting occurred.  In the hopes of forestalling another round of that,  here are some observations:&lt;br /&gt;
&lt;br /&gt;
1) There is evidence that using an EPICS PV type of &#039;T&#039; (toggle) may be deleterious to your health.  Avoid.&lt;br /&gt;
&lt;br /&gt;
2) There is evidence that adding any register to a spreadsheet that has an address greater than 0x7FFF is also deleterious to your health.  Avoid.&lt;br /&gt;
&lt;br /&gt;
3) There is circumstantial evidence that having white space in column &#039;P&#039; of a spreadsheet (selections for type &#039;b&#039; or &#039;m&#039; PVs) may also be problematic.  It is suggested that this also be avoided.&lt;br /&gt;
&lt;br /&gt;
4) If you are defining a &#039;b&#039; or &#039;m&#039; field, do NOT use colons in the text name of the setting.  This mucks the Python parser and generates malformed PV database entries.  Example:&lt;br /&gt;
&lt;br /&gt;
     0:text:0;1:other text:1     is ok.&lt;br /&gt;
     0:text:0;1:other : text:1   will fail.  &lt;br /&gt;
&lt;br /&gt;
No error given by Python, but if you look carefully in the IOC console there&#039;s a error there and you can find malformed definitions in the .template files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are also some IOC idiosyncrasies that should be noted:&lt;br /&gt;
&lt;br /&gt;
A) After going off to con5 and doing a new make for the system, simply rebooting the TrigCPU (VME32) isn&#039;t sufficient to get the system to re-initialize.  You have to go to the crate and cycle the power, or hit the crate&#039;s reset button, to get the other IOCs to understand things have changed.  It appears that only the hard loss of the Ethernet connection caused by a hard boot of the trigCPU IOC suffices to get all the other IOCs to reload the database.&lt;br /&gt;
&lt;br /&gt;
B) For reasons nobody understands, some of the digitizer IOCs are a lot slower than others.  If you power cycle the crate containing VME32 (trigger), VME9 and VME10, for example, the trigger comes up in the time expected but VME9 and VME10 aren&#039;t ready for a few minutes after that.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a separate Gnote there are some entertaining observations about the Python code that may have relevance for the &amp;quot;system configuration file&amp;quot; concept:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
11) now what we *WANT* to do is simply parse and run the spreadsheet extractor without mangling the&lt;br /&gt;
existing system here on DGS1. So at this point I exit python (knowing I&#039;ll have to go back to it) to look &lt;br /&gt;
at the Python source for the spreadsheet extractor to see how it works.&lt;br /&gt;
&lt;br /&gt;
It turns out that the source code (in genSystem.py) has a couple of magic control variables:&lt;br /&gt;
&lt;br /&gt;
a) function genDGSMasterTrigger() assumes five globals:&lt;br /&gt;
&lt;br /&gt;
	global code_location&lt;br /&gt;
	global is_do_screens&lt;br /&gt;
	global ss_delimiter&lt;br /&gt;
&lt;br /&gt;
	global e_pvnamestr&lt;br /&gt;
	global e_pvnamestrrbv.&lt;br /&gt;
&lt;br /&gt;
b) IT IS IMPERATIVE AND CRITICAL that you set code_location = None before you run any python, or the running DGS setup will get clobbered.&lt;br /&gt;
&lt;br /&gt;
c) global is_do_screens seems to select what kind of auto-generated screens occurs:&lt;br /&gt;
#&lt;br /&gt;
# set to 0 for no screen generation.&lt;br /&gt;
# set to 1 for css screen generation.&lt;br /&gt;
# set to 2 for edm screen generation.&lt;br /&gt;
&lt;br /&gt;
12) In attempting to follow the instructions, everything talks about .csv files, but the conversion crashed.&lt;br /&gt;
Reading the source code in spreadsheet.py, I find that the expected column delimiter is TAB, not COMMA.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Other_bugs_found_in_DGS1_Gnote_files&amp;diff=2003</id>
		<title>Other bugs found in DGS1 Gnote files</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Other_bugs_found_in_DGS1_Gnote_files&amp;diff=2003"/>
		<updated>2018-05-22T21:21:04Z</updated>

		<summary type="html">&lt;p&gt;Jta: Created page with &amp;quot;==This information comes from looking in Gnote files on DGS1== More than likely these are still mostly open issues.   &amp;lt;nowiki&amp;gt; Follow up: spreadsheet woes and CPLD registers...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==This information comes from looking in Gnote files on DGS1==&lt;br /&gt;
More than likely these are still mostly open issues.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
Follow up: spreadsheet woes and CPLD registers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A couple months ago we tried to update spreadsheets and much evil ensued.  The whole EPICS database went crap and a couple of highly worrisome days of reverting and rebooting occurred.  In the hopes of forestalling another round of that,  here are some observations:&lt;br /&gt;
&lt;br /&gt;
1) There is evidence that using an EPICS PV type of &#039;T&#039; (toggle) may be deleterious to your health.  Avoid.&lt;br /&gt;
&lt;br /&gt;
2) There is evidence that adding any register to a spreadsheet that has an address greater than 0x7FFF is also deleterious to your health.  Avoid.&lt;br /&gt;
&lt;br /&gt;
3) There is circumstantial evidence that having white space in column &#039;P&#039; of a spreadsheet (selections for type &#039;b&#039; or &#039;m&#039; PVs) may also be problematic.  It is suggested that this also be avoided.&lt;br /&gt;
&lt;br /&gt;
4) If you are defining a &#039;b&#039; or &#039;m&#039; field, do NOT use colons in the text name of the setting.  This mucks the Python parser and generates malformed PV database entries.  Example:&lt;br /&gt;
&lt;br /&gt;
     0:text:0;1:other text:1     is ok.&lt;br /&gt;
     0:text:0;1:other : text:1   will fail.  &lt;br /&gt;
&lt;br /&gt;
No error given by Python, but if you look carefully in the IOC console there&#039;s a error there and you can find malformed definitions in the .template files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are also some IOC idiosyncrasies that should be noted:&lt;br /&gt;
&lt;br /&gt;
A) After going off to con5 and doing a new make for the system, simply rebooting the TrigCPU (VME32) isn&#039;t sufficient to get the system to re-initialize.  You have to go to the crate and cycle the power, or hit the crate&#039;s reset button, to get the other IOCs to understand things have changed.  It appears that only the hard loss of the Ethernet connection caused by a hard boot of the trigCPU IOC suffices to get all the other IOCs to reload the database.&lt;br /&gt;
&lt;br /&gt;
B) For reasons nobody understands, some of the digitizer IOCs are a lot slower than others.  If you power cycle the crate containing VME32 (trigger), VME9 and VME10, for example, the trigger comes up in the time expected but VME9 and VME10 aren&#039;t ready for a few minutes after that.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=2002</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=2002"/>
		<updated>2018-05-22T21:19:59Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Goals for VME99 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
The IOC has been flashed with the most recent BSP file (devel7) and has been given in IP address on ONENET&lt;br /&gt;
 192.168.203.211&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
[[Other bugs found in DGS1 Gnote files]]&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- &amp;lt;s&amp;gt;Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.&amp;lt;/s&amp;gt;  (completed)&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;s&amp;gt;Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal &amp;lt;/s&amp;gt; (done)&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;s&amp;gt;Serial connect on the &amp;quot;new&amp;quot; linux machine (need root access) &amp;lt;/s&amp;gt; (done)&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details. HOWTO: &#039;&#039;pycd&#039;&#039; on &#039;&#039;dgs1&#039;&#039;, a number of &#039;&#039;build directories&#039;&#039; are there, &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; is the main program. &lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]: JTA and WJ working on this on CON5. Located, now looking for a simple Makefile that is &#039;&#039;flat&#039;&#039;. &#039;&#039;&#039;/global/devel/gretTop/9-22/dgsDrivers/Makefile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
===relevant documentation that is elsewhere ===&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/The_DGS/DFMA_EPICS_Implementation&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/Tim_Madden_software_documentation&lt;br /&gt;
&lt;br /&gt;
===Understanding how many Makes there are in the system===&lt;br /&gt;
&lt;br /&gt;
The general process for updating the PVs is to do the following:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
ssh con5&lt;br /&gt;
cd /global/devel/gretTop/9-22/dgsDrivers&lt;br /&gt;
make&lt;br /&gt;
cd ..&lt;br /&gt;
cd dgsIoc&lt;br /&gt;
make&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a cryptic comment in the Python code where the above is in comments, that says&lt;br /&gt;
&lt;br /&gt;
 #it may be devel or develbuild... depending on where you are building from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Breakdown of the make file ===&lt;br /&gt;
 [[MakeFile Archaeology]]&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=2001</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=2001"/>
		<updated>2018-05-22T21:19:10Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Breakdown of the make file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
The IOC has been flashed with the most recent BSP file (devel7) and has been given in IP address on ONENET&lt;br /&gt;
 192.168.203.211&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- &amp;lt;s&amp;gt;Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.&amp;lt;/s&amp;gt;  (completed)&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;s&amp;gt;Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal &amp;lt;/s&amp;gt; (done)&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;s&amp;gt;Serial connect on the &amp;quot;new&amp;quot; linux machine (need root access) &amp;lt;/s&amp;gt; (done)&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details. HOWTO: &#039;&#039;pycd&#039;&#039; on &#039;&#039;dgs1&#039;&#039;, a number of &#039;&#039;build directories&#039;&#039; are there, &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; is the main program. &lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]: JTA and WJ working on this on CON5. Located, now looking for a simple Makefile that is &#039;&#039;flat&#039;&#039;. &#039;&#039;&#039;/global/devel/gretTop/9-22/dgsDrivers/Makefile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
===relevant documentation that is elsewhere ===&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/The_DGS/DFMA_EPICS_Implementation&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/Tim_Madden_software_documentation&lt;br /&gt;
&lt;br /&gt;
===Understanding how many Makes there are in the system===&lt;br /&gt;
&lt;br /&gt;
The general process for updating the PVs is to do the following:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
ssh con5&lt;br /&gt;
cd /global/devel/gretTop/9-22/dgsDrivers&lt;br /&gt;
make&lt;br /&gt;
cd ..&lt;br /&gt;
cd dgsIoc&lt;br /&gt;
make&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a cryptic comment in the Python code where the above is in comments, that says&lt;br /&gt;
&lt;br /&gt;
 #it may be devel or develbuild... depending on where you are building from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Breakdown of the make file ===&lt;br /&gt;
 [[MakeFile Archaeology]]&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=2000</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=2000"/>
		<updated>2018-05-22T21:07:59Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Hardware To Do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
The IOC has been flashed with the most recent BSP file (devel7) and has been given in IP address on ONENET&lt;br /&gt;
 192.168.203.211&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- &amp;lt;s&amp;gt;Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.&amp;lt;/s&amp;gt;  (completed)&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;s&amp;gt;Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal &amp;lt;/s&amp;gt; (done)&lt;br /&gt;
&lt;br /&gt;
- &amp;lt;s&amp;gt;Serial connect on the &amp;quot;new&amp;quot; linux machine (need root access) &amp;lt;/s&amp;gt; (done)&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details. HOWTO: &#039;&#039;pycd&#039;&#039; on &#039;&#039;dgs1&#039;&#039;, a number of &#039;&#039;build directories&#039;&#039; are there, &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; is the main program. &lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]: JTA and WJ working on this on CON5. Located, now looking for a simple Makefile that is &#039;&#039;flat&#039;&#039;. &#039;&#039;&#039;/global/devel/gretTop/9-22/dgsDrivers/Makefile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
===relevant documentation that is elsewhere ===&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/The_DGS/DFMA_EPICS_Implementation&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/Tim_Madden_software_documentation&lt;br /&gt;
&lt;br /&gt;
===Breakdown of the make file ===&lt;br /&gt;
 [[MakeFile Archaeology]]&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1999</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1999"/>
		<updated>2018-05-22T20:32:09Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* 1.2.1 Manual expansion of line include $(EPICS_BASE)/configure/RULES_TOP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.2 Manual expansion of line include $(TOP)/configure/RULES_TOP&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#RULES_TOP&lt;br /&gt;
include $(EPICS_BASE)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.2.1 Manual expansion of line include $(EPICS_BASE)/configure/RULES_TOP&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/RULES_DIRS&lt;br /&gt;
&lt;br /&gt;
UNINSTALL_DIRS += $(INSTALL_DBD) $(INSTALL_INCLUDE) $(INSTALL_DOC)\&lt;br /&gt;
        $(INSTALL_HTML) $(INSTALL_JAVA) $(INSTALL_TEMPLATES) \&lt;br /&gt;
        $(INSTALL_DB)&lt;br /&gt;
UNINSTALL_DIRS += $(DIRECTORY_TARGETS)&lt;br /&gt;
&lt;br /&gt;
uninstallArchTargets = $(foreach arch,$(BUILD_ARCHS), uninstall$(DIVIDER)$(arch))&lt;br /&gt;
archPart = $(word 2, $(subst $(DIVIDER), ,$@))&lt;br /&gt;
&lt;br /&gt;
$(uninstallArchTargets): uninstallDirs&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)/$(archPart) $(INSTALL_LOCATION_LIB)/$(archPart) &lt;br /&gt;
&lt;br /&gt;
cleandirs:&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_BIN)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN)&lt;br /&gt;
endif&lt;br /&gt;
ifeq ($(wildcard $(INSTALL_LOCATION_LIB)/*),)&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
endif&lt;br /&gt;
	@echo&lt;br /&gt;
# The echo above stops a &amp;quot;nothing to be done for cleandirs&amp;quot; message&lt;br /&gt;
&lt;br /&gt;
distclean: realclean realuninstall&lt;br /&gt;
&lt;br /&gt;
CVSCLEAN=$(firstword $(wildcard $(TOOLS)/cvsclean.pl $(TOP)/src/tools/cvsclean.pl))&lt;br /&gt;
&lt;br /&gt;
cvsclean:&lt;br /&gt;
	@$(PERL) $(CVSCLEAN) &lt;br /&gt;
&lt;br /&gt;
realuninstall:&lt;br /&gt;
	@$(RMDIR) $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB)&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
uninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))&lt;br /&gt;
	@$(MAKE) -f Makefile  cleandirs&lt;br /&gt;
&lt;br /&gt;
uninstallDirs:&lt;br /&gt;
	@$(RMDIR) $(UNINSTALL_DIRS)&lt;br /&gt;
&lt;br /&gt;
help:&lt;br /&gt;
	@echo &amp;quot;Usage: gnumake [options] [target] ...&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by all Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install        - Builds and installs all targets (default rule)&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     all            - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     buildInstall   - Same as install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean          - Removes the O.&amp;lt;arch&amp;gt; dirs created by running make&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      In O.&amp;lt;arch&amp;gt; dir, clean removes build created files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realclean      - Removes ALL O.&amp;lt;arch&amp;gt; dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;                      Cannot be used within an O.&amp;lt;arch&amp;gt; dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     rebuild        - Same as clean install&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc            - Installs header files&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build          - Builds all targets&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     archclean      - Removes O.&amp;lt;arch&amp;gt; dirs but not O.Common dir&amp;quot;&lt;br /&gt;
	@echo &amp;quot;\&amp;quot;Partial\&amp;quot; build targets supported by Makefiles:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     inc.&amp;lt;arch&amp;gt;     - Installs &amp;lt;arch&amp;gt; only header files.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     install.&amp;lt;arch&amp;gt; - Builds and installs &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     clean.&amp;lt;arch&amp;gt;   - Cleans &amp;lt;arch&amp;gt; binaries in O.&amp;lt;arch&amp;gt; dirs only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     build.&amp;lt;arch&amp;gt;   - Builds &amp;lt;arch&amp;gt; only.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;Targets supported by top level Makefile:&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     uninstall      - Cleans directories created by the install.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     realuninstall  - Removes ALL install dirs&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     distclean      - Same as realclean realuninstall.&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     cvsclean       - Removes cvs .#* files in all dirs of directory tree&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     help           - Prints this list of valid make targets &amp;quot;&lt;br /&gt;
	@echo &amp;quot;Indiv. object targets are supported by O.&amp;lt;arch&amp;gt; level Makefile .e.g&amp;quot;&lt;br /&gt;
	@echo &amp;quot;     xxxRecord.o&amp;quot;&lt;br /&gt;
&lt;br /&gt;
.PHONY : $(uninstallArchTargets)&lt;br /&gt;
.PHONY : uninstall help cleandirs distclean uninstallDirs realuninstall&lt;br /&gt;
.PHONY : cvsclean&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;END 1.2.1 Manual expansion of included file.  Back to level 1.2&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.2 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;END 1 Manual expansion of top makefile.&#039;&#039;&#039;==&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1998</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1998"/>
		<updated>2018-05-22T20:30:49Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* END 1.1 Manual expansion of included file.  Back to level 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.2 Manual expansion of line include $(TOP)/configure/RULES_TOP&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#RULES_TOP&lt;br /&gt;
include $(EPICS_BASE)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.2.1 Manual expansion of line include $(EPICS_BASE)/configure/RULES_TOP&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.2.1 Manual expansion of included file.  Back to level 1.2&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.2 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;END 1 Manual expansion of top makefile.&#039;&#039;&#039;==&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1997</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1997"/>
		<updated>2018-05-22T20:24:50Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* END 1 Manual expansion of included file. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
==&#039;&#039;&#039;END 1 Manual expansion of top makefile.&#039;&#039;&#039;==&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1996</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1996"/>
		<updated>2018-05-22T20:24:19Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* END 1.1 Manual expansion of included file.  Back to level 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
==&#039;&#039;&#039;END 1 Manual expansion of included file.&#039;&#039;&#039;==&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1995</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1995"/>
		<updated>2018-05-22T20:22:46Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
======&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;======&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=====&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;=====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
====&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;====&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
===&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1994</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1994"/>
		<updated>2018-05-22T20:20:03Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: jba@aps.anl.gov-20101111194353-td0hfhkjg56whjgn&lt;br /&gt;
#&lt;br /&gt;
#  CONFIG_COMMON&lt;br /&gt;
#&lt;br /&gt;
#  This file is to be maintained by the community.&lt;br /&gt;
#&lt;br /&gt;
# Common Configuration Information&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# POSIX is OS default&lt;br /&gt;
POSIX=YES&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Divider symbol&lt;br /&gt;
DIVIDER = .&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build architectures&lt;br /&gt;
&lt;br /&gt;
# CROSS1 will be defined only when CROSS_COMPILER_HOST_ARCHS is NOT defined&lt;br /&gt;
CROSS1 = $(CROSS_COMPILER_TARGET_ARCHS$(word 1,$(CROSS_COMPILER_HOST_ARCHS)))&lt;br /&gt;
&lt;br /&gt;
# CROSS2 will be defined only when CROSS_COMPILER_HOST_ARCHS is defined&lt;br /&gt;
# and EPICS_HOST_ARCH is one of it&#039;s words&lt;br /&gt;
CROSS2 = $(CROSS_COMPILER_TARGET_ARCHS$(filter-out 1,$(words $(filter $(EPICS_HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)))))&lt;br /&gt;
&lt;br /&gt;
BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Default for perl if it&#039;s on the PATH,&lt;br /&gt;
# otherwise override this in os/CONFIG_SITE.&amp;lt;host_arch&amp;gt;.Common&lt;br /&gt;
PERL=perl&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# dbst based database optimization default&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Check configure/RELEASE file for consistency&lt;br /&gt;
CHECK_RELEASE_YES = checkRelease&lt;br /&gt;
CHECK_RELEASE_NO =&lt;br /&gt;
CHECK_RELEASE_WARN = warnRelease&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# GNU directory&lt;br /&gt;
# GNU_DIR definition is here because it is used to find&lt;br /&gt;
# READLINE library even if GNU compiler is not used&lt;br /&gt;
GNU_DIR = /usr&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Directories&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION            = $(TOP)&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION_LIB        = $(INSTALL_LOCATION)/lib&lt;br /&gt;
INSTALL_LOCATION_BIN        = $(INSTALL_LOCATION)/bin&lt;br /&gt;
&lt;br /&gt;
INSTALL_HOST_BIN            = $(INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)&lt;br /&gt;
INSTALL_HOST_LIB            = $(INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)&lt;br /&gt;
&lt;br /&gt;
INSTALL_INCLUDE             = $(INSTALL_LOCATION)/include&lt;br /&gt;
INSTALL_DOC                 = $(INSTALL_LOCATION)/doc&lt;br /&gt;
INSTALL_HTML                = $(INSTALL_LOCATION)/html&lt;br /&gt;
INSTALL_TEMPLATES           = $(INSTALL_LOCATION)/templates&lt;br /&gt;
INSTALL_DBD                 = $(INSTALL_LOCATION)/dbd&lt;br /&gt;
INSTALL_DB                  = $(INSTALL_LOCATION)/db&lt;br /&gt;
INSTALL_CONFIG              = $(INSTALL_LOCATION)/configure&lt;br /&gt;
INSTALL_JAVA                = $(INSTALL_LOCATION)/javalib&lt;br /&gt;
&lt;br /&gt;
#Directory for OS independant build created files&lt;br /&gt;
COMMON_DIR = ../O.Common&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Make echo output - suppress echoing if make&#039;s &#039;-s&#039; flag is set&lt;br /&gt;
ECHO := $(if $(findstring s,$(MAKEFLAGS)),\#,@echo)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
INSTALL_LIB                 = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_SHRLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_TCLLIB              = $(INSTALL_LOCATION_LIB)/$(T_A)&lt;br /&gt;
INSTALL_BIN                 = $(INSTALL_LOCATION_BIN)/$(T_A)&lt;br /&gt;
&lt;br /&gt;
#Directories for libraries&lt;br /&gt;
SHRLIB_SEARCH_DIRS          = $(INSTALL_LIB)&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Ext, app, and module configure dir targets&lt;br /&gt;
CONFIG_INSTALLS += ../RULES_BUILD ../RELEASE*&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Cross compile default, HOST or CROSS, CONFIG.crossCommon will override&lt;br /&gt;
BUILD_CLASS = HOST&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Build defaults, CONFIG_SITE, CONFIG, or os/CONFIG* will override&lt;br /&gt;
STATIC_BUILD=NO&lt;br /&gt;
SHARED_LIBRARIES=YES&lt;br /&gt;
HOST_OPT=YES&lt;br /&gt;
CROSS_OPT=YES&lt;br /&gt;
HOST_WARN=YES&lt;br /&gt;
CROSS_WARN=YES&lt;br /&gt;
GNU=NO&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Run checkRelease in $(TOP)/configure/O.*&lt;br /&gt;
CONFIG_TARGETS += $(CHECK_RELEASE_$(CHECK_RELEASE))&lt;br /&gt;
&lt;br /&gt;
#-------------------------------------------------------&lt;br /&gt;
# Prefix and suffix&lt;br /&gt;
DEP=.d&lt;br /&gt;
OBJ = .&lt;br /&gt;
CMPLR_SUFFIX=&lt;br /&gt;
CMPLR_PREFIX=&lt;br /&gt;
LIB_PREFIX=&lt;br /&gt;
SHRLIB_PREFIX= $(LIB_PREFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# vpath directories&lt;br /&gt;
POSIX_YES = os/posix&lt;br /&gt;
GENERIC_SRC_DIRS = .. $(SRC_DIRS)&lt;br /&gt;
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \&lt;br /&gt;
       $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))&lt;br /&gt;
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# compile line include directories&lt;br /&gt;
INSTALL_INCLUDES += \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \&lt;br /&gt;
       -I$(INSTALL_INCLUDE)&lt;br /&gt;
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Target filename definitions&lt;br /&gt;
OBJSNAME = $(addsuffix $(OBJ),$(basename $(OBJS)))&lt;br /&gt;
PRODNAME = $(addsuffix $(EXE),$(basename $(PROD)))&lt;br /&gt;
TESTPRODNAME = $(addsuffix $(EXE),$(basename $(TESTPROD)))&lt;br /&gt;
&lt;br /&gt;
SHRLIBNAME = $(SHRLIBNAME_$(SHARED_LIBRARIES))&lt;br /&gt;
&lt;br /&gt;
JAVA =&lt;br /&gt;
JAR =&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# obj files&lt;br /&gt;
&lt;br /&gt;
TARGET_OBJS =  $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))&lt;br /&gt;
&lt;br /&gt;
PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))&lt;br /&gt;
PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))&lt;br /&gt;
LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT resource files&lt;br /&gt;
&lt;br /&gt;
TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)&lt;br /&gt;
&lt;br /&gt;
PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)&lt;br /&gt;
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)&lt;br /&gt;
&lt;br /&gt;
LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)&lt;br /&gt;
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# WIN95/NT source browser&lt;br /&gt;
PROD_BAF = $(addsuffix $(BAF), $(basename $(PROD)))&lt;br /&gt;
LIB_BAF=$(addsuffix $(BAF),$(basename $(LIBRARY)))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor, compiler, and linker flag defaults&lt;br /&gt;
&lt;br /&gt;
# Target architecture specific flags&lt;br /&gt;
ARCH_DEP_CPPFLAGS =&lt;br /&gt;
ARCH_DEP_CFLAGS =&lt;br /&gt;
ARCH_DEP_CXXFLAGS = $(ARCH_DEP_CFLAGS)&lt;br /&gt;
ARCH_DEP_LDFLAGS =&lt;br /&gt;
ARCH_DEP_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target operating system specific flags&lt;br /&gt;
OP_SYS_CPPFLAGS =&lt;br /&gt;
OP_SYS_CFLAGS =&lt;br /&gt;
OP_SYS_CXXFLAGS = $(OP_SYS_CFLAGS)&lt;br /&gt;
OP_SYS_LDFLAGS =&lt;br /&gt;
OP_SYS_INCLUDES =&lt;br /&gt;
&lt;br /&gt;
# Makefile specific flags&lt;br /&gt;
USR_INCLUDES =&lt;br /&gt;
USR_CFLAGS =&lt;br /&gt;
USR_CXXFLAGS =&lt;br /&gt;
USR_LDFLAGS =&lt;br /&gt;
USR_LIBS =&lt;br /&gt;
USR_CPPFLAGS =&lt;br /&gt;
USR_DBDFLAGS =&lt;br /&gt;
USR_ARFLAGS =&lt;br /&gt;
&lt;br /&gt;
# Debug specific options&lt;br /&gt;
DEBUG_CPPFLAGS =&lt;br /&gt;
DEBUG_CFLAGS =&lt;br /&gt;
DEBUG_CXXFLAGS = $(DEBUG_CFLAGS)&lt;br /&gt;
DEBUG_LDFLAGS =&lt;br /&gt;
DEBUG_LDLIBS =&lt;br /&gt;
&lt;br /&gt;
# Target specific options&lt;br /&gt;
TARGET_INCLUDES = $($(basename $@)_INCLUDES_$(T_A))&lt;br /&gt;
TARGET_CFLAGS = $($(basename $@)_CFLAGS_$(T_A))&lt;br /&gt;
TARGET_CXXFLAGS = $($(basename $@)_CXXFLAGS_$(T_A))&lt;br /&gt;
TARGET_CPPFLAGS = $($(basename $@)_CPPFLAGS_$(T_A))&lt;br /&gt;
&lt;br /&gt;
TARGET_INCLUDES += $($(basename $@)_INCLUDES_$(OS_CLASS)) $($(basename $@)_INCLUDES)&lt;br /&gt;
TARGET_CFLAGS += $($(basename $@)_CFLAGS_$(OS_CLASS)) $($(basename $@)_CFLAGS)&lt;br /&gt;
TARGET_CXXFLAGS += $($(basename $@)_CXXFLAGS_$(OS_CLASS)) $($(basename $@)_CXXFLAGS)&lt;br /&gt;
TARGET_CPPFLAGS += $($(basename $@)_CPPFLAGS_$(OS_CLASS)) $($(basename $@)_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
TARGET_LDFLAGS = $($*_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
# Warnings flags&lt;br /&gt;
WARN_CPPFLAGS = $(WARN_CPPFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CFLAGS = $(WARN_CFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))&lt;br /&gt;
&lt;br /&gt;
# Optimization flags&lt;br /&gt;
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))&lt;br /&gt;
&lt;br /&gt;
# Static build flags&lt;br /&gt;
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))&lt;br /&gt;
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# cflags for shared library src files (from SHRLIB_CFLAGS)&lt;br /&gt;
LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))&lt;br /&gt;
LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# prefix, suffix, and ldflags for loadable shared libraries &lt;br /&gt;
TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)&lt;br /&gt;
LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)&lt;br /&gt;
LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Command-line input support default&lt;br /&gt;
COMMANDLINE_LIBRARY = EPICS&lt;br /&gt;
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Flags&lt;br /&gt;
&lt;br /&gt;
INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\&lt;br /&gt;
 $(TARGET_INCLUDES) $(USR_INCLUDES) $(OP_SYS_INCLUDES) $($(BUILD_CLASS)_INCLUDES)&lt;br /&gt;
&lt;br /&gt;
CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) $(DEBUG_CFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) $(USR_CFLAGS) $(ARCH_DEP_CFLAGS)\&lt;br /&gt;
 $(CODE_CFLAGS) $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) $(DEBUG_CXXFLAGS)\&lt;br /&gt;
 $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) $(USR_CXXFLAGS) $(ARCH_DEP_CXXFLAGS)\&lt;br /&gt;
 $(CODE_CXXFLAGS) $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS) $(HDEPENDS_CFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(POSIX_LDFLAGS) \&lt;br /&gt;
 $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) $($(BUILD_CLASS)_LDFLAGS)\&lt;br /&gt;
 $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)&lt;br /&gt;
&lt;br /&gt;
LDLIBS = \&lt;br /&gt;
 $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) $(GNU_LDLIBS_$(GNU))&lt;br /&gt;
&lt;br /&gt;
CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS)\&lt;br /&gt;
 $(OPT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS)\&lt;br /&gt;
 $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\&lt;br /&gt;
 $(OP_SYS_CPPFLAGS) $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# ar definition default&lt;br /&gt;
ARFLAGS =&lt;br /&gt;
ARCMD = $(AR) $(ARFLAGS) $(USR_ARFLAGS) $@  $(LIBRARY_LD_OBJS)&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# &#039;Munch&#039; link-edit&lt;br /&gt;
MUNCH_CMD = $(LD) $(MUNCH_LDFLAGS) -o $@ $^&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# LEX default options&lt;br /&gt;
#&lt;br /&gt;
# Allow 8-bit characters&lt;br /&gt;
LEXOPT += -8&lt;br /&gt;
# Generate an &amp;quot;interactive&amp;quot; scanner, solves problems at EOF.&lt;br /&gt;
LEXOPT += -I&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Build compile line here&lt;br /&gt;
&lt;br /&gt;
PATH_FILTER = $(1)&lt;br /&gt;
COMPILE.c = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
COMPILE.cpp = $(CCC) -c $(CPPFLAGS) $(CXXFLAGS) $(call PATH_FILTER,$(INCLUDES))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# C preprocessor command&lt;br /&gt;
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $&amp;lt; &amp;gt; $@&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# Header dependency file generation&lt;br /&gt;
&lt;br /&gt;
HDEPENDS = YES&lt;br /&gt;
HDEPENDS_METHOD = CMD&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_INCLUDES = $(subst -I,,$(INCLUDES))&lt;br /&gt;
HDEPENDSFLAGS = -m $*$(DEP) $(HDEPENDS_INCLUDES) $@ $&amp;lt;&lt;br /&gt;
HDEPENDSCMD = -$(MKMF) $(HDEPENDS_FLAGS) $(HDEPENDSFLAGS)&lt;br /&gt;
&lt;br /&gt;
HDEPENDS_CMD_NO = $(ECHO) &amp;quot;&amp;quot;&lt;br /&gt;
HDEPENDS_CMD_YES = $(if $(filter CMD,$(HDEPENDS_METHOD)),$(HDEPENDSCMD),$(HDEPENDS_CMD_NO))&lt;br /&gt;
HDEPENDS_CMD = $(HDEPENDS_CMD_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
HDEPENDSCFLAGS = -MMD&lt;br /&gt;
HDEPENDS_CFLAGS_YES = $(if $(filter CFLAGS,$(HDEPENDS_METHOD)),$(HDEPENDSCFLAGS))&lt;br /&gt;
HDEPENDS_CFLAGS = $(HDEPENDS_CFLAGS_$(HDEPENDS))&lt;br /&gt;
&lt;br /&gt;
#--------------------------------------------------&lt;br /&gt;
# depends definition&lt;br /&gt;
&lt;br /&gt;
TARGET_SRCS = $(foreach name, $(TESTPROD) $(PROD) $(LIBRARY), $($(name)_SRCS))&lt;br /&gt;
SRC_FILES = $(LIB_SRCS) $(LIBSRCS) $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(TARGET_SRCS)&lt;br /&gt;
HDEPENDS_FILES_YES = $(addsuffix $(DEP),$(notdir $(basename $(SRC_FILES))))&lt;br /&gt;
HDEPENDS_FILES = $(if $(filter NO,$(HDEPENDS)),,$(HDEPENDS_FILES_YES))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Names of installed items&lt;br /&gt;
#&lt;br /&gt;
#	each list starts with the destination directory name(s)&lt;br /&gt;
#	to make sure it&#039;s there&lt;br /&gt;
&lt;br /&gt;
INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)&lt;br /&gt;
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)&lt;br /&gt;
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)&lt;br /&gt;
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)&lt;br /&gt;
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)&lt;br /&gt;
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \&lt;br /&gt;
                   $(subst $(CONFIG),top/configure,$(TEMPLATES)))&lt;br /&gt;
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)&lt;br /&gt;
&lt;br /&gt;
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))&lt;br /&gt;
INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
# Installed file permissions&lt;br /&gt;
BIN_PERMISSIONS = 555&lt;br /&gt;
LIB_PERMISSIONS = 444&lt;br /&gt;
INSTALL_PERMISSIONS = 444&lt;br /&gt;
&lt;br /&gt;
#---------------------------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
# auto determine the directory paths that things are installed to&lt;br /&gt;
# RULES:&lt;br /&gt;
# 1) found in any one of several os specific area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)&lt;br /&gt;
# 2) not foundin (1) and found in generic area&lt;br /&gt;
#       =&amp;gt; install to $(INSTALL_INCLUDE)&lt;br /&gt;
# 3) not found in (1) or (2) then may be (not yet) computer generated&lt;br /&gt;
#       =&amp;gt; install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let&lt;br /&gt;
#       build rules work on vpath&lt;br /&gt;
#&lt;br /&gt;
# These rules guarantee that the users include from&lt;br /&gt;
# no more than two directories&lt;br /&gt;
#&lt;br /&gt;
INSTALL_INC += $(foreach inc, $(INC), \&lt;br /&gt;
    $(firstword \&lt;br /&gt;
        $(OS_INSTALL_INC) \&lt;br /&gt;
        $(GENERIC_INSTALL_INC) \&lt;br /&gt;
        $(GENERATED_INSTALL_INC) ) )&lt;br /&gt;
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 1&lt;br /&gt;
#&lt;br /&gt;
OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )&lt;br /&gt;
INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff)  )&lt;br /&gt;
INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )&lt;br /&gt;
INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 2&lt;br /&gt;
#&lt;br /&gt;
GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )&lt;br /&gt;
INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb)  )&lt;br /&gt;
INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )&lt;br /&gt;
INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Rule 3&lt;br /&gt;
#&lt;br /&gt;
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)&lt;br /&gt;
&lt;br /&gt;
COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \&lt;br /&gt;
    $(firstword  $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )&lt;br /&gt;
SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )&lt;br /&gt;
SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa)  )&lt;br /&gt;
SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )&lt;br /&gt;
 &lt;br /&gt;
endif&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE is distributed subject to a Software License Agreement found&lt;br /&gt;
# in the file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd&lt;br /&gt;
#&lt;br /&gt;
# Macros and rules to create a new installation file type &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# --------------------------------------------------------------&lt;br /&gt;
# Module developers can now define a new type of file, e.g. ABC, &lt;br /&gt;
# so that files of type ABC will be installed into a directory&lt;br /&gt;
# defined by INSTALL_ABC. This is done by creating a new CONFIG&amp;lt;name&amp;gt;&lt;br /&gt;
# file, e.g. CONFIG_ABC, with the following lines:&lt;br /&gt;
#&lt;br /&gt;
#       FILE_TYPE += ABC&lt;br /&gt;
#       INSTALL_ABC = $(INSTALL_LOCATION)/abc&lt;br /&gt;
#&lt;br /&gt;
# The INSTALL_ABC directory should be be a subdirectory of &lt;br /&gt;
# $(INSTALL_LOCATION). The file type ABC should be target&lt;br /&gt;
# architecture independent (alh files, medm files, edm files).&lt;br /&gt;
#&lt;br /&gt;
# Optional rules necessary for files of type ABC should be put in&lt;br /&gt;
# a RULES_ABC file.&lt;br /&gt;
#&lt;br /&gt;
# The module developer installs new CONFIG* or RULES* files&lt;br /&gt;
# into the directory $(INSTALL_LOCATION)/cfg by including the &lt;br /&gt;
# following Makefile line:&lt;br /&gt;
#&lt;br /&gt;
#       CFG += CONFIG_ABC RULES_ABC&lt;br /&gt;
# &lt;br /&gt;
# Files of type ABC are installed into INSTALL_ABC directory&lt;br /&gt;
# by adding a line like the following to a Makefile.&lt;br /&gt;
#&lt;br /&gt;
#       ABC += &amp;lt;filename1&amp;gt; &amp;lt;filename2&amp;gt; &amp;lt;filename3&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Files in $(INSTALL_LOCATION)/cfg directory are now included by&lt;br /&gt;
# the base config files so the definitions and rules are available&lt;br /&gt;
# for use by later src directory Makefiles in the same module or&lt;br /&gt;
# by other modules with a RELEASE line pointing to the TOP of &lt;br /&gt;
# the module with RULES_ABC.&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ADL&lt;br /&gt;
INSTALL_ADL = $(INSTALL_LOCATION)/adl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += ALH&lt;br /&gt;
INSTALL_ALH = $(INSTALL_LOCATION)/alh&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += CFG&lt;br /&gt;
INSTALL_CFG = $(INSTALL_LOCATION)/cfg&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += EDL&lt;br /&gt;
INSTALL_EDL = $(INSTALL_LOCATION)/edl&lt;br /&gt;
&lt;br /&gt;
FILE_TYPE += PERL_MODULES&lt;br /&gt;
INSTALL_PERL_MODULES = $(INSTALL_LOCATION_LIB)/perl&lt;br /&gt;
&lt;br /&gt;
INSTALLS_CFG= $(CFG:%= $(INSTALL_CFG)/%)&lt;br /&gt;
DIRECTORY_TARGETS += $(foreach type, $(FILE_TYPE),$(INSTALL_$(type)))&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1993</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1993"/>
		<updated>2018-05-22T20:17:59Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
include $(CONFIG)/CONFIG&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.2.1 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.2.1 Back to 1.1.1.2&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.2.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.2.2 Back to 1.1.1.2&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1992</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1992"/>
		<updated>2018-05-22T20:14:55Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.2 Expansion of line include /global/develbuild/base/base-3.14.12.1/configure/CONFIG is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#*************************************************************************&lt;br /&gt;
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne&lt;br /&gt;
#     National Laboratory.&lt;br /&gt;
# Copyright (c) 2002 The Regents of the University of California, as&lt;br /&gt;
#     Operator of Los Alamos National Laboratory.&lt;br /&gt;
# EPICS BASE Versions 3.13.7&lt;br /&gt;
# and higher are distributed subject to a Software License Agreement found&lt;br /&gt;
# in file LICENSE that is included with this distribution. &lt;br /&gt;
#*************************************************************************&lt;br /&gt;
#&lt;br /&gt;
#  Revision-Id: anj@aps.anl.gov-20101026195642-3p5qxsy19a8skgud&lt;br /&gt;
#&lt;br /&gt;
#  The developer may edit this file.&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.2 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1 Manual expansion of included file.  Back to level 1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1991</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1991"/>
		<updated>2018-05-22T20:06:25Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1.1 Manual expansion of included file.  Back to level 1.1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following snippet likely never gets used by us...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard ./configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = ./configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But at this point we get back to yet more includes...&lt;br /&gt;
CONFIG_COMMON&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
yet another include...&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T . releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $(.)/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = .&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include ./configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include ./configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1990</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1990"/>
		<updated>2018-05-22T20:05:48Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
include $(TOP)/configure/RELEASE&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1 Manual expansion of line include /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;END 1.1.1 Manual expansion of included file.  Back to level 1.1&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following snippet likely never gets used by us...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard ./configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = ./configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But at this point we get back to yet more includes...&lt;br /&gt;
CONFIG_COMMON&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
yet another include...&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T . releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $(.)/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = .&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include ./configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include ./configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1989</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1989"/>
		<updated>2018-05-22T20:01:43Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1 Begin copying code from /global/devel/gretTop/9-22/dgsDrivers/Makefile.==&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1 Manual expansion of line include $(TOP)/configure/CONFIG is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;1.1.1 Manual expansion of line include $(TOP)/configure/CONFIG_APP is below.&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following snippet likely never gets used by us...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard ./configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = ./configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But at this point we get back to yet more includes...&lt;br /&gt;
CONFIG_COMMON&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
yet another include...&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T . releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $(.)/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = .&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include ./configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include ./configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1988</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1988"/>
		<updated>2018-05-22T19:54:49Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Manual expansion of line&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
is below.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following snippet likely never gets used by us...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard ./configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = ./configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But at this point we get back to yet more includes...&lt;br /&gt;
CONFIG_COMMON&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
yet another include...&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T . releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $(.)/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = .&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include ./configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include ./configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1987</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1987"/>
		<updated>2018-05-22T19:53:32Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#CONFIG&lt;br /&gt;
include $(TOP)/configure/CONFIG_APP&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following snippet likely never gets used by us...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard ./configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = ./configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But at this point we get back to yet more includes...&lt;br /&gt;
CONFIG_COMMON&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
yet another include...&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T . releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $(.)/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = .&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include ./configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include ./configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1986</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1986"/>
		<updated>2018-05-22T19:35:16Z</updated>

		<summary type="html">&lt;p&gt;Jta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following snippet likely never gets used by us...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard ./configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = ./configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But at this point we get back to yet more includes...&lt;br /&gt;
CONFIG_COMMON&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_COMMON&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include /global/develbuild/base/base-3.14.12.1/configure/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
yet another include...&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T . releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $(.)/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = .&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include ./configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include ./configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1985</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1985"/>
		<updated>2018-05-22T19:27:49Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)                          ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)                               ##jta: forward definition&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)                   ##jta: forward definition&lt;br /&gt;
&lt;br /&gt;
CONFIG=/global/develbuild/base/base-3.14.12.1/configure&lt;br /&gt;
&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following snippet likely never gets used by us...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard ./configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = ./configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But at this point we get back to yet more includes...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T . releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $(.)/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = .&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include ./configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include ./configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1984</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1984"/>
		<updated>2018-05-22T19:24:01Z</updated>

		<summary type="html">&lt;p&gt;Jta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.  This isn&#039;t just a simple copy/paste operation, because we also have to expand all the variable references for paths, but some variables are re-used.  In doing this we have to realize that Make acts like a two-pass assembler, first building the symbol table (so forward reference is technically legal), then doing all the expansion of the symbols and handling the rules that have been invoked by the user.  When invoking make you can supply a list of rules (actions) at the command line and make will dig through the makefiles to find the matching segments of actions corresponding to each rule.  Nice idea but hard to work with if that means significant amounts of the code are never used because all the user ever does is say &#039;make&#039; with no arguments.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#CONFIG&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
CONFIG=$(EPICS_BASE)/configure&lt;br /&gt;
&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard ./configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = ./configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),./configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T . releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $(.)/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = .&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include ./configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include ./configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1983</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1983"/>
		<updated>2018-05-22T19:18:21Z</updated>

		<summary type="html">&lt;p&gt;Jta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
#CONFIG&lt;br /&gt;
# CONFIG_APP&lt;br /&gt;
&lt;br /&gt;
#RELEASE Location of external products&lt;br /&gt;
# Run &amp;quot;gnumake clean uninstall install&amp;quot; in the application&lt;br /&gt;
# top directory each time this file is changed.&lt;br /&gt;
#&lt;br /&gt;
# NOTE: The build does not check dependancies on files&lt;br /&gt;
# external to this application. Thus you should run&lt;br /&gt;
# &amp;quot;gnumake clean uninstall install&amp;quot; in the top directory&lt;br /&gt;
# each time EPICS_BASE, SNCSEQ, or any other external&lt;br /&gt;
# module defined in the RELEASE file is rebuilt.&lt;br /&gt;
&lt;br /&gt;
TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top&lt;br /&gt;
&lt;br /&gt;
# If you don&#039;t want to install into $(TOP) then&lt;br /&gt;
# define INSTALL_LOCATION_APP here&lt;br /&gt;
#INSTALL_LOCATION_APP=&amp;lt;fullpathname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GRETVME=./../gretVME&lt;br /&gt;
DATASERVER=./../gretClust&lt;br /&gt;
&lt;br /&gt;
#If using the sequencer, point SNCSEQ at its top directory:&lt;br /&gt;
SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12&lt;br /&gt;
&lt;br /&gt;
ASYN=/global/develbuild/synApps/asyn/asyn4-17&lt;br /&gt;
&lt;br /&gt;
# EPICS_BASE usually appears last so other apps can override stuff:&lt;br /&gt;
#EPICS_BASE=/global/develbuild/base/R3.14.10&lt;br /&gt;
EPICS_BASE=/global/develbuild/base/base-3.14.12.1&lt;br /&gt;
&lt;br /&gt;
#Capfast users may need the following definitions&lt;br /&gt;
#CAPFAST_TEMPLATES=&lt;br /&gt;
#SCH2EDIF_PATH=&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include ./configure/RELEASE.Common.$(T_A)&lt;br /&gt;
-include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
CONFIG=$(EPICS_BASE)/configure&lt;br /&gt;
&lt;br /&gt;
# assume T_A is the host arch if not specified&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#  Common build definitions&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)&lt;br /&gt;
EPICS_BASE = $(INSTALL_LOCATION)&lt;br /&gt;
CONFIG = $(TOP)/configure&lt;br /&gt;
BASE_TOP=YES&lt;br /&gt;
else&lt;br /&gt;
CONFIG ?= $(EPICS_BASE)/configure&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Provide a default if the user hasn&#039;t set EPICS_HOST_ARCH&lt;br /&gt;
ifeq ($(origin EPICS_HOST_ARCH), undefined)&lt;br /&gt;
# NB: Must use a simply expanded variable here for performance:&lt;br /&gt;
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)&lt;br /&gt;
endif&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_COMPAT&lt;br /&gt;
&lt;br /&gt;
-include $(CONFIG)/RELEASE&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(CONFIG)/RELEASE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
include $(CONFIG)/CONFIG_COMMON&lt;br /&gt;
include $(CONFIG)/CONFIG_FILE_TYPE&lt;br /&gt;
&lt;br /&gt;
#  Base-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE&lt;br /&gt;
&lt;br /&gt;
#  Site-specific build options&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_SITE&lt;br /&gt;
&lt;br /&gt;
#  Version numbering&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/CONFIG_BASE_VERSION&lt;br /&gt;
&lt;br /&gt;
#  Host architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
&lt;br /&gt;
#  Cross compile specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(EPICS_HOST_ARCH),$(T_A))&lt;br /&gt;
include $(CONFIG)/CONFIG.CrossCommon&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.Common.$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  Host-Target architecture specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
#  RELEASE file specific definitions&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
-include $(CONFIG)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  Site specific target and host-target definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A)&lt;br /&gt;
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include &amp;lt;top&amp;gt;/cfg/CONFIG* definitions from tops defined in RELEASE* files&lt;br /&gt;
#&lt;br /&gt;
ifneq ($(CONFIG),$(TOP)/configure)&lt;br /&gt;
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)&lt;br /&gt;
RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*))&lt;br /&gt;
ifneq ($(RELEASE_CFG_CONFIGS),)&lt;br /&gt;
include $(RELEASE_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# Include $(INSTALL_CFG)/CONFIG* definitions&lt;br /&gt;
#&lt;br /&gt;
ifndef T_A&lt;br /&gt;
TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*)&lt;br /&gt;
ifneq ($(TOP_CFG_CONFIGS),)&lt;br /&gt;
include $(TOP_CFG_CONFIGS)&lt;br /&gt;
endif&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  User specific definitions&lt;br /&gt;
#&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH)&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.Common.$(T_A)&lt;br /&gt;
-include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
#  All options&lt;br /&gt;
#   may be overridden here.&lt;br /&gt;
#&lt;br /&gt;
# EXAMPLES&lt;br /&gt;
# --------&lt;br /&gt;
#  Build client objects statically ?  must be either YES or NO&lt;br /&gt;
#STATIC_BUILD=NO&lt;br /&gt;
#  Host build optimization,   must be either YES or NO&lt;br /&gt;
#HOST_OPT=YES&lt;br /&gt;
#  Cross build optimization,  must be either YES or NO&lt;br /&gt;
#CROSS_OPT=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for host build,  must be either YES or NO&lt;br /&gt;
#HOST_WARN=YES&lt;br /&gt;
#  Generate Verbose Compiler Warnings for cross compile builds,  must be either YES or NO&lt;br /&gt;
#CROSS_WARN=YES&lt;br /&gt;
#etc.&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSTALL_LOCATION = $(TOP)&lt;br /&gt;
ifdef INSTALL_LOCATION_APP&lt;br /&gt;
INSTALL_LOCATION = $(INSTALL_LOCATION_APP)&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
ifdef T_A&lt;br /&gt;
-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
# dbst based database optimization (default: NO)&lt;br /&gt;
DB_OPT = NO&lt;br /&gt;
# Add any changes to make definitions here&lt;br /&gt;
&lt;br /&gt;
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040&lt;br /&gt;
&lt;br /&gt;
# Use this when your IOC and the host use different paths&lt;br /&gt;
# to access the application. Typically this will be &lt;br /&gt;
# used with the Microsoft FTP server or with NFS mounts. Use&lt;br /&gt;
# is indicated by failure of the cdCommands script on&lt;br /&gt;
# vxWorks. You must rebuild in the iocBoot directory &lt;br /&gt;
# before this takes effect.&lt;br /&gt;
#IOCS_APPL_TOP = &amp;lt;the top of the application as seen by the IOC&amp;gt;&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1982</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1982"/>
		<updated>2018-05-22T19:12:46Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Flattened Makefile 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Makefile at top of application tree&lt;br /&gt;
TOP = .&lt;br /&gt;
include $(TOP)/configure/CONFIG&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), configure)&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))&lt;br /&gt;
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))&lt;br /&gt;
include $(TOP)/configure/RULES_TOP&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1981</id>
		<title>Flattened Makefile 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=Flattened_Makefile_1&amp;diff=1981"/>
		<updated>2018-05-22T19:08:59Z</updated>

		<summary type="html">&lt;p&gt;Jta: Created page with &amp;quot;== Flattened Makefile 1 == Using a pile of copy/paste, let&amp;#039;s try to build a flat makefile from the many levels of other files including other files.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Flattened Makefile 1 ==&lt;br /&gt;
Using a pile of copy/paste, let&#039;s try to build a flat makefile from the many levels of other files including other files.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1980</id>
		<title>MakeFile Archaeology</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1980"/>
		<updated>2018-05-22T19:08:02Z</updated>

		<summary type="html">&lt;p&gt;Jta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digging up the make file and all that it refers to ==&lt;br /&gt;
&lt;br /&gt;
We start with the makefile itself, found at /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
The makefile presumes that it is being run from the top of the development tree, setting internal variable TOP to &amp;quot;.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The makefile then includes the contents of the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG.  &lt;br /&gt;
** This file includes the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP but all other lines are commented out.&lt;br /&gt;
*** File /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP itself then pulls in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but the other files are &#039;&#039;&#039;&#039;&#039;not included&#039;&#039;&#039;&#039;&#039; because the &amp;quot;-include&amp;quot; directive means &amp;quot;do not include&amp;quot;.  Guess that&#039;s a backwards way to comment out the line.&lt;br /&gt;
&lt;br /&gt;
    Thus at this point in the make what has realled happened is that we&#039;ve pulled in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but nothing else has occurred.&lt;br /&gt;
&lt;br /&gt;
=== File /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE ===&lt;br /&gt;
&lt;br /&gt;
*  defines a variable TEMPLATE_TOP that is not used later within this file,  and is dependent upon the definition of the variable EPICS_BASE that occurs later in this same file.&lt;br /&gt;
*  defines a variable GRETVME that parses out to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
*  defines a variable DATASERVER that parses out to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
*  defines a variable SNCSEQ to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
**  Obscure comment about needing SNCSEQ defined &amp;quot;if using the sequencer&amp;quot;, but at this point we don&#039;t know what a &amp;quot;sequencer&amp;quot; is.&lt;br /&gt;
*  defines a variable ASYN to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
**  No comment available but we guess that this is intended for later use to bring in the ASYN driver C++ stuff later.&lt;br /&gt;
*  defines the variable EPICS_BASE to the value /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
**  This is probably something that will be dependent upon which processor is in use as different processors may have different versions of EPICS.&lt;br /&gt;
*  and then a couple more commented-out lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    So at this point we have &lt;br /&gt;
    Variable TOP is set to /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
    Variable GRETVME is set to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
    Variable DATASERVER is set to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
    Variable SNCSEQ is set to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
    Variable ASYN is set to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
    Variable EPICS_BASE is set to /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
    Variable TEMPLATE_TOP is set to /global/develbuild/base/base-3.14.12.1/templates/makeBaseApp/top, because that is done with &amp;quot;=&amp;quot; (deferred assignment) as opposed to &amp;quot;:=&amp;quot; (immediate assignment).&lt;br /&gt;
&lt;br /&gt;
At this point we&#039;ve run down the chain of includes from /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG at the top of the makefile.  We now recurse back to the original makefile (found at /global/devel/gretTop/9-22/dgsDrivers/Makefile) to see what happens after the first include.&lt;br /&gt;
&lt;br /&gt;
=== Back up to original makefile ===&lt;br /&gt;
&lt;br /&gt;
* after including $(TOP)/configure/CONFIG, parsed out above, the main makefile then builds up the value to be stored in the variable DIRS.  It is inobvious until you read up on make, but the lines that say DIRS := ($DIRS) $(blahblahblah) is an implied concatenation, identical to DIRS += $(blahblahblah).&lt;br /&gt;
* the five lines with DIRS := are then a series of concatenations to fill DIRS with a list of values.&lt;br /&gt;
* Each of the value lists uses the &#039;&#039;filter-out&#039;&#039; operator, defined as &lt;br /&gt;
&lt;br /&gt;
     $(filter-out pattern…,text)&lt;br /&gt;
     Returns all whitespace-separated words in text that do not match any of the pattern words, removing the words that do match one or more. This is the exact opposite of the filter function.&lt;br /&gt;
&lt;br /&gt;
* The lines defining DIRS are not understood at this point, because we don&#039;t know what DIRS was originally defined to be; thus we can&#039;t understand why certain parts of an unknown tree are being excluded.&lt;br /&gt;
&lt;br /&gt;
=== main Makefile now includes $(TOP)/configure/RULES_TOP. ===&lt;br /&gt;
&lt;br /&gt;
* In what comes as no surprise at all, all this file does is include some other file $(EPICS_BASE)/configure/RULES_TOP.  That parses out to /global/develbuild/base/base-3.14.12.1/configure/RULES_TOP.&lt;br /&gt;
&lt;br /&gt;
=== What does RULES_TOP do? ===&lt;br /&gt;
&lt;br /&gt;
The first thing RULES_TOP does is include RULES_DIRS, but after that RULES_TOP actually has some real actions.  RULES_DIRS doesn&#039;t seem to include anything else, so we may have dug to the point where we can copy/paste from this tree of includes into a flat makefile that we can decode.&lt;br /&gt;
&lt;br /&gt;
[[Flattened Makefile 1]]&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1979</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1979"/>
		<updated>2018-05-21T22:23:18Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Breakdown of the make file = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
The IOC has been flashed with the most recent BSP file (devel7) and has been given in IP address on ONENET&lt;br /&gt;
 192.168.203.211&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.  (completed)&lt;br /&gt;
&lt;br /&gt;
- Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal&lt;br /&gt;
&lt;br /&gt;
- Serial connect on the &amp;quot;new&amp;quot; linux machine (need root access)&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details. HOWTO: &#039;&#039;pycd&#039;&#039; on &#039;&#039;dgs1&#039;&#039;, a number of &#039;&#039;build directories&#039;&#039; are there, &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; is the main program. &lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]: JTA and WJ working on this on CON5. Located, now looking for a simple Makefile that is &#039;&#039;flat&#039;&#039;. &#039;&#039;&#039;/global/devel/gretTop/9-22/dgsDrivers/Makefile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
===relevant documentation that is elsewhere ===&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/The_DGS/DFMA_EPICS_Implementation&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/Tim_Madden_software_documentation&lt;br /&gt;
&lt;br /&gt;
===Breakdown of the make file ===&lt;br /&gt;
 [[MakeFile Archaeology]]&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1978</id>
		<title>MakeFile Archaeology</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1978"/>
		<updated>2018-05-21T22:22:42Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* main Makefile now includes $(TOP)/configure/RULES_TOP. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digging up the make file and all that it refers to ==&lt;br /&gt;
&lt;br /&gt;
We start with the makefile itself, found at /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
The makefile presumes that it is being run from the top of the development tree, setting internal variable TOP to &amp;quot;.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The makefile then includes the contents of the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG.  &lt;br /&gt;
** This file includes the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP but all other lines are commented out.&lt;br /&gt;
*** File /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP itself then pulls in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but the other files are &#039;&#039;&#039;&#039;&#039;not included&#039;&#039;&#039;&#039;&#039; because the &amp;quot;-include&amp;quot; directive means &amp;quot;do not include&amp;quot;.  Guess that&#039;s a backwards way to comment out the line.&lt;br /&gt;
&lt;br /&gt;
    Thus at this point in the make what has realled happened is that we&#039;ve pulled in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but nothing else has occurred.&lt;br /&gt;
&lt;br /&gt;
=== File /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE ===&lt;br /&gt;
&lt;br /&gt;
*  defines a variable TEMPLATE_TOP that is not used later within this file,  and is dependent upon the definition of the variable EPICS_BASE that occurs later in this same file.&lt;br /&gt;
*  defines a variable GRETVME that parses out to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
*  defines a variable DATASERVER that parses out to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
*  defines a variable SNCSEQ to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
**  Obscure comment about needing SNCSEQ defined &amp;quot;if using the sequencer&amp;quot;, but at this point we don&#039;t know what a &amp;quot;sequencer&amp;quot; is.&lt;br /&gt;
*  defines a variable ASYN to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
**  No comment available but we guess that this is intended for later use to bring in the ASYN driver C++ stuff later.&lt;br /&gt;
*  defines the variable EPICS_BASE to the value /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
**  This is probably something that will be dependent upon which processor is in use as different processors may have different versions of EPICS.&lt;br /&gt;
*  and then a couple more commented-out lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    So at this point we have &lt;br /&gt;
    Variable TOP is set to /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
    Variable GRETVME is set to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
    Variable DATASERVER is set to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
    Variable SNCSEQ is set to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
    Variable ASYN is set to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
    Variable EPICS_BASE is set to /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
    Variable TEMPLATE_TOP is set to /global/develbuild/base/base-3.14.12.1/templates/makeBaseApp/top, because that is done with &amp;quot;=&amp;quot; (deferred assignment) as opposed to &amp;quot;:=&amp;quot; (immediate assignment).&lt;br /&gt;
&lt;br /&gt;
At this point we&#039;ve run down the chain of includes from /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG at the top of the makefile.  We now recurse back to the original makefile (found at /global/devel/gretTop/9-22/dgsDrivers/Makefile) to see what happens after the first include.&lt;br /&gt;
&lt;br /&gt;
=== Back up to original makefile ===&lt;br /&gt;
&lt;br /&gt;
* after including $(TOP)/configure/CONFIG, parsed out above, the main makefile then builds up the value to be stored in the variable DIRS.  It is inobvious until you read up on make, but the lines that say DIRS := ($DIRS) $(blahblahblah) is an implied concatenation, identical to DIRS += $(blahblahblah).&lt;br /&gt;
* the five lines with DIRS := are then a series of concatenations to fill DIRS with a list of values.&lt;br /&gt;
* Each of the value lists uses the &#039;&#039;filter-out&#039;&#039; operator, defined as &lt;br /&gt;
&lt;br /&gt;
     $(filter-out pattern…,text)&lt;br /&gt;
     Returns all whitespace-separated words in text that do not match any of the pattern words, removing the words that do match one or more. This is the exact opposite of the filter function.&lt;br /&gt;
&lt;br /&gt;
* The lines defining DIRS are not understood at this point, because we don&#039;t know what DIRS was originally defined to be; thus we can&#039;t understand why certain parts of an unknown tree are being excluded.&lt;br /&gt;
&lt;br /&gt;
=== main Makefile now includes $(TOP)/configure/RULES_TOP. ===&lt;br /&gt;
&lt;br /&gt;
* In what comes as no surprise at all, all this file does is include some other file $(EPICS_BASE)/configure/RULES_TOP.  That parses out to /global/develbuild/base/base-3.14.12.1/configure/RULES_TOP.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1977</id>
		<title>MakeFile Archaeology</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1977"/>
		<updated>2018-05-21T22:16:55Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Back up to original makefile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digging up the make file and all that it refers to ==&lt;br /&gt;
&lt;br /&gt;
We start with the makefile itself, found at /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
The makefile presumes that it is being run from the top of the development tree, setting internal variable TOP to &amp;quot;.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The makefile then includes the contents of the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG.  &lt;br /&gt;
** This file includes the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP but all other lines are commented out.&lt;br /&gt;
*** File /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP itself then pulls in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but the other files are &#039;&#039;&#039;&#039;&#039;not included&#039;&#039;&#039;&#039;&#039; because the &amp;quot;-include&amp;quot; directive means &amp;quot;do not include&amp;quot;.  Guess that&#039;s a backwards way to comment out the line.&lt;br /&gt;
&lt;br /&gt;
    Thus at this point in the make what has realled happened is that we&#039;ve pulled in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but nothing else has occurred.&lt;br /&gt;
&lt;br /&gt;
=== File /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE ===&lt;br /&gt;
&lt;br /&gt;
*  defines a variable TEMPLATE_TOP that is not used later within this file,  and is dependent upon the definition of the variable EPICS_BASE that occurs later in this same file.&lt;br /&gt;
*  defines a variable GRETVME that parses out to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
*  defines a variable DATASERVER that parses out to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
*  defines a variable SNCSEQ to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
**  Obscure comment about needing SNCSEQ defined &amp;quot;if using the sequencer&amp;quot;, but at this point we don&#039;t know what a &amp;quot;sequencer&amp;quot; is.&lt;br /&gt;
*  defines a variable ASYN to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
**  No comment available but we guess that this is intended for later use to bring in the ASYN driver C++ stuff later.&lt;br /&gt;
*  defines the variable EPICS_BASE to the value /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
**  This is probably something that will be dependent upon which processor is in use as different processors may have different versions of EPICS.&lt;br /&gt;
*  and then a couple more commented-out lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    So at this point we have &lt;br /&gt;
    Variable TOP is set to /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
    Variable GRETVME is set to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
    Variable DATASERVER is set to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
    Variable SNCSEQ is set to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
    Variable ASYN is set to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
    Variable EPICS_BASE is set to /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
    Variable TEMPLATE_TOP is set to /global/develbuild/base/base-3.14.12.1/templates/makeBaseApp/top, because that is done with &amp;quot;=&amp;quot; (deferred assignment) as opposed to &amp;quot;:=&amp;quot; (immediate assignment).&lt;br /&gt;
&lt;br /&gt;
At this point we&#039;ve run down the chain of includes from /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG at the top of the makefile.  We now recurse back to the original makefile (found at /global/devel/gretTop/9-22/dgsDrivers/Makefile) to see what happens after the first include.&lt;br /&gt;
&lt;br /&gt;
=== Back up to original makefile ===&lt;br /&gt;
&lt;br /&gt;
* after including $(TOP)/configure/CONFIG, parsed out above, the main makefile then builds up the value to be stored in the variable DIRS.  It is inobvious until you read up on make, but the lines that say DIRS := ($DIRS) $(blahblahblah) is an implied concatenation, identical to DIRS += $(blahblahblah).&lt;br /&gt;
* the five lines with DIRS := are then a series of concatenations to fill DIRS with a list of values.&lt;br /&gt;
* Each of the value lists uses the &#039;&#039;filter-out&#039;&#039; operator, defined as &lt;br /&gt;
&lt;br /&gt;
     $(filter-out pattern…,text)&lt;br /&gt;
     Returns all whitespace-separated words in text that do not match any of the pattern words, removing the words that do match one or more. This is the exact opposite of the filter function.&lt;br /&gt;
&lt;br /&gt;
* The lines defining DIRS are not understood at this point, because we don&#039;t know what DIRS was originally defined to be; thus we can&#039;t understand why certain parts of an unknown tree are being excluded.&lt;br /&gt;
&lt;br /&gt;
=== main Makefile now includes $(TOP)/configure/RULES_TOP. ===&lt;br /&gt;
&lt;br /&gt;
* In what comes as no surprise at all, all this file does is include some other file $(EPICS_BASE)/configure/RULES_TOP.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1976</id>
		<title>MakeFile Archaeology</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1976"/>
		<updated>2018-05-21T22:00:38Z</updated>

		<summary type="html">&lt;p&gt;Jta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digging up the make file and all that it refers to ==&lt;br /&gt;
&lt;br /&gt;
We start with the makefile itself, found at /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
The makefile presumes that it is being run from the top of the development tree, setting internal variable TOP to &amp;quot;.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The makefile then includes the contents of the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG.  &lt;br /&gt;
** This file includes the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP but all other lines are commented out.&lt;br /&gt;
*** File /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP itself then pulls in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but the other files are &#039;&#039;&#039;&#039;&#039;not included&#039;&#039;&#039;&#039;&#039; because the &amp;quot;-include&amp;quot; directive means &amp;quot;do not include&amp;quot;.  Guess that&#039;s a backwards way to comment out the line.&lt;br /&gt;
&lt;br /&gt;
    Thus at this point in the make what has realled happened is that we&#039;ve pulled in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but nothing else has occurred.&lt;br /&gt;
&lt;br /&gt;
=== File /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE ===&lt;br /&gt;
&lt;br /&gt;
*  defines a variable TEMPLATE_TOP that is not used later within this file,  and is dependent upon the definition of the variable EPICS_BASE that occurs later in this same file.&lt;br /&gt;
*  defines a variable GRETVME that parses out to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
*  defines a variable DATASERVER that parses out to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
*  defines a variable SNCSEQ to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
**  Obscure comment about needing SNCSEQ defined &amp;quot;if using the sequencer&amp;quot;, but at this point we don&#039;t know what a &amp;quot;sequencer&amp;quot; is.&lt;br /&gt;
*  defines a variable ASYN to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
**  No comment available but we guess that this is intended for later use to bring in the ASYN driver C++ stuff later.&lt;br /&gt;
*  defines the variable EPICS_BASE to the value /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
**  This is probably something that will be dependent upon which processor is in use as different processors may have different versions of EPICS.&lt;br /&gt;
*  and then a couple more commented-out lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    So at this point we have &lt;br /&gt;
    Variable TOP is set to /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
    Variable GRETVME is set to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
    Variable DATASERVER is set to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
    Variable SNCSEQ is set to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
    Variable ASYN is set to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
    Variable EPICS_BASE is set to /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
    Variable TEMPLATE_TOP is set to /global/develbuild/base/base-3.14.12.1/templates/makeBaseApp/top, because that is done with &amp;quot;=&amp;quot; (deferred assignment) as opposed to &amp;quot;:=&amp;quot; (immediate assignment).&lt;br /&gt;
&lt;br /&gt;
At this point we&#039;ve run down the chain of includes from /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG at the top of the makefile.  We now recurse back to the original makefile (found at /global/devel/gretTop/9-22/dgsDrivers/Makefile) to see what happens after the first include.&lt;br /&gt;
&lt;br /&gt;
=== Back up to original makefile ===&lt;br /&gt;
&lt;br /&gt;
* after including $(TOP)/configure/CONFIG, parsed out above, the main makefile then builds up the value to be stored in the variable DIRS.  It is inobvious until you read up on make, but the lines that say DIRS := ($DIRS) $(blahblahblah) is an implied concatenation, identical to DIRS += $(blahblahblah).&lt;br /&gt;
* the five lines with DIRS := are then a series of concatenations to fill DIRS with a list of values.&lt;br /&gt;
* Each of the value lists uses the &#039;&#039;filter-out&#039;&#039; operator, defined as &lt;br /&gt;
&lt;br /&gt;
     $(filter-out pattern…,text)&lt;br /&gt;
     Returns all whitespace-separated words in text that do not match any of the pattern words, removing the words that do match one or more. This is the exact opposite of the filter function.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1975</id>
		<title>MakeFile Archaeology</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1975"/>
		<updated>2018-05-21T21:48:23Z</updated>

		<summary type="html">&lt;p&gt;Jta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digging up the make file and all that it refers to ==&lt;br /&gt;
&lt;br /&gt;
We start with the makefile itself, found at /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
The makefile presumes that it is being run from the top of the development tree, setting internal variable TOP to &amp;quot;.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The makefile then includes the contents of the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG.  &lt;br /&gt;
** This file includes the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP but all other lines are commented out.&lt;br /&gt;
*** File /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP itself then pulls in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but the other files are &#039;&#039;&#039;&#039;&#039;not included&#039;&#039;&#039;&#039;&#039; because the &amp;quot;-include&amp;quot; directive means &amp;quot;do not include&amp;quot;.  Guess that&#039;s a backwards way to comment out the line.&lt;br /&gt;
&lt;br /&gt;
    Thus at this point in the make what has realled happened is that we&#039;ve pulled in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but nothing else has occurred.&lt;br /&gt;
&lt;br /&gt;
=== File /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE ===&lt;br /&gt;
&lt;br /&gt;
*  defines a variable TEMPLATE_TOP that is not used later within this file,  and is dependent upon the definition of the variable EPICS_BASE that occurs later in this same file.&lt;br /&gt;
*  defines a variable GRETVME that parses out to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
*  defines a variable DATASERVER that parses out to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
*  defines a variable SNCSEQ to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
**  Obscure comment about needing SNCSEQ defined &amp;quot;if using the sequencer&amp;quot;, but at this point we don&#039;t know what a &amp;quot;sequencer&amp;quot; is.&lt;br /&gt;
*  defines a variable ASYN to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
**  No comment available but we guess that this is intended for later use to bring in the ASYN driver C++ stuff later.&lt;br /&gt;
*  defines the variable EPICS_BASE to the value /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
**  This is probably something that will be dependent upon which processor is in use as different processors may have different versions of EPICS.&lt;br /&gt;
*  and then a couple more commented-out lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    So at this point we have &lt;br /&gt;
    Variable TOP is set to /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
    Variable GRETVME is set to /global/devel/gretTop/9-22/gretVME.&lt;br /&gt;
    Variable DATASERVER is set to /global/devel/gretTop/9-22/gretClust.&lt;br /&gt;
    Variable SNCSEQ is set to /global/develbuild/supTop/31410/sncseq-2.0.12.&lt;br /&gt;
    Variable ASYN is set to /global/develbuild/synApps/asyn4-17.&lt;br /&gt;
    Variable EPICS_BASE is set to /global/develbuild/base/base-3.14.12.1.&lt;br /&gt;
    Variable TEMPLATE_TOP may be set to /global/develbuild/base/base-3.14.12.1/templates/makeBaseApp/top.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1974</id>
		<title>MakeFile Archaeology</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1974"/>
		<updated>2018-05-21T21:34:42Z</updated>

		<summary type="html">&lt;p&gt;Jta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digging up the make file and all that it refers to ==&lt;br /&gt;
&lt;br /&gt;
We start with the makefile itself, found at /global/devel/gretTop/9-22/dgsDrivers.&lt;br /&gt;
The makefile presumes that it is being run from the top of the development tree, setting internal variable TOP to &amp;quot;.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The makefile then includes the contents of the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG.  &lt;br /&gt;
** This file includes the file /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP but all other lines are commented out.&lt;br /&gt;
*** File /global/devel/gretTop/9-22/dgsDrivers/configure/CONFIG_APP itself then pulls in /global/devel/gretTop/9-22/dgsDrivers/configure/RELEASE but the other files are &#039;&#039;&#039;&#039;&#039;not included&#039;&#039;&#039;&#039;&#039; because the &amp;quot;-include&amp;quot; directive means &amp;quot;do not include&amp;quot;.  Guess that&#039;s a backwards way to comment out the line.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1973</id>
		<title>MakeFile Archaeology</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=MakeFile_Archaeology&amp;diff=1973"/>
		<updated>2018-05-21T20:53:20Z</updated>

		<summary type="html">&lt;p&gt;Jta: Created page with &amp;quot;== Digging up the make file and all that it refers to ==  We start with the makefile itself.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digging up the make file and all that it refers to ==&lt;br /&gt;
&lt;br /&gt;
We start with the makefile itself.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1972</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1972"/>
		<updated>2018-05-21T20:52:23Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Software To Do (most is in ppt file attached) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
The IOC has been flashed with the most recent BSP file (devel7) and has been given in IP address on ONENET&lt;br /&gt;
 192.168.203.211&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.  (completed)&lt;br /&gt;
&lt;br /&gt;
- Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal&lt;br /&gt;
&lt;br /&gt;
- Serial connect on the &amp;quot;new&amp;quot; linux machine (need root access)&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details. HOWTO: &#039;&#039;pycd&#039;&#039; on &#039;&#039;dgs1&#039;&#039;, a number of &#039;&#039;build directories&#039;&#039; are there, &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; is the main program. &lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]: JTA and WJ working on this on CON5. Located, now looking for a simple Makefile that is &#039;&#039;flat&#039;&#039;. &#039;&#039;&#039;/global/devel/gretTop/9-22/dgsDrivers/Makefile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
===relevant documentation that is elsewhere ===&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/The_DGS/DFMA_EPICS_Implementation&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/Tim_Madden_software_documentation&lt;br /&gt;
&lt;br /&gt;
===Breakdown of the make file ====&lt;br /&gt;
 [[MakeFile Archaeology]]&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1969</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1969"/>
		<updated>2018-05-14T16:12:03Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Software To Do (most is in ppt file attached) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.  (completed)&lt;br /&gt;
&lt;br /&gt;
- Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal&lt;br /&gt;
&lt;br /&gt;
- Serial connect on the &amp;quot;new&amp;quot; linux machine (need root access)&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details. HOWTO: &#039;&#039;pycd&#039;&#039; on &#039;&#039;dgs1&#039;&#039;, a number of &#039;&#039;build directories&#039;&#039; are there, &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; is the main program. &lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]: JTA and WJ working on this on CON5. Located, now looking for a simple Makefile that is &#039;&#039;flat&#039;&#039;. &#039;&#039;&#039;/global/devel/gretTop/9-22/dgsDrivers/Makefile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
===relevant documentation that is elsewhere ===&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/The_DGS/DFMA_EPICS_Implementation&lt;br /&gt;
&lt;br /&gt;
https://wiki.anl.gov/gsdaq/Tim_Madden_software_documentation&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1968</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1968"/>
		<updated>2018-05-14T16:09:16Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* Hardware To Do */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.  (completed)&lt;br /&gt;
&lt;br /&gt;
- Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal&lt;br /&gt;
&lt;br /&gt;
- Serial connect on the &amp;quot;new&amp;quot; linux machine (need root access)&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details. HOWTO: &#039;&#039;pycd&#039;&#039; on &#039;&#039;dgs1&#039;&#039;, a number of &#039;&#039;build directories&#039;&#039; are there, &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; is the main program. &lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]: JTA and WJ working on this on CON5. Located, now looking for a simple Makefile that is &#039;&#039;flat&#039;&#039;. &#039;&#039;&#039;/global/devel/gretTop/9-22/dgsDrivers/Makefile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1962</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1962"/>
		<updated>2018-05-07T19:28:47Z</updated>

		<summary type="html">&lt;p&gt;Jta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.&lt;br /&gt;
&lt;br /&gt;
- Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details.&lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]:&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1961</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1961"/>
		<updated>2018-05-07T19:25:57Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* System configuration file concept */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.&lt;br /&gt;
&lt;br /&gt;
- Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details.&lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]:&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
&amp;lt;quote&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
&amp;lt;/quote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1960</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1960"/>
		<updated>2018-05-07T19:24:50Z</updated>

		<summary type="html">&lt;p&gt;Jta: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals for VME99==&lt;br /&gt;
&lt;br /&gt;
List of the issues or requested features that will be addressed by VME99. &lt;br /&gt;
&lt;br /&gt;
1) buffer management - flush buffer, faster file writes, clear and flexible system. Workforce undefined at this point.&lt;br /&gt;
2) Gammaware working on LINUX / another machine&lt;br /&gt;
3) MTrigger Readout&lt;br /&gt;
&lt;br /&gt;
Known issues brought up from past experiments:&lt;br /&gt;
*Code base as-is does not use optimal method to read data from digitizers and has problems if fill rate of FIFO buffers in digitizer boards not well-matched across crate. Numerous patches such as per-board timers have been put in, but are fragile.&lt;br /&gt;
*Code base does not properly flush digitizers at run stop.&lt;br /&gt;
*Code can fall into states where data buffers continuously fill but no data is sent, resulting in crash of VME processor when it runs out of buffers.  Only recourse known is to power cycle.  Source of problem unknown.  System should at minimum stop triggers and set error bits before power cycle required, but doesn’t.&lt;br /&gt;
*Code base as-is does not correctly read out data from triggers, only digitizers.&lt;br /&gt;
*Code base has “sort” and “copy” modes put in at one point to assist with event sorting that now are of dubious value.  Argument has been put forward that “sort” mode is vestigial and should be removed.&lt;br /&gt;
*GUIs for digital DAQ systems not consistent with each other and not consistent with PV/spreadsheets.  Not even consistent in display method (DGS &amp;amp; HELIOS use MEDM; DFMA uses CSS).&lt;br /&gt;
*All GUIs have major problems with disconnected controls, lack of controls for various PVs, etc. Has resulted in generation of numerous bash scripts that are undocumented and not under version control. Many experimenters have personal “cheat sheet” setups in which they perform direct read/write cycles to specific registers by address using the “back door” access. These “cheat sheet” magical incantations have been written down during beam time for one specific experiment and are constantly misplaced or forgotten.&lt;br /&gt;
*Version control is, well, out of control.  DGS1 folder structure a mess.&lt;br /&gt;
&lt;br /&gt;
JTA&#039;s less well-known issues:&lt;br /&gt;
*No support in system for A24/D16 VME transactions.  &lt;br /&gt;
*No support in system for VME interrupts or even use of VME interrupt lines as polled service request flags.&lt;br /&gt;
*No support in system for source-synchronous block transfer on backplane.&lt;br /&gt;
*No architectural support in system for any other kinds of modules other than ‘trigger’ or ‘digitizer’. Some support for two subtypes of ‘trigger’ (master and router) but no support for subtypes of ‘digitizer’ (master and slave).&lt;br /&gt;
*Engineering diagnostics cannot be run in-situ except by connecting a Windows 2000 machine to onenet (violates network security rules) that runs one specific version of Java (long ago deprecated) and uses a very old version of the test stand software “GammaWare” that doesn’t match current firmware.&lt;br /&gt;
*VME processor code compilation references many files from a old snapshot of GRETINA embedded processor code but uses only a little; source scattered in multiple places; confusing mix of function names.&lt;br /&gt;
*Due to manufacturer changes there are two EPICS “board support package” (BSP) sets required based upon hardware revision of VME processor.  No method currently in place in make for full description of system architecture to ensure correct (or optimized) build per-crate.  Requires manual intervention.&lt;br /&gt;
&lt;br /&gt;
==Hardware To Do==&lt;br /&gt;
- Cable to setup a &#039;&#039;terminal&#039;&#039; without a terminal server. JTA will do this by end of 5/4/18.&lt;br /&gt;
&lt;br /&gt;
- Issue with the older IOC, perhaps need to flash the new IOC to try as it is &amp;quot;seen&amp;quot; by the terminal&lt;br /&gt;
&lt;br /&gt;
==Software To Do (most is in ppt file attached)==&lt;br /&gt;
- Implementation of system config file into the Python scripts for building a specific system. E.g., vme99, xdigitizers. Need names of lists and locations, anything else? Mike will look at getting a system config file going [report on it next week]. - Update [5/7]: Mike not here to update. Suggestion to manually update the files for vme99. &#039;&#039;&#039;genSystem.py&#039;&#039;&#039; (various versions). Around lines 480ish, sets arrays defining the system boards and channels. Parse a text file to generate these [vmelist, boardlist, vmecrates, brds, chans].  Only change in the vme01.DGS.cmd is the asynDigitizerConfig() call. Have the &amp;quot;name of sys&amp;quot;, etc..generating a text file on the fly to demonstrate for DGS.&lt;br /&gt;
&lt;br /&gt;
- Now just need to &#039;&#039;parse&#039;&#039; to read in, as a test. Seems simple but still some details.&lt;br /&gt;
&lt;br /&gt;
- Modify of the &#039;&#039;Makefile&#039;&#039; to only compile what is needed. Mike and JTA both looking at the &#039;&#039;Makefile&#039;&#039;. - Update [5/7]:&lt;br /&gt;
&lt;br /&gt;
- Best path forward? The &#039;&#039;&#039;correct path&#039;&#039;&#039; or &#039;&#039;&#039;simple path&#039;&#039;&#039; [start with &#039;&#039;&#039;correct path&#039;&#039;&#039;]? Argument for the &#039;&#039;&#039;simple path&#039;&#039;&#039; is to get &#039;&#039;Gammaware&#039;&#039; working on linux?&lt;br /&gt;
&lt;br /&gt;
==Powerpoint notes==&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;br /&gt;
&lt;br /&gt;
==System configuration file concept==&lt;br /&gt;
We in principle agree that we could have a simple text file that could be read in by Python to control the generation of files.  Something along the lines of&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
DGS System File&lt;br /&gt;
vmelist = [32,1,2,3,4,5,6,7,8,9,10,11]&lt;br /&gt;
vmecrates=[&#039;VME01&#039;,&#039;VME02&#039;,&#039;VME03&#039;,&#039;VME04&#039;,&#039;VME05&#039;,&#039;VME06&#039;,&#039;VME07&#039;,&#039;VME08&#039;,&#039;VME09&#039;,&#039;VME10&#039;,&#039;VME11&#039;]&lt;br /&gt;
// replicate board list and names for each instance in vmelist&lt;br /&gt;
// VME 32 is the trigger&lt;br /&gt;
boardlist=[1,2,3,4,5]&lt;br /&gt;
brds=[&#039;MTRIG&#039;,&#039;RTR1&#039;,&#039;RTR2&#039;,&#039;RTR3&#039;, &#039;RTR4&#039;]&lt;br /&gt;
// VME 1 has four digitizers, like every other DGS digitizer crate&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 2&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 3&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 4&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 5&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 6&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 7&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 8&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 9&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 10&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
// VME 11&lt;br /&gt;
boardlist=[1,2,3,4]&lt;br /&gt;
brds=[&#039;MDIG1&#039;,&#039;SDIG1&#039;,&#039;MDIG2&#039;,&#039;SDIG2&#039;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is what we foresee.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1946</id>
		<title>VME99 test stand IOC</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=VME99_test_stand_IOC&amp;diff=1946"/>
		<updated>2018-04-30T16:46:08Z</updated>

		<summary type="html">&lt;p&gt;Jta: /* VME99 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VME99 ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;VME99&amp;quot; is to integrate the firmware development test stand more fully as part of the experiments.  The goal is to provide a system designed specifically for development of IOC software unique from any experimental system so that development work can proceed freely without risk to any running setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Powerpoint notes===&lt;br /&gt;
&lt;br /&gt;
[[file:VME99_20180430.pptx]]&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
	<entry>
		<id>https://wiki.anl.gov/wiki_heliosdaq/index.php?title=File:VME99_20180430.pptx&amp;diff=1945</id>
		<title>File:VME99 20180430.pptx</title>
		<link rel="alternate" type="text/html" href="https://wiki.anl.gov/wiki_heliosdaq/index.php?title=File:VME99_20180430.pptx&amp;diff=1945"/>
		<updated>2018-04-30T16:45:02Z</updated>

		<summary type="html">&lt;p&gt;Jta: Initial draft of VME 99 notes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Initial draft of VME 99 notes.&lt;/div&gt;</summary>
		<author><name>Jta</name></author>
	</entry>
</feed>