~~NOTOC~~
====== User Software :: CR-Tools :: Development =======
  - [[#Organization of the source code]]
  - [[#Creating a new application]]
==== Organization of the source code ====
After the check-out -- which will take a while -- you will be left with a new directory tree organized as follows:
lofarsoft
|-- CMakeLists.txt
|-- build
|-- data
|-- devel_common
|-- doc
|-- external
|-- release
|   |-- bin
|   |-- include
|   `-- lib
`-- src
    |-- CR-Tools
    |   |-- CMakeLists.txt
    |   |-- apps
    |   |-- doc
    |   |-- implement
    |   |-- scripts
    |   `-- test
    `-- DAL
In this we have:
  * **usg** is the root of the User Software code tree -- go there if you want to synchronize your local version against the repository.
  * **build** is used for building individual packages in the code distribution; using a separate directory for this purpose makes it easy to simply erase all compile and link attempts and start again from a clean plate.
  * **devel_common** hold common tools for development; this includes e.g. the find scripts for CMake or file templates for creating new C++ classes. Unless you consider collaborating on the framework, you will not need to touch this (but you will need it).
  * **doc** contains a local version of the Doxygen-based source code documentation; just go in there, fire up Doxygen and get an up-to-date version of the source code documentation.
  * **external** hosts the various external packages which will be required to build parts of the LOFAR User Software; the main change her w.r.t. to old LOPES-Tools is, that critical components are distributed along with the stuff we are writing ourselves. This directory also contains **casacore**, a collection of the core libraries of the **CASA** system.
==== Creating a new application ====
__Note:__ At the time being there is no automated manner by which to handle the creation of a new application.
  - Create a **new source file** in the applications directory 
lofarsoft
`-- src
    `-- CR-Tools
        |-- apps                   <-- new application goes here
        |   `-- CMakeLists.txt
        |-- implement
        `-- test
  - Add an entry to the ''CMakeLists.txt'' in the applications directory: 
## -------------------------------------------------------------------
##                                                      simStationBeam
if (HAVE_CASACORE)
  add_executable (simStationBeam simStationBeam.cc)
  ## linker instructions
  target_link_libraries (simStationBeam cr)
  ## installation instructions
  install (TARGETS simStationBeam
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    )
endif (HAVE_CASACORE)
\\
----
<- [[public:user software:User Software]] • [[public:user software:CR-Tools]]