Difference between revisions of "Development"

From GRASS-Wiki
Jump to: navigation, search
(Overview)
(QA)
 
(77 intermediate revisions by 14 users not shown)
Line 1: Line 1:
 
__TOC__
 
__TOC__
 
  
 
= GRASS License =
 
= GRASS License =
Line 6: Line 5:
 
The GRASS GIS project is developed under the terms of the [http://www.gnu.org/copyleft/gpl.html GNU General Public License] (the GPL) [http://grass.ibiblio.org/devel/index.php in the open] by [http://grass.ibiblio.org/community/index.php volunteers] the [http://mapserver.gdf-hannover.de/grassusers/map.phtml world over].
 
The GRASS GIS project is developed under the terms of the [http://www.gnu.org/copyleft/gpl.html GNU General Public License] (the GPL) [http://grass.ibiblio.org/devel/index.php in the open] by [http://grass.ibiblio.org/community/index.php volunteers] the [http://mapserver.gdf-hannover.de/grassusers/map.phtml world over].
  
* [http://en.wikipedia.org/wiki/Gpl WikiPedia entry discussing the GPL]
+
* [[How the Open Source software development model works]]
  
 +
* [http://en.wikipedia.org/wiki/Gpl Wikipedia entry discussing the GPL]
 +
* The Software Freedom Law Center's [http://www.softwarefreedom.org/resources/2008/foss-primer.html Legal Issues Primer for Open Source and Free Software Projects]
  
 
= Resources for Developers =
 
= Resources for Developers =
Line 13: Line 14:
 
=== Communication ===
 
=== Communication ===
 
* You can contact GRASS folks in [[How to participate in IRC communication|IRC]]
 
* You can contact GRASS folks in [[How to participate in IRC communication|IRC]]
* [http://grass.itc.it/mailman/listinfo/grass-dev Developers mailing list]
+
* [http://lists.osgeo.org/mailman/listinfo/grass-dev Developer mailing list]
  
 
=== Documentation ===
 
=== Documentation ===
* [http://grass.itc.it/devel/index.php#prog GRASS Programming Manual]
+
* [http://grass.osgeo.org/programming6/ GRASS 6 Programming Manual]
 +
: GRASS libraries are self-documenting using Doxygen header comments.
 +
:* [http://www.stack.nl/~dimitri/doxygen/manual.html Doxygen manual]
 +
 
 +
* [http://grass.osgeo.org/programming7/ GRASS 7 Programming Manual]
 +
 
 
* [[GRASS Programming Howto]] (partially outdated)
 
* [[GRASS Programming Howto]] (partially outdated)
 +
* [[Scripting]] tips
 
* [[Updating GRASS Documentation]] How-To
 
* [[Updating GRASS Documentation]] How-To
 +
 
* [[GIS Concepts]] and how they are implemented in GRASS
 
* [[GIS Concepts]] and how they are implemented in GRASS
 +
* [[Large File Support]] (LFS) implementation
 +
* [[Eclipse]] tips how to use the Eclipse IDE for GRASS development
 +
 +
=== Debugging ===
 +
 
* [[GRASS Debugging]]
 
* [[GRASS Debugging]]
* [[Large File Support]] (LFS) implementation
 
* '''Code submission standards''':
 
** [http://grass.itc.it/grass63/source/snapshot/SUBMITTING C language coding standards]
 
** [http://grass.itc.it/grass63/source/snapshot/SUBMITTING_SCRIPTS Shell script coding standards]
 
** [http://grass.itc.it/grass63/source/snapshot/SUBMITTING_TCLTK Tcl/Tk script coding standards]
 
  
 
=== Code ===
 
=== Code ===
 +
 
* [[Tracking]] bugs, patches and feature requests
 
* [[Tracking]] bugs, patches and feature requests
 
* [[GRASS AddOns]] - User code contributions (custom scripts, modules, icons, etc)
 
* [[GRASS AddOns]] - User code contributions (custom scripts, modules, icons, etc)
 
* [[Compile and Install]] hints
 
* [[Compile and Install]] hints
 +
* Lines of source code:
 +
** [https://lists.osgeo.org/pipermail/grass-dev/2004-August/015245.html GRASS SLOC analysis 2004]
 +
 +
==== Code submission procedure ====
 +
 +
* Creating [[Patches]]
 +
* [http://trac.osgeo.org/grass/newticket Submit patches to the trac system]
 +
* [http://trac.osgeo.org/grass/wiki/HowToContribute Core developer write access]
 +
 +
==== Code submission standards ====
 +
 +
* [http://svn.osgeo.org/grass/grass/trunk/SUBMITTING C language coding standards]
 +
* [http://svn.osgeo.org/grass/grass/trunk/SUBMITTING_SCRIPTS Shell script coding standards]
 +
* [http://svn.osgeo.org/grass/grass/trunk/SUBMITTING_TCLTK Tcl/Tk script coding standards]
 +
* [http://svn.osgeo.org/grass/grass/trunk/SUBMITTING_PYTHON Python script coding standards]
 +
* [http://svn.osgeo.org/grass/grass/trunk/SUBMITTING_DOCS Documentation coding standards] (manual pages)
 +
 +
===== Explanation of C indentation rules =====
 +
(''see [http://svn.osgeo.org/grass/grass/trunk/SUBMITTING C language coding standards]'')
 +
 +
:{| class="wikitable" border="1"
 +
| -bap||Force blank lines after procedure bodies.
 +
|-
 +
| -bbb||Force blank lines before block comments.
 +
|-
 +
| -bli1||Indent braces 1 space.
 +
|-
 +
| -bls||Put braces on the line after struct declaration lines.
 +
|-
 +
| -br||Put braces on line with if, etc.
 +
|-
 +
| -cbi0||Indent braces after a case label 0 spaces.
 +
|-
 +
| -ci4||Continuation indent of 4 spaces.
 +
|-
 +
| -cli0||Case label indent of 0 spaces.
 +
|-
 +
| -d0||Set indentation of comments not to the right of code to 0 spaces.
 +
|-
 +
| -di0||Put variables in column 0.
 +
|-
 +
| -fc1||Format comments in the first column.
 +
|-
 +
| -hnl||Prefer to break long lines at the position of newlines in the input.
 +
|-
 +
| -i4||Set indentation level to 4 spaces.
 +
|-
 +
| -ip4||Indent parameter types in old-style function definitions by 4 spaces.
 +
|-
 +
| -l80||Set maximum line length for non-comment lines to 80.
 +
|-
 +
| -lc80||Set maximum line length for comment formatting to 80.
 +
|-
 +
| -lp||Line up continued lines at parentheses.
 +
|-
 +
| -nbad||Do not force blank lines after declarations.
 +
|-
 +
| -nbbo||Do not prefer to break long lines before boolean operators.
 +
|-
 +
| -nbc||Do not force newlines after commas in declarations.
 +
|-
 +
| -ncdb||Do not put comment delimiters on blank lines.
 +
|-
 +
| -nce||Do not cuddle } and else.
 +
|-
 +
| -ncs||Do not put a space after cast operators.
 +
|-
 +
| -nfca||Do not format any comments.
 +
|-
 +
| -npcs||Do not put space after the function in function calls.
 +
|-
 +
| -nprs||Do not put a space after every '(' and before every ')'.
 +
|-
 +
| -npsl||Put the type of a procedure on the same line as its name.
 +
|-
 +
| -nsob||Do not swallow optional blank lines.
 +
|-
 +
| -pi4||Specify the extra indentation per open parentheses '(' when a statement is broken.
 +
|-
 +
| -sbi0||Indent braces of a struct, union or enum 0 spaces.
 +
|-
 +
| -sc||Put the `*' character at the left of comments.
 +
|-
 +
| -ss||On one-line for and while statments, force a blank before the semicolon.
 +
|-
 +
| -ts8||Set tab size to 8 spaces.
 +
|}
 +
 +
===== GRASS Makefile writing =====
  
==== CVS ====
+
PGM must be set before including Module.make.
* Main [http://grass.ibiblio.org/devel/cvs.php CVS server] help page
 
* Live [http://freegis.org/cgi-bin/viewcvs.cgi/ GRASS WebCVS interface] browsable source code repository
 
* Hints for [[Working with CVS]]
 
* [http://grass.itc.it/pipermail/grass-commit/ CVS commit mailing list archive]
 
  
==== QA ====
+
In general, the point at which variables get defined doesn't matter if they are only used in commands, but it matters if they are used in the dependency line. Essentially, dependency lines get expanded at the point they are read, while commands are expanded at the point they are executed.
 +
 
 +
The list of variables where the order is significant is:
 +
 
 +
        PGM
 +
        LIB_NAME
 +
        SUBDIRS
 +
        CMD_OBJS
 +
        LIB_OBJS
 +
        LOCAL_HEADERS
 +
        EXTRA_HEADERS
 +
        DEPENDENCIES
 +
 
 +
 
 +
The "documentation" for writing Makefiles boils down to: try to find
 +
something similar in the main GRASS tree and use its Makefile as a
 +
reference; if there isn't one, or if that doesn't work, ask on the
 +
developers' list.
 +
 
 +
Writing documentation for this will result in either wasted effort
 +
(from describing situations which never actually happen) or inadequate
 +
documentation (from failing to describe situations which actually
 +
happen) or (most likely) both.
 +
 
 +
A couple of points about wx.metadata specifically:
 +
 
 +
1. Using "parsubdirs" won't work as, because mdlib (presumably) needs
 +
to be built before any of the modules.
 +
 
 +
2. Files should not be installed using "cp"; use $(INSTALL) for
 +
anything which should be installed with execute permission or
 +
$(INSTALL_DATA) for anything without it.
 +
 
 +
3. Directories shouldn't be copied with "cp -r". Rather, the
 +
individual destination files should be listed as pre-requisites, so
 +
that "building" the target "builds" the destination files (typically
 +
via pattern rules).
  
* [http://grass.itc.it/mailman/listinfo/grass-qa Code Quality Control System] Mailing list
+
wx.metadata/Makefile should probably include "templates" and "config"
 +
in $(SUBDIRS). These would have their own Makefiles; e.g. for
 +
templates/Makefile, something like:
  
* [[Testing GRASS software]] - a test protocol based on the Spearfish sample data set
+
        include $(MODULE_TOPDIR)/include/Make/Other.make
 +
 
 +
        DSTDIR = $(ETC)/mdlib/templates
 +
 
 +
        SRCFILES := $(wildcard *.xml)
 +
        DSTFILES := $(patsubst %.xml,$(DSTDIR)/%.xml,$(SRCFILES))
 +
 
 +
        default: $(DSTFILES)
 +
 
 +
        $(DSTDIR)/%.xml: %.xml:
 +
                $(INSTALL_DATA) $< $@
  
* Internal GRASS test suite (scripts collection in "testsuite/")
+
This should allow wx.metadata/Makefile to be a simple "directory"
 +
Makefile (i.e. set SUBDIRS, include Dir.make, "default: subdirs").
  
* External [http://www-pool.math.tu-berlin.de/~soeren/grass/GRASS_TestSuite/html_grass-6.2/ GRASS test suite] (TU Berlin)
+
==== GitHub ====
** [http://www-pool.math.tu-berlin.de/~soeren/grass/GRASS_TestSuite/ GRASS Test Suite] a small test suite for GRASS, the current html output is available [http://www-pool.math.tu-berlin.de/~soeren/grass/GRASS_TestSuite/html/ here] and with memory check [http://www-pool.math.tu-berlin.de/~soeren/grass/GRASS_TestSuite/html_memcheck/ here]
+
* Repository: https://github.com/OSGeo/grass/
 +
* [https://trac.osgeo.org/grass/wiki/HowToGit Working with git] in GRASS GIS development
 +
* [http://lists.osgeo.org/pipermail/grass-commit/ GRASS commit mailing list archive]
  
* External [http://web.soccerlab.polymtl.ca/grass-evolution/grass-browsers/grass-index-en.html GRASS Quality Assessment and monitoring system] (École Polytechnique de Montréal and ITC-irst)
+
==== QA ====
  
* CVS-commit reports into [irc://irc.freenode.net/grass IRC '#grass' channel] via [http://cia.navi.cx/stats/project/GRASS CIA - The open source informant]
+
* Official document about Quality Control measures: https://grass.osgeo.org/development/code-submission/
** [http://cia.navi.cx/stats/project/GRASS CIA commit bot] for realtime monitoring along with [http://grass.itc.it/mailman/listinfo/grass-commit grass-commit] mailing list (showing the diff's)
+
* Automated [http://fatra.cnr.ncsu.edu/grassgistests/ GRASS GIS testing suite]
 +
* [http://lists.osgeo.org/mailman/listinfo/grass-commit grass-commit] mailing list (showing the diff's)
 +
* [https://scan.coverity.com/projects/1038 Coverity Scan]
 +
* [https://travis-ci.org/GRASS-GIS/grass-ci Travis-CI]
 +
* Historical QA:
 +
** [http://lists.osgeo.org/mailman/listinfo/grass-qa/ Code Quality Control System] Mailing list
 +
** [[Testing GRASS software]] - a test protocol based on the Spearfish sample data set
 +
** External [http://www-pool.math.tu-berlin.de/~soeren/grass/GRASS_TestSuite/html_grass-6.2/ GRASS test suite] (TU Berlin)
 +
*** [http://www-pool.math.tu-berlin.de/~soeren/grass/GRASS_TestSuite/ GRASS Test Suite] a small test suite for GRASS, the current html output is available [http://www-pool.math.tu-berlin.de/~soeren/grass/GRASS_TestSuite/html/ here] and with memory check [http://www-pool.math.tu-berlin.de/~soeren/grass/GRASS_TestSuite/html_memcheck/ here]
 +
** External [http://web.soccerlab.polymtl.ca/project-manager/grass-website/index.html GRASS Quality Assessment and monitoring system] (École Polytechnique de Montréal and FEM-CRI (since 2008; from 2005-2007 ITC-irst was the partner))
  
 
==== Code Search and Metrics ====
 
==== Code Search and Metrics ====
Line 58: Line 212:
 
* [http://www.google.com/codesearch?q=package%3Agrass Google Code Search]
 
* [http://www.google.com/codesearch?q=package%3Agrass Google Code Search]
  
* [http://next.ohloh.net/projects/3666 Ohloh Metrics]
+
* [http://www.ohloh.net/projects/3666 Ohloh Metrics]
  
 
* [http://koders.com Koders Code Search]
 
* [http://koders.com Koders Code Search]
  
= Plans =
+
= Ongoing and Plans =
  
 
=== Overview ===
 
=== Overview ===
  
 +
* Reports:
 +
** [[GRASS Project Update 2007Q1]]
 
* [[Release Roadmap]] (old [http://grass.ibiblio.org/devel/roadmap.php Development Roadmap] which needs freshening) - please help with testing release candidates
 
* [[Release Roadmap]] (old [http://grass.ibiblio.org/devel/roadmap.php Development Roadmap] which needs freshening) - please help with testing release candidates
 
* [[GRASS Module Porting List]] (check here if you don't find a certain command in GRASS 6)
 
* [[GRASS Module Porting List]] (check here if you don't find a certain command in GRASS 6)
 
* [[GRASS ToDo List]] (overview of GRASS related community projects, see also [[Release Roadmap]])
 
* [[GRASS ToDo List]] (overview of GRASS related community projects, see also [[Release Roadmap]])
* [http://freegis.org/cgi-bin/viewcvs.cgi/grass6/doc/vector/TODO?rev=HEAD&content-type=text/vnd.viewcvs-markup GRASS 6-CVS Vector TODO]
+
* [http://svn.osgeo.org/grass/grass/trunk/doc/vector/TODO GRASS 6 Vector TODO]
 +
* [[Vector network analysis ideas]] (new ideas)
 +
* [http://trac.osgeo.org/grass/wiki/Grass7/NewFeatures List of new features in GRASS 7 (and renamed options)]
  
 
=== Works in Progress ===
 
=== Works in Progress ===
 +
 +
* Next generation [[GRASS GUI]] development
  
 
* [[WinGRASS_Current_Status|Native Windows development]]
 
* [[WinGRASS_Current_Status|Native Windows development]]
* [[GRASS GUI]] development
+
 
 +
* Message [[Development_Specs#Message_standardization|standardization]] and [[GRASS_messages_translation|translation]]
 +
 
 +
* [[Cairo_driver|Cairo display driver]]
  
 
=== Sandbox (ideas section) ===
 
=== Sandbox (ideas section) ===
Line 86: Line 249:
 
* Discussion on add-on manager repository setup: [[Development GEM|GEM repository]]
 
* Discussion on add-on manager repository setup: [[Development GEM|GEM repository]]
 
* Discussion of support for [[time series in GRASS]], e.g. for linking to data and models
 
* Discussion of support for [[time series in GRASS]], e.g. for linking to data and models
* [[GRASS Location Wizard]] development
 
* [[GRASS Digitizing tool]] ideas
 
 
* [[GRASS Metadata Management|Metadata Management]] ideas
 
* [[GRASS Metadata Management|Metadata Management]] ideas
 +
* [[GRASS SoC Ideas|GRASS Summer of Code]] ideas
  
 
= Linking GRASS to external languages =
 
= Linking GRASS to external languages =
Line 95: Line 257:
 
* [[GRASS and Python]]
 
* [[GRASS and Python]]
 
* [[GRASS and Shell]]: Starting and running GRASS from a script
 
* [[GRASS and Shell]]: Starting and running GRASS from a script
* [http://grass.itc.it/mailman/listinfo/grass-abm Integration of GRASS with JAVA based agent based modeling (ABM)]
+
* [[GRASS and ABM]]
* [http://www.hydrologis.com/html/jgrass/jgrass_en.html JAVAGRASS]
+
* [http://www.jgrass.org JGRASS]
  
 
= GRASS and QGIS =
 
= GRASS and QGIS =
  
 
* [http://wiki.qgis.org/qgiswiki/BuildingWindowsBinaryOnLinux Building QGIS/GRASS Windows Binary On Linux] (using MinGW)
 
* [http://wiki.qgis.org/qgiswiki/BuildingWindowsBinaryOnLinux Building QGIS/GRASS Windows Binary On Linux] (using MinGW)
* [http://wiki.qgis.org/qgiswiki/Adding_New_Tools_to_the_GRASS_Toolbox Adding New Tools to the GRASS Toolbox]
+
 
* [http://wiki.qgis.org/qgiswiki/GrassCookbook QGIS GRASS Cookbook] - Recipes for common tasks
+
* [https://qgis.org/en/site/getinvolved/development/addinggrasstools.html Adding GRASS Tools]
 +
 
 +
* [[QGIS GRASS Cookbook]] - Recipes for common tasks
 +
 
 +
* [[GRASS-QGIS relevant module list]]
 +
 
 +
= Commercial development for GRASS =
 +
 
 +
This is an unsorted (and most probably incomplete) list of paid development for GRASS GIS
 +
* Comune di Trento (Italy): better vector editing, printing
 +
* [http://mpa.itc.it/ ITC-irst]:
 +
** WILMA - [http://wilmaproject.unitn.it/ Trento Wireless Projekt] -> babyGRASS 
 +
** MITRIS [http://mpa.itc.it/index.php?option=com_content&task=view&id=104&Itemid=127 traffic-project]
 +
** GRASS 6 vector engine, vector network analysis 
 +
* [http://www.faunalia.it/index_en.php Faunalia, Italy]:
 +
** r.li suite
 +
** v.in.gpsbabel
 +
** OGR GRASS vector driver
 +
** MySQL spatial GRASS connector
 +
 
 +
* [http://www.tekmap.ns.ca/ Tekmap Consulting, Canada]: NVIZ and many more
 +
* [http://navicon.dk/web/normal.php?pageid=92 NAVICON CSE, Denmark: GRASS/Qt]
 +
* [http://www.acsys.it/riade/upload/testo_r/home_link/RIADE_ACS_GRASS_article.pdf Advanced Computer Systems (ACS), Italy]: NVIZ 3D Histograms, Fly-through
 +
* [http://www.orkney.co.jp/english/software/index.html Orkney Inc., Japan]: i18N Infrastructure in GRASS 5.0
 +
* [http://www.geomodel.sk/index-en.htm Geomodel, Slovakia]:
 +
** r.sun
 +
** r.flow etc.
 +
* Lockheed Martin LMCO, USA:
 +
** d.rast.proj
 +
** d.mon.proj (GRASS 5 contrib)
  
 
= Related projects =
 
= Related projects =
  
* [http://www.hydrologis.com/html/jgrass/jgrass_en.html JGrass] - Java based frontend for GRASS incuding extended hydrological modelling tools
+
== With connections to GRASS ==
 +
* [http://www.jgrass.org JGrass] - Java based frontend for GRASS incuding extended hydrological modelling tools
 
* [http://www.kergis.com/en/index.html KerGIS] - BSD-like licensed fork of GRASS 4.1.5
 
* [http://www.kergis.com/en/index.html KerGIS] - BSD-like licensed fork of GRASS 4.1.5
 +
* [http://gal-framework.no-ip.org/ GAL] - Project to reimplement a GRASS-like GIS using a modern object oriented approach
  
 +
* [http://pywps.wald.intevation.org pyWPS] - Python Web Processing Service (GRASS on the web)
 
* [http://proj.maptools.org PROJ.4] - Cartographic Projections Library
 
* [http://proj.maptools.org PROJ.4] - Cartographic Projections Library
 
* [http://www.gdal.org GDAL] - Geospatial Data Abstraction Library
 
* [http://www.gdal.org GDAL] - Geospatial Data Abstraction Library
* [http://www.qgis.org QGIS]- Quantum GIS
+
* [http://www.qgis.org QGIS] - Quantum GIS
  
 
* [http://www.osgeo.org OSGeo]- The Open Source Geospatial Foundation
 
* [http://www.osgeo.org OSGeo]- The Open Source Geospatial Foundation
 
* [http://freegis.org FreeGIS.org] - Interactive information base for the GIS Free Software world
 
* [http://freegis.org FreeGIS.org] - Interactive information base for the GIS Free Software world
 +
* [http://pkg-grass.alioth.debian.org DebianGIS] - Project coordinating geospatial software for Debian GNU/Linux
 +
 +
* [http://grass.itc.it/statsgrass/grass_geostats.html R statistics] - High powered geostatistical analysis engine
 +
* [http://www.gstat.org/grass.html gstat] - Multivariable geostatistical modelling, prediction and simulation
 +
 +
== Not connected to GRASS ==
 +
 +
* [http://gmt.soest.hawaii.edu GMT] - The Generic Mapping Tools advanced cartography package
 +
* [http://www.saga-gis.uni-goettingen.de SAGA GIS] - A modern programming method GIS for the geosciences
 +
* [http://udig.refractions.net uDig] - User-friendly Desktop Internet GIS (uDig) web portal
 +
* [http://www.gvsig.gva.es/index.php?id=que-es-gvsig&L=2 gvSIG] - Similar in nature to QGIS, but written in Java
 +
* [http://jump-project.org JUMP] - For viewing and manipulating spatial data-sets, using Java
 +
* [http://starspan.casil.ucdavis.edu Starspan] - Mixed raster and vector spatial analysis
 +
* [http://openev.sourceforge.net/ OpenEV] - Raster and vector GIS with good support for image analysis
  
 
[[Category:Development]]
 
[[Category:Development]]

Latest revision as of 12:59, 23 May 2019

GRASS License

The GRASS GIS project is developed under the terms of the GNU General Public License (the GPL) in the open by volunteers the world over.

Resources for Developers

Communication

Documentation

GRASS libraries are self-documenting using Doxygen header comments.

Debugging

Code

Code submission procedure

Code submission standards

Explanation of C indentation rules

(see C language coding standards)

-bap Force blank lines after procedure bodies.
-bbb Force blank lines before block comments.
-bli1 Indent braces 1 space.
-bls Put braces on the line after struct declaration lines.
-br Put braces on line with if, etc.
-cbi0 Indent braces after a case label 0 spaces.
-ci4 Continuation indent of 4 spaces.
-cli0 Case label indent of 0 spaces.
-d0 Set indentation of comments not to the right of code to 0 spaces.
-di0 Put variables in column 0.
-fc1 Format comments in the first column.
-hnl Prefer to break long lines at the position of newlines in the input.
-i4 Set indentation level to 4 spaces.
-ip4 Indent parameter types in old-style function definitions by 4 spaces.
-l80 Set maximum line length for non-comment lines to 80.
-lc80 Set maximum line length for comment formatting to 80.
-lp Line up continued lines at parentheses.
-nbad Do not force blank lines after declarations.
-nbbo Do not prefer to break long lines before boolean operators.
-nbc Do not force newlines after commas in declarations.
-ncdb Do not put comment delimiters on blank lines.
-nce Do not cuddle } and else.
-ncs Do not put a space after cast operators.
-nfca Do not format any comments.
-npcs Do not put space after the function in function calls.
-nprs Do not put a space after every '(' and before every ')'.
-npsl Put the type of a procedure on the same line as its name.
-nsob Do not swallow optional blank lines.
-pi4 Specify the extra indentation per open parentheses '(' when a statement is broken.
-sbi0 Indent braces of a struct, union or enum 0 spaces.
-sc Put the `*' character at the left of comments.
-ss On one-line for and while statments, force a blank before the semicolon.
-ts8 Set tab size to 8 spaces.
GRASS Makefile writing

PGM must be set before including Module.make.

In general, the point at which variables get defined doesn't matter if they are only used in commands, but it matters if they are used in the dependency line. Essentially, dependency lines get expanded at the point they are read, while commands are expanded at the point they are executed.

The list of variables where the order is significant is:

       PGM
       LIB_NAME
       SUBDIRS
       CMD_OBJS
       LIB_OBJS
       LOCAL_HEADERS
       EXTRA_HEADERS
       DEPENDENCIES


The "documentation" for writing Makefiles boils down to: try to find something similar in the main GRASS tree and use its Makefile as a reference; if there isn't one, or if that doesn't work, ask on the developers' list.

Writing documentation for this will result in either wasted effort (from describing situations which never actually happen) or inadequate documentation (from failing to describe situations which actually happen) or (most likely) both.

A couple of points about wx.metadata specifically:

1. Using "parsubdirs" won't work as, because mdlib (presumably) needs to be built before any of the modules.

2. Files should not be installed using "cp"; use $(INSTALL) for anything which should be installed with execute permission or $(INSTALL_DATA) for anything without it.

3. Directories shouldn't be copied with "cp -r". Rather, the individual destination files should be listed as pre-requisites, so that "building" the target "builds" the destination files (typically via pattern rules).

wx.metadata/Makefile should probably include "templates" and "config" in $(SUBDIRS). These would have their own Makefiles; e.g. for templates/Makefile, something like:

       include $(MODULE_TOPDIR)/include/Make/Other.make
 
       DSTDIR = $(ETC)/mdlib/templates
 
       SRCFILES := $(wildcard *.xml)
       DSTFILES := $(patsubst %.xml,$(DSTDIR)/%.xml,$(SRCFILES))
 
       default: $(DSTFILES)
 
       $(DSTDIR)/%.xml: %.xml:
               $(INSTALL_DATA) $< $@

This should allow wx.metadata/Makefile to be a simple "directory" Makefile (i.e. set SUBDIRS, include Dir.make, "default: subdirs").

GitHub

QA

Code Search and Metrics

Ongoing and Plans

Overview

Works in Progress

Sandbox (ideas section)

Linking GRASS to external languages

GRASS and QGIS

Commercial development for GRASS

This is an unsorted (and most probably incomplete) list of paid development for GRASS GIS

Related projects

With connections to GRASS

  • JGrass - Java based frontend for GRASS incuding extended hydrological modelling tools
  • KerGIS - BSD-like licensed fork of GRASS 4.1.5
  • GAL - Project to reimplement a GRASS-like GIS using a modern object oriented approach
  • pyWPS - Python Web Processing Service (GRASS on the web)
  • PROJ.4 - Cartographic Projections Library
  • GDAL - Geospatial Data Abstraction Library
  • QGIS - Quantum GIS
  • OSGeo- The Open Source Geospatial Foundation
  • FreeGIS.org - Interactive information base for the GIS Free Software world
  • DebianGIS - Project coordinating geospatial software for Debian GNU/Linux
  • R statistics - High powered geostatistical analysis engine
  • gstat - Multivariable geostatistical modelling, prediction and simulation

Not connected to GRASS

  • GMT - The Generic Mapping Tools advanced cartography package
  • SAGA GIS - A modern programming method GIS for the geosciences
  • uDig - User-friendly Desktop Internet GIS (uDig) web portal
  • gvSIG - Similar in nature to QGIS, but written in Java
  • JUMP - For viewing and manipulating spatial data-sets, using Java
  • Starspan - Mixed raster and vector spatial analysis
  • OpenEV - Raster and vector GIS with good support for image analysis