The ACS directory structure is very straightforward, but it may not be very intuitive to newcomers. There are a couple of concepts that we need to consider:

MODROOT

All three variants of MODROOT represent a very similar scenario. They create a module directory, either for WorkStation (MODROOT_WS), for Local Control Unit (LCU) (MODROOT_LCU) or for both (MODROOT_WS_LCU). Executing each bears a similar structure:

MODROOT_WS

getTemplateForDirectory MODROOT_WS wsModule
acs almamgr:~ 30449 > tree wsModule/
wsModule/
├── bin
├── ChangeLog
├── config
│   └── CDB
│       └── schemas
├── doc
├── idl
├── include
├── lib
│   ├── ACScomponents
│   ├── endorsed
│   └── python
│       └── site-packages
├── LOGS
├── man
│   ├── man1
│   ├── man2
│   ├── man3
│   ├── man4
│   ├── man5
│   ├── man6
│   ├── man7
│   ├── man8
│   ├── manl
│   └── mann
├── object
├── rtai
├── src
│   └── Makefile
└── test

MODROOT_LCU

getTemplateForDirectory MODROOT_WS lcuModule
acs almamgr:~ 30451 > tree lcuModule
lcuModule
├── bin
├── ChangeLog
├── doc
├── idl
├── include
├── lib
│   ├── ACScomponents
│   ├── endorsed
│   └── python
│       └── site-packages
├── LOGS
├── man
│   ├── man1
│   ├── man2
│   ├── man3
│   ├── man4
│   ├── man5
│   ├── man6
│   ├── man7
│   ├── man8
│   ├── manl
│   └── mann
├── object
├── src
│   └── Makefile
└── test

MODROOT_WS_LCU

getTemplateForDirectory MODROOT_WS_LCU module
acs almamgr:~ 30459 > tree module
module/
├── ChangeLog
├── lcu
│   ├── bin
│   ├── doc
│   ├── idl
│   ├── include
│   ├── lib
│   │   ├── ACScomponents
│   │   ├── endorsed
│   │   └── python
│   │       └── site-packages
│   ├── LOGS
│   ├── man
│   │   ├── man1
│   │   ├── man2
│   │   ├── man3
│   │   ├── man4
│   │   ├── man5
│   │   ├── man6
│   │   ├── man7
│   │   ├── man8
│   │   ├── manl
│   │   └── mann
│   ├── object
│   ├── src
│   │   └── Makefile
│   └── test
└── ws
    ├── bin
    ├── config
    │   └── CDB
    │       └── schemas
    ├── doc
    ├── idl
    ├── include
    ├── lib
    │   ├── ACScomponents
    │   ├── endorsed
    │   └── python
    │       └── site-packages
    ├── LOGS
    ├── man
    │   ├── man1
    │   ├── man2
    │   ├── man3
    │   ├── man4
    │   ├── man5
    │   ├── man6
    │   ├── man7
    │   ├── man8
    │   ├── manl
    │   └── mann
    ├── object
    ├── src
    │   └── Makefile
    └── test

Files and Directory Description

As we can see, there are several files and directories created under each of the scenarios:

ACSROOT

The ACSROOT directory is considered an "installation area". When you compile a module and call "make install", ACSROOT is the default destination area for ACS modules' installation.

acs almamgr:~ 31443 > getTemplateForDirectory ACSROOT acs.root
acs almamgr:~ 31445 > tree acs.root/
acs.root/
├── ALARMS
│   └── HELP
├── app-defaults
├── bin
├── bitmaps
├── CDT
├── config
│   └── CDB
│       └── schemas
├── ERRORS
│   └── HELP
├── idl
├── include
├── lib
│   ├── ACScomponents
│   ├── endorsed
│   └── python
│       └── site-packages
├── LOGS
├── man
│   ├── man1
│   ├── man2
│   ├── man3
│   ├── man4
│   ├── man5
│   ├── man6
│   ├── man7
│   ├── man8
│   ├── manl
│   └── mann
├── rtai
├── sounds
├── templates
└── vw
    ├── bin
    │   ├── MC68000
    │   ├── MC68040
    │   └── PPC604
    ├── CIT
    ├── idl
    ├── include
    ├── lib
    │   ├── ACScomponents
    │   ├── endorsed
    │   ├── MC68000
    │   ├── MC68040
    │   ├── PPC604
    │   └── python
    │       └── site-packages
    └── man
        ├── man1
        ├── man2
        ├── man3
        ├── man4
        ├── man5
        ├── man6
        ├── man7
        ├── man8
        ├── manl
        └── mann

60 directories, 0 files

The directory structure is very similar to MODROOT, bin, config, idl, include, lib, LOGS, man and rtai are equivalent for the MODROOT definitions, although only the targets selected for installation are finally placed there. Changelog, src, doc, object and test are not found in the installation areas. Other directories are as follows:

ACSDATA

ACSDATA is a place associated with runtime configurations and output of data.

getTemplateForDirectory ACSDATA acs.data
acs almamgr:~ 30451 > tree acs.data
acs.data
├── config
├── dumps
├── ENVIRONMENTS
├── logs
└── tmp

5 directories, 0 files

Files and Directory Description

INTROOT/INTLIST

INTROOT is an installation area with the same structure as ACSROOT, but the main difference is that it allows to install code without interfering with the ACS (or your project installation). It is very handy for development and experimental tests and also as a patching system, specially when used in combination with INTLIST. INTLIST is just a list of INTROOTs, which have an order of prioritization which will be used to choose binaries, libraries, jars, python code, etc. from one place or another. Everything that is in two or more INTROOTs gets hidden for the lower priority one by the one with highest priority.

INTROOT

getTemplateForDirectory INTROOT introot
acs almamgr:~ 30463 > tree introot
introot
├── ALARMS
│   └── HELP
├── app-defaults
├── bin
├── bitmaps
├── CDT
├── config
│   └── CDB
│       └── schemas
├── ERRORS
│   └── HELP
├── idl
├── include
├── lib
│   ├── ACScomponents
│   ├── endorsed
│   └── python
│       └── site-packages
├── LOGS
├── man
│   ├── man1
│   ├── man2
│   ├── man3
│   ├── man4
│   ├── man5
│   ├── man6
│   ├── man7
│   ├── man8
│   ├── manl
│   └── mann
├── responsible
├── rtai
├── sounds
├── Sources
├── templates
└── vw
    ├── bin
    │   ├── MC68000
    │   ├── MC68040
    │   └── PPC604
    ├── CIT
    ├── idl
    ├── include
    ├── lib
    │   ├── ACScomponents
    │   ├── endorsed
    │   ├── MC68000
    │   ├── MC68040
    │   ├── PPC604
    │   └── python
    │       └── site-packages
    ├── man
    │   ├── man1
    │   ├── man2
    │   ├── man3
    │   ├── man4
    │   ├── man5
    │   ├── man6
    │   ├── man7
    │   ├── man8
    │   ├── manl
    │   └── mann
    └── Sources

62 directories, 1 file

The same directory structure as ACSROOT is present. Here you see one more:

INTLIST

The INTLIST is just an environment variable used by the ACS .bash_profile.acs script to configure several INTROOTs in an order of priority.

export INTLIST=~/introot1:~/introot2:~/introot3:~/introot4

In the example above, it will have four INTROOTs configured in parallel, where ~/introot1 has the highest priority and ~/introot4 the lowest. This means that every binary or script offered by ~/introot1 will be used first, and things from ~/introot4 will only be used if they're not shadowed by a different version provided in the other 3 INTROOTs.