Development Environment / Overview
This Development Environment documentation is intended to be used as a reference by the developer that sets up the project for the first time or initializes a new development environment to contribute to the project. Specific sections are referenced by the Initial Project Setup, Deployed Environment, and New Developer sections.
This documentation includes the following sections:
- Development Environment Software Requirements
- Software Install Location Considerations
- Portability Considerations
Development Environment Software Requirements
The following software are needed in the StateMod development environment and should be installed before doing Initial Project Setup, although the Initial Project Setup documentation generally indicates prerequisites for software that needs to be installed. Steps can be skipped if they have been completed previously as part of operating system setup or on other software development projects. Some additional software may be installed in the development files and is described in project initialization.
The development environment as described provides a full technology stack for development. It is possible to use a subset of the components (text editor and compiler rather than Eclipse/Photran IDE, for example); however, the full stack is described in order to provide a fully-integrated development environment. Software developers need to invest in training to be competent with the various tools, although this documentation is intended to help facilitate development by providing useful information.
The following software are required for StateMod development:
- Machine - minimal GNU for Windows (MinGW), Cygwin, or Linux virtual machine (VM), to support
gfortran
compiler (MinGW is the initial focus because it is the standard environment for gfortran on Windows) - Git - needed to perform command line version control operations
- Python and pip - needed by MkDocs and pytest, and useful general tool (skip if not editing MkDocs documentation and not creating automated tests with Python)
- pytest - an option being evaluated for automated testing (skip if not creating automated tests with Python)
- MkDocs - MkDocs is used for developer and user documentation static websites, including this documentation (skip if not editing MkDocs documentation)
- Java 8 - used to run Eclipse, and can be used to write utility programs (skip if using a text editor rather than Eclipse/Photran)
- gfortran - compiler for the StateMod Fortran software
- Eclipse/Photran - IDE used for interactive Fortran software development (skip if using a text editor rather than Eclipse/Photran)
- Text Editor - editor used to edit code and other files, useful in any case
- Doxygen - documentation tool (skip if not creating graphs of code calls)
- KDiff3 - tool for comparing files (skip if not comparing files or have equivalent tool)
Software Install Location Considerations
The software development environment must be appropriately configured to effectively develop StateMod and support collaboration. Development environment setup is a relatively major effort before any code can be written and is typically done the first time by someone that has a good grasp of the technologies. Failing to understand how to set up the development environment will likely lead to wasted time and possibly back-tracking on previous software development work. Using a consistent development environment for all developers ensures that documentation is applicable and troubleshooting is consistent. Therefore, the software installation locations described in this documentation are recommended to avoid issues.
See the discussion of Initial Project Setup / Development Folder Structure for a folder structure that is assumed in this documentation. It is important for software developers to understand the software tools and configuration so that they can troubleshoot configuration issues.
Portability Considerations
The StateMod development environment is intended to be as portable as possible, in order to allow multiple software developers to contribute to the software on multiple operating systems. Portable configuration minimizes day-to-day conflicts in developer environment that result in lost productivity and software quality. Portability considerations are discussed where appropriate.