<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Neteler</id>
	<title>GRASS-Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Neteler"/>
	<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/wiki/Special:Contributions/Neteler"/>
	<updated>2026-06-10T18:08:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_Community_Meeting_San_Michele_2026&amp;diff=28889</id>
		<title>GRASS Community Meeting San Michele 2026</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_Community_Meeting_San_Michele_2026&amp;diff=28889"/>
		<updated>2026-06-08T14:53:54Z</updated>

		<summary type="html">&lt;p&gt;Neteler: update arrival + activities (Markus)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[File:Sanmichele.png|frameless|center|1000px|San Michele all'Adige]]&lt;br /&gt;
&lt;br /&gt;
{{toc|right}}&lt;br /&gt;
&lt;br /&gt;
The ''GRASS Community Meeting'' for contributors and developers will be happening from '''July 11 -  19, 2026''' in [https://www.openstreetmap.org/relation/46990#map=12/46.1349/11.1947 San Michele all'Adige, Trentino, Italy].&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
&lt;br /&gt;
Sponsors make the event possible. Learn more about [https://grass.osgeo.org/contribute/sponsoring/ Sponsoring].&lt;br /&gt;
&lt;br /&gt;
* [https://www.osgeo.org/ OSGeo]: 2500 USD (see [https://wiki.osgeo.org/w/index.php?title=GRASS_Community_Meeting_2026:_Budget budget]]).&lt;br /&gt;
&lt;br /&gt;
[[File:Osgeo logo.png|none|left|alt=Light and dark green logo of OSGeo saying Your Open Source Compass|Open Source Geospatial Foundation]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The ''GRASS Community Meeting'' is a great occasion for folks to support the development by actively contributing to the project in different ways. These include  source code updates, documentation (manuals, wiki, tutorials), translations, website improvements or likewise. The community meeting is also a get-together where supporters, contributors, power users and developers make decisions and tackle larger problems related to the project, discuss and collaboratively resolve bugs, plan the direction for the project and work on new features. We welcome people committed to improving the GRASS  project and the interfaces to QGIS, GDAL, PostGIS, R, OGC Services and others.&lt;br /&gt;
&lt;br /&gt;
The focus is on GRASS maintenance, and interaction with other projects. Many maintenance tasks, infrastructure changes, and planning of large changes especially benefits from maintainers being in one place and time zone. While the specific topics highly depend on the participants, we will prioritize topics which require highly synchronous collaboration, such as the CMake build system transition and API transitions. The [https://grass.osgeo.org/news/2025_05_27_grass_dev_summit_report/ 2025 event report] gives an overview of what was achieved last year. &lt;br /&gt;
&lt;br /&gt;
We do require participants to work on GRASS or connections to other projects. However, we leave them the freedom to work on what they think is the best contribution to the project given their skills and time available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
Agenda is being refined.&lt;br /&gt;
&lt;br /&gt;
=== Saturday, July 11 ===&lt;br /&gt;
&lt;br /&gt;
Day of arrival. Contact organizers if you are interested in individualized program or helping with organization.&lt;br /&gt;
&lt;br /&gt;
=== Sunday, July 12 ===&lt;br /&gt;
&lt;br /&gt;
* Hybrid meeting about 8.6.0 with FHS and Jupyter in GUI updates &lt;br /&gt;
&lt;br /&gt;
=== Monday, July 13 ===&lt;br /&gt;
&lt;br /&gt;
* FHS&lt;br /&gt;
* Updating the GRASS Roadmap&lt;br /&gt;
&lt;br /&gt;
=== Tuesday, July 14 ===&lt;br /&gt;
&lt;br /&gt;
* GSoC (may be moved to different day)&lt;br /&gt;
* GeoAI&lt;br /&gt;
&lt;br /&gt;
=== Wednesday, July 15 ===&lt;br /&gt;
&lt;br /&gt;
* Python API review&lt;br /&gt;
* Plan PSC elections&lt;br /&gt;
&lt;br /&gt;
=== Thursday, July 16 ===&lt;br /&gt;
&lt;br /&gt;
* Reducing PR backlog &lt;br /&gt;
&lt;br /&gt;
=== Friday, July 17 ===&lt;br /&gt;
&lt;br /&gt;
* Address issues for 8.6.0 release&lt;br /&gt;
&lt;br /&gt;
=== Saturday, July 18 ===&lt;br /&gt;
&lt;br /&gt;
* Website review&lt;br /&gt;
&lt;br /&gt;
=== Sunday, July 19 ===&lt;br /&gt;
&lt;br /&gt;
Day of departure.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
Please add your name here:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;   border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#edf9c7; font-size:95%; empty-cells:show;&amp;quot; &lt;br /&gt;
!width=50px|'''Number'''&lt;br /&gt;
!width=130px|'''Participant '''&lt;br /&gt;
!width=100px|'''Country'''&lt;br /&gt;
!width=100px|'''Arrival'''&lt;br /&gt;
!width=100px|'''Departure'''&lt;br /&gt;
!'''Topics'''&lt;br /&gt;
!'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
| [[User:Lucadelu|Luca Delucchi]]&lt;br /&gt;
| Italy&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| [[User:wenzeslaus|Vaclav Petras]]&lt;br /&gt;
| United States &lt;br /&gt;
| 11.07.&lt;br /&gt;
| 19.07.&lt;br /&gt;
| grass.tools, pytest, subcommands, reviews&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
| [[User:Annakrat|Anna Petrasova]]&lt;br /&gt;
| United States &lt;br /&gt;
| 11.07.&lt;br /&gt;
| 19.07.&lt;br /&gt;
| GSoC, reviews, PR backlog, tutorials&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| [[User:Neteler|Markus Neteler]]&lt;br /&gt;
| Germany&lt;br /&gt;
| 06.07.&lt;br /&gt;
| 19.07. (?)&lt;br /&gt;
| documentation, website, reviews, tutorials, knowledge-transfer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
| [[User:Sbl|Stefan Blumentrath]]&lt;br /&gt;
| Norway&lt;br /&gt;
| 11.07. (presumably)&lt;br /&gt;
| 18.07. (presumably)&lt;br /&gt;
| Handling Copernicus data with GRASS / actinia&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| [[User:Hellik|Helmut Kudrnovsky]]&lt;br /&gt;
| Austria&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
| [[User:Veroandreo|Verónica Andreo]]&lt;br /&gt;
| Argentina&lt;br /&gt;
| 11.07. &lt;br /&gt;
| 19.07. &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
| [[User:Ctwhite|Corey White]]&lt;br /&gt;
| United States&lt;br /&gt;
| 11.07. &lt;br /&gt;
| 19.07. &lt;br /&gt;
| grass.jupyter, documentation, website, reviews, tutorials&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
| [[User:Echoix|Edouard Choinière]]&lt;br /&gt;
| Canada&lt;br /&gt;
| 11.07. (presumably)&lt;br /&gt;
| 19.07. (presumably)&lt;br /&gt;
| Reviews, CI, pytest, Windows GUI, i18n, undecided&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
| [[User:Mazingaro|Alen Mangafić]]&lt;br /&gt;
| Slovenia&lt;br /&gt;
| 13.07.&lt;br /&gt;
| 17.07.&lt;br /&gt;
| i.hyper: [https://grass.osgeo.org/grass-stable/manuals/addons/i.hyper.html Road Map] fullfilling; State of GRASS @FOSS4G 2026&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
| Tomaž Žagar&lt;br /&gt;
| Slovenia&lt;br /&gt;
| 13.07.&lt;br /&gt;
| 17.07.&lt;br /&gt;
| i.hyper: [https://grass.osgeo.org/grass-stable/manuals/addons/i.hyper.html Road Map] fullfilling&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
| Matjaž Krebs&lt;br /&gt;
| Slovenia&lt;br /&gt;
| 13.07.&lt;br /&gt;
| 17.07.&lt;br /&gt;
| i.hyper: [https://grass.osgeo.org/grass-stable/manuals/addons/i.hyper.html Road Map] fullfilling&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Registration is free; participants cover their own travel and lodging, often with employer support — thank you. Ideally we'd reimburse everyone, and every [https://numfocus.org/donate-to-grass donation] or [https://grass.osgeo.org/contribute/sponsoring/ employer sponsorship] of the project helps us get closer.&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
The meeting will be hosted at [https://fmach.it/ Fondazione Edmund Mach] (FEM) in San Michele all'Adige, Trentino, Italy — about 15 km north of Trento. FEM is a research and education center with on-site facilities that allow participants to work, sleep, and eat in the same location.&lt;br /&gt;
&lt;br /&gt;
[https://maps.app.goo.gl/5YEuEts6qXvky7HD9 Map]&lt;br /&gt;
&lt;br /&gt;
=== Getting there ===&lt;br /&gt;
&lt;br /&gt;
San Michele all'Adige is reachable by train on the Trento–Bolzano line (San Michele all'Adige–Mezzocorona station), with frequent connections from Trento (~15 minutes) and Verona (~1 hour). The nearest airports are Verona (VRN), Venice Marco Polo (VCE) and Treviso (TSF), Milan Bergamo (BGY), Malpensa (MXP), and Linate (LIN), Bologna (BLQ), and Innsbruck (INN) in Austria. Trento is also the host city of FOSS4G Italy 2026 (July 9–11), making it convenient to combine both events.&lt;br /&gt;
&lt;br /&gt;
== Accommodation and Costs ==&lt;br /&gt;
&lt;br /&gt;
''Registration is free''. However, participants should plan for the following costs:&lt;br /&gt;
&lt;br /&gt;
* Travel&lt;br /&gt;
* Lodging&lt;br /&gt;
&lt;br /&gt;
Participants can stay on-site at the FEM convitto (dormitory), keeping the community together for the full duration of the meeting:&lt;br /&gt;
&lt;br /&gt;
* €35 per person per night&lt;br /&gt;
* Double and triple rooms (triples include a small kitchen)&lt;br /&gt;
* A mandatory on-site supervisor is required at €200 per night (flat fee, shared across the group)&lt;br /&gt;
* Family members are welcome to stay in the dormitory as well&lt;br /&gt;
* [https://cif.fmach.it/content/download/2701/78358/file/brochure_convitto.pdf Brochure]&lt;br /&gt;
* Details to be communicated soon.&lt;br /&gt;
&lt;br /&gt;
For anyone preferring alternative lodging, hotels and B&amp;amp;Bs are available in San Michele and nearby Trento.&lt;br /&gt;
&lt;br /&gt;
Lunches on weekdays can be taken at the FEM canteen (mensa), located on the same campus. Details and pricing are being finalized.&lt;br /&gt;
&lt;br /&gt;
== Individual Preparation ==&lt;br /&gt;
&lt;br /&gt;
* Bring your own computer&lt;br /&gt;
* Bring {{wikipedia|AC power plugs and sockets|power adapter}} if needed (Italy: 230V, 50Hz, {{wikipedia|Europlug|Type C}}, {{wikipedia|Schuko|Type F}}, and {{wikipedia|AC power plugs and sockets: L|Type L}} sockets are common)&lt;br /&gt;
* Install git and the compiler tools, and come with a working GRASS development environment if possible. See [https://github.com/OSGeo/grass/blob/main/CONTRIBUTING.md here] for details.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
* ''Is this a conference?''&lt;br /&gt;
** Talks or presentations may be included, but the purpose is to work together on the project. Among conference formats, the closest comparison would be a participatory workshop.&lt;br /&gt;
* ''Is this a hackathon?''&lt;br /&gt;
** While there is plenty of intensive coding, the meeting is not competitive. We meet to collaborate.&lt;br /&gt;
* ''Is the GRASS Community Meeting for developers only?''&lt;br /&gt;
** No, the meeting is open to all users, supporters, contributors, power users, and developers ''who want to make a meaningful contribution to the project''.&lt;br /&gt;
* ''What skills do I need?''&lt;br /&gt;
** Coding skills are not required. Contributions to documentation, tutorials, translations, website, and testing are all valuable. Practical help during the meeting, such as coordinating meals, photography, or reporting, is a real contribution too.&lt;br /&gt;
* ''Can I attend remotely?''&lt;br /&gt;
** The meeting is in-person, but everyone is welcome to use the same week for focused work on the project from wherever they are.&lt;br /&gt;
* ''What language is used during the meeting?''&lt;br /&gt;
** English is the working language, but you may hear several other languages spoken at the event.&lt;br /&gt;
* ''How was it last time?''&lt;br /&gt;
** Splendid! See [[GRASS Developer Summit Raleigh 2025]]!&lt;br /&gt;
* ''Where can I get help and more information about the community meeting?''&lt;br /&gt;
** Contact local organizer [[User:Lucadelu|Luca Delucchi]] (&amp;lt;tt&amp;gt;&amp;lt;lucadeluge at gmail com&amp;gt;&amp;lt;/tt&amp;gt;) or [[User:wenzeslaus|Vaclav Petras]] (&amp;lt;tt&amp;gt;&amp;lt;wenzeslaus at gmail com&amp;gt;&amp;lt;/tt&amp;gt;) for budget questions.&lt;br /&gt;
* ''What if I can't spend time on this?''&lt;br /&gt;
** Can you spend money instead? [https://numfocus.org/donate-to-grass Donate to GRASS through NumFOCUS] to help keep the project going.&lt;br /&gt;
&lt;br /&gt;
[[Category: Workshops]]&lt;br /&gt;
[[Category: Code Sprint]]&lt;br /&gt;
[[Category: 2026]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-05-08&amp;diff=28879</id>
		<title>PSC Meeting 2026-05-08</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-05-08&amp;diff=28879"/>
		<updated>2026-05-11T15:57:42Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Some URLs added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Participants ==&lt;br /&gt;
&lt;br /&gt;
* Helli&lt;br /&gt;
* Anna&lt;br /&gt;
* Vashek&lt;br /&gt;
* Nicklas&lt;br /&gt;
* Paulo&lt;br /&gt;
* Linda&lt;br /&gt;
* Vero&lt;br /&gt;
* Huidae&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* Review action points from previous meetings:&lt;br /&gt;
** Community Meeting (see below)&lt;br /&gt;
** Was Corey added to the list of GRASS people with access to the OSGeo server?&lt;br /&gt;
** Status of translation, grass-gui and grass-stats mailman lists?&lt;br /&gt;
&lt;br /&gt;
* [[GRASS Community Meeting San Michele 2026]]&lt;br /&gt;
** Wiki created, [https://grass.osgeo.org/news/2026%2004%2022%20grass%20community%20meeting%20san%20michele%202026/ event announced], [https://grass.osgeo.org/ main page carousel updated]&lt;br /&gt;
** Agenda&lt;br /&gt;
** Rooms, food, housing &lt;br /&gt;
** FOSSGIS e.V. request: support needed to complete and submit the request&lt;br /&gt;
&lt;br /&gt;
* Releases&lt;br /&gt;
** [https://github.com/OSGeo/grass/releases/tag/8.5.0RC1 8.5 RC1]&lt;br /&gt;
*** did anyone test it?&lt;br /&gt;
** How are we for 8.5.0?&lt;br /&gt;
** [https://github.com/OSGeo/grass/discussions/7328 GitHub Discussion: What to cut from our release procedure to simplify it? #7328]&lt;br /&gt;
&lt;br /&gt;
* GSoC&lt;br /&gt;
** Support the mentees in maximizing a good use of AI to allow mentors spend time on higher level code reviews and open-source mentoring ''by purchasing a professional subscription for the mentees''?&lt;br /&gt;
&lt;br /&gt;
* Funding/Sponsoring&lt;br /&gt;
** New sponsoring tiers at https://grass.osgeo.org/contribute/sponsoring/&lt;br /&gt;
** Updates from NumFocus?&lt;br /&gt;
&lt;br /&gt;
* RFC&lt;br /&gt;
** New planned RFC to make C11's optional feature 'atomic support' required for 8.6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Minutes ==&lt;br /&gt;
&lt;br /&gt;
'''1. OSGeo server access'''&lt;br /&gt;
&lt;br /&gt;
* A ticket was opened a month ago to request OSGeo server access for Corey: https://trac.osgeo.org/osgeo/ticket/3561&lt;br /&gt;
** No response has been received so far from OSGeo SAC.&lt;br /&gt;
** [Action] Use the same ticket or create new ones to get Nicklas and Edouard access to the server.&lt;br /&gt;
&lt;br /&gt;
'''2. GRASS Community Meeting - San Michele'''&lt;br /&gt;
&lt;br /&gt;
* We drafted the agenda for the event, as it will support the [https://www.fossgis.de/wiki/F%C3%B6rderantr%C3%A4ge/GRASS_GIS_Community_Meeting_2026 sponsoring request to FOSSGIS e.V.]&lt;br /&gt;
* [Action] Vero will meet with MarkusN to help prepare the FOSSGIS request.&lt;br /&gt;
* We discussed criteria for (partial) reimbursement of participants, esp. in terms of commits to the main grass repo.&lt;br /&gt;
* [Action] Treasurer will propose who to reimburse and how much.&lt;br /&gt;
* [Action] All: Let's invite contributors personally, too.&lt;br /&gt;
&lt;br /&gt;
'''3. Release'''&lt;br /&gt;
&lt;br /&gt;
* [https://grass.osgeo.org/news/2026_05_08_grass_8_5_0_released/ 8.5.0 is out]!&lt;br /&gt;
* We discussed the release procedure based on the [https://github.com/OSGeo/grass/discussions/7328 #7328], in particular, whether Release Candidates are needed, given that they are rarely tested. Bas is a notable exception, consistently providing feedback on RCs.&lt;br /&gt;
* The goal is to get 8.6 out approximately 6 months after 8.5, as several things are almost ready and did not make it into 8.5.&lt;br /&gt;
* We went through the release announcement and the list of changes on GitHub and did minor edits during the meeting.&lt;br /&gt;
* [Action] Update versions and dates in the roadmap.&lt;br /&gt;
* [Action] Update Download/Windows layout since there is no standalone installer.&lt;br /&gt;
* [Action] Remove all &amp;quot;GIS&amp;quot; from the Download menu.&lt;br /&gt;
&lt;br /&gt;
'''4. GSoC'''&lt;br /&gt;
&lt;br /&gt;
* First time under [https://numfocus.org/programs/google-summer-code NumFocus].&lt;br /&gt;
* GRASS was allocated 3 students. Their projects and mentors are as follows:&lt;br /&gt;
** '''Pytest''' — Mentors: Vashek and Corey &lt;br /&gt;
** '''Integrating STDS into Data Catalog''' — Mentors: Anna and Stefan (Vero and Linda are interested in following this topic)&lt;br /&gt;
** '''Parallelise r.proj''' — Mentor: Huidae&lt;br /&gt;
* The first two projects will include adding JSON output to the tools they address.&lt;br /&gt;
* NumFOCUS acts as the fiscal intermediary but is not heavily involved in day-to-day matters.&lt;br /&gt;
* Proposal to use GRASS budget to pay for AI tools for GSoC students — to be discussed further.&lt;br /&gt;
&lt;br /&gt;
'''5. Funding/Sponsoring'''&lt;br /&gt;
&lt;br /&gt;
* We went through the new sponsoring page.&lt;br /&gt;
* New tiers were suggested by NumFOCUS.&lt;br /&gt;
* [Action] Ping Robert Dzur to check whether they want to sponsor the meeting in San Michele.&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-05-08&amp;diff=28878</id>
		<title>PSC Meeting 2026-05-08</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-05-08&amp;diff=28878"/>
		<updated>2026-05-10T23:27:17Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Minutes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Participants ==&lt;br /&gt;
&lt;br /&gt;
* Helli&lt;br /&gt;
* Anna&lt;br /&gt;
* Vashek&lt;br /&gt;
* Nicklas&lt;br /&gt;
* Paulo&lt;br /&gt;
* Linda&lt;br /&gt;
* Vero&lt;br /&gt;
* Huidae&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* Review action points from previous meetings:&lt;br /&gt;
** Community Meeting (see below)&lt;br /&gt;
** Was Corey added to the list of GRASS people with access to the OSGeo server?&lt;br /&gt;
** Status of translation, grass-gui and grass-stats mailman lists?&lt;br /&gt;
&lt;br /&gt;
* [[GRASS Community Meeting San Michele 2026]]&lt;br /&gt;
** Wiki created, [https://grass.osgeo.org/news/2026%2004%2022%20grass%20community%20meeting%20san%20michele%202026/ event announced], [https://grass.osgeo.org/ main page carousel updated]&lt;br /&gt;
** Agenda&lt;br /&gt;
** Rooms, food, housing &lt;br /&gt;
** FOSSGIS e.V. request: support needed to complete and submit the request&lt;br /&gt;
&lt;br /&gt;
* Releases&lt;br /&gt;
** [https://github.com/OSGeo/grass/releases/tag/8.5.0RC1 8.5 RC1]&lt;br /&gt;
*** did anyone test it?&lt;br /&gt;
** How are we for 8.5.0?&lt;br /&gt;
** [https://github.com/OSGeo/grass/discussions/7328 GitHub Discussion: What to cut from our release procedure to simplify it? #7328]&lt;br /&gt;
&lt;br /&gt;
* GSoC&lt;br /&gt;
** Support the mentees in maximizing a good use of AI to allow mentors spend time on higher level code reviews and open-source mentoring ''by purchasing a professional subscription for the mentees''?&lt;br /&gt;
&lt;br /&gt;
* Funding/Sponsoring&lt;br /&gt;
** New sponsoring tiers at https://grass.osgeo.org/contribute/sponsoring/&lt;br /&gt;
** Updates from NumFocus?&lt;br /&gt;
&lt;br /&gt;
* RFC&lt;br /&gt;
** New planned RFC to make C11's optional feature 'atomic support' required for 8.6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Minutes ==&lt;br /&gt;
&lt;br /&gt;
'''1. OSGeo server access'''&lt;br /&gt;
&lt;br /&gt;
* A ticket was opened a month ago to request OSGeo server access for Corey: https://trac.osgeo.org/osgeo/ticket/3561&lt;br /&gt;
* No response has been received so far from OSGeo SAC.&lt;br /&gt;
* [Action] Use the same ticket or create new ones to get Nicklas and Edouard access to the server.&lt;br /&gt;
&lt;br /&gt;
'''2. GRASS Community Meeting - San Michele'''&lt;br /&gt;
&lt;br /&gt;
* We drafted the agenda for the event, as it will support the sponsoring request to FOSSGIS e.V.&lt;br /&gt;
* [Action] Vero will meet with MarkusN to help prepare the FOSSGIS request.&lt;br /&gt;
* We discussed criteria for (partial) reimbursement of participants, esp. in terms of commits to the main grass repo.&lt;br /&gt;
* [Action] Treasurer will propose who to reimburse and how much.&lt;br /&gt;
* [Action] All: Let's invite contributors personally, too.&lt;br /&gt;
&lt;br /&gt;
'''3. Release'''&lt;br /&gt;
&lt;br /&gt;
* [https://grass.osgeo.org/news/2026_05_08_grass_8_5_0_released/ 8.5.0 is out]!&lt;br /&gt;
* We discussed the release procedure based on the [https://github.com/OSGeo/grass/discussions/7328 #7328], in particular, whether Release Candidates are needed, given that they are rarely tested. Bas is a notable exception, consistently providing feedback on RCs.&lt;br /&gt;
* The goal is to get 8.6 out approximately 6 months after 8.5, as several things are almost ready and did not make it into 8.5.&lt;br /&gt;
* We went through the release announcement and the list of changes on GitHub and did minor edits during the meeting.&lt;br /&gt;
* [Action] Update versions and dates in the roadmap.&lt;br /&gt;
* [Action] Update Download/Windows layout since there is no standalone installer.&lt;br /&gt;
* [Action] Remove all &amp;quot;GIS&amp;quot; from the Download menu.&lt;br /&gt;
&lt;br /&gt;
'''4. GSoC'''&lt;br /&gt;
&lt;br /&gt;
* First time under NumFocus.&lt;br /&gt;
* GRASS was allocated 3 students. Their projects and mentors are as follows:&lt;br /&gt;
** '''Pytest''' — Mentors: Vashek and Corey &lt;br /&gt;
** '''Integrating STDS into Data Catalog''' — Mentors: Anna and Stefan (Vero and Linda are interested in following this topic)&lt;br /&gt;
** '''Parallelise r.proj''' — Mentor: Huidae&lt;br /&gt;
* The first two projects will include adding JSON output to the tools they address.&lt;br /&gt;
* NumFOCUS acts as the fiscal intermediary but is not heavily involved in day-to-day matters.&lt;br /&gt;
* Proposal to use GRASS budget to pay for AI tools for GSoC students — to be discussed further.&lt;br /&gt;
&lt;br /&gt;
'''5. Funding/Sponsoring'''&lt;br /&gt;
&lt;br /&gt;
* We went through the new sponsoring page.&lt;br /&gt;
* New tiers were suggested by NumFOCUS.&lt;br /&gt;
* [Action] Ping Robert Dzur to check whether they want to sponsor the meeting in San Michele.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-05-08&amp;diff=28853</id>
		<title>PSC Meeting 2026-05-08</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-05-08&amp;diff=28853"/>
		<updated>2026-05-02T13:19:43Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Participants ==&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* Review action points from previous meetings:&lt;br /&gt;
** Community Meeting (see below)&lt;br /&gt;
** Was Corey added to the list of GRASS people with access to the OSGeo server?&lt;br /&gt;
** Status of translation, grass-gui and grass-stats mailman lists?&lt;br /&gt;
&lt;br /&gt;
* [[GRASS Community Meeting San Michele 2026]]&lt;br /&gt;
** Wiki created, event announced&lt;br /&gt;
** Agenda&lt;br /&gt;
** Rooms, food, housing &lt;br /&gt;
** FOSSGIS e.V. request: support needed to complete and submit the request&lt;br /&gt;
&lt;br /&gt;
* Releases&lt;br /&gt;
** [https://github.com/OSGeo/grass/releases/tag/8.5.0RC1 8.5 RC1]&lt;br /&gt;
*** did anyone test it?&lt;br /&gt;
** How are we for 8.5.0? &lt;br /&gt;
&lt;br /&gt;
* GSoC&lt;br /&gt;
&lt;br /&gt;
* Funding/Sponsoring&lt;br /&gt;
** New sponsoring tiers at https://grass.osgeo.org/contribute/sponsoring/&lt;br /&gt;
** Updates from NumFocus?&lt;br /&gt;
&lt;br /&gt;
* ... &lt;br /&gt;
* add your topic here&lt;br /&gt;
&lt;br /&gt;
== Minutes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_Community_Meeting_San_Michele_2026&amp;diff=28836</id>
		<title>GRASS Community Meeting San Michele 2026</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_Community_Meeting_San_Michele_2026&amp;diff=28836"/>
		<updated>2026-04-15T09:57:45Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Participation */ +Markus Neteler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{toc|right}}&lt;br /&gt;
The ''GRASS Community Meeting'' for contributors and developers will be happening from '''July 11 to June 19, 2026''' in [https://www.openstreetmap.org/relation/46990#map=12/46.1349/11.1947 San Michele all'Adige, Trentino, Italy].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Sanmichele.png|frameless|center|1000px|San Michele all'Adige]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.osgeo.org/ OSGeo]: 2500 USD (see [https://wiki.osgeo.org/w/index.php?title=GRASS_Community_Meeting_2026:_Budget budget]]).&lt;br /&gt;
&lt;br /&gt;
[[File:Osgeo logo.png|none|left|alt=Light and dark green logo of OSGeo saying Your Open Source Compass|Open Source Geospatial Foundation]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The ''GRASS Community Meeting'' is a great occasion for folks to support the development by actively contributing to the project in different ways. These include  source code updates, documentation (manuals, wiki, tutorials), translations, website improvements or likewise. The community meeting is also a get-together where supporters, contributors, power users and developers make decisions and tackle larger problems related to the project, discuss and collaboratively resolve bugs, plan the direction for the project and work on new features. We welcome people committed to improving the GRASS  project and the interfaces to QGIS, GDAL, PostGIS, R, OGC Services and others.&lt;br /&gt;
&lt;br /&gt;
The focus is on GRASS maintenance, and interaction with other projects. Many maintenance tasks, infrastructure changes, and planning of large changes especially benefits from maintainers being in one place and time zone. While the specific topics highly depend on the participants, we will prioritize topics which require highly synchronous collaboration, such as the CMake build system transition and API transitions. The [https://grass.osgeo.org/news/2025_05_27_grass_dev_summit_report/ 2025 event report] gives an overview of what was achieved last year. &lt;br /&gt;
&lt;br /&gt;
We do require participants to work on GRASS or connections to other projects. However, we leave them the freedom to work on what they think is the best contribution to the project given their skills and time available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
Agenda is forthcoming.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday, July 11 ===&lt;br /&gt;
&lt;br /&gt;
Day of arrival. Contact organizers if you are interested in individualized program or helping with organization.&lt;br /&gt;
&lt;br /&gt;
=== Sunday, July 12 ===&lt;br /&gt;
=== Monday, July 13 ===&lt;br /&gt;
=== Tuesday, July 14 ===&lt;br /&gt;
=== Wednesday, July 15 ===&lt;br /&gt;
=== Thursday, July 16 ===&lt;br /&gt;
=== Friday, July 17 ===&lt;br /&gt;
=== Saturday, July 18 ===&lt;br /&gt;
=== Sunday, July 19 ===&lt;br /&gt;
&lt;br /&gt;
Day of departure.&lt;br /&gt;
&lt;br /&gt;
== Participation ==&lt;br /&gt;
&lt;br /&gt;
Please add your name here:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot;   border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#edf9c7; font-size:95%; empty-cells:show;&amp;quot; &lt;br /&gt;
!width=50px|'''Number'''&lt;br /&gt;
!width=130px|'''Participant '''&lt;br /&gt;
!width=100px|'''Country'''&lt;br /&gt;
!width=100px|'''Arrival'''&lt;br /&gt;
!width=100px|'''Departure'''&lt;br /&gt;
!'''Topics'''&lt;br /&gt;
!'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
| [[User:Lucadelu|Luca Delucchi]]&lt;br /&gt;
| Italy&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| [[User:wenzeslaus|Vaclav Petras]]&lt;br /&gt;
| United States &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
| [[User:Annakrat|Anna Petrasova]]&lt;br /&gt;
| United States &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| [[User:Neteler|Markus Neteler]]&lt;br /&gt;
| Germany&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
The meeting will be hosted at [https://fmach.it/ Fondazione Edmund Mach] (FEM) in San Michele all'Adige, Trentino, Italy — about 15 km north of Trento. FEM is a research and education center with on-site facilities that allow participants to work, sleep, and eat in the same location.&lt;br /&gt;
&lt;br /&gt;
[https://maps.app.goo.gl/5YEuEts6qXvky7HD9 Map]&lt;br /&gt;
&lt;br /&gt;
=== Getting there ===&lt;br /&gt;
&lt;br /&gt;
San Michele all'Adige is reachable by train on the Trento–Bolzano line (San Michele all'Adige–Mezzocorona station), with frequent connections from Trento (~15 minutes) and Verona (~1 hour). The nearest airports are Verona (VRN), Venice Marco Polo (VCE) and Treviso (TSF), Milan Bergamo (BGY), Malpensa (MXP), and Linate (LIN), Bologna (BLQ), and Innsbruck (INN) in Austria. Trento is also the host city of FOSS4G Italy 2026 (July 9–11), making it convenient to combine both events.&lt;br /&gt;
&lt;br /&gt;
== Accommodation and Costs ==&lt;br /&gt;
&lt;br /&gt;
''Participation is free of charge''. However, participants should plan for the following costs:&lt;br /&gt;
&lt;br /&gt;
* Travel&lt;br /&gt;
* Lodging&lt;br /&gt;
&lt;br /&gt;
Participants can stay on-site at the FEM convitto (dormitory), keeping the community together for the full duration of the meeting:&lt;br /&gt;
&lt;br /&gt;
* €35 per person per night&lt;br /&gt;
* Double and triple rooms (triples include a small kitchen)&lt;br /&gt;
* A mandatory on-site supervisor is required at €200 per night (flat fee, shared across the group)&lt;br /&gt;
* Family members are welcome to stay in the dormitory as well&lt;br /&gt;
* [https://cif.fmach.it/content/download/2701/78358/file/brochure_convitto.pdf Brochure]&lt;br /&gt;
&lt;br /&gt;
For anyone preferring alternative lodging, hotels and B&amp;amp;Bs are available in San Michele and nearby Trento.&lt;br /&gt;
&lt;br /&gt;
Lunches on weekdays can be taken at the FEM canteen (mensa), located on the same campus. Details and pricing are being finalized.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Individual Preparation ==&lt;br /&gt;
&lt;br /&gt;
* Bring your own computer&lt;br /&gt;
* Bring {{wikipedia|AC power plugs and sockets|power adapter}} if needed (Italy: 230V, 50Hz, {{wikipedia|Europlug|Type C}}, {{wikipedia|Schuko|Type F}}, and {{wikipedia|AC power plugs and sockets: L|Type L}} sockets are common)&lt;br /&gt;
* Install git and the compiler tools, and come with a working GRASS development environment if possible. See [https://github.com/OSGeo/grass/blob/main/CONTRIBUTING.md here] for details.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
* ''How was it last time?''&lt;br /&gt;
** Splendid! See [[GRASS Developer Summit Raleigh 2025]]!&lt;br /&gt;
* ''Is the GRASS Community Meeting for developers only?''&lt;br /&gt;
** No, the meeting is open to all users, supporters, contributors, power users and developers ''who want to make a meaningful contribution to the project''.&lt;br /&gt;
* ''Where can I get help and more information about the community meeting?''&lt;br /&gt;
** Contact local organizer [[User:Lucadelu|Luca Delucchi]] (&amp;lt;tt&amp;gt;&amp;lt;lucadeluge at gmail com&amp;gt;&amp;lt;/tt&amp;gt;) or [[User:wenzeslaus|Vaclav Petras]] (&amp;lt;tt&amp;gt;&amp;lt;wenzeslaus at gmail com&amp;gt;&amp;lt;/tt&amp;gt;) for budget questions.&lt;br /&gt;
&lt;br /&gt;
[[Category: Workshops]]&lt;br /&gt;
[[Category: Code Sprint]]&lt;br /&gt;
[[Category: 2026]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Category:2026&amp;diff=28835</id>
		<title>Category:2026</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Category:2026&amp;diff=28835"/>
		<updated>2026-04-15T09:20:53Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_Budget_2026&amp;diff=28834</id>
		<title>GRASS Budget 2026</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_Budget_2026&amp;diff=28834"/>
		<updated>2026-04-15T09:19:54Z</updated>

		<summary type="html">&lt;p&gt;Neteler: fix Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is proposed budget (not necessarily the actual expenses).&lt;br /&gt;
&lt;br /&gt;
== Income ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! USD !! EUR !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Request to OSGeo (general budget) || 2,000.00 || 1,909.48 || OSGeo Projects budget&lt;br /&gt;
|-&lt;br /&gt;
| Expected Donations || 550.00 || 525.11 || Based on average from 2020-2022, $760 2024 (Nov-Nov)&lt;br /&gt;
|-&lt;br /&gt;
| Total income || 2,000.00 || 1,909.48 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Expenses ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! USD !! EUR !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Events, Sprints, Travel ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Travel to multip-project event (e.g., sprint) || 2,200.00 || 2,100.43 || Multiple travels on a continent or one travel to a different continent&lt;br /&gt;
|-&lt;br /&gt;
| Local project sprints and meetups || 500.00 || 477.37 || Community contributions to the sprint through the budget&lt;br /&gt;
|-&lt;br /&gt;
| Subtotal || 2,200.00 || 2,100.43 || &lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Grants ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Community grants || 2,000.00 || 1,909.48 || Community members (including students) can apply with a plan, PSC decides by motion&lt;br /&gt;
|-&lt;br /&gt;
| Subtotal || 2,000.00 || 1,909.48 || &lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Marketing ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| T-shirts, swag for users, conferences, ... || 200.00 || 190.95 || Community members can request for local or global events&lt;br /&gt;
|-&lt;br /&gt;
| Stickers and magnets (as above) || 200.00 || 190.95 || Community members can request for local or global events&lt;br /&gt;
|-&lt;br /&gt;
| Social media management service || 201.60 || 192.48 || Publer in Dec for 1 year 3 accounts&lt;br /&gt;
|-&lt;br /&gt;
| Subtotal || 601.60 || 574.37 || &lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Total expenses || 4,801.60 || 4,584.29 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Balance ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! USD !! EUR !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Year balance (income - expenses) || -2,801.60 || -2,674.81 || If negative, it needs to be covered by additional fundraising and surplus.&lt;br /&gt;
|-&lt;br /&gt;
| Balance in Open Collective || 7,302.42 || 6,971.93 || State from December 26, 2025&lt;br /&gt;
|-&lt;br /&gt;
| Balance of persistent budget at OSGeo || 2,000.00 || 1,909.48 || 3*500 USD from GSoC 2024 + 1*500 USD from GSOC 2025&lt;br /&gt;
|-&lt;br /&gt;
| EOY balance (year balance + surplus) || 6,500.82 || 6,206.61 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Edits: Ask the [[PSC#Members|treasurer]] about editing this page.&lt;br /&gt;
&lt;br /&gt;
[[Category: Budget]]&lt;br /&gt;
[[Category: 2026]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28819</id>
		<title>Compile and Install</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28819"/>
		<updated>2026-04-02T12:21:04Z</updated>

		<summary type="html">&lt;p&gt;Neteler: +python3-pip; fix libfftw3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- {{MoveToTrac}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Disclaimer''': This page explains how to turn the GRASS source code into an installable binary package (&amp;quot;compilation&amp;quot;) for different operating systems. If you just want to get ready-to-use binaries, go [https://grass.osgeo.org/download/ here], otherwise read on...&lt;br /&gt;
&lt;br /&gt;
== How to do compilation and installation of GRASS? ==&lt;br /&gt;
&lt;br /&gt;
Here we explain the procedure to compile GRASS from GitHub, but it also applies to official GRASS 8 releases.&lt;br /&gt;
&lt;br /&gt;
''For installation of precompiled binary packages, see the main [[Installation Guide]].''&lt;br /&gt;
&lt;br /&gt;
For detailed information on compilation, please see the [https://github.com/OSGeo/grass/blob/main/INSTALL.md INSTALL] file in the source code.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
==== Extra libraries ====&lt;br /&gt;
GRASS needs at least two extra libraries: PROJ and GDAL/OGR. It is recommended to download them as ready-to-use packages for your software platform (Linux distribution, Windows, Mac...).&lt;br /&gt;
&lt;br /&gt;
Other libraries needed to run GRASS are listed on the [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md requirements page].&lt;br /&gt;
&lt;br /&gt;
To compile, you will also need the respective &amp;quot;-devel&amp;quot; packages; see below for details.&lt;br /&gt;
&lt;br /&gt;
==== Download GRASS source code ====&lt;br /&gt;
&lt;br /&gt;
First, [https://grass.osgeo.org/download/ download the GRASS source code].&lt;br /&gt;
&lt;br /&gt;
=== Generic Compilation and installation procedure ===&lt;br /&gt;
&lt;br /&gt;
* It is wise that compilation processes are carried out as a normal user: If you want to get the source code in a place where you do not have write permissions (e.g. in /usr/local/src/) just follow this:&lt;br /&gt;
      cd /usr/local/src/ &lt;br /&gt;
      su -c 'mkdir grass8'&lt;br /&gt;
      su -c 'chown yourlogin:yourgroup grass8'&lt;br /&gt;
&lt;br /&gt;
Otherwise if you have permissions just continue as a normal user:&lt;br /&gt;
      mkdir $HOME/src&lt;br /&gt;
      cd $HOME/src/&lt;br /&gt;
      git clone https://github.com/OSGeo/grass.git grass_main&lt;br /&gt;
&lt;br /&gt;
* run configure with parameters to adapt the compile process to your own system. To see what options can be passed to it, run:&lt;br /&gt;
 ./configure --help | less &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The minimum set of configure parameters is &lt;br /&gt;
      ./configure ### --&amp;gt;&lt;br /&gt;
It may (!) look like this:&lt;br /&gt;
 &lt;br /&gt;
      ./configure \&lt;br /&gt;
          --with-cxx \&lt;br /&gt;
          --with-sqlite \&lt;br /&gt;
          --with-python \&lt;br /&gt;
          --with-geos \&lt;br /&gt;
          --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
          --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
          --with-freetype \&lt;br /&gt;
          --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
          --with-proj --with-proj-share=/usr/share/proj&lt;br /&gt;
&lt;br /&gt;
You may have to explicitly state the path for certain packages (i.e., gdal). The Unix 'locate' command will come in handy for finding the path of the package you need (you may have to run locate as root ex: sudo locate gdal-config).&lt;br /&gt;
&lt;br /&gt;
Please note that the paths mentioned may widely vary due to the distribution used.&lt;br /&gt;
See [[Compile_and_Install#Platform_Specific_Notes|Platform Specific Notes]] below.&lt;br /&gt;
&lt;br /&gt;
Depending on your needs it may be a good idea to include debugging hooks.&lt;br /&gt;
: See [[GRASS_Debugging#Compile_Time_Setup]].&lt;br /&gt;
 CFLAGS=&amp;quot;-ggdb -Wall -Werror-implicit-function-declaration&amp;quot; ./configure ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the end of configuration process you should get report not much different from this:&lt;br /&gt;
&lt;br /&gt;
  GRASS is now configured for:  x86_64-pc-linux-gnu&lt;br /&gt;
  &lt;br /&gt;
  Source directory:           /home/user/software/grass_main&lt;br /&gt;
  Build directory:            /home/user/software/grass_main&lt;br /&gt;
  Installation directory:     ${prefix}/grass84&lt;br /&gt;
  Startup script in directory:${exec_prefix}/bin&lt;br /&gt;
  C compiler:                 gcc -O2 -march=native -std=gnu99 -fexceptions -fstack-protector -m64 -fdiagnostics-color &lt;br /&gt;
  C++ compiler:               c++ -g -Wall&lt;br /&gt;
  Building shared libraries:  yes&lt;br /&gt;
  OpenGL platform:            X11&lt;br /&gt;
  &lt;br /&gt;
  MacOSX application:         no&lt;br /&gt;
  MacOSX architectures:       &lt;br /&gt;
  MacOSX SDK:                 &lt;br /&gt;
  &lt;br /&gt;
  BLAS support:               yes&lt;br /&gt;
  BZIP2 support:              no&lt;br /&gt;
  C++ support:                yes&lt;br /&gt;
  Cairo support:              yes&lt;br /&gt;
  DWG support:                no&lt;br /&gt;
  FFTW support:               yes&lt;br /&gt;
  FreeType support:           yes&lt;br /&gt;
  GDAL support:               yes&lt;br /&gt;
  GEOS support:               yes&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
* Let's compile it (takes a little while...)!&lt;br /&gt;
      make -j2&lt;br /&gt;
* At the end, you should get report not much different from this:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Following modules are missing the 'description.html' file in src code:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 GRASS compilation log&lt;br /&gt;
 -------------------------&lt;br /&gt;
 Started compilation: Mon 19 Aug 2024 10:47:57 PM CEST&lt;br /&gt;
 --&lt;br /&gt;
 Errors in:&lt;br /&gt;
 No errors detected.&lt;br /&gt;
 --&lt;br /&gt;
 Finished compilation: Mon 19 Aug 2024 10:55:12 PM CEST&lt;br /&gt;
 (In case of errors please change into the directory with error and run 'make')&lt;br /&gt;
&lt;br /&gt;
* If there is any error, change directory to directory with error and run &amp;quot;make&amp;quot; again. Report occurring bug to GRASS mailing list&lt;br /&gt;
* Once the installation process is finished, you're ready to install GRASS system wide.&lt;br /&gt;
      su -c 'make install'&lt;br /&gt;
* enjoy GRASS: &lt;br /&gt;
      grass&lt;br /&gt;
&lt;br /&gt;
=== What else? ===&lt;br /&gt;
&lt;br /&gt;
If you want to use [https://www.qgis.org QGIS], then also compile the GRASS-GDAL/OGR plugin. This is also useful to access your GRASS-data&lt;br /&gt;
from other application using GDAL/OGR like [[R_statistics/ R]].&lt;br /&gt;
* [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]] (enables QGIS to read GRASS data directly)&lt;br /&gt;
&lt;br /&gt;
=== Compile and install GDAL-GRASS plugin ===&lt;br /&gt;
&lt;br /&gt;
* See [[Compile and install GDAL-GRASS plugin]]&lt;br /&gt;
&lt;br /&gt;
=== Platform Specific Notes ===&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Linux comes in various flavours, i.e. distributions.&lt;br /&gt;
&lt;br /&gt;
===== Distribution related packaging =====&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Archlinux: https://aur.archlinux.org/packages/grass&lt;br /&gt;
* Centos: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Debian: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
* EPEL: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Fedora: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Ubuntu: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
&lt;br /&gt;
===== Alpine Linux =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# install compiler tools and libraries&lt;br /&gt;
apk add build-base bzip2-dev cairo-dev fftw-dev freetype-dev g++ gcc gdal-dev geos-dev git \&lt;br /&gt;
        gnutls-dev libc6-compat libjpeg-turbo-dev libpng-dev make openjpeg-dev openblas-dev \&lt;br /&gt;
        postgresql-dev proj-dev python3-dev py3-numpy-dev sqlite-dev tar tiff-dev unzip vim \&lt;br /&gt;
        wget zip zstd-dev&lt;br /&gt;
&lt;br /&gt;
# install needed tools and libraries when using GRASS&lt;br /&gt;
apk add attr bash bison bzip2 cairo curl fftw flex freetype gdal gdal-tools gettext geos gnutls \&lt;br /&gt;
        jsoncpp libbz2 libexecinfo libjpeg-turbo libpng libunwind musl musl-utils ncurses openjpeg \&lt;br /&gt;
        openblas py3-numpy py3-pillow py3-six postgresql proj-datumgrid proj-util sqlite sqlite-libs \&lt;br /&gt;
        subversion tiff zstd zstd-libs&lt;br /&gt;
&lt;br /&gt;
# get source code&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://grass.osgeo.org/grass88/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# unpack&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# change into source code (update path name as needed)&lt;br /&gt;
cd grass-8.4.git_src_snapshot_2021_05_01/&lt;br /&gt;
&lt;br /&gt;
# minimal configuration&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --without-nls \&lt;br /&gt;
  --without-wxwidgets \&lt;br /&gt;
  --without-fftw \&lt;br /&gt;
  --without-cairo \&lt;br /&gt;
  --without-freetype \&lt;br /&gt;
  --without-opengl \&lt;br /&gt;
  --without-odbc&lt;br /&gt;
&lt;br /&gt;
# compilation&lt;br /&gt;
nice make -j2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Archlinux =====&lt;br /&gt;
You can install GRASS for Archlinux distribution based like Archlinux, Manjaro, EndeavourOS ...&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Easiest method : use a prebuilt package using arch4edu repository'''&amp;lt;/big&amp;gt;&lt;br /&gt;
''&amp;quot;Arch4edu is a community repository for Arch Linux and Arch Linux ARM that strives to provide the latest versions of most software used by college students.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Add Arch4edu repository. Follow instructions from official documentation:&lt;br /&gt;
&lt;br /&gt;
https://github.com/arch4edu/arch4edu/wiki/Add-arch4edu-to-your-Archlinux&lt;br /&gt;
&lt;br /&gt;
2. Refresh packages list with&lt;br /&gt;
 &lt;br /&gt;
 pacman -Syyu&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS package&lt;br /&gt;
&lt;br /&gt;
 pacman -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Advanced method : use AUR (Arch User Repository) package'''&amp;lt;/big&amp;gt;&lt;br /&gt;
Up-to-date links to Archlinux GRASS PKGBUILDs are on Arch User Repository. &lt;br /&gt;
PKGBUILD downloads and builds automatically sources from https://grass.osgeo.org/download/software/linux/.&lt;br /&gt;
&lt;br /&gt;
You can use an AUR helper like ''pamac'', ''yay'', among others ... More info through this link https://wiki.archlinux.org/title/AUR_helpers&lt;br /&gt;
&lt;br /&gt;
Exemple with ''yay'':&lt;br /&gt;
 yay -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Expert method : compile from source code'''&amp;lt;/big&amp;gt;&lt;br /&gt;
If you want to compile it yourself, you could follow steps below :&lt;br /&gt;
&lt;br /&gt;
''(As an alternative it is recommended to download PKGBUILD from AUR and then customize to your needs)''&lt;br /&gt;
&lt;br /&gt;
Install dependencies : &lt;br /&gt;
 pacman -S bzip2 cairo fftw fontconfig freetype2 gcc-libs gdal geos glibc glu libpng libtiff libx11 libgl netcdf pdal proj python-gdal python-numpy python-pillow python-wxpython readline zlib zstd&lt;br /&gt;
&lt;br /&gt;
Download and extract sources : https://grass.osgeo.org/download/software/sources/&lt;br /&gt;
&lt;br /&gt;
We can now start building GRASS&lt;br /&gt;
&lt;br /&gt;
 export PATH=~/usr/bin:$PATH &amp;amp;&amp;amp; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
    --with-wxwidgets \&lt;br /&gt;
    --with-readline \&lt;br /&gt;
    --with-pthread \&lt;br /&gt;
    --with-netcdf \&lt;br /&gt;
    --with-nls \&lt;br /&gt;
    --with-geos \&lt;br /&gt;
    --with-postgres \&lt;br /&gt;
    --with-pdal=/usr/include/pdal \&lt;br /&gt;
    --with-bzlib \&lt;br /&gt;
    --with-zstd&lt;br /&gt;
&lt;br /&gt;
Now let's compile and install it&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
It's done, you can enjoy GRASS in Arch, just type &amp;quot;grass&amp;quot; in the terminal to launch it or look for grass in your menu.&lt;br /&gt;
&lt;br /&gt;
===== Generic procedure for Debian-based distributions (Ubuntu, ...) =====&lt;br /&gt;
&lt;br /&gt;
WORK IN PROGRESS&lt;br /&gt;
&lt;br /&gt;
1. Install official GRASS package&lt;br /&gt;
&lt;br /&gt;
 sudo apt install grass grass-dev&lt;br /&gt;
&lt;br /&gt;
2. Enable source code download&lt;br /&gt;
&lt;br /&gt;
 # do backup first&lt;br /&gt;
 sudo cp /etc/apt/sources.list /etc/apt/sources.list.orig&lt;br /&gt;
 sudo sed -i '/^#\sdeb-src /s/^# *//' /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS dependencies&lt;br /&gt;
&lt;br /&gt;
 sudo apt build-dep grass&lt;br /&gt;
&lt;br /&gt;
4. Download GRASS source code&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/osgeo/grass&lt;br /&gt;
&lt;br /&gt;
5. Compile GRASS from source code&lt;br /&gt;
 &lt;br /&gt;
 cd grass&lt;br /&gt;
&lt;br /&gt;
Configure:&lt;br /&gt;
&lt;br /&gt;
 grass --config build | sh&lt;br /&gt;
&lt;br /&gt;
Optionally install missing dependencies (can happen when official GRASS package is not compatible with GRASS main), eg.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install libzstd-dev&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
 make -j2&lt;br /&gt;
&lt;br /&gt;
6. Run locally or install&lt;br /&gt;
&lt;br /&gt;
 ./bin.x86_64-pc-linux-gnu/grass --version&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
 sudo make install&lt;br /&gt;
 grass --version&lt;br /&gt;
&lt;br /&gt;
===== Debian =====&lt;br /&gt;
&lt;br /&gt;
* Official [https://wiki.debian.org/DebianGis DebianGIS] packaging control files, available on git server:&lt;br /&gt;
  https://salsa.debian.org/debian-gis-team/grass&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Debian 11 (bullseye) ======&lt;br /&gt;
&lt;br /&gt;
Install needed packages for GRASS 8.4:&lt;br /&gt;
  apt-get update &amp;amp;&amp;amp; \&lt;br /&gt;
  apt-get install bison debhelper-compat dh-python doxygen fakeroot flex graphviz \&lt;br /&gt;
    libblas-dev libbz2-dev libcairo2-dev libfftw3-dev libfreetype6-dev \&lt;br /&gt;
    libgdal-dev libgeos-dev libgl1-mesa-dev libglu1-mesa-dev libjpeg-dev liblapack-dev libmotif-dev \&lt;br /&gt;
    default-libmysqlclient-dev libncurses5-dev libnetcdf-dev libpng-dev libpq-dev \&lt;br /&gt;
    libproj-dev libreadline-dev libsqlite3-dev libtiff-dev libxmu-dev libzstd-dev \&lt;br /&gt;
    netcdf-bin pkg-config proj-bin python3 python3-dev python3-numpy python3-pil python3-ply \&lt;br /&gt;
    python3-six python3-wxgtk4.0 wget unixodbc-dev zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download and unpack GRASS 8.4 source code (or fetch from GitHub: https://github.com/OSGeo/grass):&lt;br /&gt;
&lt;br /&gt;
  wget https://grass.osgeo.org/grass84/source/grass-8.4-latest.tar.gz&lt;br /&gt;
  tar xvfz grass-8.4-latest.tar.gz&lt;br /&gt;
  cd grass-8.4.*&lt;br /&gt;
&lt;br /&gt;
Configuration:&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-Wall -Werror-implicit-function-declaration -fno-common -Wextra -Wunused&amp;quot; \&lt;br /&gt;
  CXXFLAGS=&amp;quot;-Wall&amp;quot;  \&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --prefix=/usr/local \&lt;br /&gt;
   --with-gdal --with-proj --with-proj-share=/usr/share \&lt;br /&gt;
   --with-glw --with-nls --with-readline \&lt;br /&gt;
   --with-cxx --enable-largefile \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --with-sqlite --with-cairo --with-python=/usr/bin/python-config \&lt;br /&gt;
   --with-wxwidgets --with-geos \&lt;br /&gt;
   --with-netcdf=/usr/bin/nc-config --with-odbc=yes \&lt;br /&gt;
   --with-openmp=yes --with-pthread=no&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
  make -j2&lt;br /&gt;
&lt;br /&gt;
Install:&lt;br /&gt;
&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
  grass --version&lt;br /&gt;
&lt;br /&gt;
===== Ubuntu =====&lt;br /&gt;
&lt;br /&gt;
There is a dedicated page on how to [[Compile_and_Install_Ubuntu | Compile the GRASS source code &amp;amp; install it in Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
===== Linux Mint =====&lt;br /&gt;
&lt;br /&gt;
The [[Compile_and_Install_Ubuntu | detailed compilation guide for Ubuntu]] may just work. However, here is a short guide for Mint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 21+&lt;br /&gt;
&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade -y&lt;br /&gt;
&lt;br /&gt;
# installation of required libraries and compile tools&lt;br /&gt;
# recommended to give Python3 precedence over Python2 (which is end-of-life since 2024)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&lt;br /&gt;
# install compiler tools and further dependencies (tested with Linux Mint 21)&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  libproj-dev proj-data proj-bin \&lt;br /&gt;
  libgeos-dev \&lt;br /&gt;
  libgdal-dev python3-gdal gdal-bin \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  python3 python3-dev python3-pip \&lt;br /&gt;
  python3-opengl \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libbz2-dev libzstd-dev libfreetype6-dev \&lt;br /&gt;
  libtiff5-dev libpnglite-dev libcairo2 libcairo2-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev libpq-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript wget -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GUI''' - update wxpython:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 21 only&lt;br /&gt;
sudo apt-get install wx3.0-headers libwxgtk3.0-gtk3-dev libwxbase3.0-dev libwxgtk3.0-gtk3-dev&lt;br /&gt;
pip3 install --user --upgrade typing-extensions&lt;br /&gt;
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 22+&lt;br /&gt;
sudo apt-get install wx3.2-headers libwxgtk3.2-dev libwxbase3.2-1 libgtk-3-dev python3-wxgtk4.0 \&lt;br /&gt;
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-24.04 wxPython&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next steps:&lt;br /&gt;
* create a subdirectory in your HOME tree for storing the GRASS source code (and later compilation)&lt;br /&gt;
* get source code, one of the two options:&lt;br /&gt;
** a) download [https://grass.osgeo.org/grass-stable/source/snapshot/ GRASS source code weekly snapshot] (e.g. take the &amp;quot;8.x.git snapshot&amp;quot;), or&lt;br /&gt;
*** unpack source code&lt;br /&gt;
** b) current source code from GitHub:&lt;br /&gt;
*** &amp;lt;code&amp;gt;git clone https://github.com/OSGeo/grass.git&amp;lt;/code&amp;gt;&lt;br /&gt;
* change into the source code directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# in the source code directory, &amp;quot;configure&amp;quot; the source code to prepare for compilation:&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-pdal \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-openmp&lt;br /&gt;
&lt;br /&gt;
# compile GRASS&lt;br /&gt;
make -j2&lt;br /&gt;
&lt;br /&gt;
# install compiled GRASS on system&lt;br /&gt;
sudo make install&lt;br /&gt;
&lt;br /&gt;
# use GRASS! Start on command line&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Enterprise Linux =====&lt;br /&gt;
&lt;br /&gt;
Enterprise Linux (EL) and derivatives (that is, Red Hat Enterprise Linux, CentOS and Scientific Linux) is a popular and robust platform for servers and computing-heavy workstations, and is therefore a good fit for GIS specific requirements.&lt;br /&gt;
&lt;br /&gt;
See: https://wiki.osgeo.org/wiki/Enterprise_Linux_GIS&lt;br /&gt;
&lt;br /&gt;
===== Scientific Linux =====&lt;br /&gt;
&lt;br /&gt;
See Centos&lt;br /&gt;
&lt;br /&gt;
===== CentOS =====&lt;br /&gt;
&lt;br /&gt;
You first need to add the EPEL repository for PROJ and GDAL, see [https://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F here]&lt;br /&gt;
&lt;br /&gt;
Preparation '''Centos 8''':&lt;br /&gt;
  dnf install epel-release&lt;br /&gt;
&lt;br /&gt;
  dnf install flex bison make zlib-devel gcc-c++ gettext \&lt;br /&gt;
              fftw-devel libtiff-devel sqlite-devel \&lt;br /&gt;
              proj proj-devel proj-datumgrid libxml2 \&lt;br /&gt;
              geos geos-devel git \&lt;br /&gt;
              netcdf netcdf-devel atlas-devel \&lt;br /&gt;
              blas-devel lapack-devel libpq-devel \&lt;br /&gt;
              python3-devel python3-numpy \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib \&lt;br /&gt;
              gdal gdal-libs gdal-python-tools python3-gdal gdal-devel \&lt;br /&gt;
              wxGTK3-devel mesa-libGL-devel mesa-libGLU-devel \&lt;br /&gt;
              libXmu-devel libX11-devel&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8 compilation and installation'''&lt;br /&gt;
&lt;br /&gt;
[https://grass.osgeo.org/grass84/source/snapshot/ Download source code] (e.g., --&amp;gt; &amp;quot;Download latest 8.4 code)&amp;quot; and configure GRASS 8 (suggestion: save this as script):&lt;br /&gt;
&lt;br /&gt;
 ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
  --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-netcdf \&lt;br /&gt;
  --without-ffmpeg \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-fftw&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
    make&lt;br /&gt;
or on a multicore system (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
&lt;br /&gt;
For a system wide installation, run as root user:&lt;br /&gt;
    make install&lt;br /&gt;
OR simply run it directly from the source code directory (substitute ARCH with i686 or x86_64):&lt;br /&gt;
&lt;br /&gt;
    bin.$ARCH/grass -gui&lt;br /&gt;
&lt;br /&gt;
In this case, for convenience, add it to the search path:&lt;br /&gt;
    mkdir $HOME/bin&lt;br /&gt;
    cd $HOME/bin&lt;br /&gt;
    # example:&lt;br /&gt;
    ln -s $HOME/software/grass84_release/bin.x86_64-pc-linux-gnu/grass .&lt;br /&gt;
&lt;br /&gt;
Now use it subsequently with&lt;br /&gt;
    grass -gui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation grass on a HPC system with '''Centos 7''' and no root privileges:'''&lt;br /&gt;
&lt;br /&gt;
This assumes that python3, fftw, proj, gdal and geos are available on the HPC system, either as modules or as installed software.&lt;br /&gt;
&lt;br /&gt;
Download and prepare some dependencies (freetypes and zstd)&lt;br /&gt;
    mkdir -p $HOME/grass/freetypes&lt;br /&gt;
    cd $HOME/grass/freetypes&lt;br /&gt;
    wget path/to/freetype-2.9.1.tar.gz&lt;br /&gt;
    tar -xf freetype-2.9.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
    mkdir $HOME/grass/zstd&lt;br /&gt;
    cd mkdir $HOME/grass/zstd&lt;br /&gt;
    wget path/to/v1.4.4/zstd-1.4.4.tar.gz&lt;br /&gt;
    tar -xf zstd-1.4.4.tar.gz&lt;br /&gt;
    make install PREFIX=./&lt;br /&gt;
&lt;br /&gt;
Add the ZSTD path to your LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
    tee -a $HOME/.bashrc &amp;gt; /dev/null &amp;lt;&amp;lt; EOT&lt;br /&gt;
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/grass/zstd/zstd-1.4.4/lib&lt;br /&gt;
    EOT&lt;br /&gt;
&lt;br /&gt;
The configure command could look like this&lt;br /&gt;
    ./configure \&lt;br /&gt;
        -prefix=$HOME/grass \&lt;br /&gt;
        --enable-64bit --with-fftw-includes=/path/to/fftw/include/ \&lt;br /&gt;
        --with-fftw-libs=/path/to/fftw/lib/ \&lt;br /&gt;
        --with-freetype-includes=$HOME/grass/freetypes/freetype-2.9.1/include/ \&lt;br /&gt;
        --with-netcdf --with-geos --with-blas --with-lapack --with-postgres \&lt;br /&gt;
        --with-zstd-includes=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-zstd-libs=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-gdal=/path/to/gdal-config  # This could be the path to a gdal version compiled from source&lt;br /&gt;
&lt;br /&gt;
Finally as usual:&lt;br /&gt;
    make; make install&lt;br /&gt;
    &lt;br /&gt;
    grass&lt;br /&gt;
&lt;br /&gt;
===== Gentoo =====&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
See also https://packages.gentoo.org/package/sci-geosciences/grass&lt;br /&gt;
&lt;br /&gt;
===== Funtoo =====&lt;br /&gt;
&lt;br /&gt;
{{MovedToTrac|FuntooLinux}}&lt;br /&gt;
&lt;br /&gt;
===== Fedora =====&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Fedora ======&lt;br /&gt;
&lt;br /&gt;
'''Preparation''' for the compilation of GRASS 8+ source code (F36+):&lt;br /&gt;
&lt;br /&gt;
  dnf install gcc gcc-c++ bison flex ncurses-devel gettext proj-devel \&lt;br /&gt;
              gdal gdal-devel sqlite-devel xml2 mesa-libGL-devel cairo-devel \&lt;br /&gt;
              fftw-devel mesa-libGLU-devel libXmu-devel libX11-devel geos geos-devel \&lt;br /&gt;
              libtiff-devel python3-devel numpy wxGTK-devel gawk git \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib-wx doxygen python3-sphinx \&lt;br /&gt;
              libzstd-devel libzstd python3-six python3-numpy python3-wxpython4 \&lt;br /&gt;
              proj-data PDAL-devel PDAL-libs&lt;br /&gt;
&lt;br /&gt;
  # optionally also:  netcdf-devel postgresql-devel &lt;br /&gt;
  #                   atlas-devel lapack-devel lapack-devel &lt;br /&gt;
  #                   laszip laszip-devel&lt;br /&gt;
  #                   proj-data-at proj-data-au proj-data-be ...&lt;br /&gt;
&lt;br /&gt;
''Note 1: the optional ffmpeg-devel comes from the rpmfusion-free repository ([https://rpmfusion.org/Configuration/ configuration]).''&lt;br /&gt;
&lt;br /&gt;
'''Download''' and unpack the source code:&lt;br /&gt;
* GRASS 8: [https://grass.osgeo.org/grass84/source/snapshot/ weekly snapshot] - [https://github.com/OSGeo/grass/releases GitHub repository]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configure''': This is an example how to configure the source code on a Fedora system:&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --with-cxx \&lt;br /&gt;
   --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
   --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
   --with-geos \&lt;br /&gt;
   --with-pdal \&lt;br /&gt;
   --with-sqlite \&lt;br /&gt;
   --with-nls \&lt;br /&gt;
   --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
   --with-fftw \&lt;br /&gt;
   --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --enable-largefile \&lt;br /&gt;
   --without-odbc&lt;br /&gt;
&lt;br /&gt;
''Extra 1:'' If you also want '''FFMPEG support''' - it requires 'dnf install fftw-devel' from the rpmfusion-free repository. Then add to the configuration lines above:&lt;br /&gt;
&lt;br /&gt;
     --with-ffmpeg --with-ffmpeg-includes=&amp;quot;/usr/include/ffmpeg /usr/include/ffmpeg/libav* /usr/include/ffmpeg/libpostproc /usr/include/ffmpeg/libswscale&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
''Extra 2:'' For '''LAPACK/BLAS support''' (addons i.spec.unmix, v.kriging etc), install &amp;quot;dnf install lapack lapack-devel blas blas-devel atlas atlas-devel&amp;quot;. Then add to the configuration lines above:&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
&lt;br /&gt;
''Extra 3:'' For '''ZSTD support''' (Zstandard compression algorithm), first install &amp;quot;dnf install libzstd libzstd-devel zstd&amp;quot;. After installing the zstd related packages, add to the configuration lines above:&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
&lt;br /&gt;
Finally '''compile''' the configured source code:&lt;br /&gt;
    make&lt;br /&gt;
   or on multicore (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
   and&lt;br /&gt;
    make install # requires root permissions unless you become owner of /usr/local/&lt;br /&gt;
&lt;br /&gt;
Then use GRASS 8 and enjoy!&lt;br /&gt;
&lt;br /&gt;
   grass --version&lt;br /&gt;
&lt;br /&gt;
===== openSUSE =====&lt;br /&gt;
&lt;br /&gt;
To build GRASS on openSUSE:&lt;br /&gt;
&lt;br /&gt;
''Application:Geo'' repo to be added (see [https://software.opensuse.org//download.html?project=Application%3AGeo&amp;amp;package=gdal Install package Application:Geo]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# example for Leap 42 version:&lt;br /&gt;
sudo zypper addrepo https://download.opensuse.org/repositories/Application:Geo/openSUSE_Leap_42.3/Application:Geo.repo&lt;br /&gt;
sudo zypper refresh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RPM packages to be installed:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo zypper install bison flex freetype2-devel fftw3-devel gcc-c++ \&lt;br /&gt;
   libgdal-devel libgeos-devel libjpeg-devel libpng-devel libtiff-devel \&lt;br /&gt;
   man proj libproj-devel readline-devel netcdf-devel ncurses-devel \&lt;br /&gt;
   mysql-devel postgresql-devel sqlite-devel unixODBC-devel \&lt;br /&gt;
   tcl-devel tk-devel xorg-x11-Mesa-devel libXmu-devel \&lt;br /&gt;
   python-numpy python-dateutil python-devel python-opengl \&lt;br /&gt;
   python-wxWidgets python-xml python-dateutil wxWidgets-devel \&lt;br /&gt;
   zlib-devel doxygen python-sphinx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source code configuration:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 ./configure \&lt;br /&gt;
 	--enable-largefile \&lt;br /&gt;
	--with-proj-share=/usr/share/proj \&lt;br /&gt;
	--with-cxx \&lt;br /&gt;
	--with-lapack=yes \&lt;br /&gt;
	--with-motif \&lt;br /&gt;
	--with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
	--with-postgres --with-postgres-includes=/usr/include/pgsql \&lt;br /&gt;
	--with-mysql --with-mysql-includes=/usr/include/mysql \&lt;br /&gt;
	--with-fftw \&lt;br /&gt;
	--with-readline \&lt;br /&gt;
	--with-netcdf \&lt;br /&gt;
	--with-geos \&lt;br /&gt;
	--with-nls \&lt;br /&gt;
	--with-sqlite \&lt;br /&gt;
	--with-freetype \&lt;br /&gt;
	--with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
	--with-wxwidgets \&lt;br /&gt;
	--with-odbc \&lt;br /&gt;
	--with-python&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile with &amp;quot;make [-j2]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== RPM SPEC files =====&lt;br /&gt;
* [https://build.opensuse.org/package/show?package=grass&amp;amp;project=Application%3AGeo OpenSuSe]&lt;br /&gt;
* [https://pkgs.fedoraproject.org/cgit/rpms/grass.git/tree/grass.spec Fedora]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==== macOS ====&lt;br /&gt;
&lt;br /&gt;
Compiling GRASS for macOS is not fundamentally different from for other *nix systems. It is on the contrary quite similar, but what differ is the lack of a default package management system for software GRASS depends on. This leaves the mac user to either: (1) compile the dependencies one-by-one; (2) compiling with one of the third-party package management systems avaliable; or (4) a combination thereof.&lt;br /&gt;
&lt;br /&gt;
If you are interested in installing a precompiled version, please check out the [https://grass.osgeo.org/download/software/mac-osx/ official download site].&lt;br /&gt;
&lt;br /&gt;
To date, maybe the easiest way to compile for Mac is by using [https://github.com/nilason/grass-conda GRASS app build script] which is based on the instructions below for building using Anaconda. It will install dependencies, package and install an app bundle with just a command in Terminal.&lt;br /&gt;
&lt;br /&gt;
===== Compilation and installation =====&lt;br /&gt;
&lt;br /&gt;
For more up-to-date instructions please read:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/nilason/grass-conda Compiling on macOS using Conda] (Intel / Apple silicon based machine M1)&lt;br /&gt;
* [[Compiling on macOS using Anaconda]]&lt;br /&gt;
* [[Compiling on macOS using Homebrew]]&lt;br /&gt;
* [[Compiling on macOS using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
===== Legacy instructions =====&lt;br /&gt;
&lt;br /&gt;
The following compilation and installation instructions are rather outdated as a whole. They do, however, contain parts and snippets that still may be very instructive and useful.&lt;br /&gt;
&lt;br /&gt;
* [[Compiling on MacOSX]]&lt;br /&gt;
* [[Compiling on MacOSX using Fink]]&lt;br /&gt;
* [https://web.archive.org/web/20180718005252/https://www.kyngchaos.com/software/frameworks#build_scripts build scripts for dependencies]&lt;br /&gt;
&lt;br /&gt;
Troubleshooting:&lt;br /&gt;
* solving errors at starting GRASS: [[MacOSX GRASS errors]]&lt;br /&gt;
&lt;br /&gt;
==== FreeBSD / NetBSD ====&lt;br /&gt;
&lt;br /&gt;
The recommended compiler tools are GCC, GNU make, GNU coreutils (for install), and flex. All are available through the respective package managing tools (pkg_add for FreeBSD and pkgin install for NetBSD) and for recent *BSD versions most likely installed by default.&lt;br /&gt;
&lt;br /&gt;
GRASS 8 should compile on FreeBSD and NetBSD.&lt;br /&gt;
&lt;br /&gt;
It is highly recommended to install GDAL/OGR and PROJ first. These libraries and tools are available as [https://www.freebsd.org/ports/ ports for FreeBSD] and [https://www.pkgsrc.org/ packages for NetBSD].&lt;br /&gt;
&lt;br /&gt;
Optional functionality is listed with ''./configure --help'', and related libraries and tools might need to be installed first.&lt;br /&gt;
&lt;br /&gt;
You then may need to edit include/Make/Platform.make and set&lt;br /&gt;
 ICONVLIB            = -liconv&lt;br /&gt;
&lt;br /&gt;
==== AIX ====&lt;br /&gt;
&lt;br /&gt;
A recent [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81) and GNU coreutils are required. These are available with the [https://www-03.ibm.com/systems/power/software/aix/linux/toolbox/download.html IBM AIX toolbox] or through third-party AIX software repositories, e.g. [https://www.bullfreeware.com/ bullfreeware] and [https://www.perzl.org/aix/ perzl.org]. Note that 'make' does not work, only 'gmake' works. &lt;br /&gt;
&lt;br /&gt;
General instructions to compile on AIX are e.g. [https://www.perzl.org/aix/index.php?n=Main.Instructions here]&lt;br /&gt;
&lt;br /&gt;
On AIX, compilation results by default in 32 bit applications and static libraries. The [https://developer.ibm.com/components/aix/ IBM documentation] explains how to build 64 bit applications and shared libraries with GCC.&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the IBM xlc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 5.x&lt;br /&gt;
&lt;br /&gt;
export LIBPATH=/opt/freeware/lib64:/opt/freeware/lib&lt;br /&gt;
# make 'ar' happy&lt;br /&gt;
export OBJECT_MODE=64&lt;br /&gt;
&lt;br /&gt;
PREFIX=$HOME/private/bin&lt;br /&gt;
./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --disable-shared \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the GNU gcc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* if needed, [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* if needed (the name is often 'gmake' and not 'make') [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked for AIX 7.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 7.x&lt;br /&gt;
export CC=&amp;quot;gcc&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;g++&amp;quot;&lt;br /&gt;
PREFIX=$HOME/bin&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;-Wl,-bsvr4,-R,/opt/freeware/lib -L/opt/freeware/lib&amp;quot; CPPFLAGS=&amp;quot;-I/opt/freeware/include&amp;quot; ./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --enable-shared \&lt;br /&gt;
  --with-includes=/opt/freeware/include --with-libs=/opt/freeware/lib \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-gdal=$PREFIX/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib --with-sqlite-includes=$PREFIX/include \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-opengl=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MS-Windows ====&lt;br /&gt;
&lt;br /&gt;
See also [[WinGRASS Current Status]] for latest updates.&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/native =====&lt;br /&gt;
&lt;br /&gt;
GRASS on Windows using a standalone installer. It is still MinGW based (we are going to move this to CMake in 2024+).&lt;br /&gt;
&lt;br /&gt;
Instructions to compile from source code:&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/CompileOnWindows GRASS Windows Native Binary Building Guide]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/OSGeo4W =====&lt;br /&gt;
&lt;br /&gt;
OSGeo4W is an installer for a broad set of open source geospatial software packages including GRASS as well as many other packages (QGIS, GDAL/OGR, and more).&lt;br /&gt;
&lt;br /&gt;
* See [https://trac.osgeo.org/osgeo4w/ OSGeo4W]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/Cygwin =====&lt;br /&gt;
&lt;br /&gt;
* See the [[Cygwin]] wiki pages&lt;br /&gt;
&lt;br /&gt;
=== Common problems and solutions ===&lt;br /&gt;
&lt;br /&gt;
During compilation, error can occur if certain packages are not installed. Here a list of problems with solution:&lt;br /&gt;
&lt;br /&gt;
* error: X11/Xlib.h: No such file or directory&lt;br /&gt;
** this suggests that you don't have the X headers installed&lt;br /&gt;
** Solution: Install the libx11-dev package&lt;br /&gt;
&lt;br /&gt;
* error:  g.list: error while loading shared libraries: libgdal1.6.0.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
** this error appears in the shell right after the user clicks GUI's &amp;quot;Start GRASS&amp;quot; button. The GUI shows an error about geographic extent and gets closed afterwards.&lt;br /&gt;
** It happens when you launch bin.i686 executable on 64bit system. Be careful and choose the right architecture.&lt;br /&gt;
&lt;br /&gt;
* error: lib/python/ctypes&lt;br /&gt;
** This error appears during the compilation: &amp;lt;code&amp;gt;free(): invalid pointer Aborted (core dumped)&amp;lt;/code&amp;gt;&lt;br /&gt;
** It happens when you have multiple &amp;lt;code&amp;gt;libproj&amp;lt;/code&amp;gt; versions on your system (check it with command &amp;lt;code&amp;gt;ldd PATH_TO_GRASS_INSTALL/lib/libgrass_gproj.so | grep proj&amp;lt;/code&amp;gt; - when this is not your problem, you should obtain exactly one result)&lt;br /&gt;
** Solution: Try to reinstall &amp;lt;code&amp;gt;libproj-dev&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;proj-data&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Static compilation ===&lt;br /&gt;
&lt;br /&gt;
In order to get static rather than dynamically linked binaries, configure like this:&lt;br /&gt;
&lt;br /&gt;
  ./configure --disable-shared --enable-static&lt;br /&gt;
&lt;br /&gt;
This will however break the wxGUI and GRASS 8 completely because &amp;quot;ctypes&amp;quot; wants to link against shared libs, or there is something in the static libs that &amp;quot;ctypes&amp;quot; does not like.&lt;br /&gt;
&lt;br /&gt;
=== Optimization ===&lt;br /&gt;
&lt;br /&gt;
GCC and other compilers support [https://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/Optimize-Options.html#Optimize-Options optimization]&lt;br /&gt;
&lt;br /&gt;
If you would like to set compiler optimisations, for a possibly faster binary, type (don't enter a &amp;quot;;&amp;quot; anywhere):&lt;br /&gt;
&lt;br /&gt;
        CFLAGS=-O ./configure&lt;br /&gt;
or,&lt;br /&gt;
        setenv CFLAGS -O&lt;br /&gt;
        ./configure&lt;br /&gt;
&lt;br /&gt;
whichever works on your shell. Use -O2 instead of -O if your compiler supports this (note: O is the letter, not zero). Using the &amp;quot;gcc&amp;quot; compiler, you can also specify processor specific flags (examples, please suggest better settings to us):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=athlon -O2&amp;quot; # AMD Athlon processor with code optimisations&lt;br /&gt;
  CFLAGS=&amp;quot;-march=amdfam10&amp;quot;  # AMD Phenom II X4 64bit processor with gcc &amp;gt;=4.3&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium&amp;quot;    # Intel Pentium processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium4&amp;quot;   # Intel Pentium4 processor&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -msse -msse2 -mfpmath=sse -minline-all-stringops&amp;quot; # Intel XEON 64bit processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mtune=nocona -m64 -minline-all-stringops&amp;quot;            # Intel Pentium 64bit processor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To find out optional CFLAGS for your platform, enter:&lt;br /&gt;
  gcc -dumpspecs&lt;br /&gt;
&lt;br /&gt;
See also: https://gcc.gnu.org/&lt;br /&gt;
&lt;br /&gt;
A real fast GRASS version (and small binaries) will be created with LDFLAGS set to &amp;quot;stripping&amp;quot; (but this disables debugging):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -mcpu=&amp;lt;cpu_see_above&amp;gt; -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure&lt;br /&gt;
&lt;br /&gt;
=== Configure options and their meanings ===&lt;br /&gt;
&lt;br /&gt;
For configure there are many options and some GRASS modules are built only if some options are set. Here are listed common configuration options with short explanation.&lt;br /&gt;
&lt;br /&gt;
* --prefix=/path - Sets path where GRASS will be installed. GRASS will reside in /path/grass-version.&lt;br /&gt;
* --enable-largefile - Enables large (&amp;gt;2Gb on 32bit systems) support. For current large file support status look at [[Large File Support]] page.&lt;br /&gt;
* --with-cxx - Enables compilation of C++ code. Required for r.terraflow module.&lt;br /&gt;
* --with-readline - Enables readline support. If readline is enabled, you can use its history/editing facilities when entering r.mapcalc expressions on stdin.&lt;br /&gt;
* --with-glw - Enables GLw support. The GLw library provides OpenGL &amp;quot;canvas&amp;quot; widgets for Athena and Motif. &lt;br /&gt;
 &lt;br /&gt;
 That switch is unnecessary for normal compilation. It's only&lt;br /&gt;
 required for r3.showdspf, which isn't normally built; if you &lt;br /&gt;
 want it, you have build it manually &lt;br /&gt;
 (e.g. &amp;quot;make -C raster3d/r3.showdspf&amp;quot;).&lt;br /&gt;
 As similar functionality is now provided by NVIZ, r3.showdspf&lt;br /&gt;
 is deprecated.&lt;br /&gt;
 r3.showdspf uses the Motif widget (so you also need a &lt;br /&gt;
 Motif library, e.g. Lesstif or OpenMotif).&lt;br /&gt;
 [https://grass.itc.it/pipermail/grassuser/2006-December/037475.html Glynn Clements at GRASS-user mailing list]&lt;br /&gt;
&lt;br /&gt;
=== Parallelized compilation on multi-core CPUs ===&lt;br /&gt;
&lt;br /&gt;
You can dramatically accelerate the compilation of the GRASS code with the -j flag of &amp;quot;make&amp;quot; if you have a multi-core CPU system. This determines the maximum number of jobs to have running at once, so cores don't have to sit idle waiting for jobs on other cores to complete. A good rule of thumb for this value is &amp;lt;tt&amp;gt;number_of_cores * 1.5&amp;lt;/tt&amp;gt;, but note that setting any higher than the actual number of cores will only affect the timing slightly. For example, on a dual-core processor:&lt;br /&gt;
  make -j 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CFLAGS=&amp;quot;-pipe&amp;quot; doesn't seem to help much --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GRASS-GDAL plugin ==&lt;br /&gt;
&lt;br /&gt;
* see [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Addons ==&lt;br /&gt;
&lt;br /&gt;
Please note that the installation of [https://grass.osgeo.org/grass-stable/manuals/addons/ GRASS addons] can be easily done with the {{cmd|g.extension}} manager. The compile instructions below are aiming at own development.&lt;br /&gt;
&lt;br /&gt;
=== Compiled modules ===&lt;br /&gt;
&lt;br /&gt;
This is the general way which works for C modules as well as scripts (Python or Shell/Bash modules) which has HTML documentation.&lt;br /&gt;
&lt;br /&gt;
'''Requirements:'''&lt;br /&gt;
&lt;br /&gt;
Either:&lt;br /&gt;
* a binary GRASS package, or&lt;br /&gt;
* source code which has been prepared with:&lt;br /&gt;
    ./configure [opionally flags]&lt;br /&gt;
    make libs&lt;br /&gt;
&lt;br /&gt;
Each of the [[GRASS_AddOns|addon]] modules should come with a Makefile. To compile it, just run:&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;/path/to/grass84&amp;lt;/tt&amp;gt; has to be absolute, not relative.&lt;br /&gt;
&lt;br /&gt;
If using Bash it may be useful to set that up as an alias:&lt;br /&gt;
    alias gmake64='make MODULE_TOPDIR=/path/to/grass84/'&lt;br /&gt;
&lt;br /&gt;
Installation (perhaps requires &amp;quot;sudo&amp;quot;):&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/ install&lt;br /&gt;
&lt;br /&gt;
Note: Compiled addons may require a re-compilation if you changed/updated your GRASS standard binaries.&lt;br /&gt;
&lt;br /&gt;
==== If binary comes with a -dev package ====&lt;br /&gt;
&lt;br /&gt;
''(work in progress, this text states how it eventually will be :)''&lt;br /&gt;
Nowadays one does not need to the source code, nor compiling GRASS by oneself to be able to add add-ons. On Debian, you can just install the grass-dev package and then run:&lt;br /&gt;
 make MODULE_TOPDIR=/usr/lib/grass84/ INST_DIR=/usr/lib/grass84/&lt;br /&gt;
&lt;br /&gt;
The grass-dev package essentially provides GRASS's &amp;lt;tt&amp;gt;include&amp;lt;/tt&amp;gt; header files and Make configuration files.&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
&lt;br /&gt;
If the addon module is a script, it is sufficient to copy it into the (GRASS binaries) path somewhere. Alternatively, install addons into a separate GRASS addons binaries/scripts directory which is easier to maintain. It avoids getting clobbered every time you reinstall GRASS. To use these separately stored scripts, set and export the GRASS_ADDON_PATH environment variable before starting GRASS and it will automatically be added to the module search path (see the {{cmd|variables}} help page). To simplify this, do for example:&lt;br /&gt;
&lt;br /&gt;
 # add in $HOME/.bashrc:&lt;br /&gt;
 GRASS_ADDON_PATH=/usr/local/grass/addons/&lt;br /&gt;
 export GRASS_ADDON_PATH&lt;br /&gt;
&lt;br /&gt;
Make sure that the script is executable, then just call it in GRASS typing the filename. Python scripts need to be called writing the extension as well, like:&lt;br /&gt;
 &lt;br /&gt;
 GRASS (nc_spm):~ &amp;gt; v.krige.py&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28816</id>
		<title>Compile and Install</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28816"/>
		<updated>2026-03-27T16:27:31Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Linux Mint 22: fix wxpython version, subversion -&amp;gt; git&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- {{MoveToTrac}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Disclaimer''': This page explains how to turn the GRASS source code into an installable binary package (&amp;quot;compilation&amp;quot;) for different operating systems. If you just want to get ready-to-use binaries, go [https://grass.osgeo.org/download/ here], otherwise read on...&lt;br /&gt;
&lt;br /&gt;
== How to do compilation and installation of GRASS? ==&lt;br /&gt;
&lt;br /&gt;
Here we explain the procedure to compile GRASS from GitHub, but it also applies to official GRASS 8 releases.&lt;br /&gt;
&lt;br /&gt;
''For installation of precompiled binary packages, see the main [[Installation Guide]].''&lt;br /&gt;
&lt;br /&gt;
For detailed information on compilation, please see the [https://github.com/OSGeo/grass/blob/main/INSTALL.md INSTALL] file in the source code.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
==== Extra libraries ====&lt;br /&gt;
GRASS needs at least two extra libraries: PROJ and GDAL/OGR. It is recommended to download them as ready-to-use packages for your software platform (Linux distribution, Windows, Mac...).&lt;br /&gt;
&lt;br /&gt;
Other libraries needed to run GRASS are listed on the [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md requirements page].&lt;br /&gt;
&lt;br /&gt;
To compile, you will also need the respective &amp;quot;-devel&amp;quot; packages; see below for details.&lt;br /&gt;
&lt;br /&gt;
==== Download GRASS source code ====&lt;br /&gt;
&lt;br /&gt;
First, [https://grass.osgeo.org/download/ download the GRASS source code].&lt;br /&gt;
&lt;br /&gt;
=== Generic Compilation and installation procedure ===&lt;br /&gt;
&lt;br /&gt;
* It is wise that compilation processes are carried out as a normal user: If you want to get the source code in a place where you do not have write permissions (e.g. in /usr/local/src/) just follow this:&lt;br /&gt;
      cd /usr/local/src/ &lt;br /&gt;
      su -c 'mkdir grass8'&lt;br /&gt;
      su -c 'chown yourlogin:yourgroup grass8'&lt;br /&gt;
&lt;br /&gt;
Otherwise if you have permissions just continue as a normal user:&lt;br /&gt;
      mkdir $HOME/src&lt;br /&gt;
      cd $HOME/src/&lt;br /&gt;
      git clone https://github.com/OSGeo/grass.git grass_main&lt;br /&gt;
&lt;br /&gt;
* run configure with parameters to adapt the compile process to your own system. To see what options can be passed to it, run:&lt;br /&gt;
 ./configure --help | less &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The minimum set of configure parameters is &lt;br /&gt;
      ./configure ### --&amp;gt;&lt;br /&gt;
It may (!) look like this:&lt;br /&gt;
 &lt;br /&gt;
      ./configure \&lt;br /&gt;
          --with-cxx \&lt;br /&gt;
          --with-sqlite \&lt;br /&gt;
          --with-python \&lt;br /&gt;
          --with-geos \&lt;br /&gt;
          --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
          --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
          --with-freetype \&lt;br /&gt;
          --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
          --with-proj --with-proj-share=/usr/share/proj&lt;br /&gt;
&lt;br /&gt;
You may have to explicitly state the path for certain packages (i.e., gdal). The Unix 'locate' command will come in handy for finding the path of the package you need (you may have to run locate as root ex: sudo locate gdal-config).&lt;br /&gt;
&lt;br /&gt;
Please note that the paths mentioned may widely vary due to the distribution used.&lt;br /&gt;
See [[Compile_and_Install#Platform_Specific_Notes|Platform Specific Notes]] below.&lt;br /&gt;
&lt;br /&gt;
Depending on your needs it may be a good idea to include debugging hooks.&lt;br /&gt;
: See [[GRASS_Debugging#Compile_Time_Setup]].&lt;br /&gt;
 CFLAGS=&amp;quot;-ggdb -Wall -Werror-implicit-function-declaration&amp;quot; ./configure ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the end of configuration process you should get report not much different from this:&lt;br /&gt;
&lt;br /&gt;
  GRASS is now configured for:  x86_64-pc-linux-gnu&lt;br /&gt;
  &lt;br /&gt;
  Source directory:           /home/user/software/grass_main&lt;br /&gt;
  Build directory:            /home/user/software/grass_main&lt;br /&gt;
  Installation directory:     ${prefix}/grass84&lt;br /&gt;
  Startup script in directory:${exec_prefix}/bin&lt;br /&gt;
  C compiler:                 gcc -O2 -march=native -std=gnu99 -fexceptions -fstack-protector -m64 -fdiagnostics-color &lt;br /&gt;
  C++ compiler:               c++ -g -Wall&lt;br /&gt;
  Building shared libraries:  yes&lt;br /&gt;
  OpenGL platform:            X11&lt;br /&gt;
  &lt;br /&gt;
  MacOSX application:         no&lt;br /&gt;
  MacOSX architectures:       &lt;br /&gt;
  MacOSX SDK:                 &lt;br /&gt;
  &lt;br /&gt;
  BLAS support:               yes&lt;br /&gt;
  BZIP2 support:              no&lt;br /&gt;
  C++ support:                yes&lt;br /&gt;
  Cairo support:              yes&lt;br /&gt;
  DWG support:                no&lt;br /&gt;
  FFTW support:               yes&lt;br /&gt;
  FreeType support:           yes&lt;br /&gt;
  GDAL support:               yes&lt;br /&gt;
  GEOS support:               yes&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
* Let's compile it (takes a little while...)!&lt;br /&gt;
      make -j2&lt;br /&gt;
* At the end, you should get report not much different from this:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Following modules are missing the 'description.html' file in src code:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 GRASS compilation log&lt;br /&gt;
 -------------------------&lt;br /&gt;
 Started compilation: Mon 19 Aug 2024 10:47:57 PM CEST&lt;br /&gt;
 --&lt;br /&gt;
 Errors in:&lt;br /&gt;
 No errors detected.&lt;br /&gt;
 --&lt;br /&gt;
 Finished compilation: Mon 19 Aug 2024 10:55:12 PM CEST&lt;br /&gt;
 (In case of errors please change into the directory with error and run 'make')&lt;br /&gt;
&lt;br /&gt;
* If there is any error, change directory to directory with error and run &amp;quot;make&amp;quot; again. Report occurring bug to GRASS mailing list&lt;br /&gt;
* Once the installation process is finished, you're ready to install GRASS system wide.&lt;br /&gt;
      su -c 'make install'&lt;br /&gt;
* enjoy GRASS: &lt;br /&gt;
      grass&lt;br /&gt;
&lt;br /&gt;
=== What else? ===&lt;br /&gt;
&lt;br /&gt;
If you want to use [https://www.qgis.org QGIS], then also compile the GRASS-GDAL/OGR plugin. This is also useful to access your GRASS-data&lt;br /&gt;
from other application using GDAL/OGR like [[R_statistics/ R]].&lt;br /&gt;
* [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]] (enables QGIS to read GRASS data directly)&lt;br /&gt;
&lt;br /&gt;
=== Compile and install GDAL-GRASS plugin ===&lt;br /&gt;
&lt;br /&gt;
* See [[Compile and install GDAL-GRASS plugin]]&lt;br /&gt;
&lt;br /&gt;
=== Platform Specific Notes ===&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Linux comes in various flavours, i.e. distributions.&lt;br /&gt;
&lt;br /&gt;
===== Distribution related packaging =====&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Archlinux: https://aur.archlinux.org/packages/grass&lt;br /&gt;
* Centos: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Debian: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
* EPEL: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Fedora: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Ubuntu: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
&lt;br /&gt;
===== Alpine Linux =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# install compiler tools and libraries&lt;br /&gt;
apk add build-base bzip2-dev cairo-dev fftw-dev freetype-dev g++ gcc gdal-dev geos-dev git \&lt;br /&gt;
        gnutls-dev libc6-compat libjpeg-turbo-dev libpng-dev make openjpeg-dev openblas-dev \&lt;br /&gt;
        postgresql-dev proj-dev python3-dev py3-numpy-dev sqlite-dev tar tiff-dev unzip vim \&lt;br /&gt;
        wget zip zstd-dev&lt;br /&gt;
&lt;br /&gt;
# install needed tools and libraries when using GRASS&lt;br /&gt;
apk add attr bash bison bzip2 cairo curl fftw flex freetype gdal gdal-tools gettext geos gnutls \&lt;br /&gt;
        jsoncpp libbz2 libexecinfo libjpeg-turbo libpng libunwind musl musl-utils ncurses openjpeg \&lt;br /&gt;
        openblas py3-numpy py3-pillow py3-six postgresql proj-datumgrid proj-util sqlite sqlite-libs \&lt;br /&gt;
        subversion tiff zstd zstd-libs&lt;br /&gt;
&lt;br /&gt;
# get source code&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://grass.osgeo.org/grass88/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# unpack&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# change into source code (update path name as needed)&lt;br /&gt;
cd grass-8.4.git_src_snapshot_2021_05_01/&lt;br /&gt;
&lt;br /&gt;
# minimal configuration&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --without-nls \&lt;br /&gt;
  --without-wxwidgets \&lt;br /&gt;
  --without-fftw \&lt;br /&gt;
  --without-cairo \&lt;br /&gt;
  --without-freetype \&lt;br /&gt;
  --without-opengl \&lt;br /&gt;
  --without-odbc&lt;br /&gt;
&lt;br /&gt;
# compilation&lt;br /&gt;
nice make -j2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Archlinux =====&lt;br /&gt;
You can install GRASS for Archlinux distribution based like Archlinux, Manjaro, EndeavourOS ...&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Easiest method : use a prebuilt package using arch4edu repository'''&amp;lt;/big&amp;gt;&lt;br /&gt;
''&amp;quot;Arch4edu is a community repository for Arch Linux and Arch Linux ARM that strives to provide the latest versions of most software used by college students.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Add Arch4edu repository. Follow instructions from official documentation:&lt;br /&gt;
&lt;br /&gt;
https://github.com/arch4edu/arch4edu/wiki/Add-arch4edu-to-your-Archlinux&lt;br /&gt;
&lt;br /&gt;
2. Refresh packages list with&lt;br /&gt;
 &lt;br /&gt;
 pacman -Syyu&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS package&lt;br /&gt;
&lt;br /&gt;
 pacman -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Advanced method : use AUR (Arch User Repository) package'''&amp;lt;/big&amp;gt;&lt;br /&gt;
Up-to-date links to Archlinux GRASS PKGBUILDs are on Arch User Repository. &lt;br /&gt;
PKGBUILD downloads and builds automatically sources from https://grass.osgeo.org/download/software/linux/.&lt;br /&gt;
&lt;br /&gt;
You can use an AUR helper like ''pamac'', ''yay'', among others ... More info through this link https://wiki.archlinux.org/title/AUR_helpers&lt;br /&gt;
&lt;br /&gt;
Exemple with ''yay'':&lt;br /&gt;
 yay -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Expert method : compile from source code'''&amp;lt;/big&amp;gt;&lt;br /&gt;
If you want to compile it yourself, you could follow steps below :&lt;br /&gt;
&lt;br /&gt;
''(As an alternative it is recommended to download PKGBUILD from AUR and then customize to your needs)''&lt;br /&gt;
&lt;br /&gt;
Install dependencies : &lt;br /&gt;
 pacman -S bzip2 cairo fftw fontconfig freetype2 gcc-libs gdal geos glibc glu libpng libtiff libx11 libgl netcdf pdal proj python-gdal python-numpy python-pillow python-wxpython readline zlib zstd&lt;br /&gt;
&lt;br /&gt;
Download and extract sources : https://grass.osgeo.org/download/software/sources/&lt;br /&gt;
&lt;br /&gt;
We can now start building GRASS&lt;br /&gt;
&lt;br /&gt;
 export PATH=~/usr/bin:$PATH &amp;amp;&amp;amp; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
    --with-wxwidgets \&lt;br /&gt;
    --with-readline \&lt;br /&gt;
    --with-pthread \&lt;br /&gt;
    --with-netcdf \&lt;br /&gt;
    --with-nls \&lt;br /&gt;
    --with-geos \&lt;br /&gt;
    --with-postgres \&lt;br /&gt;
    --with-pdal=/usr/include/pdal \&lt;br /&gt;
    --with-bzlib \&lt;br /&gt;
    --with-zstd&lt;br /&gt;
&lt;br /&gt;
Now let's compile and install it&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
It's done, you can enjoy GRASS in Arch, just type &amp;quot;grass&amp;quot; in the terminal to launch it or look for grass in your menu.&lt;br /&gt;
&lt;br /&gt;
===== Generic procedure for Debian-based distributions (Ubuntu, ...) =====&lt;br /&gt;
&lt;br /&gt;
WORK IN PROGRESS&lt;br /&gt;
&lt;br /&gt;
1. Install official GRASS package&lt;br /&gt;
&lt;br /&gt;
 sudo apt install grass grass-dev&lt;br /&gt;
&lt;br /&gt;
2. Enable source code download&lt;br /&gt;
&lt;br /&gt;
 # do backup first&lt;br /&gt;
 sudo cp /etc/apt/sources.list /etc/apt/sources.list.orig&lt;br /&gt;
 sudo sed -i '/^#\sdeb-src /s/^# *//' /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS dependencies&lt;br /&gt;
&lt;br /&gt;
 sudo apt build-dep grass&lt;br /&gt;
&lt;br /&gt;
4. Download GRASS source code&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/osgeo/grass&lt;br /&gt;
&lt;br /&gt;
5. Compile GRASS from source code&lt;br /&gt;
 &lt;br /&gt;
 cd grass&lt;br /&gt;
&lt;br /&gt;
Configure:&lt;br /&gt;
&lt;br /&gt;
 grass --config build | sh&lt;br /&gt;
&lt;br /&gt;
Optionally install missing dependencies (can happen when official GRASS package is not compatible with GRASS main), eg.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install libzstd-dev&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
 make -j2&lt;br /&gt;
&lt;br /&gt;
6. Run locally or install&lt;br /&gt;
&lt;br /&gt;
 ./bin.x86_64-pc-linux-gnu/grass --version&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
 sudo make install&lt;br /&gt;
 grass --version&lt;br /&gt;
&lt;br /&gt;
===== Debian =====&lt;br /&gt;
&lt;br /&gt;
* Official [https://wiki.debian.org/DebianGis DebianGIS] packaging control files, available on git server:&lt;br /&gt;
  https://salsa.debian.org/debian-gis-team/grass&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Debian 11 (bullseye) ======&lt;br /&gt;
&lt;br /&gt;
Install needed packages for GRASS 8.4:&lt;br /&gt;
  apt-get update &amp;amp;&amp;amp; \&lt;br /&gt;
  apt-get install bison debhelper-compat dh-python doxygen fakeroot flex graphviz \&lt;br /&gt;
    libblas-dev libbz2-dev libcairo2-dev libfftw3-dev libfreetype6-dev \&lt;br /&gt;
    libgdal-dev libgeos-dev libgl1-mesa-dev libglu1-mesa-dev libjpeg-dev liblapack-dev libmotif-dev \&lt;br /&gt;
    default-libmysqlclient-dev libncurses5-dev libnetcdf-dev libpng-dev libpq-dev \&lt;br /&gt;
    libproj-dev libreadline-dev libsqlite3-dev libtiff-dev libxmu-dev libzstd-dev \&lt;br /&gt;
    netcdf-bin pkg-config proj-bin python3 python3-dev python3-numpy python3-pil python3-ply \&lt;br /&gt;
    python3-six python3-wxgtk4.0 wget unixodbc-dev zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download and unpack GRASS 8.4 source code (or fetch from GitHub: https://github.com/OSGeo/grass):&lt;br /&gt;
&lt;br /&gt;
  wget https://grass.osgeo.org/grass84/source/grass-8.4-latest.tar.gz&lt;br /&gt;
  tar xvfz grass-8.4-latest.tar.gz&lt;br /&gt;
  cd grass-8.4.*&lt;br /&gt;
&lt;br /&gt;
Configuration:&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-Wall -Werror-implicit-function-declaration -fno-common -Wextra -Wunused&amp;quot; \&lt;br /&gt;
  CXXFLAGS=&amp;quot;-Wall&amp;quot;  \&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --prefix=/usr/local \&lt;br /&gt;
   --with-gdal --with-proj --with-proj-share=/usr/share \&lt;br /&gt;
   --with-glw --with-nls --with-readline \&lt;br /&gt;
   --with-cxx --enable-largefile \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --with-sqlite --with-cairo --with-python=/usr/bin/python-config \&lt;br /&gt;
   --with-wxwidgets --with-geos \&lt;br /&gt;
   --with-netcdf=/usr/bin/nc-config --with-odbc=yes \&lt;br /&gt;
   --with-openmp=yes --with-pthread=no&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
  make -j2&lt;br /&gt;
&lt;br /&gt;
Install:&lt;br /&gt;
&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
  grass --version&lt;br /&gt;
&lt;br /&gt;
===== Ubuntu =====&lt;br /&gt;
&lt;br /&gt;
There is a dedicated page on how to [[Compile_and_Install_Ubuntu | Compile the GRASS source code &amp;amp; install it in Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
===== Linux Mint =====&lt;br /&gt;
&lt;br /&gt;
The [[Compile_and_Install_Ubuntu | detailed compilation guide for Ubuntu]] may just work. However, here is a short guide for Mint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 21+&lt;br /&gt;
&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade -y&lt;br /&gt;
&lt;br /&gt;
# installation of required libraries and compile tools&lt;br /&gt;
# recommended to give Python3 precedence over Python2 (which is end-of-life since 2024)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&lt;br /&gt;
# install compiler tools and further dependencies (tested with Linux Mint 21)&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  libproj-dev proj-data proj-bin \&lt;br /&gt;
  libgeos-dev \&lt;br /&gt;
  libgdal-dev python3-gdal gdal-bin \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-opengl \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  libfftw3-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libbz2-dev libzstd-dev libfreetype6-dev \&lt;br /&gt;
  libtiff5-dev libpnglite-dev libcairo2 libcairo2-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev libpq-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript wget -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GUI''' - update wxpython:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 21 only&lt;br /&gt;
sudo apt-get install wx3.0-headers libwxgtk3.0-gtk3-dev libwxbase3.0-dev libwxgtk3.0-gtk3-dev&lt;br /&gt;
pip3 install --user --upgrade typing-extensions&lt;br /&gt;
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 22+&lt;br /&gt;
sudo apt-get install wx3.2-headers libwxgtk3.2-dev libwxbase3.2-1 libgtk-3-dev python3-wxgtk4.0 \&lt;br /&gt;
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-24.04 wxPython&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next steps:&lt;br /&gt;
* create a subdirectory in your HOME tree for storing the GRASS source code (and later compilation)&lt;br /&gt;
* get source code, one of the two options:&lt;br /&gt;
** a) download [https://grass.osgeo.org/grass-stable/source/snapshot/ GRASS source code weekly snapshot] (e.g. take the &amp;quot;8.x.git snapshot&amp;quot;), or&lt;br /&gt;
*** unpack source code&lt;br /&gt;
** b) current source code from GitHub:&lt;br /&gt;
*** &amp;lt;code&amp;gt;git clone https://github.com/OSGeo/grass.git&amp;lt;/code&amp;gt;&lt;br /&gt;
* change into the source code directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# in the source code directory, &amp;quot;configure&amp;quot; the source code to prepare for compilation:&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-pdal \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-openmp&lt;br /&gt;
&lt;br /&gt;
# compile GRASS&lt;br /&gt;
make -j2&lt;br /&gt;
&lt;br /&gt;
# install compiled GRASS on system&lt;br /&gt;
sudo make install&lt;br /&gt;
&lt;br /&gt;
# use GRASS! Start on command line&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Enterprise Linux =====&lt;br /&gt;
&lt;br /&gt;
Enterprise Linux (EL) and derivatives (that is, Red Hat Enterprise Linux, CentOS and Scientific Linux) is a popular and robust platform for servers and computing-heavy workstations, and is therefore a good fit for GIS specific requirements.&lt;br /&gt;
&lt;br /&gt;
See: https://wiki.osgeo.org/wiki/Enterprise_Linux_GIS&lt;br /&gt;
&lt;br /&gt;
===== Scientific Linux =====&lt;br /&gt;
&lt;br /&gt;
See Centos&lt;br /&gt;
&lt;br /&gt;
===== CentOS =====&lt;br /&gt;
&lt;br /&gt;
You first need to add the EPEL repository for PROJ and GDAL, see [https://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F here]&lt;br /&gt;
&lt;br /&gt;
Preparation '''Centos 8''':&lt;br /&gt;
  dnf install epel-release&lt;br /&gt;
&lt;br /&gt;
  dnf install flex bison make zlib-devel gcc-c++ gettext \&lt;br /&gt;
              fftw-devel libtiff-devel sqlite-devel \&lt;br /&gt;
              proj proj-devel proj-datumgrid libxml2 \&lt;br /&gt;
              geos geos-devel git \&lt;br /&gt;
              netcdf netcdf-devel atlas-devel \&lt;br /&gt;
              blas-devel lapack-devel libpq-devel \&lt;br /&gt;
              python3-devel python3-numpy \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib \&lt;br /&gt;
              gdal gdal-libs gdal-python-tools python3-gdal gdal-devel \&lt;br /&gt;
              wxGTK3-devel mesa-libGL-devel mesa-libGLU-devel \&lt;br /&gt;
              libXmu-devel libX11-devel&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8 compilation and installation'''&lt;br /&gt;
&lt;br /&gt;
[https://grass.osgeo.org/grass84/source/snapshot/ Download source code] (e.g., --&amp;gt; &amp;quot;Download latest 8.4 code)&amp;quot; and configure GRASS 8 (suggestion: save this as script):&lt;br /&gt;
&lt;br /&gt;
 ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
  --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-netcdf \&lt;br /&gt;
  --without-ffmpeg \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-fftw&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
    make&lt;br /&gt;
or on a multicore system (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
&lt;br /&gt;
For a system wide installation, run as root user:&lt;br /&gt;
    make install&lt;br /&gt;
OR simply run it directly from the source code directory (substitute ARCH with i686 or x86_64):&lt;br /&gt;
&lt;br /&gt;
    bin.$ARCH/grass -gui&lt;br /&gt;
&lt;br /&gt;
In this case, for convenience, add it to the search path:&lt;br /&gt;
    mkdir $HOME/bin&lt;br /&gt;
    cd $HOME/bin&lt;br /&gt;
    # example:&lt;br /&gt;
    ln -s $HOME/software/grass84_release/bin.x86_64-pc-linux-gnu/grass .&lt;br /&gt;
&lt;br /&gt;
Now use it subsequently with&lt;br /&gt;
    grass -gui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation grass on a HPC system with '''Centos 7''' and no root privileges:'''&lt;br /&gt;
&lt;br /&gt;
This assumes that python3, fftw, proj, gdal and geos are available on the HPC system, either as modules or as installed software.&lt;br /&gt;
&lt;br /&gt;
Download and prepare some dependencies (freetypes and zstd)&lt;br /&gt;
    mkdir -p $HOME/grass/freetypes&lt;br /&gt;
    cd $HOME/grass/freetypes&lt;br /&gt;
    wget path/to/freetype-2.9.1.tar.gz&lt;br /&gt;
    tar -xf freetype-2.9.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
    mkdir $HOME/grass/zstd&lt;br /&gt;
    cd mkdir $HOME/grass/zstd&lt;br /&gt;
    wget path/to/v1.4.4/zstd-1.4.4.tar.gz&lt;br /&gt;
    tar -xf zstd-1.4.4.tar.gz&lt;br /&gt;
    make install PREFIX=./&lt;br /&gt;
&lt;br /&gt;
Add the ZSTD path to your LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
    tee -a $HOME/.bashrc &amp;gt; /dev/null &amp;lt;&amp;lt; EOT&lt;br /&gt;
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/grass/zstd/zstd-1.4.4/lib&lt;br /&gt;
    EOT&lt;br /&gt;
&lt;br /&gt;
The configure command could look like this&lt;br /&gt;
    ./configure \&lt;br /&gt;
        -prefix=$HOME/grass \&lt;br /&gt;
        --enable-64bit --with-fftw-includes=/path/to/fftw/include/ \&lt;br /&gt;
        --with-fftw-libs=/path/to/fftw/lib/ \&lt;br /&gt;
        --with-freetype-includes=$HOME/grass/freetypes/freetype-2.9.1/include/ \&lt;br /&gt;
        --with-netcdf --with-geos --with-blas --with-lapack --with-postgres \&lt;br /&gt;
        --with-zstd-includes=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-zstd-libs=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-gdal=/path/to/gdal-config  # This could be the path to a gdal version compiled from source&lt;br /&gt;
&lt;br /&gt;
Finally as usual:&lt;br /&gt;
    make; make install&lt;br /&gt;
    &lt;br /&gt;
    grass&lt;br /&gt;
&lt;br /&gt;
===== Gentoo =====&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
See also https://packages.gentoo.org/package/sci-geosciences/grass&lt;br /&gt;
&lt;br /&gt;
===== Funtoo =====&lt;br /&gt;
&lt;br /&gt;
{{MovedToTrac|FuntooLinux}}&lt;br /&gt;
&lt;br /&gt;
===== Fedora =====&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Fedora ======&lt;br /&gt;
&lt;br /&gt;
'''Preparation''' for the compilation of GRASS 8+ source code (F36+):&lt;br /&gt;
&lt;br /&gt;
  dnf install gcc gcc-c++ bison flex ncurses-devel gettext proj-devel \&lt;br /&gt;
              gdal gdal-devel sqlite-devel xml2 mesa-libGL-devel cairo-devel \&lt;br /&gt;
              fftw-devel mesa-libGLU-devel libXmu-devel libX11-devel geos geos-devel \&lt;br /&gt;
              libtiff-devel python3-devel numpy wxGTK-devel gawk git \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib-wx doxygen python3-sphinx \&lt;br /&gt;
              libzstd-devel libzstd python3-six python3-numpy python3-wxpython4 \&lt;br /&gt;
              proj-data PDAL-devel PDAL-libs&lt;br /&gt;
&lt;br /&gt;
  # optionally also:  netcdf-devel postgresql-devel &lt;br /&gt;
  #                   atlas-devel lapack-devel lapack-devel &lt;br /&gt;
  #                   laszip laszip-devel&lt;br /&gt;
  #                   proj-data-at proj-data-au proj-data-be ...&lt;br /&gt;
&lt;br /&gt;
''Note 1: the optional ffmpeg-devel comes from the rpmfusion-free repository ([https://rpmfusion.org/Configuration/ configuration]).''&lt;br /&gt;
&lt;br /&gt;
'''Download''' and unpack the source code:&lt;br /&gt;
* GRASS 8: [https://grass.osgeo.org/grass84/source/snapshot/ weekly snapshot] - [https://github.com/OSGeo/grass/releases GitHub repository]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configure''': This is an example how to configure the source code on a Fedora system:&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --with-cxx \&lt;br /&gt;
   --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
   --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
   --with-geos \&lt;br /&gt;
   --with-pdal \&lt;br /&gt;
   --with-sqlite \&lt;br /&gt;
   --with-nls \&lt;br /&gt;
   --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
   --with-fftw \&lt;br /&gt;
   --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --enable-largefile \&lt;br /&gt;
   --without-odbc&lt;br /&gt;
&lt;br /&gt;
''Extra 1:'' If you also want '''FFMPEG support''' - it requires 'dnf install fftw-devel' from the rpmfusion-free repository. Then add to the configuration lines above:&lt;br /&gt;
&lt;br /&gt;
     --with-ffmpeg --with-ffmpeg-includes=&amp;quot;/usr/include/ffmpeg /usr/include/ffmpeg/libav* /usr/include/ffmpeg/libpostproc /usr/include/ffmpeg/libswscale&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
''Extra 2:'' For '''LAPACK/BLAS support''' (addons i.spec.unmix, v.kriging etc), install &amp;quot;dnf install lapack lapack-devel blas blas-devel atlas atlas-devel&amp;quot;. Then add to the configuration lines above:&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
&lt;br /&gt;
''Extra 3:'' For '''ZSTD support''' (Zstandard compression algorithm), first install &amp;quot;dnf install libzstd libzstd-devel zstd&amp;quot;. After installing the zstd related packages, add to the configuration lines above:&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
&lt;br /&gt;
Finally '''compile''' the configured source code:&lt;br /&gt;
    make&lt;br /&gt;
   or on multicore (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
   and&lt;br /&gt;
    make install # requires root permissions unless you become owner of /usr/local/&lt;br /&gt;
&lt;br /&gt;
Then use GRASS 8 and enjoy!&lt;br /&gt;
&lt;br /&gt;
   grass --version&lt;br /&gt;
&lt;br /&gt;
===== openSUSE =====&lt;br /&gt;
&lt;br /&gt;
To build GRASS on openSUSE:&lt;br /&gt;
&lt;br /&gt;
''Application:Geo'' repo to be added (see [https://software.opensuse.org//download.html?project=Application%3AGeo&amp;amp;package=gdal Install package Application:Geo]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# example for Leap 42 version:&lt;br /&gt;
sudo zypper addrepo https://download.opensuse.org/repositories/Application:Geo/openSUSE_Leap_42.3/Application:Geo.repo&lt;br /&gt;
sudo zypper refresh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RPM packages to be installed:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo zypper install bison flex freetype2-devel fftw3-devel gcc-c++ \&lt;br /&gt;
   libgdal-devel libgeos-devel libjpeg-devel libpng-devel libtiff-devel \&lt;br /&gt;
   man proj libproj-devel readline-devel netcdf-devel ncurses-devel \&lt;br /&gt;
   mysql-devel postgresql-devel sqlite-devel unixODBC-devel \&lt;br /&gt;
   tcl-devel tk-devel xorg-x11-Mesa-devel libXmu-devel \&lt;br /&gt;
   python-numpy python-dateutil python-devel python-opengl \&lt;br /&gt;
   python-wxWidgets python-xml python-dateutil wxWidgets-devel \&lt;br /&gt;
   zlib-devel doxygen python-sphinx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source code configuration:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 ./configure \&lt;br /&gt;
 	--enable-largefile \&lt;br /&gt;
	--with-proj-share=/usr/share/proj \&lt;br /&gt;
	--with-cxx \&lt;br /&gt;
	--with-lapack=yes \&lt;br /&gt;
	--with-motif \&lt;br /&gt;
	--with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
	--with-postgres --with-postgres-includes=/usr/include/pgsql \&lt;br /&gt;
	--with-mysql --with-mysql-includes=/usr/include/mysql \&lt;br /&gt;
	--with-fftw \&lt;br /&gt;
	--with-readline \&lt;br /&gt;
	--with-netcdf \&lt;br /&gt;
	--with-geos \&lt;br /&gt;
	--with-nls \&lt;br /&gt;
	--with-sqlite \&lt;br /&gt;
	--with-freetype \&lt;br /&gt;
	--with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
	--with-wxwidgets \&lt;br /&gt;
	--with-odbc \&lt;br /&gt;
	--with-python&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile with &amp;quot;make [-j2]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== RPM SPEC files =====&lt;br /&gt;
* [https://build.opensuse.org/package/show?package=grass&amp;amp;project=Application%3AGeo OpenSuSe]&lt;br /&gt;
* [https://pkgs.fedoraproject.org/cgit/rpms/grass.git/tree/grass.spec Fedora]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==== macOS ====&lt;br /&gt;
&lt;br /&gt;
Compiling GRASS for macOS is not fundamentally different from for other *nix systems. It is on the contrary quite similar, but what differ is the lack of a default package management system for software GRASS depends on. This leaves the mac user to either: (1) compile the dependencies one-by-one; (2) compiling with one of the third-party package management systems avaliable; or (4) a combination thereof.&lt;br /&gt;
&lt;br /&gt;
If you are interested in installing a precompiled version, please check out the [https://grass.osgeo.org/download/software/mac-osx/ official download site].&lt;br /&gt;
&lt;br /&gt;
To date, maybe the easiest way to compile for Mac is by using [https://github.com/nilason/grass-conda GRASS app build script] which is based on the instructions below for building using Anaconda. It will install dependencies, package and install an app bundle with just a command in Terminal.&lt;br /&gt;
&lt;br /&gt;
===== Compilation and installation =====&lt;br /&gt;
&lt;br /&gt;
For more up-to-date instructions please read:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/nilason/grass-conda Compiling on macOS using Conda] (Intel / Apple silicon based machine M1)&lt;br /&gt;
* [[Compiling on macOS using Anaconda]]&lt;br /&gt;
* [[Compiling on macOS using Homebrew]]&lt;br /&gt;
* [[Compiling on macOS using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
===== Legacy instructions =====&lt;br /&gt;
&lt;br /&gt;
The following compilation and installation instructions are rather outdated as a whole. They do, however, contain parts and snippets that still may be very instructive and useful.&lt;br /&gt;
&lt;br /&gt;
* [[Compiling on MacOSX]]&lt;br /&gt;
* [[Compiling on MacOSX using Fink]]&lt;br /&gt;
* [https://web.archive.org/web/20180718005252/https://www.kyngchaos.com/software/frameworks#build_scripts build scripts for dependencies]&lt;br /&gt;
&lt;br /&gt;
Troubleshooting:&lt;br /&gt;
* solving errors at starting GRASS: [[MacOSX GRASS errors]]&lt;br /&gt;
&lt;br /&gt;
==== FreeBSD / NetBSD ====&lt;br /&gt;
&lt;br /&gt;
The recommended compiler tools are GCC, GNU make, GNU coreutils (for install), and flex. All are available through the respective package managing tools (pkg_add for FreeBSD and pkgin install for NetBSD) and for recent *BSD versions most likely installed by default.&lt;br /&gt;
&lt;br /&gt;
GRASS 8 should compile on FreeBSD and NetBSD.&lt;br /&gt;
&lt;br /&gt;
It is highly recommended to install GDAL/OGR and PROJ first. These libraries and tools are available as [https://www.freebsd.org/ports/ ports for FreeBSD] and [https://www.pkgsrc.org/ packages for NetBSD].&lt;br /&gt;
&lt;br /&gt;
Optional functionality is listed with ''./configure --help'', and related libraries and tools might need to be installed first.&lt;br /&gt;
&lt;br /&gt;
You then may need to edit include/Make/Platform.make and set&lt;br /&gt;
 ICONVLIB            = -liconv&lt;br /&gt;
&lt;br /&gt;
==== AIX ====&lt;br /&gt;
&lt;br /&gt;
A recent [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81) and GNU coreutils are required. These are available with the [https://www-03.ibm.com/systems/power/software/aix/linux/toolbox/download.html IBM AIX toolbox] or through third-party AIX software repositories, e.g. [https://www.bullfreeware.com/ bullfreeware] and [https://www.perzl.org/aix/ perzl.org]. Note that 'make' does not work, only 'gmake' works. &lt;br /&gt;
&lt;br /&gt;
General instructions to compile on AIX are e.g. [https://www.perzl.org/aix/index.php?n=Main.Instructions here]&lt;br /&gt;
&lt;br /&gt;
On AIX, compilation results by default in 32 bit applications and static libraries. The [https://developer.ibm.com/components/aix/ IBM documentation] explains how to build 64 bit applications and shared libraries with GCC.&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the IBM xlc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 5.x&lt;br /&gt;
&lt;br /&gt;
export LIBPATH=/opt/freeware/lib64:/opt/freeware/lib&lt;br /&gt;
# make 'ar' happy&lt;br /&gt;
export OBJECT_MODE=64&lt;br /&gt;
&lt;br /&gt;
PREFIX=$HOME/private/bin&lt;br /&gt;
./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --disable-shared \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the GNU gcc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* if needed, [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* if needed (the name is often 'gmake' and not 'make') [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked for AIX 7.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 7.x&lt;br /&gt;
export CC=&amp;quot;gcc&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;g++&amp;quot;&lt;br /&gt;
PREFIX=$HOME/bin&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;-Wl,-bsvr4,-R,/opt/freeware/lib -L/opt/freeware/lib&amp;quot; CPPFLAGS=&amp;quot;-I/opt/freeware/include&amp;quot; ./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --enable-shared \&lt;br /&gt;
  --with-includes=/opt/freeware/include --with-libs=/opt/freeware/lib \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-gdal=$PREFIX/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib --with-sqlite-includes=$PREFIX/include \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-opengl=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MS-Windows ====&lt;br /&gt;
&lt;br /&gt;
See also [[WinGRASS Current Status]] for latest updates.&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/native =====&lt;br /&gt;
&lt;br /&gt;
GRASS on Windows using a standalone installer. It is still MinGW based (we are going to move this to CMake in 2024+).&lt;br /&gt;
&lt;br /&gt;
Instructions to compile from source code:&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/CompileOnWindows GRASS Windows Native Binary Building Guide]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/OSGeo4W =====&lt;br /&gt;
&lt;br /&gt;
OSGeo4W is an installer for a broad set of open source geospatial software packages including GRASS as well as many other packages (QGIS, GDAL/OGR, and more).&lt;br /&gt;
&lt;br /&gt;
* See [https://trac.osgeo.org/osgeo4w/ OSGeo4W]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/Cygwin =====&lt;br /&gt;
&lt;br /&gt;
* See the [[Cygwin]] wiki pages&lt;br /&gt;
&lt;br /&gt;
=== Common problems and solutions ===&lt;br /&gt;
&lt;br /&gt;
During compilation, error can occur if certain packages are not installed. Here a list of problems with solution:&lt;br /&gt;
&lt;br /&gt;
* error: X11/Xlib.h: No such file or directory&lt;br /&gt;
** this suggests that you don't have the X headers installed&lt;br /&gt;
** Solution: Install the libx11-dev package&lt;br /&gt;
&lt;br /&gt;
* error:  g.list: error while loading shared libraries: libgdal1.6.0.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
** this error appears in the shell right after the user clicks GUI's &amp;quot;Start GRASS&amp;quot; button. The GUI shows an error about geographic extent and gets closed afterwards.&lt;br /&gt;
** It happens when you launch bin.i686 executable on 64bit system. Be careful and choose the right architecture.&lt;br /&gt;
&lt;br /&gt;
* error: lib/python/ctypes&lt;br /&gt;
** This error appears during the compilation: &amp;lt;code&amp;gt;free(): invalid pointer Aborted (core dumped)&amp;lt;/code&amp;gt;&lt;br /&gt;
** It happens when you have multiple &amp;lt;code&amp;gt;libproj&amp;lt;/code&amp;gt; versions on your system (check it with command &amp;lt;code&amp;gt;ldd PATH_TO_GRASS_INSTALL/lib/libgrass_gproj.so | grep proj&amp;lt;/code&amp;gt; - when this is not your problem, you should obtain exactly one result)&lt;br /&gt;
** Solution: Try to reinstall &amp;lt;code&amp;gt;libproj-dev&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;proj-data&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Static compilation ===&lt;br /&gt;
&lt;br /&gt;
In order to get static rather than dynamically linked binaries, configure like this:&lt;br /&gt;
&lt;br /&gt;
  ./configure --disable-shared --enable-static&lt;br /&gt;
&lt;br /&gt;
This will however break the wxGUI and GRASS 8 completely because &amp;quot;ctypes&amp;quot; wants to link against shared libs, or there is something in the static libs that &amp;quot;ctypes&amp;quot; does not like.&lt;br /&gt;
&lt;br /&gt;
=== Optimization ===&lt;br /&gt;
&lt;br /&gt;
GCC and other compilers support [https://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/Optimize-Options.html#Optimize-Options optimization]&lt;br /&gt;
&lt;br /&gt;
If you would like to set compiler optimisations, for a possibly faster binary, type (don't enter a &amp;quot;;&amp;quot; anywhere):&lt;br /&gt;
&lt;br /&gt;
        CFLAGS=-O ./configure&lt;br /&gt;
or,&lt;br /&gt;
        setenv CFLAGS -O&lt;br /&gt;
        ./configure&lt;br /&gt;
&lt;br /&gt;
whichever works on your shell. Use -O2 instead of -O if your compiler supports this (note: O is the letter, not zero). Using the &amp;quot;gcc&amp;quot; compiler, you can also specify processor specific flags (examples, please suggest better settings to us):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=athlon -O2&amp;quot; # AMD Athlon processor with code optimisations&lt;br /&gt;
  CFLAGS=&amp;quot;-march=amdfam10&amp;quot;  # AMD Phenom II X4 64bit processor with gcc &amp;gt;=4.3&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium&amp;quot;    # Intel Pentium processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium4&amp;quot;   # Intel Pentium4 processor&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -msse -msse2 -mfpmath=sse -minline-all-stringops&amp;quot; # Intel XEON 64bit processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mtune=nocona -m64 -minline-all-stringops&amp;quot;            # Intel Pentium 64bit processor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To find out optional CFLAGS for your platform, enter:&lt;br /&gt;
  gcc -dumpspecs&lt;br /&gt;
&lt;br /&gt;
See also: https://gcc.gnu.org/&lt;br /&gt;
&lt;br /&gt;
A real fast GRASS version (and small binaries) will be created with LDFLAGS set to &amp;quot;stripping&amp;quot; (but this disables debugging):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -mcpu=&amp;lt;cpu_see_above&amp;gt; -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure&lt;br /&gt;
&lt;br /&gt;
=== Configure options and their meanings ===&lt;br /&gt;
&lt;br /&gt;
For configure there are many options and some GRASS modules are built only if some options are set. Here are listed common configuration options with short explanation.&lt;br /&gt;
&lt;br /&gt;
* --prefix=/path - Sets path where GRASS will be installed. GRASS will reside in /path/grass-version.&lt;br /&gt;
* --enable-largefile - Enables large (&amp;gt;2Gb on 32bit systems) support. For current large file support status look at [[Large File Support]] page.&lt;br /&gt;
* --with-cxx - Enables compilation of C++ code. Required for r.terraflow module.&lt;br /&gt;
* --with-readline - Enables readline support. If readline is enabled, you can use its history/editing facilities when entering r.mapcalc expressions on stdin.&lt;br /&gt;
* --with-glw - Enables GLw support. The GLw library provides OpenGL &amp;quot;canvas&amp;quot; widgets for Athena and Motif. &lt;br /&gt;
 &lt;br /&gt;
 That switch is unnecessary for normal compilation. It's only&lt;br /&gt;
 required for r3.showdspf, which isn't normally built; if you &lt;br /&gt;
 want it, you have build it manually &lt;br /&gt;
 (e.g. &amp;quot;make -C raster3d/r3.showdspf&amp;quot;).&lt;br /&gt;
 As similar functionality is now provided by NVIZ, r3.showdspf&lt;br /&gt;
 is deprecated.&lt;br /&gt;
 r3.showdspf uses the Motif widget (so you also need a &lt;br /&gt;
 Motif library, e.g. Lesstif or OpenMotif).&lt;br /&gt;
 [https://grass.itc.it/pipermail/grassuser/2006-December/037475.html Glynn Clements at GRASS-user mailing list]&lt;br /&gt;
&lt;br /&gt;
=== Parallelized compilation on multi-core CPUs ===&lt;br /&gt;
&lt;br /&gt;
You can dramatically accelerate the compilation of the GRASS code with the -j flag of &amp;quot;make&amp;quot; if you have a multi-core CPU system. This determines the maximum number of jobs to have running at once, so cores don't have to sit idle waiting for jobs on other cores to complete. A good rule of thumb for this value is &amp;lt;tt&amp;gt;number_of_cores * 1.5&amp;lt;/tt&amp;gt;, but note that setting any higher than the actual number of cores will only affect the timing slightly. For example, on a dual-core processor:&lt;br /&gt;
  make -j 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CFLAGS=&amp;quot;-pipe&amp;quot; doesn't seem to help much --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GRASS-GDAL plugin ==&lt;br /&gt;
&lt;br /&gt;
* see [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Addons ==&lt;br /&gt;
&lt;br /&gt;
Please note that the installation of [https://grass.osgeo.org/grass-stable/manuals/addons/ GRASS addons] can be easily done with the {{cmd|g.extension}} manager. The compile instructions below are aiming at own development.&lt;br /&gt;
&lt;br /&gt;
=== Compiled modules ===&lt;br /&gt;
&lt;br /&gt;
This is the general way which works for C modules as well as scripts (Python or Shell/Bash modules) which has HTML documentation.&lt;br /&gt;
&lt;br /&gt;
'''Requirements:'''&lt;br /&gt;
&lt;br /&gt;
Either:&lt;br /&gt;
* a binary GRASS package, or&lt;br /&gt;
* source code which has been prepared with:&lt;br /&gt;
    ./configure [opionally flags]&lt;br /&gt;
    make libs&lt;br /&gt;
&lt;br /&gt;
Each of the [[GRASS_AddOns|addon]] modules should come with a Makefile. To compile it, just run:&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;/path/to/grass84&amp;lt;/tt&amp;gt; has to be absolute, not relative.&lt;br /&gt;
&lt;br /&gt;
If using Bash it may be useful to set that up as an alias:&lt;br /&gt;
    alias gmake64='make MODULE_TOPDIR=/path/to/grass84/'&lt;br /&gt;
&lt;br /&gt;
Installation (perhaps requires &amp;quot;sudo&amp;quot;):&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/ install&lt;br /&gt;
&lt;br /&gt;
Note: Compiled addons may require a re-compilation if you changed/updated your GRASS standard binaries.&lt;br /&gt;
&lt;br /&gt;
==== If binary comes with a -dev package ====&lt;br /&gt;
&lt;br /&gt;
''(work in progress, this text states how it eventually will be :)''&lt;br /&gt;
Nowadays one does not need to the source code, nor compiling GRASS by oneself to be able to add add-ons. On Debian, you can just install the grass-dev package and then run:&lt;br /&gt;
 make MODULE_TOPDIR=/usr/lib/grass84/ INST_DIR=/usr/lib/grass84/&lt;br /&gt;
&lt;br /&gt;
The grass-dev package essentially provides GRASS's &amp;lt;tt&amp;gt;include&amp;lt;/tt&amp;gt; header files and Make configuration files.&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
&lt;br /&gt;
If the addon module is a script, it is sufficient to copy it into the (GRASS binaries) path somewhere. Alternatively, install addons into a separate GRASS addons binaries/scripts directory which is easier to maintain. It avoids getting clobbered every time you reinstall GRASS. To use these separately stored scripts, set and export the GRASS_ADDON_PATH environment variable before starting GRASS and it will automatically be added to the module search path (see the {{cmd|variables}} help page). To simplify this, do for example:&lt;br /&gt;
&lt;br /&gt;
 # add in $HOME/.bashrc:&lt;br /&gt;
 GRASS_ADDON_PATH=/usr/local/grass/addons/&lt;br /&gt;
 export GRASS_ADDON_PATH&lt;br /&gt;
&lt;br /&gt;
Make sure that the script is executable, then just call it in GRASS typing the filename. Python scripts need to be called writing the extension as well, like:&lt;br /&gt;
 &lt;br /&gt;
 GRASS (nc_spm):~ &amp;gt; v.krige.py&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28812</id>
		<title>Compile and Install Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28812"/>
		<updated>2026-03-10T09:49:20Z</updated>

		<summary type="html">&lt;p&gt;Neteler: svn -&amp;gt; git&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; id=&amp;quot;attention&amp;quot; style=&amp;quot;-moz-border-radius:30px; border: 1px double #35824B; margin-bottom: 1.5em; padding: 1em; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 150%; text-align: left;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#35824B&amp;quot;&amp;gt;'''Attention'''&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;span style=&amp;quot;color:#333333&amp;quot;&amp;gt;'''The following instructions describe the compilation and installation of GRASS GIS and its required dependencies completely from the source on Ubuntu based systems. Please, prefer pre-compiled packages over the manual way described below unless you know ''what'' and ''how'', you want to learn and help testing.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quick instructions ==&lt;br /&gt;
&lt;br /&gt;
These instructions should work fine on Ubuntu distributions:&lt;br /&gt;
&lt;br /&gt;
=== Install geospatial dependencies ===&lt;br /&gt;
&lt;br /&gt;
1. Install some dependencies (PROJ, GEOS, GDAL libraries) and the compiler tools &amp;lt;br /&amp;gt;&lt;br /&gt;
(note: you need Python 3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
# install PROJ&lt;br /&gt;
sudo apt install libproj-dev proj-data proj-bin unzip -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# optionally, install (selected) datum grid files&lt;br /&gt;
sudo apt-get install proj-data&lt;br /&gt;
&lt;br /&gt;
# install GEOS&lt;br /&gt;
sudo apt install libgeos-dev -y&lt;br /&gt;
&lt;br /&gt;
# install GDAL&lt;br /&gt;
sudo apt install libgdal-dev python3-gdal gdal-bin -y&lt;br /&gt;
&lt;br /&gt;
## install PDAL (optional) - apparently unavailable on Ubuntu&lt;br /&gt;
#sudo apt install libpdal-dev pdal -y&lt;br /&gt;
&lt;br /&gt;
# Python3 precedence over Python2 (which is end-of-life since 2019, so it should be the default anyway)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install compiler stuff and further dependencies.&lt;br /&gt;
Note: this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
&lt;br /&gt;
=== Install further compilation dependencies (Ubuntu 24.04) ===&lt;br /&gt;
&lt;br /&gt;
For Ubuntu 24.04, including wxPython packages for GUI support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For NVIZ on Ubuntu, to also have video support (optional):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  ffmpeg libavutil-dev \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source code download ===&lt;br /&gt;
Now we have all &amp;quot;ingredients&amp;quot; readily installed on our system.&lt;br /&gt;
&lt;br /&gt;
'''Source code download''':&lt;br /&gt;
&lt;br /&gt;
There a two ways of getting the source code: either use a) the weekly snapshot (cannot be updated, or b) the source code from the GitHub repository (you can update your local copy easily in future):&lt;br /&gt;
&lt;br /&gt;
'''a) Download of the weekly source code snapshot (not recommended):'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# download latest GRASS GIS 8.x stable release source code:&lt;br /&gt;
mkdir $HOME/src/&lt;br /&gt;
cd  $HOME/src/&lt;br /&gt;
wget https://grass.osgeo.org/grass84/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# Unpack source code package and remove tarball archive:&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz &lt;br /&gt;
&lt;br /&gt;
# rename source code directory (yes, with the questionmarks!)&lt;br /&gt;
mv grass-8.4.git_src_snapshot_20??_??_?? grass-8.4.latest&lt;br /&gt;
cd grass-8.4.latest/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''b) Download of the current development version from GitHub (adopt the path below accordingly)'''&lt;br /&gt;
&lt;br /&gt;
Note: to find the current version number (8_x), see https://github.com/OSGeo/grass/branches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install git&lt;br /&gt;
git clone https://github.com/OSGeo/grass.git grass-8.4.latest.git&lt;br /&gt;
cd grass-8.4.latest.git/&lt;br /&gt;
git checkout releasebranch_8_4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
Now we can '''compile''' the source code in order to generate the GRASS GIS binaries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;configure&amp;quot; source code for local machine (checks for CPU type etc):&lt;br /&gt;
MYCFLAGS='-O2 -fPIC -fno-common -fexceptions -std=gnu99 -fstack-protector -m64'&lt;br /&gt;
#MYCXXFLAGS=''&lt;br /&gt;
MYLDFLAGS='-Wl,--no-undefined -Wl,-z,now'&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;$MYLDFLAGS&amp;quot; CFLAGS=&amp;quot;$MYCFLAGS&amp;quot; CXXFLAGS=&amp;quot;$MYCXXFLAGS&amp;quot; ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --enable-largefile \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-wxwidgets \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
  --without-pdal \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-ffmpeg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now compile the source code (this will take some time as it generates binary code from the source code):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: the more CPUs you have, the higher the -j number may be set to&lt;br /&gt;
# here: build using 4 CPU cores&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Install resulting GRASS GIS binaries into /usr/local/:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start GRASS GIS in the terminal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Done &amp;amp; enjoy!'''&lt;br /&gt;
&lt;br /&gt;
== Hints ==&lt;br /&gt;
&lt;br /&gt;
* Usually, the installation of compiled code is done by using the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make&amp;lt;/source&amp;gt; tool. Alternatively, this can be done by using the ''checkinstall'' tool (i.e., &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo checkinstall&amp;lt;/source&amp;gt;  instead of  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo make install&amp;lt;/source&amp;gt;) which eases off removal of packages. If ''checkinstall'' fails to deliver, please note some related bugs: [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/78455 78455] and [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/599163 599163]. Useful information on using ''checkinstall'': [https://help.ubuntu.com/community/CompilingEasyHowTo Compiling things on Ubuntu the Easy Way].&lt;br /&gt;
&lt;br /&gt;
* In multi-core processors, the compilation performance can be boosted by using  ''-j''  switches (e.g. &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j2&amp;lt;/source&amp;gt;  or  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j3&amp;lt;/source&amp;gt;  or even &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j4&amp;lt;/source&amp;gt;) which specify the number of jobs (commands) to run simultaneously.&lt;br /&gt;
&lt;br /&gt;
== Pre-compiled packages and backports ==&lt;br /&gt;
&lt;br /&gt;
'''Pre-compiled packages and backports''' are available from [https://wiki.ubuntu.com/UbuntuGIS UbuntuGIS] via their [https://launchpad.net/~ubuntugis/+archive/ppa/ ppa.launchpad stable] and [https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable ppa.launchpad unstable] repositories. '''This is by far the simplest and fastest solution. Please prefer it over the manual way of compiling source code yourself as described below.'''&lt;br /&gt;
&lt;br /&gt;
Version overview:&lt;br /&gt;
* jammy2 8.4&lt;br /&gt;
* noble 8.3&lt;br /&gt;
* jammy (22.04): 8.3&lt;br /&gt;
* focal (20.04 LTS): 8.2&lt;br /&gt;
* bionic (18.04 LTS): 7.8&lt;br /&gt;
&lt;br /&gt;
a) Daily ready-to-install GRASS GIS builds of the stable release branch and master are available from ''ppa:grass/grass-devel'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-devel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Latest packaged stable version of GRASS GIS is available from ''ppa:grass/grass-stable'':&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ppa&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-stable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Current stable Ubuntu version ===&lt;br /&gt;
First, update the system from the repositories&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install ''SQLite'', ''git'' and ''dependencies'' for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN (some additional packages may be required in this case); the following action will also install various dependencies (listed in the command line as &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;...):&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  python python-dev \&lt;br /&gt;
  python-opengl \&lt;br /&gt;
  python-wxversion python-wxtools python-wxgtk3.2 \&lt;br /&gt;
  python-dateutil libgsl-dev python-numpy \&lt;br /&gt;
  wx3.2-headers wx-common libwxgtk3.2-dev \&lt;br /&gt;
  libwxbase3.2-dev   \&lt;br /&gt;
  libncurses5-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff5-dev libpnglite-dev \&lt;br /&gt;
  libcairo libcairo-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libreadline6 libreadline6-dev libfreetype6-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  resolvconf \&lt;br /&gt;
  libjasper-dev \&lt;br /&gt;
  git \&lt;br /&gt;
  libav-tools libavutil-dev ffmpeg2theora \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See the additional packages bellow and in other sections and install them. Note that some of them are [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md required], namely PROJ, GEOS and GDAL. If you don't have special requirements, it is usually enough just to install PROJ, GEOS and GDAL from repository (rather then compile them manually).&lt;br /&gt;
&lt;br /&gt;
* for mysql support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libmysqlclient-dev&amp;lt;/source&amp;gt; is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for netcdf support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;netcdf-bin&amp;lt;/source&amp;gt; and &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libnetcdf-dev&amp;lt;/source&amp;gt;  is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install netcdf-bin libnetcdf-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for {{AddonCmd|i.spec.unmix}} Addon support, install LAPACK and BLAS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libblas-dev liblapack-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a directory as a simple user where all source code is going to be stored -- in this example, a directory named &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local&amp;lt;/source&amp;gt; is created &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir /usr/local/src&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* take over directories ownerships ('''replace''' below the terms ''userid'' and ''groupid'' with a real &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;userid&amp;lt;/source&amp;gt;): &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown userid:groupid /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* similarly, grant &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;rwx&amp;lt;/source&amp;gt; (read-write-execute) permissions for our ''userid'' and ''groupid'' onto the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; directory: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chmod ug+rwx /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL ==&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libproj-dev proj-data proj-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/local/share/proj/&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/share/proj/&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# probably you also need to additionally install &amp;quot;libgeos-c1v5&amp;quot;&lt;br /&gt;
sudo apt-get install libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/local/bin/geos-config&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/bin/geos-config&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package (possibly without support for datumgrid):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libgdal-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For support of WMS in wxGUI install Python GDAL bindings and GDAL executables:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python-gdal gdal-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install also the required extra packages (note the message: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;)&lt;br /&gt;
* Look out for packages to be removed by this operation -- this is most likely caused by incompatible package versions. Fix these problems in advance using commands like the following: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install &amp;lt;package&amp;gt;=&amp;lt;required.version&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GRASS-GIS ===&lt;br /&gt;
&lt;br /&gt;
[[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]]&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL from GIS.lab PPA==&lt;br /&gt;
&lt;br /&gt;
Ivan Mincik has made all required packages available in his [https://launchpad.net/~imincik/+archive/ubuntu/gis PPA]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:imincik/gis&lt;br /&gt;
sudo apt-get install libproj-dev libgdal-dev python-gdal libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can either also install GRASS GIS from there or compile it yourself (see [[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]])&lt;br /&gt;
&lt;br /&gt;
== Compile from source ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
* within the directory &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src&amp;lt;/source&amp;gt; (create it if it does not exist) checkout &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; from its GitHub repository: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
https://github.com/OSGeo/PROJ/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get [http://download.osgeo.org/proj/proj-datumgrid-1.8.zip '''proj-datumgrid-1.8.zip'''] or related files from [https://trac.osgeo.org/proj proj' trac] and move it under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj/nad&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget http://download.osgeo.org/proj/proj-datumgrid-1.8.zip&lt;br /&gt;
mv proj-datumgrid-1.8.zip /usr/local/src/proj/nad&lt;br /&gt;
cd /usr/local/src/proj/nad&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* decompress it &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
unzip proj-datumgrid-1.8.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* go back to the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; directory &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/proj&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ensure that &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/lib&amp;lt;/source&amp;gt; is added to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; and afterwards run &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* finally, go back to the parent directory simply by instructing&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
* download '''geos-3.12.2.tar.bz2''' from [https://libgeos.org/ https://libgeos.org/] using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt; &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://download.osgeo.org/geos/geos-3.12.2.tar.bz2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to the &amp;quot;source-code&amp;quot; directory and decompress&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/&lt;br /&gt;
bunzip2 geos-3.12.2.tar.bz2&lt;br /&gt;
tar xvf  geos-3.12.2.tar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to geos directory  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd geos-3.12.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* do not forget to execute &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
'''Note''', GDAL must be compiled '''without''' GRASS support!&lt;br /&gt;
&lt;br /&gt;
* download the current stable version (see https://github.com/OSGeo/gdal/releases for latest version):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to compile GDAL:&lt;br /&gt;
https://gdal.org/development/building_from_source.html&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
Note the differences between different GRASS GIS version (branches) in download and cofiguration. Note also the changes required if you installed some of the dependencies from packages (rather then compiled them yourself).&lt;br /&gt;
&lt;br /&gt;
To fully understand the build process, read the  &amp;lt;code&amp;gt;INSTALL&amp;lt;/code&amp;gt; file, which is located in GRASS' source code root directory.&lt;br /&gt;
&lt;br /&gt;
''' Getting GRASS' source code '''&lt;br /&gt;
&lt;br /&gt;
Select from one of the GRASS GIS versions and download the source code:&lt;br /&gt;
&lt;br /&gt;
https://github.com/OSGeo/grass/releases/&lt;br /&gt;
&lt;br /&gt;
''' Configure, Compile and Install'''&lt;br /&gt;
&lt;br /&gt;
Enter the directory with the source code, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''GRASS GIS example configuration''' (which can/should be adjusted according to specific needs):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CFLAGS=&amp;quot;-O2 -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure \&lt;br /&gt;
--with-nls \&lt;br /&gt;
--with-cxx \&lt;br /&gt;
--with-proj-share=/usr/local/share/proj/ \&lt;br /&gt;
--with-geos=/usr/local/bin/geos-config \&lt;br /&gt;
--with-wxwidgets \&lt;br /&gt;
--with-cairo \&lt;br /&gt;
--with-opengl-libs=/usr/include/GL \&lt;br /&gt;
--with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
--with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
--with-sqlite=yes \&lt;br /&gt;
--with-mysql=yes --with-mysql-includes=&amp;quot;/usr/include/mysql&amp;quot; \&lt;br /&gt;
--with-odbc=no \&lt;br /&gt;
--with-pdal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Note''', the above configuration uses the &amp;lt;code&amp;gt;PROJ&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GEOS&amp;lt;/code&amp;gt; packages compiled from the source. In the case that pre-compiled versions from the repository are required, remove the above corresponding lines to use the &amp;quot;defaults&amp;quot;, i.e. (note the backslashe at the end of each line)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
--with-proj-share=/usr/share/proj \&lt;br /&gt;
--with-geos=/usr/bin/geos-config \&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo checkinstall  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For subsequent updates execute (not need for the first time):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is required to clean previous configuration and compilation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
git pull&lt;br /&gt;
./configure ... # (use the configure command above)&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL-GRASS-Plugin ===&lt;br /&gt;
&lt;br /&gt;
See: https://github.com/OSGeo/gdal-grass&lt;br /&gt;
&lt;br /&gt;
* get the plugin from [https://github.com/OSGeo/gdal-grass/releases GitHub]: &amp;quot;gdal-grass-X.Y.Z.tar.gz&amp;quot; using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# update version number accordingly!&lt;br /&gt;
wget https://github.com/OSGeo/gdal-grass/archive/refs/tags/1.0.2.tar.gz -O gdal-grass-1.0.2.tar.gz&lt;br /&gt;
tar xvzf gdal-grass-1.0.2.tar.gz&lt;br /&gt;
cd gdal-grass-1.0.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf.d/grass.conf&amp;lt;/source&amp;gt;   or add in   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; the GRASS library path: &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# GRASS GIS stable library path (adapt as needed)&lt;br /&gt;
/usr/local/src/releasebranch_8_4/lib&lt;br /&gt;
&lt;br /&gt;
# GRASS GIS development version library path (adapt as needed)&lt;br /&gt;
/usr/local/src/grass_master/lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* optionally, clean previous configurations/compilations&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make distclean&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure -- point to GRASS installation/binaries&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; ./configure \&lt;br /&gt;
 --prefix=/usr/local \&lt;br /&gt;
 --with-gdal=/usr/local/bin/gdal-config \&lt;br /&gt;
 --with-grass=/usr/local/grass/ \&lt;br /&gt;
 --with-autoload=&amp;quot;/usr/local/lib64/gdalplugins/&amp;quot; \&lt;br /&gt;
 --with-ld-shared=&amp;quot;g++ -shared&amp;quot;&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install using checkinstall&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make -j2  &amp;amp;&amp;amp;  sudo checkinstall&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Post compilation/installation control =&lt;br /&gt;
&lt;br /&gt;
* For a recommended quick-check read the [https://grass.osgeo.org/wiki/Compile_and_install_GRASS_and_QGIS_with_GDAL/OGR_Plugin#Troubleshooting Troubleshooting] section at [https://grass.osgeo.org/wiki/Compile_and_install_GDAL-GRASS_plugin Compile_and_install_GDAL-GRASS_plugin]&lt;br /&gt;
&lt;br /&gt;
* in case of errors in future compilation attempts, remember to remove program binaries and files created with the &amp;quot;configuration&amp;quot; from previous compilations with&lt;br /&gt;
 make distclean&lt;br /&gt;
&lt;br /&gt;
* another common mistake is compiling a module against some GRASS version and then try to run it through another GRASS version. The solution is to recompile the affected module or, in case there are multiple GRASS installations, set up properly LD_LIBRARY_PATH paths.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Removal of GRASS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get rid of a GRASS binaries installation, delete (update version numbers accordingly)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/grass&amp;lt;/source&amp;gt; (directory, binaries location)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/bin/grass&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/home/username/.grassrc8&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
&lt;br /&gt;
If wanted, delete also the complete source code:&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src/grass_release&amp;lt;/source&amp;gt; (directory, source code location)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To remove &amp;lt;code&amp;gt;grass&amp;lt;/code&amp;gt; (or any other package) which was installed by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;checkinstall&amp;lt;/source&amp;gt;, use &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dpkg&amp;lt;/source&amp;gt;, e.g.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dpkg -r grass # package name defined at installation is important&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Docker: https://grass.osgeo.org/download/docker/&lt;br /&gt;
* [[Ubuntu Packaging]]&lt;br /&gt;
* [[GRASS in Debian]]&lt;br /&gt;
&lt;br /&gt;
= Archived Notes =&lt;br /&gt;
&lt;br /&gt;
Notes that concern the configuration and compilation of GRASS GIS and its dependencies for older versions of Ubuntu-Linux.&lt;br /&gt;
&lt;br /&gt;
[[Category: Compilation]]&lt;br /&gt;
[[Category: Installation]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28811</id>
		<title>Compile and Install Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28811"/>
		<updated>2026-03-10T09:48:27Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Current stable Ubuntu version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; id=&amp;quot;attention&amp;quot; style=&amp;quot;-moz-border-radius:30px; border: 1px double #35824B; margin-bottom: 1.5em; padding: 1em; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 150%; text-align: left;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#35824B&amp;quot;&amp;gt;'''Attention'''&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;span style=&amp;quot;color:#333333&amp;quot;&amp;gt;'''The following instructions describe the compilation and installation of GRASS GIS and its required dependencies completely from the source on Ubuntu based systems. Please, prefer pre-compiled packages over the manual way described below unless you know ''what'' and ''how'', you want to learn and help testing.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quick instructions ==&lt;br /&gt;
&lt;br /&gt;
These instructions should work fine on Ubuntu distributions:&lt;br /&gt;
&lt;br /&gt;
=== Install geospatial dependencies ===&lt;br /&gt;
&lt;br /&gt;
1. Install some dependencies (PROJ, GEOS, GDAL libraries) and the compiler tools &amp;lt;br /&amp;gt;&lt;br /&gt;
(note: you need Python 3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
# install PROJ&lt;br /&gt;
sudo apt install libproj-dev proj-data proj-bin unzip -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# optionally, install (selected) datum grid files&lt;br /&gt;
sudo apt-get install proj-data&lt;br /&gt;
&lt;br /&gt;
# install GEOS&lt;br /&gt;
sudo apt install libgeos-dev -y&lt;br /&gt;
&lt;br /&gt;
# install GDAL&lt;br /&gt;
sudo apt install libgdal-dev python3-gdal gdal-bin -y&lt;br /&gt;
&lt;br /&gt;
## install PDAL (optional) - apparently unavailable on Ubuntu&lt;br /&gt;
#sudo apt install libpdal-dev pdal -y&lt;br /&gt;
&lt;br /&gt;
# Python3 precedence over Python2 (which is end-of-life since 2019, so it should be the default anyway)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install compiler stuff and further dependencies.&lt;br /&gt;
Note: this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
&lt;br /&gt;
=== Install further compilation dependencies (Ubuntu 24.04) ===&lt;br /&gt;
&lt;br /&gt;
For Ubuntu 24.04, including wxPython packages for GUI support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For NVIZ on Ubuntu, to also have video support (optional):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  ffmpeg libavutil-dev \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source code download ===&lt;br /&gt;
Now we have all &amp;quot;ingredients&amp;quot; readily installed on our system.&lt;br /&gt;
&lt;br /&gt;
'''Source code download''':&lt;br /&gt;
&lt;br /&gt;
There a two ways of getting the source code: either use a) the weekly snapshot (cannot be updated, or b) the source code from the GitHub repository (you can update your local copy easily in future):&lt;br /&gt;
&lt;br /&gt;
'''a) Download of the weekly source code snapshot (not recommended):'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# download latest GRASS GIS 8.x stable release source code:&lt;br /&gt;
mkdir $HOME/src/&lt;br /&gt;
cd  $HOME/src/&lt;br /&gt;
wget https://grass.osgeo.org/grass84/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# Unpack source code package and remove tarball archive:&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz &lt;br /&gt;
&lt;br /&gt;
# rename source code directory (yes, with the questionmarks!)&lt;br /&gt;
mv grass-8.4.git_src_snapshot_20??_??_?? grass-8.4.latest&lt;br /&gt;
cd grass-8.4.latest/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''b) Download of the current development version from GitHub (adopt the path below accordingly)'''&lt;br /&gt;
&lt;br /&gt;
Note: to find the current version number (8_x), see https://github.com/OSGeo/grass/branches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install git&lt;br /&gt;
git clone https://github.com/OSGeo/grass.git grass-8.4.latest.git&lt;br /&gt;
cd grass-8.4.latest.git/&lt;br /&gt;
git checkout releasebranch_8_4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
Now we can '''compile''' the source code in order to generate the GRASS GIS binaries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;configure&amp;quot; source code for local machine (checks for CPU type etc):&lt;br /&gt;
MYCFLAGS='-O2 -fPIC -fno-common -fexceptions -std=gnu99 -fstack-protector -m64'&lt;br /&gt;
#MYCXXFLAGS=''&lt;br /&gt;
MYLDFLAGS='-Wl,--no-undefined -Wl,-z,now'&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;$MYLDFLAGS&amp;quot; CFLAGS=&amp;quot;$MYCFLAGS&amp;quot; CXXFLAGS=&amp;quot;$MYCXXFLAGS&amp;quot; ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --enable-largefile \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-wxwidgets \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
  --without-pdal \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-ffmpeg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now compile the source code (this will take some time as it generates binary code from the source code):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: the more CPUs you have, the higher the -j number may be set to&lt;br /&gt;
# here: build using 4 CPU cores&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Install resulting GRASS GIS binaries into /usr/local/:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start GRASS GIS in the terminal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Done &amp;amp; enjoy!'''&lt;br /&gt;
&lt;br /&gt;
== Hints ==&lt;br /&gt;
&lt;br /&gt;
* Usually, the installation of compiled code is done by using the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make&amp;lt;/source&amp;gt; tool. Alternatively, this can be done by using the ''checkinstall'' tool (i.e., &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo checkinstall&amp;lt;/source&amp;gt;  instead of  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo make install&amp;lt;/source&amp;gt;) which eases off removal of packages. If ''checkinstall'' fails to deliver, please note some related bugs: [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/78455 78455] and [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/599163 599163]. Useful information on using ''checkinstall'': [https://help.ubuntu.com/community/CompilingEasyHowTo Compiling things on Ubuntu the Easy Way].&lt;br /&gt;
&lt;br /&gt;
* In multi-core processors, the compilation performance can be boosted by using  ''-j''  switches (e.g. &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j2&amp;lt;/source&amp;gt;  or  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j3&amp;lt;/source&amp;gt;  or even &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j4&amp;lt;/source&amp;gt;) which specify the number of jobs (commands) to run simultaneously.&lt;br /&gt;
&lt;br /&gt;
== Pre-compiled packages and backports ==&lt;br /&gt;
&lt;br /&gt;
'''Pre-compiled packages and backports''' are available from [https://wiki.ubuntu.com/UbuntuGIS UbuntuGIS] via their [https://launchpad.net/~ubuntugis/+archive/ppa/ ppa.launchpad stable] and [https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable ppa.launchpad unstable] repositories. '''This is by far the simplest and fastest solution. Please prefer it over the manual way of compiling source code yourself as described below.'''&lt;br /&gt;
&lt;br /&gt;
Version overview:&lt;br /&gt;
* jammy2 8.4&lt;br /&gt;
* noble 8.3&lt;br /&gt;
* jammy (22.04): 8.3&lt;br /&gt;
* focal (20.04 LTS): 8.2&lt;br /&gt;
* bionic (18.04 LTS): 7.8&lt;br /&gt;
&lt;br /&gt;
a) Daily ready-to-install GRASS GIS builds of the stable release branch and master are available from ''ppa:grass/grass-devel'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-devel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Latest packaged stable version of GRASS GIS is available from ''ppa:grass/grass-stable'':&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ppa&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-stable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Current stable Ubuntu version ===&lt;br /&gt;
First, update the system from the repositories&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install ''SQLite'', ''git'' and ''dependencies'' for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN (some additional packages may be required in this case); the following action will also install various dependencies (listed in the command line as &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;...):&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  python python-dev \&lt;br /&gt;
  python-opengl \&lt;br /&gt;
  python-wxversion python-wxtools python-wxgtk3.2 \&lt;br /&gt;
  python-dateutil libgsl-dev python-numpy \&lt;br /&gt;
  wx3.2-headers wx-common libwxgtk3.2-dev \&lt;br /&gt;
  libwxbase3.2-dev   \&lt;br /&gt;
  libncurses5-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff5-dev libpnglite-dev \&lt;br /&gt;
  libcairo libcairo-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libreadline6 libreadline6-dev libfreetype6-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  resolvconf \&lt;br /&gt;
  libjasper-dev \&lt;br /&gt;
  git \&lt;br /&gt;
  libav-tools libavutil-dev ffmpeg2theora \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See the additional packages bellow and in other sections and install them. Note that some of them are [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md required], namely PROJ, GEOS and GDAL. If you don't have special requirements, it is usually enough just to install PROJ, GEOS and GDAL from repository (rather then compile them manually).&lt;br /&gt;
&lt;br /&gt;
* for mysql support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libmysqlclient-dev&amp;lt;/source&amp;gt; is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for netcdf support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;netcdf-bin&amp;lt;/source&amp;gt; and &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libnetcdf-dev&amp;lt;/source&amp;gt;  is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install netcdf-bin libnetcdf-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for {{AddonCmd|i.spec.unmix}} Addon support, install LAPACK and BLAS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libblas-dev liblapack-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a directory as a simple user where all source code is going to be stored -- in this example, a directory named &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local&amp;lt;/source&amp;gt; is created &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir /usr/local/src&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* take over directories ownerships ('''replace''' below the terms ''userid'' and ''groupid'' with a real &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;userid&amp;lt;/source&amp;gt;): &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown userid:groupid /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* similarly, grant &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;rwx&amp;lt;/source&amp;gt; (read-write-execute) permissions for our ''userid'' and ''groupid'' onto the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; directory: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chmod ug+rwx /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL ==&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libproj-dev proj-data proj-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/local/share/proj/&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/share/proj/&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# probably you also need to additionally install &amp;quot;libgeos-c1v5&amp;quot;&lt;br /&gt;
sudo apt-get install libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/local/bin/geos-config&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/bin/geos-config&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package (possibly without support for datumgrid):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libgdal-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For support of WMS in wxGUI install Python GDAL bindings and GDAL executables:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python-gdal gdal-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install also the required extra packages (note the message: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;)&lt;br /&gt;
* Look out for packages to be removed by this operation -- this is most likely caused by incompatible package versions. Fix these problems in advance using commands like the following: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install &amp;lt;package&amp;gt;=&amp;lt;required.version&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GRASS-GIS ===&lt;br /&gt;
&lt;br /&gt;
[[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]]&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL from GIS.lab PPA==&lt;br /&gt;
&lt;br /&gt;
Ivan Mincik has made all required packages available in his [https://launchpad.net/~imincik/+archive/ubuntu/gis PPA]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:imincik/gis&lt;br /&gt;
sudo apt-get install libproj-dev libgdal-dev python-gdal libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can either also install GRASS GIS from there or compile it yourself (see [[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]])&lt;br /&gt;
&lt;br /&gt;
== Compile from source ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
* within the directory &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src&amp;lt;/source&amp;gt; (create it if it does not exist) checkout &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; from its GitHub repository: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
https://github.com/OSGeo/PROJ/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get [http://download.osgeo.org/proj/proj-datumgrid-1.8.zip '''proj-datumgrid-1.8.zip'''] or related files from [https://trac.osgeo.org/proj proj' trac] and move it under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj/nad&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget http://download.osgeo.org/proj/proj-datumgrid-1.8.zip&lt;br /&gt;
mv proj-datumgrid-1.8.zip /usr/local/src/proj/nad&lt;br /&gt;
cd /usr/local/src/proj/nad&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* decompress it &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
unzip proj-datumgrid-1.8.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* go back to the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; directory &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/proj&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ensure that &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/lib&amp;lt;/source&amp;gt; is added to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; and afterwards run &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* finally, go back to the parent directory simply by instructing&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
* download '''geos-3.12.2.tar.bz2''' from [https://libgeos.org/ https://libgeos.org/] using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt; &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://download.osgeo.org/geos/geos-3.12.2.tar.bz2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to the &amp;quot;source-code&amp;quot; directory and decompress&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/&lt;br /&gt;
bunzip2 geos-3.12.2.tar.bz2&lt;br /&gt;
tar xvf  geos-3.12.2.tar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to geos directory  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd geos-3.12.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* do not forget to execute &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
'''Note''', GDAL must be compiled '''without''' GRASS support!&lt;br /&gt;
&lt;br /&gt;
* download the current stable version (see https://github.com/OSGeo/gdal/releases for latest version):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to compile GDAL:&lt;br /&gt;
https://gdal.org/development/building_from_source.html&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
Note the differences between different GRASS GIS version (branches) in download and cofiguration. Note also the changes required if you installed some of the dependencies from packages (rather then compiled them yourself).&lt;br /&gt;
&lt;br /&gt;
To fully understand the build process, read the  &amp;lt;code&amp;gt;INSTALL&amp;lt;/code&amp;gt; file, which is located in GRASS' source code root directory.&lt;br /&gt;
&lt;br /&gt;
''' Getting GRASS' source code '''&lt;br /&gt;
&lt;br /&gt;
Select from one of the GRASS GIS versions and download the source code:&lt;br /&gt;
&lt;br /&gt;
https://github.com/OSGeo/grass/releases/&lt;br /&gt;
&lt;br /&gt;
''' Configure, Compile and Install'''&lt;br /&gt;
&lt;br /&gt;
Enter the directory with the source code, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''GRASS GIS example configuration''' (which can/should be adjusted according to specific needs):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CFLAGS=&amp;quot;-O2 -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure \&lt;br /&gt;
--with-nls \&lt;br /&gt;
--with-cxx \&lt;br /&gt;
--with-proj-share=/usr/local/share/proj/ \&lt;br /&gt;
--with-geos=/usr/local/bin/geos-config \&lt;br /&gt;
--with-wxwidgets \&lt;br /&gt;
--with-cairo \&lt;br /&gt;
--with-opengl-libs=/usr/include/GL \&lt;br /&gt;
--with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
--with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
--with-sqlite=yes \&lt;br /&gt;
--with-mysql=yes --with-mysql-includes=&amp;quot;/usr/include/mysql&amp;quot; \&lt;br /&gt;
--with-odbc=no \&lt;br /&gt;
--with-pdal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Note''', the above configuration uses the &amp;lt;code&amp;gt;PROJ&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GEOS&amp;lt;/code&amp;gt; packages compiled from the source. In the case that pre-compiled versions from the repository are required, remove the above corresponding lines to use the &amp;quot;defaults&amp;quot;, i.e. (note the backslashe at the end of each line)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
--with-proj-share=/usr/share/proj \&lt;br /&gt;
--with-geos=/usr/bin/geos-config \&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo checkinstall  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For subsequent updates execute (not need for the first time):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
svn up&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is required to clean previous configuration and compilation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
svn up&lt;br /&gt;
./configure ... # (use the configure command above)&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL-GRASS-Plugin ===&lt;br /&gt;
&lt;br /&gt;
See: https://github.com/OSGeo/gdal-grass&lt;br /&gt;
&lt;br /&gt;
* get the plugin from [https://github.com/OSGeo/gdal-grass/releases GitHub]: &amp;quot;gdal-grass-X.Y.Z.tar.gz&amp;quot; using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# update version number accordingly!&lt;br /&gt;
wget https://github.com/OSGeo/gdal-grass/archive/refs/tags/1.0.2.tar.gz -O gdal-grass-1.0.2.tar.gz&lt;br /&gt;
tar xvzf gdal-grass-1.0.2.tar.gz&lt;br /&gt;
cd gdal-grass-1.0.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf.d/grass.conf&amp;lt;/source&amp;gt;   or add in   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; the GRASS library path: &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# GRASS GIS stable library path (adapt as needed)&lt;br /&gt;
/usr/local/src/releasebranch_8_4/lib&lt;br /&gt;
&lt;br /&gt;
# GRASS GIS development version library path (adapt as needed)&lt;br /&gt;
/usr/local/src/grass_master/lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* optionally, clean previous configurations/compilations&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make distclean&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure -- point to GRASS installation/binaries&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; ./configure \&lt;br /&gt;
 --prefix=/usr/local \&lt;br /&gt;
 --with-gdal=/usr/local/bin/gdal-config \&lt;br /&gt;
 --with-grass=/usr/local/grass/ \&lt;br /&gt;
 --with-autoload=&amp;quot;/usr/local/lib64/gdalplugins/&amp;quot; \&lt;br /&gt;
 --with-ld-shared=&amp;quot;g++ -shared&amp;quot;&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install using checkinstall&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make -j2  &amp;amp;&amp;amp;  sudo checkinstall&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Post compilation/installation control =&lt;br /&gt;
&lt;br /&gt;
* For a recommended quick-check read the [https://grass.osgeo.org/wiki/Compile_and_install_GRASS_and_QGIS_with_GDAL/OGR_Plugin#Troubleshooting Troubleshooting] section at [https://grass.osgeo.org/wiki/Compile_and_install_GDAL-GRASS_plugin Compile_and_install_GDAL-GRASS_plugin]&lt;br /&gt;
&lt;br /&gt;
* in case of errors in future compilation attempts, remember to remove program binaries and files created with the &amp;quot;configuration&amp;quot; from previous compilations with&lt;br /&gt;
 make distclean&lt;br /&gt;
&lt;br /&gt;
* another common mistake is compiling a module against some GRASS version and then try to run it through another GRASS version. The solution is to recompile the affected module or, in case there are multiple GRASS installations, set up properly LD_LIBRARY_PATH paths.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Removal of GRASS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get rid of a GRASS binaries installation, delete (update version numbers accordingly)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/grass&amp;lt;/source&amp;gt; (directory, binaries location)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/bin/grass&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/home/username/.grassrc8&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
&lt;br /&gt;
If wanted, delete also the complete source code:&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src/grass_release&amp;lt;/source&amp;gt; (directory, source code location)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To remove &amp;lt;code&amp;gt;grass&amp;lt;/code&amp;gt; (or any other package) which was installed by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;checkinstall&amp;lt;/source&amp;gt;, use &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dpkg&amp;lt;/source&amp;gt;, e.g.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dpkg -r grass # package name defined at installation is important&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Docker: https://grass.osgeo.org/download/docker/&lt;br /&gt;
* [[Ubuntu Packaging]]&lt;br /&gt;
* [[GRASS in Debian]]&lt;br /&gt;
&lt;br /&gt;
= Archived Notes =&lt;br /&gt;
&lt;br /&gt;
Notes that concern the configuration and compilation of GRASS GIS and its dependencies for older versions of Ubuntu-Linux.&lt;br /&gt;
&lt;br /&gt;
[[Category: Compilation]]&lt;br /&gt;
[[Category: Installation]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28810</id>
		<title>Compile and Install Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28810"/>
		<updated>2026-03-10T09:47:56Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Pre-compiled packages and backports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; id=&amp;quot;attention&amp;quot; style=&amp;quot;-moz-border-radius:30px; border: 1px double #35824B; margin-bottom: 1.5em; padding: 1em; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 150%; text-align: left;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#35824B&amp;quot;&amp;gt;'''Attention'''&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;span style=&amp;quot;color:#333333&amp;quot;&amp;gt;'''The following instructions describe the compilation and installation of GRASS GIS and its required dependencies completely from the source on Ubuntu based systems. Please, prefer pre-compiled packages over the manual way described below unless you know ''what'' and ''how'', you want to learn and help testing.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quick instructions ==&lt;br /&gt;
&lt;br /&gt;
These instructions should work fine on Ubuntu distributions:&lt;br /&gt;
&lt;br /&gt;
=== Install geospatial dependencies ===&lt;br /&gt;
&lt;br /&gt;
1. Install some dependencies (PROJ, GEOS, GDAL libraries) and the compiler tools &amp;lt;br /&amp;gt;&lt;br /&gt;
(note: you need Python 3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
# install PROJ&lt;br /&gt;
sudo apt install libproj-dev proj-data proj-bin unzip -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# optionally, install (selected) datum grid files&lt;br /&gt;
sudo apt-get install proj-data&lt;br /&gt;
&lt;br /&gt;
# install GEOS&lt;br /&gt;
sudo apt install libgeos-dev -y&lt;br /&gt;
&lt;br /&gt;
# install GDAL&lt;br /&gt;
sudo apt install libgdal-dev python3-gdal gdal-bin -y&lt;br /&gt;
&lt;br /&gt;
## install PDAL (optional) - apparently unavailable on Ubuntu&lt;br /&gt;
#sudo apt install libpdal-dev pdal -y&lt;br /&gt;
&lt;br /&gt;
# Python3 precedence over Python2 (which is end-of-life since 2019, so it should be the default anyway)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install compiler stuff and further dependencies.&lt;br /&gt;
Note: this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
&lt;br /&gt;
=== Install further compilation dependencies (Ubuntu 24.04) ===&lt;br /&gt;
&lt;br /&gt;
For Ubuntu 24.04, including wxPython packages for GUI support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For NVIZ on Ubuntu, to also have video support (optional):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  ffmpeg libavutil-dev \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source code download ===&lt;br /&gt;
Now we have all &amp;quot;ingredients&amp;quot; readily installed on our system.&lt;br /&gt;
&lt;br /&gt;
'''Source code download''':&lt;br /&gt;
&lt;br /&gt;
There a two ways of getting the source code: either use a) the weekly snapshot (cannot be updated, or b) the source code from the GitHub repository (you can update your local copy easily in future):&lt;br /&gt;
&lt;br /&gt;
'''a) Download of the weekly source code snapshot (not recommended):'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# download latest GRASS GIS 8.x stable release source code:&lt;br /&gt;
mkdir $HOME/src/&lt;br /&gt;
cd  $HOME/src/&lt;br /&gt;
wget https://grass.osgeo.org/grass84/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# Unpack source code package and remove tarball archive:&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz &lt;br /&gt;
&lt;br /&gt;
# rename source code directory (yes, with the questionmarks!)&lt;br /&gt;
mv grass-8.4.git_src_snapshot_20??_??_?? grass-8.4.latest&lt;br /&gt;
cd grass-8.4.latest/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''b) Download of the current development version from GitHub (adopt the path below accordingly)'''&lt;br /&gt;
&lt;br /&gt;
Note: to find the current version number (8_x), see https://github.com/OSGeo/grass/branches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install git&lt;br /&gt;
git clone https://github.com/OSGeo/grass.git grass-8.4.latest.git&lt;br /&gt;
cd grass-8.4.latest.git/&lt;br /&gt;
git checkout releasebranch_8_4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
Now we can '''compile''' the source code in order to generate the GRASS GIS binaries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;configure&amp;quot; source code for local machine (checks for CPU type etc):&lt;br /&gt;
MYCFLAGS='-O2 -fPIC -fno-common -fexceptions -std=gnu99 -fstack-protector -m64'&lt;br /&gt;
#MYCXXFLAGS=''&lt;br /&gt;
MYLDFLAGS='-Wl,--no-undefined -Wl,-z,now'&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;$MYLDFLAGS&amp;quot; CFLAGS=&amp;quot;$MYCFLAGS&amp;quot; CXXFLAGS=&amp;quot;$MYCXXFLAGS&amp;quot; ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --enable-largefile \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-wxwidgets \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
  --without-pdal \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-ffmpeg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now compile the source code (this will take some time as it generates binary code from the source code):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: the more CPUs you have, the higher the -j number may be set to&lt;br /&gt;
# here: build using 4 CPU cores&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Install resulting GRASS GIS binaries into /usr/local/:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start GRASS GIS in the terminal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Done &amp;amp; enjoy!'''&lt;br /&gt;
&lt;br /&gt;
== Hints ==&lt;br /&gt;
&lt;br /&gt;
* Usually, the installation of compiled code is done by using the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make&amp;lt;/source&amp;gt; tool. Alternatively, this can be done by using the ''checkinstall'' tool (i.e., &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo checkinstall&amp;lt;/source&amp;gt;  instead of  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo make install&amp;lt;/source&amp;gt;) which eases off removal of packages. If ''checkinstall'' fails to deliver, please note some related bugs: [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/78455 78455] and [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/599163 599163]. Useful information on using ''checkinstall'': [https://help.ubuntu.com/community/CompilingEasyHowTo Compiling things on Ubuntu the Easy Way].&lt;br /&gt;
&lt;br /&gt;
* In multi-core processors, the compilation performance can be boosted by using  ''-j''  switches (e.g. &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j2&amp;lt;/source&amp;gt;  or  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j3&amp;lt;/source&amp;gt;  or even &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j4&amp;lt;/source&amp;gt;) which specify the number of jobs (commands) to run simultaneously.&lt;br /&gt;
&lt;br /&gt;
== Pre-compiled packages and backports ==&lt;br /&gt;
&lt;br /&gt;
'''Pre-compiled packages and backports''' are available from [https://wiki.ubuntu.com/UbuntuGIS UbuntuGIS] via their [https://launchpad.net/~ubuntugis/+archive/ppa/ ppa.launchpad stable] and [https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable ppa.launchpad unstable] repositories. '''This is by far the simplest and fastest solution. Please prefer it over the manual way of compiling source code yourself as described below.'''&lt;br /&gt;
&lt;br /&gt;
Version overview:&lt;br /&gt;
* jammy2 8.4&lt;br /&gt;
* noble 8.3&lt;br /&gt;
* jammy (22.04): 8.3&lt;br /&gt;
* focal (20.04 LTS): 8.2&lt;br /&gt;
* bionic (18.04 LTS): 7.8&lt;br /&gt;
&lt;br /&gt;
a) Daily ready-to-install GRASS GIS builds of the stable release branch and master are available from ''ppa:grass/grass-devel'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-devel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Latest packaged stable version of GRASS GIS is available from ''ppa:grass/grass-stable'':&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ppa&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-stable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Current stable Ubuntu version ===&lt;br /&gt;
First, update the system from the repositories&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install ''SQLite'', ''git'' and ''dependencies'' for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN (some additional packages may be required in this case); the following action will also install various dependencies (listed in the command line as &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;...):&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  python python-dev \&lt;br /&gt;
  python-opengl \&lt;br /&gt;
  python-wxversion python-wxtools python-wxgtk3.2 \&lt;br /&gt;
  python-dateutil libgsl-dev python-numpy \&lt;br /&gt;
  wx3.2-headers wx-common libwxgtk3.2-dev \&lt;br /&gt;
  libwxbase3.2-dev   \&lt;br /&gt;
  libncurses5-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff5-dev libpnglite-dev \&lt;br /&gt;
  libcairo libcairo-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libreadline6 libreadline6-dev libfreetype6-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  resolvconf \&lt;br /&gt;
  libjasper-dev \&lt;br /&gt;
  git \&lt;br /&gt;
  libav-tools libavutil-dev ffmpeg2theora \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following dependencies concern Ubuntu 24.04 LTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* See the additional packages bellow and in other sections and install them. Note that some of them are [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md required], namely PROJ, GEOS and GDAL. If you don't have special requirements, it is usually enough just to install PROJ, GEOS and GDAL from repository (rather then compile them manually).&lt;br /&gt;
&lt;br /&gt;
* for mysql support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libmysqlclient-dev&amp;lt;/source&amp;gt; is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for netcdf support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;netcdf-bin&amp;lt;/source&amp;gt; and &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libnetcdf-dev&amp;lt;/source&amp;gt;  is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install netcdf-bin libnetcdf-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for {{AddonCmd|i.spec.unmix}} Addon support, install LAPACK and BLAS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libblas-dev liblapack-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a directory as a simple user where all source code is going to be stored -- in this example, a directory named &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local&amp;lt;/source&amp;gt; is created &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir /usr/local/src&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* take over directories ownerships ('''replace''' below the terms ''userid'' and ''groupid'' with a real &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;userid&amp;lt;/source&amp;gt;): &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown userid:groupid /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* similarly, grant &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;rwx&amp;lt;/source&amp;gt; (read-write-execute) permissions for our ''userid'' and ''groupid'' onto the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; directory: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chmod ug+rwx /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL ==&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libproj-dev proj-data proj-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/local/share/proj/&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/share/proj/&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# probably you also need to additionally install &amp;quot;libgeos-c1v5&amp;quot;&lt;br /&gt;
sudo apt-get install libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/local/bin/geos-config&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/bin/geos-config&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package (possibly without support for datumgrid):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libgdal-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For support of WMS in wxGUI install Python GDAL bindings and GDAL executables:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python-gdal gdal-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install also the required extra packages (note the message: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;)&lt;br /&gt;
* Look out for packages to be removed by this operation -- this is most likely caused by incompatible package versions. Fix these problems in advance using commands like the following: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install &amp;lt;package&amp;gt;=&amp;lt;required.version&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GRASS-GIS ===&lt;br /&gt;
&lt;br /&gt;
[[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]]&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL from GIS.lab PPA==&lt;br /&gt;
&lt;br /&gt;
Ivan Mincik has made all required packages available in his [https://launchpad.net/~imincik/+archive/ubuntu/gis PPA]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:imincik/gis&lt;br /&gt;
sudo apt-get install libproj-dev libgdal-dev python-gdal libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can either also install GRASS GIS from there or compile it yourself (see [[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]])&lt;br /&gt;
&lt;br /&gt;
== Compile from source ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
* within the directory &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src&amp;lt;/source&amp;gt; (create it if it does not exist) checkout &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; from its GitHub repository: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
https://github.com/OSGeo/PROJ/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get [http://download.osgeo.org/proj/proj-datumgrid-1.8.zip '''proj-datumgrid-1.8.zip'''] or related files from [https://trac.osgeo.org/proj proj' trac] and move it under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj/nad&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget http://download.osgeo.org/proj/proj-datumgrid-1.8.zip&lt;br /&gt;
mv proj-datumgrid-1.8.zip /usr/local/src/proj/nad&lt;br /&gt;
cd /usr/local/src/proj/nad&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* decompress it &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
unzip proj-datumgrid-1.8.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* go back to the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; directory &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/proj&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ensure that &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/lib&amp;lt;/source&amp;gt; is added to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; and afterwards run &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* finally, go back to the parent directory simply by instructing&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
* download '''geos-3.12.2.tar.bz2''' from [https://libgeos.org/ https://libgeos.org/] using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt; &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://download.osgeo.org/geos/geos-3.12.2.tar.bz2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to the &amp;quot;source-code&amp;quot; directory and decompress&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/&lt;br /&gt;
bunzip2 geos-3.12.2.tar.bz2&lt;br /&gt;
tar xvf  geos-3.12.2.tar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to geos directory  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd geos-3.12.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* do not forget to execute &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
'''Note''', GDAL must be compiled '''without''' GRASS support!&lt;br /&gt;
&lt;br /&gt;
* download the current stable version (see https://github.com/OSGeo/gdal/releases for latest version):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to compile GDAL:&lt;br /&gt;
https://gdal.org/development/building_from_source.html&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
Note the differences between different GRASS GIS version (branches) in download and cofiguration. Note also the changes required if you installed some of the dependencies from packages (rather then compiled them yourself).&lt;br /&gt;
&lt;br /&gt;
To fully understand the build process, read the  &amp;lt;code&amp;gt;INSTALL&amp;lt;/code&amp;gt; file, which is located in GRASS' source code root directory.&lt;br /&gt;
&lt;br /&gt;
''' Getting GRASS' source code '''&lt;br /&gt;
&lt;br /&gt;
Select from one of the GRASS GIS versions and download the source code:&lt;br /&gt;
&lt;br /&gt;
https://github.com/OSGeo/grass/releases/&lt;br /&gt;
&lt;br /&gt;
''' Configure, Compile and Install'''&lt;br /&gt;
&lt;br /&gt;
Enter the directory with the source code, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''GRASS GIS example configuration''' (which can/should be adjusted according to specific needs):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CFLAGS=&amp;quot;-O2 -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure \&lt;br /&gt;
--with-nls \&lt;br /&gt;
--with-cxx \&lt;br /&gt;
--with-proj-share=/usr/local/share/proj/ \&lt;br /&gt;
--with-geos=/usr/local/bin/geos-config \&lt;br /&gt;
--with-wxwidgets \&lt;br /&gt;
--with-cairo \&lt;br /&gt;
--with-opengl-libs=/usr/include/GL \&lt;br /&gt;
--with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
--with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
--with-sqlite=yes \&lt;br /&gt;
--with-mysql=yes --with-mysql-includes=&amp;quot;/usr/include/mysql&amp;quot; \&lt;br /&gt;
--with-odbc=no \&lt;br /&gt;
--with-pdal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Note''', the above configuration uses the &amp;lt;code&amp;gt;PROJ&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GEOS&amp;lt;/code&amp;gt; packages compiled from the source. In the case that pre-compiled versions from the repository are required, remove the above corresponding lines to use the &amp;quot;defaults&amp;quot;, i.e. (note the backslashe at the end of each line)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
--with-proj-share=/usr/share/proj \&lt;br /&gt;
--with-geos=/usr/bin/geos-config \&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo checkinstall  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For subsequent updates execute (not need for the first time):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
svn up&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is required to clean previous configuration and compilation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
svn up&lt;br /&gt;
./configure ... # (use the configure command above)&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL-GRASS-Plugin ===&lt;br /&gt;
&lt;br /&gt;
See: https://github.com/OSGeo/gdal-grass&lt;br /&gt;
&lt;br /&gt;
* get the plugin from [https://github.com/OSGeo/gdal-grass/releases GitHub]: &amp;quot;gdal-grass-X.Y.Z.tar.gz&amp;quot; using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# update version number accordingly!&lt;br /&gt;
wget https://github.com/OSGeo/gdal-grass/archive/refs/tags/1.0.2.tar.gz -O gdal-grass-1.0.2.tar.gz&lt;br /&gt;
tar xvzf gdal-grass-1.0.2.tar.gz&lt;br /&gt;
cd gdal-grass-1.0.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf.d/grass.conf&amp;lt;/source&amp;gt;   or add in   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; the GRASS library path: &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# GRASS GIS stable library path (adapt as needed)&lt;br /&gt;
/usr/local/src/releasebranch_8_4/lib&lt;br /&gt;
&lt;br /&gt;
# GRASS GIS development version library path (adapt as needed)&lt;br /&gt;
/usr/local/src/grass_master/lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* optionally, clean previous configurations/compilations&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make distclean&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure -- point to GRASS installation/binaries&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; ./configure \&lt;br /&gt;
 --prefix=/usr/local \&lt;br /&gt;
 --with-gdal=/usr/local/bin/gdal-config \&lt;br /&gt;
 --with-grass=/usr/local/grass/ \&lt;br /&gt;
 --with-autoload=&amp;quot;/usr/local/lib64/gdalplugins/&amp;quot; \&lt;br /&gt;
 --with-ld-shared=&amp;quot;g++ -shared&amp;quot;&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install using checkinstall&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make -j2  &amp;amp;&amp;amp;  sudo checkinstall&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Post compilation/installation control =&lt;br /&gt;
&lt;br /&gt;
* For a recommended quick-check read the [https://grass.osgeo.org/wiki/Compile_and_install_GRASS_and_QGIS_with_GDAL/OGR_Plugin#Troubleshooting Troubleshooting] section at [https://grass.osgeo.org/wiki/Compile_and_install_GDAL-GRASS_plugin Compile_and_install_GDAL-GRASS_plugin]&lt;br /&gt;
&lt;br /&gt;
* in case of errors in future compilation attempts, remember to remove program binaries and files created with the &amp;quot;configuration&amp;quot; from previous compilations with&lt;br /&gt;
 make distclean&lt;br /&gt;
&lt;br /&gt;
* another common mistake is compiling a module against some GRASS version and then try to run it through another GRASS version. The solution is to recompile the affected module or, in case there are multiple GRASS installations, set up properly LD_LIBRARY_PATH paths.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Removal of GRASS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get rid of a GRASS binaries installation, delete (update version numbers accordingly)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/grass&amp;lt;/source&amp;gt; (directory, binaries location)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/bin/grass&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/home/username/.grassrc8&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
&lt;br /&gt;
If wanted, delete also the complete source code:&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src/grass_release&amp;lt;/source&amp;gt; (directory, source code location)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To remove &amp;lt;code&amp;gt;grass&amp;lt;/code&amp;gt; (or any other package) which was installed by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;checkinstall&amp;lt;/source&amp;gt;, use &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dpkg&amp;lt;/source&amp;gt;, e.g.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dpkg -r grass # package name defined at installation is important&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Docker: https://grass.osgeo.org/download/docker/&lt;br /&gt;
* [[Ubuntu Packaging]]&lt;br /&gt;
* [[GRASS in Debian]]&lt;br /&gt;
&lt;br /&gt;
= Archived Notes =&lt;br /&gt;
&lt;br /&gt;
Notes that concern the configuration and compilation of GRASS GIS and its dependencies for older versions of Ubuntu-Linux.&lt;br /&gt;
&lt;br /&gt;
[[Category: Compilation]]&lt;br /&gt;
[[Category: Installation]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28809</id>
		<title>Compile and Install Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28809"/>
		<updated>2026-03-10T09:45:08Z</updated>

		<summary type="html">&lt;p&gt;Neteler: disable PDAL due to missing package&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; id=&amp;quot;attention&amp;quot; style=&amp;quot;-moz-border-radius:30px; border: 1px double #35824B; margin-bottom: 1.5em; padding: 1em; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 150%; text-align: left;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#35824B&amp;quot;&amp;gt;'''Attention'''&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;span style=&amp;quot;color:#333333&amp;quot;&amp;gt;'''The following instructions describe the compilation and installation of GRASS GIS and its required dependencies completely from the source on Ubuntu based systems. Please, prefer pre-compiled packages over the manual way described below unless you know ''what'' and ''how'', you want to learn and help testing.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quick instructions ==&lt;br /&gt;
&lt;br /&gt;
These instructions should work fine on Ubuntu distributions:&lt;br /&gt;
&lt;br /&gt;
=== Install geospatial dependencies ===&lt;br /&gt;
&lt;br /&gt;
1. Install some dependencies (PROJ, GEOS, GDAL libraries) and the compiler tools &amp;lt;br /&amp;gt;&lt;br /&gt;
(note: you need Python 3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
# install PROJ&lt;br /&gt;
sudo apt install libproj-dev proj-data proj-bin unzip -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# optionally, install (selected) datum grid files&lt;br /&gt;
sudo apt-get install proj-data&lt;br /&gt;
&lt;br /&gt;
# install GEOS&lt;br /&gt;
sudo apt install libgeos-dev -y&lt;br /&gt;
&lt;br /&gt;
# install GDAL&lt;br /&gt;
sudo apt install libgdal-dev python3-gdal gdal-bin -y&lt;br /&gt;
&lt;br /&gt;
## install PDAL (optional) - apparently unavailable on Ubuntu&lt;br /&gt;
#sudo apt install libpdal-dev pdal -y&lt;br /&gt;
&lt;br /&gt;
# Python3 precedence over Python2 (which is end-of-life since 2019, so it should be the default anyway)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install compiler stuff and further dependencies.&lt;br /&gt;
Note: this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
&lt;br /&gt;
=== Install further compilation dependencies (Ubuntu 24.04) ===&lt;br /&gt;
&lt;br /&gt;
For Ubuntu 24.04, including wxPython packages for GUI support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For NVIZ on Ubuntu, to also have video support (optional):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  ffmpeg libavutil-dev \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source code download ===&lt;br /&gt;
Now we have all &amp;quot;ingredients&amp;quot; readily installed on our system.&lt;br /&gt;
&lt;br /&gt;
'''Source code download''':&lt;br /&gt;
&lt;br /&gt;
There a two ways of getting the source code: either use a) the weekly snapshot (cannot be updated, or b) the source code from the GitHub repository (you can update your local copy easily in future):&lt;br /&gt;
&lt;br /&gt;
'''a) Download of the weekly source code snapshot (not recommended):'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# download latest GRASS GIS 8.x stable release source code:&lt;br /&gt;
mkdir $HOME/src/&lt;br /&gt;
cd  $HOME/src/&lt;br /&gt;
wget https://grass.osgeo.org/grass84/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# Unpack source code package and remove tarball archive:&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz &lt;br /&gt;
&lt;br /&gt;
# rename source code directory (yes, with the questionmarks!)&lt;br /&gt;
mv grass-8.4.git_src_snapshot_20??_??_?? grass-8.4.latest&lt;br /&gt;
cd grass-8.4.latest/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''b) Download of the current development version from GitHub (adopt the path below accordingly)'''&lt;br /&gt;
&lt;br /&gt;
Note: to find the current version number (8_x), see https://github.com/OSGeo/grass/branches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install git&lt;br /&gt;
git clone https://github.com/OSGeo/grass.git grass-8.4.latest.git&lt;br /&gt;
cd grass-8.4.latest.git/&lt;br /&gt;
git checkout releasebranch_8_4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
Now we can '''compile''' the source code in order to generate the GRASS GIS binaries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;configure&amp;quot; source code for local machine (checks for CPU type etc):&lt;br /&gt;
MYCFLAGS='-O2 -fPIC -fno-common -fexceptions -std=gnu99 -fstack-protector -m64'&lt;br /&gt;
#MYCXXFLAGS=''&lt;br /&gt;
MYLDFLAGS='-Wl,--no-undefined -Wl,-z,now'&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;$MYLDFLAGS&amp;quot; CFLAGS=&amp;quot;$MYCFLAGS&amp;quot; CXXFLAGS=&amp;quot;$MYCXXFLAGS&amp;quot; ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --enable-largefile \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-wxwidgets \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
  --without-pdal \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-ffmpeg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now compile the source code (this will take some time as it generates binary code from the source code):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: the more CPUs you have, the higher the -j number may be set to&lt;br /&gt;
# here: build using 4 CPU cores&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Install resulting GRASS GIS binaries into /usr/local/:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start GRASS GIS in the terminal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Done &amp;amp; enjoy!'''&lt;br /&gt;
&lt;br /&gt;
== Hints ==&lt;br /&gt;
&lt;br /&gt;
* Usually, the installation of compiled code is done by using the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make&amp;lt;/source&amp;gt; tool. Alternatively, this can be done by using the ''checkinstall'' tool (i.e., &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo checkinstall&amp;lt;/source&amp;gt;  instead of  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo make install&amp;lt;/source&amp;gt;) which eases off removal of packages. If ''checkinstall'' fails to deliver, please note some related bugs: [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/78455 78455] and [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/599163 599163]. Useful information on using ''checkinstall'': [https://help.ubuntu.com/community/CompilingEasyHowTo Compiling things on Ubuntu the Easy Way].&lt;br /&gt;
&lt;br /&gt;
* In multi-core processors, the compilation performance can be boosted by using  ''-j''  switches (e.g. &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j2&amp;lt;/source&amp;gt;  or  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j3&amp;lt;/source&amp;gt;  or even &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j4&amp;lt;/source&amp;gt;) which specify the number of jobs (commands) to run simultaneously.&lt;br /&gt;
&lt;br /&gt;
== Pre-compiled packages and backports ==&lt;br /&gt;
&lt;br /&gt;
'''Pre-compiled packages and backports''' are available from [https://wiki.ubuntu.com/UbuntuGIS UbuntuGIS] via their [https://launchpad.net/~ubuntugis/+archive/ppa/ ppa.launchpad stable] and [https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable ppa.launchpad unstable] repositories. '''This is by far the simplest and fastest solution. Please prefer it over the manual way of compiling source code yourself as described below.'''&lt;br /&gt;
&lt;br /&gt;
Version overview:&lt;br /&gt;
* noble 8.3&lt;br /&gt;
* jammy (22.04): 8.3&lt;br /&gt;
* focal (20.04 LTS): 8.2&lt;br /&gt;
* bionic (18.04 LTS): 7.8&lt;br /&gt;
* xenial (16.04 LTS): 7.6&lt;br /&gt;
* trusty (14.04 LTS): 7.4&lt;br /&gt;
&lt;br /&gt;
a) Daily ready-to-install GRASS GIS builds of the stable release branch and master are available from ''ppa:grass/grass-devel'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-devel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Latest packaged stable version of GRASS GIS is available from ''ppa:grass/grass-stable'':&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ppa&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-stable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Current stable Ubuntu version ===&lt;br /&gt;
First, update the system from the repositories&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install ''SQLite'', ''git'' and ''dependencies'' for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN (some additional packages may be required in this case); the following action will also install various dependencies (listed in the command line as &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;...):&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  python python-dev \&lt;br /&gt;
  python-opengl \&lt;br /&gt;
  python-wxversion python-wxtools python-wxgtk3.2 \&lt;br /&gt;
  python-dateutil libgsl-dev python-numpy \&lt;br /&gt;
  wx3.2-headers wx-common libwxgtk3.2-dev \&lt;br /&gt;
  libwxbase3.2-dev   \&lt;br /&gt;
  libncurses5-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff5-dev libpnglite-dev \&lt;br /&gt;
  libcairo libcairo-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libreadline6 libreadline6-dev libfreetype6-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  resolvconf \&lt;br /&gt;
  libjasper-dev \&lt;br /&gt;
  git \&lt;br /&gt;
  libav-tools libavutil-dev ffmpeg2theora \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following dependencies concern Ubuntu 24.04 LTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* See the additional packages bellow and in other sections and install them. Note that some of them are [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md required], namely PROJ, GEOS and GDAL. If you don't have special requirements, it is usually enough just to install PROJ, GEOS and GDAL from repository (rather then compile them manually).&lt;br /&gt;
&lt;br /&gt;
* for mysql support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libmysqlclient-dev&amp;lt;/source&amp;gt; is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for netcdf support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;netcdf-bin&amp;lt;/source&amp;gt; and &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libnetcdf-dev&amp;lt;/source&amp;gt;  is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install netcdf-bin libnetcdf-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for {{AddonCmd|i.spec.unmix}} Addon support, install LAPACK and BLAS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libblas-dev liblapack-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a directory as a simple user where all source code is going to be stored -- in this example, a directory named &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local&amp;lt;/source&amp;gt; is created &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir /usr/local/src&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* take over directories ownerships ('''replace''' below the terms ''userid'' and ''groupid'' with a real &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;userid&amp;lt;/source&amp;gt;): &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown userid:groupid /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* similarly, grant &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;rwx&amp;lt;/source&amp;gt; (read-write-execute) permissions for our ''userid'' and ''groupid'' onto the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; directory: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chmod ug+rwx /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL ==&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libproj-dev proj-data proj-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/local/share/proj/&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/share/proj/&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# probably you also need to additionally install &amp;quot;libgeos-c1v5&amp;quot;&lt;br /&gt;
sudo apt-get install libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/local/bin/geos-config&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/bin/geos-config&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package (possibly without support for datumgrid):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libgdal-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For support of WMS in wxGUI install Python GDAL bindings and GDAL executables:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python-gdal gdal-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install also the required extra packages (note the message: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;)&lt;br /&gt;
* Look out for packages to be removed by this operation -- this is most likely caused by incompatible package versions. Fix these problems in advance using commands like the following: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install &amp;lt;package&amp;gt;=&amp;lt;required.version&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GRASS-GIS ===&lt;br /&gt;
&lt;br /&gt;
[[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]]&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL from GIS.lab PPA==&lt;br /&gt;
&lt;br /&gt;
Ivan Mincik has made all required packages available in his [https://launchpad.net/~imincik/+archive/ubuntu/gis PPA]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:imincik/gis&lt;br /&gt;
sudo apt-get install libproj-dev libgdal-dev python-gdal libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can either also install GRASS GIS from there or compile it yourself (see [[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]])&lt;br /&gt;
&lt;br /&gt;
== Compile from source ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
* within the directory &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src&amp;lt;/source&amp;gt; (create it if it does not exist) checkout &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; from its GitHub repository: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
https://github.com/OSGeo/PROJ/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get [http://download.osgeo.org/proj/proj-datumgrid-1.8.zip '''proj-datumgrid-1.8.zip'''] or related files from [https://trac.osgeo.org/proj proj' trac] and move it under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj/nad&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget http://download.osgeo.org/proj/proj-datumgrid-1.8.zip&lt;br /&gt;
mv proj-datumgrid-1.8.zip /usr/local/src/proj/nad&lt;br /&gt;
cd /usr/local/src/proj/nad&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* decompress it &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
unzip proj-datumgrid-1.8.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* go back to the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; directory &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/proj&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ensure that &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/lib&amp;lt;/source&amp;gt; is added to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; and afterwards run &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* finally, go back to the parent directory simply by instructing&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
* download '''geos-3.12.2.tar.bz2''' from [https://libgeos.org/ https://libgeos.org/] using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt; &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://download.osgeo.org/geos/geos-3.12.2.tar.bz2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to the &amp;quot;source-code&amp;quot; directory and decompress&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/&lt;br /&gt;
bunzip2 geos-3.12.2.tar.bz2&lt;br /&gt;
tar xvf  geos-3.12.2.tar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to geos directory  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd geos-3.12.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* do not forget to execute &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
'''Note''', GDAL must be compiled '''without''' GRASS support!&lt;br /&gt;
&lt;br /&gt;
* download the current stable version (see https://github.com/OSGeo/gdal/releases for latest version):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to compile GDAL:&lt;br /&gt;
https://gdal.org/development/building_from_source.html&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
Note the differences between different GRASS GIS version (branches) in download and cofiguration. Note also the changes required if you installed some of the dependencies from packages (rather then compiled them yourself).&lt;br /&gt;
&lt;br /&gt;
To fully understand the build process, read the  &amp;lt;code&amp;gt;INSTALL&amp;lt;/code&amp;gt; file, which is located in GRASS' source code root directory.&lt;br /&gt;
&lt;br /&gt;
''' Getting GRASS' source code '''&lt;br /&gt;
&lt;br /&gt;
Select from one of the GRASS GIS versions and download the source code:&lt;br /&gt;
&lt;br /&gt;
https://github.com/OSGeo/grass/releases/&lt;br /&gt;
&lt;br /&gt;
''' Configure, Compile and Install'''&lt;br /&gt;
&lt;br /&gt;
Enter the directory with the source code, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''GRASS GIS example configuration''' (which can/should be adjusted according to specific needs):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CFLAGS=&amp;quot;-O2 -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure \&lt;br /&gt;
--with-nls \&lt;br /&gt;
--with-cxx \&lt;br /&gt;
--with-proj-share=/usr/local/share/proj/ \&lt;br /&gt;
--with-geos=/usr/local/bin/geos-config \&lt;br /&gt;
--with-wxwidgets \&lt;br /&gt;
--with-cairo \&lt;br /&gt;
--with-opengl-libs=/usr/include/GL \&lt;br /&gt;
--with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
--with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
--with-sqlite=yes \&lt;br /&gt;
--with-mysql=yes --with-mysql-includes=&amp;quot;/usr/include/mysql&amp;quot; \&lt;br /&gt;
--with-odbc=no \&lt;br /&gt;
--with-pdal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Note''', the above configuration uses the &amp;lt;code&amp;gt;PROJ&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GEOS&amp;lt;/code&amp;gt; packages compiled from the source. In the case that pre-compiled versions from the repository are required, remove the above corresponding lines to use the &amp;quot;defaults&amp;quot;, i.e. (note the backslashe at the end of each line)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
--with-proj-share=/usr/share/proj \&lt;br /&gt;
--with-geos=/usr/bin/geos-config \&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo checkinstall  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For subsequent updates execute (not need for the first time):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
svn up&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is required to clean previous configuration and compilation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
svn up&lt;br /&gt;
./configure ... # (use the configure command above)&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL-GRASS-Plugin ===&lt;br /&gt;
&lt;br /&gt;
See: https://github.com/OSGeo/gdal-grass&lt;br /&gt;
&lt;br /&gt;
* get the plugin from [https://github.com/OSGeo/gdal-grass/releases GitHub]: &amp;quot;gdal-grass-X.Y.Z.tar.gz&amp;quot; using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# update version number accordingly!&lt;br /&gt;
wget https://github.com/OSGeo/gdal-grass/archive/refs/tags/1.0.2.tar.gz -O gdal-grass-1.0.2.tar.gz&lt;br /&gt;
tar xvzf gdal-grass-1.0.2.tar.gz&lt;br /&gt;
cd gdal-grass-1.0.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf.d/grass.conf&amp;lt;/source&amp;gt;   or add in   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; the GRASS library path: &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# GRASS GIS stable library path (adapt as needed)&lt;br /&gt;
/usr/local/src/releasebranch_8_4/lib&lt;br /&gt;
&lt;br /&gt;
# GRASS GIS development version library path (adapt as needed)&lt;br /&gt;
/usr/local/src/grass_master/lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* optionally, clean previous configurations/compilations&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make distclean&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure -- point to GRASS installation/binaries&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; ./configure \&lt;br /&gt;
 --prefix=/usr/local \&lt;br /&gt;
 --with-gdal=/usr/local/bin/gdal-config \&lt;br /&gt;
 --with-grass=/usr/local/grass/ \&lt;br /&gt;
 --with-autoload=&amp;quot;/usr/local/lib64/gdalplugins/&amp;quot; \&lt;br /&gt;
 --with-ld-shared=&amp;quot;g++ -shared&amp;quot;&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install using checkinstall&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make -j2  &amp;amp;&amp;amp;  sudo checkinstall&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Post compilation/installation control =&lt;br /&gt;
&lt;br /&gt;
* For a recommended quick-check read the [https://grass.osgeo.org/wiki/Compile_and_install_GRASS_and_QGIS_with_GDAL/OGR_Plugin#Troubleshooting Troubleshooting] section at [https://grass.osgeo.org/wiki/Compile_and_install_GDAL-GRASS_plugin Compile_and_install_GDAL-GRASS_plugin]&lt;br /&gt;
&lt;br /&gt;
* in case of errors in future compilation attempts, remember to remove program binaries and files created with the &amp;quot;configuration&amp;quot; from previous compilations with&lt;br /&gt;
 make distclean&lt;br /&gt;
&lt;br /&gt;
* another common mistake is compiling a module against some GRASS version and then try to run it through another GRASS version. The solution is to recompile the affected module or, in case there are multiple GRASS installations, set up properly LD_LIBRARY_PATH paths.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Removal of GRASS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get rid of a GRASS binaries installation, delete (update version numbers accordingly)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/grass&amp;lt;/source&amp;gt; (directory, binaries location)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/bin/grass&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/home/username/.grassrc8&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
&lt;br /&gt;
If wanted, delete also the complete source code:&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src/grass_release&amp;lt;/source&amp;gt; (directory, source code location)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To remove &amp;lt;code&amp;gt;grass&amp;lt;/code&amp;gt; (or any other package) which was installed by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;checkinstall&amp;lt;/source&amp;gt;, use &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dpkg&amp;lt;/source&amp;gt;, e.g.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dpkg -r grass # package name defined at installation is important&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Docker: https://grass.osgeo.org/download/docker/&lt;br /&gt;
* [[Ubuntu Packaging]]&lt;br /&gt;
* [[GRASS in Debian]]&lt;br /&gt;
&lt;br /&gt;
= Archived Notes =&lt;br /&gt;
&lt;br /&gt;
Notes that concern the configuration and compilation of GRASS GIS and its dependencies for older versions of Ubuntu-Linux.&lt;br /&gt;
&lt;br /&gt;
[[Category: Compilation]]&lt;br /&gt;
[[Category: Installation]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28808</id>
		<title>Compile and Install Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28808"/>
		<updated>2026-03-10T09:43:46Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Update geospatial dependencies&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; id=&amp;quot;attention&amp;quot; style=&amp;quot;-moz-border-radius:30px; border: 1px double #35824B; margin-bottom: 1.5em; padding: 1em; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 150%; text-align: left;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#35824B&amp;quot;&amp;gt;'''Attention'''&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;span style=&amp;quot;color:#333333&amp;quot;&amp;gt;'''The following instructions describe the compilation and installation of GRASS GIS and its required dependencies completely from the source on Ubuntu based systems. Please, prefer pre-compiled packages over the manual way described below unless you know ''what'' and ''how'', you want to learn and help testing.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quick instructions ==&lt;br /&gt;
&lt;br /&gt;
These instructions should work fine on Ubuntu distributions:&lt;br /&gt;
&lt;br /&gt;
=== Install geospatial dependencies ===&lt;br /&gt;
&lt;br /&gt;
1. Install some dependencies (PROJ, GEOS, GDAL libraries) and the compiler tools &amp;lt;br /&amp;gt;&lt;br /&gt;
(note: you need Python 3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
# install PROJ&lt;br /&gt;
sudo apt install libproj-dev proj-data proj-bin unzip -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# optionally, install (selected) datum grid files&lt;br /&gt;
sudo apt-get install proj-data&lt;br /&gt;
&lt;br /&gt;
# install GEOS&lt;br /&gt;
sudo apt install libgeos-dev -y&lt;br /&gt;
&lt;br /&gt;
# install GDAL&lt;br /&gt;
sudo apt install libgdal-dev python3-gdal gdal-bin -y&lt;br /&gt;
&lt;br /&gt;
## install PDAL (optional) - apparently unavailable on Ubuntu&lt;br /&gt;
#sudo apt install libpdal-dev pdal -y&lt;br /&gt;
&lt;br /&gt;
# Python3 precedence over Python2 (which is end-of-life since 2019, so it should be the default anyway)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install compiler stuff and further dependencies.&lt;br /&gt;
Note: this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
&lt;br /&gt;
=== Install further compilation dependencies (Ubuntu 24.04) ===&lt;br /&gt;
&lt;br /&gt;
For Ubuntu 24.04, including wxPython packages for GUI support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For NVIZ on Ubuntu, to also have video support (optional):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  ffmpeg libavutil-dev \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source code download ===&lt;br /&gt;
Now we have all &amp;quot;ingredients&amp;quot; readily installed on our system.&lt;br /&gt;
&lt;br /&gt;
'''Source code download''':&lt;br /&gt;
&lt;br /&gt;
There a two ways of getting the source code: either use a) the weekly snapshot (cannot be updated, or b) the source code from the GitHub repository (you can update your local copy easily in future):&lt;br /&gt;
&lt;br /&gt;
'''a) Download of the weekly source code snapshot (not recommended):'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# download latest GRASS GIS 8.x stable release source code:&lt;br /&gt;
mkdir $HOME/src/&lt;br /&gt;
cd  $HOME/src/&lt;br /&gt;
wget https://grass.osgeo.org/grass84/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# Unpack source code package and remove tarball archive:&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz &lt;br /&gt;
&lt;br /&gt;
# rename source code directory (yes, with the questionmarks!)&lt;br /&gt;
mv grass-8.4.git_src_snapshot_20??_??_?? grass-8.4.latest&lt;br /&gt;
cd grass-8.4.latest/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''b) Download of the current development version from GitHub (adopt the path below accordingly)'''&lt;br /&gt;
&lt;br /&gt;
Note: to find the current version number (8_x), see https://github.com/OSGeo/grass/branches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install git&lt;br /&gt;
git clone https://github.com/OSGeo/grass.git grass-8.4.latest.git&lt;br /&gt;
cd grass-8.4.latest.git/&lt;br /&gt;
git checkout releasebranch_8_4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
Now we can '''compile''' the source code in order to generate the GRASS GIS binaries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;configure&amp;quot; source code for local machine (checks for CPU type etc):&lt;br /&gt;
MYCFLAGS='-O2 -fPIC -fno-common -fexceptions -std=gnu99 -fstack-protector -m64'&lt;br /&gt;
#MYCXXFLAGS=''&lt;br /&gt;
MYLDFLAGS='-Wl,--no-undefined -Wl,-z,now'&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;$MYLDFLAGS&amp;quot; CFLAGS=&amp;quot;$MYCFLAGS&amp;quot; CXXFLAGS=&amp;quot;$MYCXXFLAGS&amp;quot; ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --enable-largefile \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-pdal \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-wxwidgets \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-ffmpeg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now compile the source code (this will take some time as it generates binary code from the source code):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: the more CPUs you have, the higher the -j number may be set to&lt;br /&gt;
# here: build using 4 CPU cores&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Install resulting GRASS GIS binaries into /usr/local/:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start GRASS GIS in the terminal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Done &amp;amp; enjoy!'''&lt;br /&gt;
&lt;br /&gt;
== Hints ==&lt;br /&gt;
&lt;br /&gt;
* Usually, the installation of compiled code is done by using the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make&amp;lt;/source&amp;gt; tool. Alternatively, this can be done by using the ''checkinstall'' tool (i.e., &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo checkinstall&amp;lt;/source&amp;gt;  instead of  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo make install&amp;lt;/source&amp;gt;) which eases off removal of packages. If ''checkinstall'' fails to deliver, please note some related bugs: [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/78455 78455] and [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/599163 599163]. Useful information on using ''checkinstall'': [https://help.ubuntu.com/community/CompilingEasyHowTo Compiling things on Ubuntu the Easy Way].&lt;br /&gt;
&lt;br /&gt;
* In multi-core processors, the compilation performance can be boosted by using  ''-j''  switches (e.g. &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j2&amp;lt;/source&amp;gt;  or  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j3&amp;lt;/source&amp;gt;  or even &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j4&amp;lt;/source&amp;gt;) which specify the number of jobs (commands) to run simultaneously.&lt;br /&gt;
&lt;br /&gt;
== Pre-compiled packages and backports ==&lt;br /&gt;
&lt;br /&gt;
'''Pre-compiled packages and backports''' are available from [https://wiki.ubuntu.com/UbuntuGIS UbuntuGIS] via their [https://launchpad.net/~ubuntugis/+archive/ppa/ ppa.launchpad stable] and [https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable ppa.launchpad unstable] repositories. '''This is by far the simplest and fastest solution. Please prefer it over the manual way of compiling source code yourself as described below.'''&lt;br /&gt;
&lt;br /&gt;
Version overview:&lt;br /&gt;
* noble 8.3&lt;br /&gt;
* jammy (22.04): 8.3&lt;br /&gt;
* focal (20.04 LTS): 8.2&lt;br /&gt;
* bionic (18.04 LTS): 7.8&lt;br /&gt;
* xenial (16.04 LTS): 7.6&lt;br /&gt;
* trusty (14.04 LTS): 7.4&lt;br /&gt;
&lt;br /&gt;
a) Daily ready-to-install GRASS GIS builds of the stable release branch and master are available from ''ppa:grass/grass-devel'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-devel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Latest packaged stable version of GRASS GIS is available from ''ppa:grass/grass-stable'':&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ppa&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-stable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Current stable Ubuntu version ===&lt;br /&gt;
First, update the system from the repositories&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install ''SQLite'', ''git'' and ''dependencies'' for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN (some additional packages may be required in this case); the following action will also install various dependencies (listed in the command line as &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;...):&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  python python-dev \&lt;br /&gt;
  python-opengl \&lt;br /&gt;
  python-wxversion python-wxtools python-wxgtk3.2 \&lt;br /&gt;
  python-dateutil libgsl-dev python-numpy \&lt;br /&gt;
  wx3.2-headers wx-common libwxgtk3.2-dev \&lt;br /&gt;
  libwxbase3.2-dev   \&lt;br /&gt;
  libncurses5-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff5-dev libpnglite-dev \&lt;br /&gt;
  libcairo libcairo-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libreadline6 libreadline6-dev libfreetype6-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  resolvconf \&lt;br /&gt;
  libjasper-dev \&lt;br /&gt;
  git \&lt;br /&gt;
  libav-tools libavutil-dev ffmpeg2theora \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following dependencies concern Ubuntu 24.04 LTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* See the additional packages bellow and in other sections and install them. Note that some of them are [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md required], namely PROJ, GEOS and GDAL. If you don't have special requirements, it is usually enough just to install PROJ, GEOS and GDAL from repository (rather then compile them manually).&lt;br /&gt;
&lt;br /&gt;
* for mysql support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libmysqlclient-dev&amp;lt;/source&amp;gt; is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for netcdf support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;netcdf-bin&amp;lt;/source&amp;gt; and &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libnetcdf-dev&amp;lt;/source&amp;gt;  is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install netcdf-bin libnetcdf-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for {{AddonCmd|i.spec.unmix}} Addon support, install LAPACK and BLAS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libblas-dev liblapack-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a directory as a simple user where all source code is going to be stored -- in this example, a directory named &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local&amp;lt;/source&amp;gt; is created &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir /usr/local/src&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* take over directories ownerships ('''replace''' below the terms ''userid'' and ''groupid'' with a real &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;userid&amp;lt;/source&amp;gt;): &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown userid:groupid /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* similarly, grant &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;rwx&amp;lt;/source&amp;gt; (read-write-execute) permissions for our ''userid'' and ''groupid'' onto the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; directory: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chmod ug+rwx /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL ==&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libproj-dev proj-data proj-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/local/share/proj/&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/share/proj/&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# probably you also need to additionally install &amp;quot;libgeos-c1v5&amp;quot;&lt;br /&gt;
sudo apt-get install libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/local/bin/geos-config&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/bin/geos-config&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package (possibly without support for datumgrid):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libgdal-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For support of WMS in wxGUI install Python GDAL bindings and GDAL executables:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python-gdal gdal-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install also the required extra packages (note the message: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;)&lt;br /&gt;
* Look out for packages to be removed by this operation -- this is most likely caused by incompatible package versions. Fix these problems in advance using commands like the following: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install &amp;lt;package&amp;gt;=&amp;lt;required.version&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GRASS-GIS ===&lt;br /&gt;
&lt;br /&gt;
[[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]]&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL from GIS.lab PPA==&lt;br /&gt;
&lt;br /&gt;
Ivan Mincik has made all required packages available in his [https://launchpad.net/~imincik/+archive/ubuntu/gis PPA]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:imincik/gis&lt;br /&gt;
sudo apt-get install libproj-dev libgdal-dev python-gdal libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can either also install GRASS GIS from there or compile it yourself (see [[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]])&lt;br /&gt;
&lt;br /&gt;
== Compile from source ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
* within the directory &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src&amp;lt;/source&amp;gt; (create it if it does not exist) checkout &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; from its GitHub repository: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
https://github.com/OSGeo/PROJ/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get [http://download.osgeo.org/proj/proj-datumgrid-1.8.zip '''proj-datumgrid-1.8.zip'''] or related files from [https://trac.osgeo.org/proj proj' trac] and move it under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj/nad&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget http://download.osgeo.org/proj/proj-datumgrid-1.8.zip&lt;br /&gt;
mv proj-datumgrid-1.8.zip /usr/local/src/proj/nad&lt;br /&gt;
cd /usr/local/src/proj/nad&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* decompress it &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
unzip proj-datumgrid-1.8.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* go back to the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; directory &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/proj&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ensure that &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/lib&amp;lt;/source&amp;gt; is added to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; and afterwards run &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* finally, go back to the parent directory simply by instructing&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
* download '''geos-3.12.2.tar.bz2''' from [https://libgeos.org/ https://libgeos.org/] using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt; &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://download.osgeo.org/geos/geos-3.12.2.tar.bz2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to the &amp;quot;source-code&amp;quot; directory and decompress&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/&lt;br /&gt;
bunzip2 geos-3.12.2.tar.bz2&lt;br /&gt;
tar xvf  geos-3.12.2.tar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to geos directory  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd geos-3.12.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* do not forget to execute &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
'''Note''', GDAL must be compiled '''without''' GRASS support!&lt;br /&gt;
&lt;br /&gt;
* download the current stable version (see https://github.com/OSGeo/gdal/releases for latest version):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to compile GDAL:&lt;br /&gt;
https://gdal.org/development/building_from_source.html&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
Note the differences between different GRASS GIS version (branches) in download and cofiguration. Note also the changes required if you installed some of the dependencies from packages (rather then compiled them yourself).&lt;br /&gt;
&lt;br /&gt;
To fully understand the build process, read the  &amp;lt;code&amp;gt;INSTALL&amp;lt;/code&amp;gt; file, which is located in GRASS' source code root directory.&lt;br /&gt;
&lt;br /&gt;
''' Getting GRASS' source code '''&lt;br /&gt;
&lt;br /&gt;
Select from one of the GRASS GIS versions and download the source code:&lt;br /&gt;
&lt;br /&gt;
https://github.com/OSGeo/grass/releases/&lt;br /&gt;
&lt;br /&gt;
''' Configure, Compile and Install'''&lt;br /&gt;
&lt;br /&gt;
Enter the directory with the source code, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''GRASS GIS example configuration''' (which can/should be adjusted according to specific needs):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CFLAGS=&amp;quot;-O2 -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure \&lt;br /&gt;
--with-nls \&lt;br /&gt;
--with-cxx \&lt;br /&gt;
--with-proj-share=/usr/local/share/proj/ \&lt;br /&gt;
--with-geos=/usr/local/bin/geos-config \&lt;br /&gt;
--with-wxwidgets \&lt;br /&gt;
--with-cairo \&lt;br /&gt;
--with-opengl-libs=/usr/include/GL \&lt;br /&gt;
--with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
--with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
--with-sqlite=yes \&lt;br /&gt;
--with-mysql=yes --with-mysql-includes=&amp;quot;/usr/include/mysql&amp;quot; \&lt;br /&gt;
--with-odbc=no \&lt;br /&gt;
--with-pdal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Note''', the above configuration uses the &amp;lt;code&amp;gt;PROJ&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GEOS&amp;lt;/code&amp;gt; packages compiled from the source. In the case that pre-compiled versions from the repository are required, remove the above corresponding lines to use the &amp;quot;defaults&amp;quot;, i.e. (note the backslashe at the end of each line)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
--with-proj-share=/usr/share/proj \&lt;br /&gt;
--with-geos=/usr/bin/geos-config \&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo checkinstall  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For subsequent updates execute (not need for the first time):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
svn up&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is required to clean previous configuration and compilation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
svn up&lt;br /&gt;
./configure ... # (use the configure command above)&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL-GRASS-Plugin ===&lt;br /&gt;
&lt;br /&gt;
See: https://github.com/OSGeo/gdal-grass&lt;br /&gt;
&lt;br /&gt;
* get the plugin from [https://github.com/OSGeo/gdal-grass/releases GitHub]: &amp;quot;gdal-grass-X.Y.Z.tar.gz&amp;quot; using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# update version number accordingly!&lt;br /&gt;
wget https://github.com/OSGeo/gdal-grass/archive/refs/tags/1.0.2.tar.gz -O gdal-grass-1.0.2.tar.gz&lt;br /&gt;
tar xvzf gdal-grass-1.0.2.tar.gz&lt;br /&gt;
cd gdal-grass-1.0.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf.d/grass.conf&amp;lt;/source&amp;gt;   or add in   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; the GRASS library path: &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# GRASS GIS stable library path (adapt as needed)&lt;br /&gt;
/usr/local/src/releasebranch_8_4/lib&lt;br /&gt;
&lt;br /&gt;
# GRASS GIS development version library path (adapt as needed)&lt;br /&gt;
/usr/local/src/grass_master/lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* optionally, clean previous configurations/compilations&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make distclean&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure -- point to GRASS installation/binaries&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; ./configure \&lt;br /&gt;
 --prefix=/usr/local \&lt;br /&gt;
 --with-gdal=/usr/local/bin/gdal-config \&lt;br /&gt;
 --with-grass=/usr/local/grass/ \&lt;br /&gt;
 --with-autoload=&amp;quot;/usr/local/lib64/gdalplugins/&amp;quot; \&lt;br /&gt;
 --with-ld-shared=&amp;quot;g++ -shared&amp;quot;&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install using checkinstall&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make -j2  &amp;amp;&amp;amp;  sudo checkinstall&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Post compilation/installation control =&lt;br /&gt;
&lt;br /&gt;
* For a recommended quick-check read the [https://grass.osgeo.org/wiki/Compile_and_install_GRASS_and_QGIS_with_GDAL/OGR_Plugin#Troubleshooting Troubleshooting] section at [https://grass.osgeo.org/wiki/Compile_and_install_GDAL-GRASS_plugin Compile_and_install_GDAL-GRASS_plugin]&lt;br /&gt;
&lt;br /&gt;
* in case of errors in future compilation attempts, remember to remove program binaries and files created with the &amp;quot;configuration&amp;quot; from previous compilations with&lt;br /&gt;
 make distclean&lt;br /&gt;
&lt;br /&gt;
* another common mistake is compiling a module against some GRASS version and then try to run it through another GRASS version. The solution is to recompile the affected module or, in case there are multiple GRASS installations, set up properly LD_LIBRARY_PATH paths.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Removal of GRASS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get rid of a GRASS binaries installation, delete (update version numbers accordingly)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/grass&amp;lt;/source&amp;gt; (directory, binaries location)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/bin/grass&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/home/username/.grassrc8&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
&lt;br /&gt;
If wanted, delete also the complete source code:&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src/grass_release&amp;lt;/source&amp;gt; (directory, source code location)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To remove &amp;lt;code&amp;gt;grass&amp;lt;/code&amp;gt; (or any other package) which was installed by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;checkinstall&amp;lt;/source&amp;gt;, use &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dpkg&amp;lt;/source&amp;gt;, e.g.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dpkg -r grass # package name defined at installation is important&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Docker: https://grass.osgeo.org/download/docker/&lt;br /&gt;
* [[Ubuntu Packaging]]&lt;br /&gt;
* [[GRASS in Debian]]&lt;br /&gt;
&lt;br /&gt;
= Archived Notes =&lt;br /&gt;
&lt;br /&gt;
Notes that concern the configuration and compilation of GRASS GIS and its dependencies for older versions of Ubuntu-Linux.&lt;br /&gt;
&lt;br /&gt;
[[Category: Compilation]]&lt;br /&gt;
[[Category: Installation]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28807</id>
		<title>Compile and Install Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28807"/>
		<updated>2026-03-10T09:39:24Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Update compilation dependencies Ubuntu 24.04&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; id=&amp;quot;attention&amp;quot; style=&amp;quot;-moz-border-radius:30px; border: 1px double #35824B; margin-bottom: 1.5em; padding: 1em; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 150%; text-align: left;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#35824B&amp;quot;&amp;gt;'''Attention'''&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;span style=&amp;quot;color:#333333&amp;quot;&amp;gt;'''The following instructions describe the compilation and installation of GRASS GIS and its required dependencies completely from the source on Ubuntu based systems. Please, prefer pre-compiled packages over the manual way described below unless you know ''what'' and ''how'', you want to learn and help testing.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quick instructions ==&lt;br /&gt;
&lt;br /&gt;
These instructions should work fine on Ubuntu distributions:&lt;br /&gt;
&lt;br /&gt;
=== Install geospatial dependencies ===&lt;br /&gt;
&lt;br /&gt;
1. Install some dependencies (PROJ, GEOS, GDAL libraries) and the compiler tools &amp;lt;br /&amp;gt;&lt;br /&gt;
(note: you need Python 3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
# install PROJ&lt;br /&gt;
sudo apt install libproj-dev proj-data proj-bin unzip -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# optionally, install (selected) datum grid files&lt;br /&gt;
sudo apt-get install proj-data&lt;br /&gt;
&lt;br /&gt;
# install GEOS&lt;br /&gt;
sudo apt install libgeos-dev -y&lt;br /&gt;
&lt;br /&gt;
# install GDAL&lt;br /&gt;
sudo apt install libgdal-dev python3-gdal gdal-bin -y&lt;br /&gt;
&lt;br /&gt;
# install PDAL (optional)&lt;br /&gt;
sudo apt install libpdal-dev pdal -y&lt;br /&gt;
&lt;br /&gt;
# Python3 precedence over Python2 (which is end-of-life since 2019, so it should be the default anyway)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install compiler stuff and further dependencies.&lt;br /&gt;
Note: this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
&lt;br /&gt;
=== Install further compilation dependencies (Ubuntu 24.04) ===&lt;br /&gt;
&lt;br /&gt;
For Ubuntu 24.04, including wxPython packages for GUI support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For NVIZ on Ubuntu, to also have video support (optional):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  ffmpeg libavutil-dev \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source code download ===&lt;br /&gt;
Now we have all &amp;quot;ingredients&amp;quot; readily installed on our system.&lt;br /&gt;
&lt;br /&gt;
'''Source code download''':&lt;br /&gt;
&lt;br /&gt;
There a two ways of getting the source code: either use a) the weekly snapshot (cannot be updated, or b) the source code from the GitHub repository (you can update your local copy easily in future):&lt;br /&gt;
&lt;br /&gt;
'''a) Download of the weekly source code snapshot (not recommended):'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# download latest GRASS GIS 8.x stable release source code:&lt;br /&gt;
mkdir $HOME/src/&lt;br /&gt;
cd  $HOME/src/&lt;br /&gt;
wget https://grass.osgeo.org/grass84/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# Unpack source code package and remove tarball archive:&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz &lt;br /&gt;
&lt;br /&gt;
# rename source code directory (yes, with the questionmarks!)&lt;br /&gt;
mv grass-8.4.git_src_snapshot_20??_??_?? grass-8.4.latest&lt;br /&gt;
cd grass-8.4.latest/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''b) Download of the current development version from GitHub (adopt the path below accordingly)'''&lt;br /&gt;
&lt;br /&gt;
Note: to find the current version number (8_x), see https://github.com/OSGeo/grass/branches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install git&lt;br /&gt;
git clone https://github.com/OSGeo/grass.git grass-8.4.latest.git&lt;br /&gt;
cd grass-8.4.latest.git/&lt;br /&gt;
git checkout releasebranch_8_4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
Now we can '''compile''' the source code in order to generate the GRASS GIS binaries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;configure&amp;quot; source code for local machine (checks for CPU type etc):&lt;br /&gt;
MYCFLAGS='-O2 -fPIC -fno-common -fexceptions -std=gnu99 -fstack-protector -m64'&lt;br /&gt;
#MYCXXFLAGS=''&lt;br /&gt;
MYLDFLAGS='-Wl,--no-undefined -Wl,-z,now'&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;$MYLDFLAGS&amp;quot; CFLAGS=&amp;quot;$MYCFLAGS&amp;quot; CXXFLAGS=&amp;quot;$MYCXXFLAGS&amp;quot; ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --enable-largefile \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-pdal \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-wxwidgets \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-ffmpeg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now compile the source code (this will take some time as it generates binary code from the source code):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: the more CPUs you have, the higher the -j number may be set to&lt;br /&gt;
# here: build using 4 CPU cores&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Install resulting GRASS GIS binaries into /usr/local/:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start GRASS GIS in the terminal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Done &amp;amp; enjoy!'''&lt;br /&gt;
&lt;br /&gt;
== Hints ==&lt;br /&gt;
&lt;br /&gt;
* Usually, the installation of compiled code is done by using the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make&amp;lt;/source&amp;gt; tool. Alternatively, this can be done by using the ''checkinstall'' tool (i.e., &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo checkinstall&amp;lt;/source&amp;gt;  instead of  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo make install&amp;lt;/source&amp;gt;) which eases off removal of packages. If ''checkinstall'' fails to deliver, please note some related bugs: [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/78455 78455] and [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/599163 599163]. Useful information on using ''checkinstall'': [https://help.ubuntu.com/community/CompilingEasyHowTo Compiling things on Ubuntu the Easy Way].&lt;br /&gt;
&lt;br /&gt;
* In multi-core processors, the compilation performance can be boosted by using  ''-j''  switches (e.g. &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j2&amp;lt;/source&amp;gt;  or  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j3&amp;lt;/source&amp;gt;  or even &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j4&amp;lt;/source&amp;gt;) which specify the number of jobs (commands) to run simultaneously.&lt;br /&gt;
&lt;br /&gt;
== Pre-compiled packages and backports ==&lt;br /&gt;
&lt;br /&gt;
'''Pre-compiled packages and backports''' are available from [https://wiki.ubuntu.com/UbuntuGIS UbuntuGIS] via their [https://launchpad.net/~ubuntugis/+archive/ppa/ ppa.launchpad stable] and [https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable ppa.launchpad unstable] repositories. '''This is by far the simplest and fastest solution. Please prefer it over the manual way of compiling source code yourself as described below.'''&lt;br /&gt;
&lt;br /&gt;
Version overview:&lt;br /&gt;
* noble 8.3&lt;br /&gt;
* jammy (22.04): 8.3&lt;br /&gt;
* focal (20.04 LTS): 8.2&lt;br /&gt;
* bionic (18.04 LTS): 7.8&lt;br /&gt;
* xenial (16.04 LTS): 7.6&lt;br /&gt;
* trusty (14.04 LTS): 7.4&lt;br /&gt;
&lt;br /&gt;
a) Daily ready-to-install GRASS GIS builds of the stable release branch and master are available from ''ppa:grass/grass-devel'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-devel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Latest packaged stable version of GRASS GIS is available from ''ppa:grass/grass-stable'':&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ppa&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-stable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Current stable Ubuntu version ===&lt;br /&gt;
First, update the system from the repositories&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install ''SQLite'', ''git'' and ''dependencies'' for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN (some additional packages may be required in this case); the following action will also install various dependencies (listed in the command line as &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;...):&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  python python-dev \&lt;br /&gt;
  python-opengl \&lt;br /&gt;
  python-wxversion python-wxtools python-wxgtk3.2 \&lt;br /&gt;
  python-dateutil libgsl-dev python-numpy \&lt;br /&gt;
  wx3.2-headers wx-common libwxgtk3.2-dev \&lt;br /&gt;
  libwxbase3.2-dev   \&lt;br /&gt;
  libncurses5-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff5-dev libpnglite-dev \&lt;br /&gt;
  libcairo libcairo-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libreadline6 libreadline6-dev libfreetype6-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  resolvconf \&lt;br /&gt;
  libjasper-dev \&lt;br /&gt;
  git \&lt;br /&gt;
  libav-tools libavutil-dev ffmpeg2theora \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following dependencies concern Ubuntu 24.04 LTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* See the additional packages bellow and in other sections and install them. Note that some of them are [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md required], namely PROJ, GEOS and GDAL. If you don't have special requirements, it is usually enough just to install PROJ, GEOS and GDAL from repository (rather then compile them manually).&lt;br /&gt;
&lt;br /&gt;
* for mysql support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libmysqlclient-dev&amp;lt;/source&amp;gt; is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for netcdf support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;netcdf-bin&amp;lt;/source&amp;gt; and &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libnetcdf-dev&amp;lt;/source&amp;gt;  is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install netcdf-bin libnetcdf-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for {{AddonCmd|i.spec.unmix}} Addon support, install LAPACK and BLAS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libblas-dev liblapack-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a directory as a simple user where all source code is going to be stored -- in this example, a directory named &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local&amp;lt;/source&amp;gt; is created &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir /usr/local/src&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* take over directories ownerships ('''replace''' below the terms ''userid'' and ''groupid'' with a real &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;userid&amp;lt;/source&amp;gt;): &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown userid:groupid /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* similarly, grant &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;rwx&amp;lt;/source&amp;gt; (read-write-execute) permissions for our ''userid'' and ''groupid'' onto the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; directory: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chmod ug+rwx /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL ==&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libproj-dev proj-data proj-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/local/share/proj/&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/share/proj/&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# probably you also need to additionally install &amp;quot;libgeos-c1v5&amp;quot;&lt;br /&gt;
sudo apt-get install libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/local/bin/geos-config&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/bin/geos-config&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package (possibly without support for datumgrid):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libgdal-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For support of WMS in wxGUI install Python GDAL bindings and GDAL executables:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python-gdal gdal-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install also the required extra packages (note the message: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;)&lt;br /&gt;
* Look out for packages to be removed by this operation -- this is most likely caused by incompatible package versions. Fix these problems in advance using commands like the following: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install &amp;lt;package&amp;gt;=&amp;lt;required.version&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GRASS-GIS ===&lt;br /&gt;
&lt;br /&gt;
[[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]]&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL from GIS.lab PPA==&lt;br /&gt;
&lt;br /&gt;
Ivan Mincik has made all required packages available in his [https://launchpad.net/~imincik/+archive/ubuntu/gis PPA]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:imincik/gis&lt;br /&gt;
sudo apt-get install libproj-dev libgdal-dev python-gdal libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can either also install GRASS GIS from there or compile it yourself (see [[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]])&lt;br /&gt;
&lt;br /&gt;
== Compile from source ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
* within the directory &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src&amp;lt;/source&amp;gt; (create it if it does not exist) checkout &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; from its GitHub repository: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
https://github.com/OSGeo/PROJ/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get [http://download.osgeo.org/proj/proj-datumgrid-1.8.zip '''proj-datumgrid-1.8.zip'''] or related files from [https://trac.osgeo.org/proj proj' trac] and move it under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj/nad&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget http://download.osgeo.org/proj/proj-datumgrid-1.8.zip&lt;br /&gt;
mv proj-datumgrid-1.8.zip /usr/local/src/proj/nad&lt;br /&gt;
cd /usr/local/src/proj/nad&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* decompress it &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
unzip proj-datumgrid-1.8.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* go back to the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; directory &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/proj&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ensure that &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/lib&amp;lt;/source&amp;gt; is added to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; and afterwards run &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* finally, go back to the parent directory simply by instructing&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
* download '''geos-3.12.2.tar.bz2''' from [https://libgeos.org/ https://libgeos.org/] using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt; &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://download.osgeo.org/geos/geos-3.12.2.tar.bz2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to the &amp;quot;source-code&amp;quot; directory and decompress&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/&lt;br /&gt;
bunzip2 geos-3.12.2.tar.bz2&lt;br /&gt;
tar xvf  geos-3.12.2.tar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to geos directory  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd geos-3.12.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* do not forget to execute &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
'''Note''', GDAL must be compiled '''without''' GRASS support!&lt;br /&gt;
&lt;br /&gt;
* download the current stable version (see https://github.com/OSGeo/gdal/releases for latest version):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to compile GDAL:&lt;br /&gt;
https://gdal.org/development/building_from_source.html&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
Note the differences between different GRASS GIS version (branches) in download and cofiguration. Note also the changes required if you installed some of the dependencies from packages (rather then compiled them yourself).&lt;br /&gt;
&lt;br /&gt;
To fully understand the build process, read the  &amp;lt;code&amp;gt;INSTALL&amp;lt;/code&amp;gt; file, which is located in GRASS' source code root directory.&lt;br /&gt;
&lt;br /&gt;
''' Getting GRASS' source code '''&lt;br /&gt;
&lt;br /&gt;
Select from one of the GRASS GIS versions and download the source code:&lt;br /&gt;
&lt;br /&gt;
https://github.com/OSGeo/grass/releases/&lt;br /&gt;
&lt;br /&gt;
''' Configure, Compile and Install'''&lt;br /&gt;
&lt;br /&gt;
Enter the directory with the source code, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''GRASS GIS example configuration''' (which can/should be adjusted according to specific needs):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CFLAGS=&amp;quot;-O2 -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure \&lt;br /&gt;
--with-nls \&lt;br /&gt;
--with-cxx \&lt;br /&gt;
--with-proj-share=/usr/local/share/proj/ \&lt;br /&gt;
--with-geos=/usr/local/bin/geos-config \&lt;br /&gt;
--with-wxwidgets \&lt;br /&gt;
--with-cairo \&lt;br /&gt;
--with-opengl-libs=/usr/include/GL \&lt;br /&gt;
--with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
--with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
--with-sqlite=yes \&lt;br /&gt;
--with-mysql=yes --with-mysql-includes=&amp;quot;/usr/include/mysql&amp;quot; \&lt;br /&gt;
--with-odbc=no \&lt;br /&gt;
--with-pdal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Note''', the above configuration uses the &amp;lt;code&amp;gt;PROJ&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GEOS&amp;lt;/code&amp;gt; packages compiled from the source. In the case that pre-compiled versions from the repository are required, remove the above corresponding lines to use the &amp;quot;defaults&amp;quot;, i.e. (note the backslashe at the end of each line)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
--with-proj-share=/usr/share/proj \&lt;br /&gt;
--with-geos=/usr/bin/geos-config \&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo checkinstall  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For subsequent updates execute (not need for the first time):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
svn up&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is required to clean previous configuration and compilation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
svn up&lt;br /&gt;
./configure ... # (use the configure command above)&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL-GRASS-Plugin ===&lt;br /&gt;
&lt;br /&gt;
See: https://github.com/OSGeo/gdal-grass&lt;br /&gt;
&lt;br /&gt;
* get the plugin from [https://github.com/OSGeo/gdal-grass/releases GitHub]: &amp;quot;gdal-grass-X.Y.Z.tar.gz&amp;quot; using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# update version number accordingly!&lt;br /&gt;
wget https://github.com/OSGeo/gdal-grass/archive/refs/tags/1.0.2.tar.gz -O gdal-grass-1.0.2.tar.gz&lt;br /&gt;
tar xvzf gdal-grass-1.0.2.tar.gz&lt;br /&gt;
cd gdal-grass-1.0.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf.d/grass.conf&amp;lt;/source&amp;gt;   or add in   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; the GRASS library path: &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# GRASS GIS stable library path (adapt as needed)&lt;br /&gt;
/usr/local/src/releasebranch_8_4/lib&lt;br /&gt;
&lt;br /&gt;
# GRASS GIS development version library path (adapt as needed)&lt;br /&gt;
/usr/local/src/grass_master/lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* optionally, clean previous configurations/compilations&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make distclean&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure -- point to GRASS installation/binaries&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; ./configure \&lt;br /&gt;
 --prefix=/usr/local \&lt;br /&gt;
 --with-gdal=/usr/local/bin/gdal-config \&lt;br /&gt;
 --with-grass=/usr/local/grass/ \&lt;br /&gt;
 --with-autoload=&amp;quot;/usr/local/lib64/gdalplugins/&amp;quot; \&lt;br /&gt;
 --with-ld-shared=&amp;quot;g++ -shared&amp;quot;&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install using checkinstall&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make -j2  &amp;amp;&amp;amp;  sudo checkinstall&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Post compilation/installation control =&lt;br /&gt;
&lt;br /&gt;
* For a recommended quick-check read the [https://grass.osgeo.org/wiki/Compile_and_install_GRASS_and_QGIS_with_GDAL/OGR_Plugin#Troubleshooting Troubleshooting] section at [https://grass.osgeo.org/wiki/Compile_and_install_GDAL-GRASS_plugin Compile_and_install_GDAL-GRASS_plugin]&lt;br /&gt;
&lt;br /&gt;
* in case of errors in future compilation attempts, remember to remove program binaries and files created with the &amp;quot;configuration&amp;quot; from previous compilations with&lt;br /&gt;
 make distclean&lt;br /&gt;
&lt;br /&gt;
* another common mistake is compiling a module against some GRASS version and then try to run it through another GRASS version. The solution is to recompile the affected module or, in case there are multiple GRASS installations, set up properly LD_LIBRARY_PATH paths.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Removal of GRASS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get rid of a GRASS binaries installation, delete (update version numbers accordingly)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/grass&amp;lt;/source&amp;gt; (directory, binaries location)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/bin/grass&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/home/username/.grassrc8&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
&lt;br /&gt;
If wanted, delete also the complete source code:&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src/grass_release&amp;lt;/source&amp;gt; (directory, source code location)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To remove &amp;lt;code&amp;gt;grass&amp;lt;/code&amp;gt; (or any other package) which was installed by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;checkinstall&amp;lt;/source&amp;gt;, use &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dpkg&amp;lt;/source&amp;gt;, e.g.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dpkg -r grass # package name defined at installation is important&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Docker: https://grass.osgeo.org/download/docker/&lt;br /&gt;
* [[Ubuntu Packaging]]&lt;br /&gt;
* [[GRASS in Debian]]&lt;br /&gt;
&lt;br /&gt;
= Archived Notes =&lt;br /&gt;
&lt;br /&gt;
Notes that concern the configuration and compilation of GRASS GIS and its dependencies for older versions of Ubuntu-Linux.&lt;br /&gt;
&lt;br /&gt;
[[Category: Compilation]]&lt;br /&gt;
[[Category: Installation]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28806</id>
		<title>Compile and Install Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install_Ubuntu&amp;diff=28806"/>
		<updated>2026-03-10T09:33:39Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Update to Ubuntu 24.04 version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; id=&amp;quot;attention&amp;quot; style=&amp;quot;-moz-border-radius:30px; border: 1px double #35824B; margin-bottom: 1.5em; padding: 1em; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: 150%; text-align: left;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#35824B&amp;quot;&amp;gt;'''Attention'''&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;span style=&amp;quot;color:#333333&amp;quot;&amp;gt;'''The following instructions describe the compilation and installation of GRASS GIS and its required dependencies completely from the source on Ubuntu based systems. Please, prefer pre-compiled packages over the manual way described below unless you know ''what'' and ''how'', you want to learn and help testing.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quick instructions ==&lt;br /&gt;
&lt;br /&gt;
These instructions should work fine on Ubuntu distributions:&lt;br /&gt;
&lt;br /&gt;
=== Install geospatial dependencies ===&lt;br /&gt;
&lt;br /&gt;
1. Install some dependencies (PROJ, GEOS, GDAL libraries) and the compiler tools &amp;lt;br /&amp;gt;&lt;br /&gt;
(note: you need Python 3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
&lt;br /&gt;
# install PROJ&lt;br /&gt;
sudo apt install libproj-dev proj-data proj-bin unzip -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# optionally, install (selected) datum grid files&lt;br /&gt;
sudo apt-get install proj-data&lt;br /&gt;
&lt;br /&gt;
# install GEOS&lt;br /&gt;
sudo apt install libgeos-dev -y&lt;br /&gt;
&lt;br /&gt;
# install GDAL&lt;br /&gt;
sudo apt install libgdal-dev python3-gdal gdal-bin -y&lt;br /&gt;
&lt;br /&gt;
# install PDAL (optional)&lt;br /&gt;
sudo apt install libpdal-dev pdal -y&lt;br /&gt;
&lt;br /&gt;
# Python3 precedence over Python2 (which is end-of-life since 2019, so it should be the default anyway)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install compiler stuff and further dependencies.&lt;br /&gt;
Note: this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
&lt;br /&gt;
=== Install further compilation dependencies (Ubuntu 22.04) ===&lt;br /&gt;
&lt;br /&gt;
For Ubuntu 22.04:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ ccache \&lt;br /&gt;
  python3 python3-dev python3-pip \&lt;br /&gt;
  python3-opengl python3-wxgtk4.0 \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  wx3.0-headers wx-common libwxgtk3.0-gtk3-dev \&lt;br /&gt;
  libwxbase3.0-dev   \&lt;br /&gt;
  libncurses5-dev \&lt;br /&gt;
  libbz2-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff5-dev libpnglite-dev \&lt;br /&gt;
  libcairo2 libcairo2-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libpq-dev libreadline-dev \&lt;br /&gt;
  libfreetype6-dev libfftw3-3 \&lt;br /&gt;
  libfftw3-dev libboost-thread-dev \&lt;br /&gt;
  libboost-program-options-dev git \&lt;br /&gt;
  libzstd-dev checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript wget -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For NVIZ on Ubuntu:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  ffmpeg libavutil-dev ffmpeg2theora \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update wxpython:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# be sure to pick the correct Ubuntu version&lt;br /&gt;
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source code download ===&lt;br /&gt;
Now we have all &amp;quot;ingredients&amp;quot; readily installed on our system.&lt;br /&gt;
&lt;br /&gt;
'''Source code download''':&lt;br /&gt;
&lt;br /&gt;
There a two ways of getting the source code: either use a) the weekly snapshot (cannot be updated, or b) the source code from the GitHub repository (you can update your local copy easily in future):&lt;br /&gt;
&lt;br /&gt;
'''a) Download of the weekly source code snapshot (not recommended):'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# download latest GRASS GIS 8.x stable release source code:&lt;br /&gt;
mkdir $HOME/src/&lt;br /&gt;
cd  $HOME/src/&lt;br /&gt;
wget https://grass.osgeo.org/grass84/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# Unpack source code package and remove tarball archive:&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz &lt;br /&gt;
&lt;br /&gt;
# rename source code directory (yes, with the questionmarks!)&lt;br /&gt;
mv grass-8.4.git_src_snapshot_20??_??_?? grass-8.4.latest&lt;br /&gt;
cd grass-8.4.latest/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''b) Download of the current development version from GitHub (adopt the path below accordingly)'''&lt;br /&gt;
&lt;br /&gt;
Note: to find the current version number (8_x), see https://github.com/OSGeo/grass/branches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install git&lt;br /&gt;
git clone https://github.com/OSGeo/grass.git grass-8.4.latest.git&lt;br /&gt;
cd grass-8.4.latest.git/&lt;br /&gt;
git checkout releasebranch_8_4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
Now we can '''compile''' the source code in order to generate the GRASS GIS binaries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;quot;configure&amp;quot; source code for local machine (checks for CPU type etc):&lt;br /&gt;
MYCFLAGS='-O2 -fPIC -fno-common -fexceptions -std=gnu99 -fstack-protector -m64'&lt;br /&gt;
#MYCXXFLAGS=''&lt;br /&gt;
MYLDFLAGS='-Wl,--no-undefined -Wl,-z,now'&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;$MYLDFLAGS&amp;quot; CFLAGS=&amp;quot;$MYCFLAGS&amp;quot; CXXFLAGS=&amp;quot;$MYCXXFLAGS&amp;quot; ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --enable-largefile \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-pdal \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-wxwidgets \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-ffmpeg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now compile the source code (this will take some time as it generates binary code from the source code):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: the more CPUs you have, the higher the -j number may be set to&lt;br /&gt;
# here: build using 4 CPU cores&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Install resulting GRASS GIS binaries into /usr/local/:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start GRASS GIS in the terminal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Done &amp;amp; enjoy!'''&lt;br /&gt;
&lt;br /&gt;
== Hints ==&lt;br /&gt;
&lt;br /&gt;
* Usually, the installation of compiled code is done by using the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make&amp;lt;/source&amp;gt; tool. Alternatively, this can be done by using the ''checkinstall'' tool (i.e., &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo checkinstall&amp;lt;/source&amp;gt;  instead of  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;sudo make install&amp;lt;/source&amp;gt;) which eases off removal of packages. If ''checkinstall'' fails to deliver, please note some related bugs: [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/78455 78455] and [https://bugs.launchpad.net/ubuntu/+source/checkinstall/+bug/599163 599163]. Useful information on using ''checkinstall'': [https://help.ubuntu.com/community/CompilingEasyHowTo Compiling things on Ubuntu the Easy Way].&lt;br /&gt;
&lt;br /&gt;
* In multi-core processors, the compilation performance can be boosted by using  ''-j''  switches (e.g. &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j2&amp;lt;/source&amp;gt;  or  &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j3&amp;lt;/source&amp;gt;  or even &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;make -j4&amp;lt;/source&amp;gt;) which specify the number of jobs (commands) to run simultaneously.&lt;br /&gt;
&lt;br /&gt;
== Pre-compiled packages and backports ==&lt;br /&gt;
&lt;br /&gt;
'''Pre-compiled packages and backports''' are available from [https://wiki.ubuntu.com/UbuntuGIS UbuntuGIS] via their [https://launchpad.net/~ubuntugis/+archive/ppa/ ppa.launchpad stable] and [https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable ppa.launchpad unstable] repositories. '''This is by far the simplest and fastest solution. Please prefer it over the manual way of compiling source code yourself as described below.'''&lt;br /&gt;
&lt;br /&gt;
Version overview:&lt;br /&gt;
* noble 8.3&lt;br /&gt;
* jammy (22.04): 8.3&lt;br /&gt;
* focal (20.04 LTS): 8.2&lt;br /&gt;
* bionic (18.04 LTS): 7.8&lt;br /&gt;
* xenial (16.04 LTS): 7.6&lt;br /&gt;
* trusty (14.04 LTS): 7.4&lt;br /&gt;
&lt;br /&gt;
a) Daily ready-to-install GRASS GIS builds of the stable release branch and master are available from ''ppa:grass/grass-devel'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-devel&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Latest packaged stable version of GRASS GIS is available from ''ppa:grass/grass-stable'':&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:ubuntugis/ppa&lt;br /&gt;
sudo add-apt-repository ppa:grass/grass-stable&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Current stable Ubuntu version ===&lt;br /&gt;
First, update the system from the repositories&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install ''SQLite'', ''git'' and ''dependencies'' for compiling PROJ, GEOS, GDAL/OGR, GRASS, GDAL-GRASS-PLUGIN (some additional packages may be required in this case); the following action will also install various dependencies (listed in the command line as &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;...):&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  python python-dev \&lt;br /&gt;
  python-opengl \&lt;br /&gt;
  python-wxversion python-wxtools python-wxgtk3.2 \&lt;br /&gt;
  python-dateutil libgsl-dev python-numpy \&lt;br /&gt;
  wx3.2-headers wx-common libwxgtk3.2-dev \&lt;br /&gt;
  libwxbase3.2-dev   \&lt;br /&gt;
  libncurses5-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff5-dev libpnglite-dev \&lt;br /&gt;
  libcairo libcairo-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libreadline6 libreadline6-dev libfreetype6-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  resolvconf \&lt;br /&gt;
  libjasper-dev \&lt;br /&gt;
  git \&lt;br /&gt;
  libav-tools libavutil-dev ffmpeg2theora \&lt;br /&gt;
  libffmpegthumbnailer-dev \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following dependencies concern Ubuntu 24.04 LTS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc-s1 g++ \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libtiff-dev libpnglite-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  systemd-resolved \&lt;br /&gt;
  git \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  cmake ccache \&lt;br /&gt;
  python3-opengl libwxbase3.2-1t64 libwxgtk3.2-dev \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  cairo-dock libcairo2-dev \&lt;br /&gt;
  libpq-dev \&lt;br /&gt;
  libfreetype-dev \&lt;br /&gt;
  libfftw3-dev libfftw3-single3 libfftw3-double3 \&lt;br /&gt;
  libavcodec-dev \&lt;br /&gt;
  libxmu-dev \&lt;br /&gt;
  libavformat-dev libswscale-dev \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* See the additional packages bellow and in other sections and install them. Note that some of them are [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md required], namely PROJ, GEOS and GDAL. If you don't have special requirements, it is usually enough just to install PROJ, GEOS and GDAL from repository (rather then compile them manually).&lt;br /&gt;
&lt;br /&gt;
* for mysql support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libmysqlclient-dev&amp;lt;/source&amp;gt; is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for netcdf support, &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;netcdf-bin&amp;lt;/source&amp;gt; and &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;libnetcdf-dev&amp;lt;/source&amp;gt;  is required&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install netcdf-bin libnetcdf-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* for {{AddonCmd|i.spec.unmix}} Addon support, install LAPACK and BLAS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libblas-dev liblapack-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create a directory as a simple user where all source code is going to be stored -- in this example, a directory named &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local&amp;lt;/source&amp;gt; is created &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir /usr/local/src&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* take over directories ownerships ('''replace''' below the terms ''userid'' and ''groupid'' with a real &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;userid&amp;lt;/source&amp;gt;): &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown userid:groupid /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* similarly, grant &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;rwx&amp;lt;/source&amp;gt; (read-write-execute) permissions for our ''userid'' and ''groupid'' onto the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;src&amp;lt;/source&amp;gt; directory: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chmod ug+rwx /usr/local/src&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL ==&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libproj-dev proj-data proj-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/local/share/proj/&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-proj-share=/usr/share/proj/&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# probably you also need to additionally install &amp;quot;libgeos-c1v5&amp;quot;&lt;br /&gt;
sudo apt-get install libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In the call to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;./configure&amp;lt;/source&amp;gt; for [[#GRASS|GRASS]], replace &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/local/bin/geos-config&amp;lt;/source&amp;gt; by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;--with-geos=/usr/bin/geos-config&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dev&amp;lt;/source&amp;gt; package (possibly without support for datumgrid):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libgdal-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For support of WMS in wxGUI install Python GDAL bindings and GDAL executables:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python-gdal gdal-bin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install also the required extra packages (note the message: &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;The following extra packages will be installed:&amp;lt;/source&amp;gt;)&lt;br /&gt;
* Look out for packages to be removed by this operation -- this is most likely caused by incompatible package versions. Fix these problems in advance using commands like the following: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install &amp;lt;package&amp;gt;=&amp;lt;required.version&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GRASS-GIS ===&lt;br /&gt;
&lt;br /&gt;
[[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]]&lt;br /&gt;
&lt;br /&gt;
== Using pre-compiled dev Packages for PROJ, GEOS and GDAL from GIS.lab PPA==&lt;br /&gt;
&lt;br /&gt;
Ivan Mincik has made all required packages available in his [https://launchpad.net/~imincik/+archive/ubuntu/gis PPA]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:imincik/gis&lt;br /&gt;
sudo apt-get install libproj-dev libgdal-dev python-gdal libgeos-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can either also install GRASS GIS from there or compile it yourself (see [[Compile_and_Install_Ubuntu#GRASS_GIS|Jump to sub-section GRASS-GIS below]])&lt;br /&gt;
&lt;br /&gt;
== Compile from source ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PROJ ===&lt;br /&gt;
&lt;br /&gt;
* within the directory &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src&amp;lt;/source&amp;gt; (create it if it does not exist) checkout &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; from its GitHub repository: &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
https://github.com/OSGeo/PROJ/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get [http://download.osgeo.org/proj/proj-datumgrid-1.8.zip '''proj-datumgrid-1.8.zip'''] or related files from [https://trac.osgeo.org/proj proj' trac] and move it under &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj/nad&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget http://download.osgeo.org/proj/proj-datumgrid-1.8.zip&lt;br /&gt;
mv proj-datumgrid-1.8.zip /usr/local/src/proj/nad&lt;br /&gt;
cd /usr/local/src/proj/nad&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* decompress it &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
unzip proj-datumgrid-1.8.zip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* go back to the &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;proj&amp;lt;/source&amp;gt; directory &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/proj&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ensure that &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/lib&amp;lt;/source&amp;gt; is added to &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; and afterwards run &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* finally, go back to the parent directory simply by instructing&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GEOS ===&lt;br /&gt;
&lt;br /&gt;
* download '''geos-3.12.2.tar.bz2''' from [https://libgeos.org/ https://libgeos.org/] using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt; &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://download.osgeo.org/geos/geos-3.12.2.tar.bz2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to the &amp;quot;source-code&amp;quot; directory and decompress&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/local/src/&lt;br /&gt;
bunzip2 geos-3.12.2.tar.bz2&lt;br /&gt;
tar xvf  geos-3.12.2.tar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* if required, clean previous configuration &amp;amp; compilation  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* move to geos directory  &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd geos-3.12.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* simple configure, compile and install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp;  make  &amp;amp;&amp;amp;  sudo make install&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./configure  &amp;amp;&amp;amp; make -j2  &amp;amp;&amp;amp;  sudo checkinstall&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* do not forget to execute &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL ===&lt;br /&gt;
&lt;br /&gt;
'''Note''', GDAL must be compiled '''without''' GRASS support!&lt;br /&gt;
&lt;br /&gt;
* download the current stable version (see https://github.com/OSGeo/gdal/releases for latest version):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to compile GDAL:&lt;br /&gt;
https://gdal.org/development/building_from_source.html&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS ===&lt;br /&gt;
&lt;br /&gt;
Note the differences between different GRASS GIS version (branches) in download and cofiguration. Note also the changes required if you installed some of the dependencies from packages (rather then compiled them yourself).&lt;br /&gt;
&lt;br /&gt;
To fully understand the build process, read the  &amp;lt;code&amp;gt;INSTALL&amp;lt;/code&amp;gt; file, which is located in GRASS' source code root directory.&lt;br /&gt;
&lt;br /&gt;
''' Getting GRASS' source code '''&lt;br /&gt;
&lt;br /&gt;
Select from one of the GRASS GIS versions and download the source code:&lt;br /&gt;
&lt;br /&gt;
https://github.com/OSGeo/grass/releases/&lt;br /&gt;
&lt;br /&gt;
''' Configure, Compile and Install'''&lt;br /&gt;
&lt;br /&gt;
Enter the directory with the source code, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''GRASS GIS example configuration''' (which can/should be adjusted according to specific needs):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CFLAGS=&amp;quot;-O2 -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure \&lt;br /&gt;
--with-nls \&lt;br /&gt;
--with-cxx \&lt;br /&gt;
--with-proj-share=/usr/local/share/proj/ \&lt;br /&gt;
--with-geos=/usr/local/bin/geos-config \&lt;br /&gt;
--with-wxwidgets \&lt;br /&gt;
--with-cairo \&lt;br /&gt;
--with-opengl-libs=/usr/include/GL \&lt;br /&gt;
--with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
--with-postgres=yes --with-postgres-includes=&amp;quot;/usr/include/postgresql&amp;quot; \&lt;br /&gt;
--with-sqlite=yes \&lt;br /&gt;
--with-mysql=yes --with-mysql-includes=&amp;quot;/usr/include/mysql&amp;quot; \&lt;br /&gt;
--with-odbc=no \&lt;br /&gt;
--with-pdal&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Note''', the above configuration uses the &amp;lt;code&amp;gt;PROJ&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GEOS&amp;lt;/code&amp;gt; packages compiled from the source. In the case that pre-compiled versions from the repository are required, remove the above corresponding lines to use the &amp;quot;defaults&amp;quot;, i.e. (note the backslashe at the end of each line)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
--with-proj-share=/usr/share/proj \&lt;br /&gt;
--with-geos=/usr/bin/geos-config \&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt; or &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make -j2  &amp;amp;&amp;amp;  sudo checkinstall  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For subsequent updates execute (not need for the first time):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
svn up&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes, it is required to clean previous configuration and compilation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make distclean&lt;br /&gt;
svn up&lt;br /&gt;
./configure ... # (use the configure command above)&lt;br /&gt;
make -j2 &amp;amp;&amp;amp; sudo make install  &amp;amp;&amp;amp;  sudo ldconfig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GDAL-GRASS-Plugin ===&lt;br /&gt;
&lt;br /&gt;
See: https://github.com/OSGeo/gdal-grass&lt;br /&gt;
&lt;br /&gt;
* get the plugin from [https://github.com/OSGeo/gdal-grass/releases GitHub]: &amp;quot;gdal-grass-X.Y.Z.tar.gz&amp;quot; using &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;wget&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# update version number accordingly!&lt;br /&gt;
wget https://github.com/OSGeo/gdal-grass/archive/refs/tags/1.0.2.tar.gz -O gdal-grass-1.0.2.tar.gz&lt;br /&gt;
tar xvzf gdal-grass-1.0.2.tar.gz&lt;br /&gt;
cd gdal-grass-1.0.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* create   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf.d/grass.conf&amp;lt;/source&amp;gt;   or add in   &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/etc/ld.so.conf&amp;lt;/source&amp;gt; the GRASS library path: &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# GRASS GIS stable library path (adapt as needed)&lt;br /&gt;
/usr/local/src/releasebranch_8_4/lib&lt;br /&gt;
&lt;br /&gt;
# GRASS GIS development version library path (adapt as needed)&lt;br /&gt;
/usr/local/src/grass_master/lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* optionally, clean previous configurations/compilations&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make distclean&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure -- point to GRASS installation/binaries&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt; ./configure \&lt;br /&gt;
 --prefix=/usr/local \&lt;br /&gt;
 --with-gdal=/usr/local/bin/gdal-config \&lt;br /&gt;
 --with-grass=/usr/local/grass/ \&lt;br /&gt;
 --with-autoload=&amp;quot;/usr/local/lib64/gdalplugins/&amp;quot; \&lt;br /&gt;
 --with-ld-shared=&amp;quot;g++ -shared&amp;quot;&amp;lt;/source&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* compile &amp;amp; install using checkinstall&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 make -j2  &amp;amp;&amp;amp;  sudo checkinstall&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Post compilation/installation control =&lt;br /&gt;
&lt;br /&gt;
* For a recommended quick-check read the [https://grass.osgeo.org/wiki/Compile_and_install_GRASS_and_QGIS_with_GDAL/OGR_Plugin#Troubleshooting Troubleshooting] section at [https://grass.osgeo.org/wiki/Compile_and_install_GDAL-GRASS_plugin Compile_and_install_GDAL-GRASS_plugin]&lt;br /&gt;
&lt;br /&gt;
* in case of errors in future compilation attempts, remember to remove program binaries and files created with the &amp;quot;configuration&amp;quot; from previous compilations with&lt;br /&gt;
 make distclean&lt;br /&gt;
&lt;br /&gt;
* another common mistake is compiling a module against some GRASS version and then try to run it through another GRASS version. The solution is to recompile the affected module or, in case there are multiple GRASS installations, set up properly LD_LIBRARY_PATH paths.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Removal of GRASS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get rid of a GRASS binaries installation, delete (update version numbers accordingly)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/grass&amp;lt;/source&amp;gt; (directory, binaries location)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/bin/grass&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/home/username/.grassrc8&amp;lt;/source&amp;gt; (file)&lt;br /&gt;
&lt;br /&gt;
If wanted, delete also the complete source code:&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;/usr/local/src/grass_release&amp;lt;/source&amp;gt; (directory, source code location)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To remove &amp;lt;code&amp;gt;grass&amp;lt;/code&amp;gt; (or any other package) which was installed by &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;checkinstall&amp;lt;/source&amp;gt;, use &amp;lt;source lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;dpkg&amp;lt;/source&amp;gt;, e.g.&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dpkg -r grass # package name defined at installation is important&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Docker: https://grass.osgeo.org/download/docker/&lt;br /&gt;
* [[Ubuntu Packaging]]&lt;br /&gt;
* [[GRASS in Debian]]&lt;br /&gt;
&lt;br /&gt;
= Archived Notes =&lt;br /&gt;
&lt;br /&gt;
Notes that concern the configuration and compilation of GRASS GIS and its dependencies for older versions of Ubuntu-Linux.&lt;br /&gt;
&lt;br /&gt;
[[Category: Compilation]]&lt;br /&gt;
[[Category: Installation]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-02-13&amp;diff=28774</id>
		<title>PSC Meeting 2026-02-13</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-02-13&amp;diff=28774"/>
		<updated>2026-02-13T15:12:03Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Participants ==&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* Annual budget request submitted to OSGeo&lt;br /&gt;
* Community Meeting - San Michele: date, planning, budget requests&lt;br /&gt;
* Releases&lt;br /&gt;
* GSoC&lt;br /&gt;
* [https://github.com/OSGeo/grass/blob/main/CONTRIBUTING.md#ai-use-policy AI policy]&lt;br /&gt;
* Plan PSC elections/role changes for later this year (some of us are in PSC since Feb 2021)&lt;br /&gt;
* Budget&lt;br /&gt;
** Where are we at time?&lt;br /&gt;
** Fundraising efforts&lt;br /&gt;
* add your suggestion here...&lt;br /&gt;
&lt;br /&gt;
== Minutes ==&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-02-13&amp;diff=28773</id>
		<title>PSC Meeting 2026-02-13</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2026-02-13&amp;diff=28773"/>
		<updated>2026-02-13T15:06:20Z</updated>

		<summary type="html">&lt;p&gt;Neteler: +Budget&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Participants ==&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* Annual budget request submitted to OSGeo&lt;br /&gt;
* Community Meeting - San Michele: date, planning, budget requests&lt;br /&gt;
* Releases&lt;br /&gt;
* GSoC&lt;br /&gt;
* AI policy&lt;br /&gt;
* Plan PSC elections/role changes for later this year (some of us are in PSC since Feb 2021)&lt;br /&gt;
* Budget&lt;br /&gt;
** Where are we at time?&lt;br /&gt;
** Fundraising efforts&lt;br /&gt;
* add your suggestion here...&lt;br /&gt;
&lt;br /&gt;
== Minutes ==&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GUI&amp;diff=28751</id>
		<title>GUI</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GUI&amp;diff=28751"/>
		<updated>2026-01-21T15:26:06Z</updated>

		<summary type="html">&lt;p&gt;Neteler: +Evolution of the GRASS GUI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Tcl/Tk Graphical User Interface (GUI) ===&lt;br /&gt;
&lt;br /&gt;
The Tcl/Tk GUI based is the classical GRASS user interface in the versions GRASS 4.2-6.3. For details, see the [http://grass.osgeo.org/grass64/manuals/html64_user/gis.m.html GIS Manager user manual] and these [https://web.archive.org/web/20120116091437/http://grass.osgeo.org/screenshots/gui.php#tcltk screenshots].&lt;br /&gt;
&lt;br /&gt;
=== wxPython GUI ===&lt;br /&gt;
&lt;br /&gt;
GRASS's Tcl/Tk graphical user interface is currently undergoing a [[wxGUI|complete rewrite]] using wxPython. It is currently available for testing in GRASS 6.3 and will be the default GUI in GRASS 6.4 and GRASS 7+. See also these [https://grass.osgeo.org/learn/gallery/#user-interface screenshots].&lt;br /&gt;
&lt;br /&gt;
=== Command line ===&lt;br /&gt;
&lt;br /&gt;
Not really a GUI, but loved by advanced GRASS users: the command line interface. Worth learning it!&lt;br /&gt;
&lt;br /&gt;
=== External GUIs: QGIS (Quantum GIS) ===&lt;br /&gt;
&lt;br /&gt;
The [https://qgis.org QGIS software] gives access to key GRASS modules through a user-friendly plugin toolbox. QGIS can view GRASS maps directly alongside GIS data of many other formats. See also these [https://web.archive.org/web/20120116091437/https://grass.osgeo.org/screenshots/gui.php#qgis screenshots].&lt;br /&gt;
&lt;br /&gt;
=== Overview of the GUI evolution ===&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/OSGeo/grass-promo/blob/main/grass-evolution/gui/README.md Evolution of the GRASS GUI]&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_Budget_2026&amp;diff=28750</id>
		<title>GRASS Budget 2026</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_Budget_2026&amp;diff=28750"/>
		<updated>2026-01-09T14:18:25Z</updated>

		<summary type="html">&lt;p&gt;Neteler: link treasurer -&amp;gt; PSC members&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is proposed budget (not necessarily the actual expenses).&lt;br /&gt;
&lt;br /&gt;
== Income ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! USD !! EUR !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Request to OSGeo (general budget) || 2,000.00 || 1,909.48 || OSGeo Projects budget&lt;br /&gt;
|-&lt;br /&gt;
| Expected Donations || 550.00 || 525.11 || Based on average from 2020-2022, $760 2024 (Nov-Nov)&lt;br /&gt;
|-&lt;br /&gt;
| Total income || 2,000.00 || 1,909.48 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Expenses ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! USD !! EUR !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Events, Sprints, Travel ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Travel to multip-project event (e.g., sprint) || 2,200.00 || 2,100.43 || Multiple travels on a continent or one travel to a different continent&lt;br /&gt;
|-&lt;br /&gt;
| Local project sprints and meetups || 500.00 || 477.37 || Community contributions to the sprint through the budget&lt;br /&gt;
|-&lt;br /&gt;
| Subtotal || 2,200.00 || 2,100.43 || &lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Grants ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Community grants || 2,000.00 || 1,909.48 || Community members (including students) can apply with a plan, PSC decides by motion&lt;br /&gt;
|-&lt;br /&gt;
| Subtotal || 2,000.00 || 1,909.48 || &lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Marketing ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| T-shirts, swag for users, conferences, ... || 200.00 || 190.95 || Community members can request for local or global events&lt;br /&gt;
|-&lt;br /&gt;
| Stickers and magnets (as above) || 200.00 || 190.95 || Community members can request for local or global events&lt;br /&gt;
|-&lt;br /&gt;
| Social media management service || 201.60 || 192.48 || Publer in Dec for 1 year 3 accounts&lt;br /&gt;
|-&lt;br /&gt;
| Subtotal || 601.60 || 574.37 || &lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| Total expenses || 4,801.60 || 4,584.29 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Balance ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! USD !! EUR !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Year balance (income - expenses) || -2,801.60 || -2,674.81 || If negative, it needs to be covered by additional fundraising and surplus.&lt;br /&gt;
|-&lt;br /&gt;
| Balance in Open Collective || 7,302.42 || 6,971.93 || State from December 26, 2025&lt;br /&gt;
|-&lt;br /&gt;
| Balance of persistent budget at OSGeo || 2,000.00 || 1,909.48 || 3*500 USD from GSoC 2024 + 1*500 USD from GSOC 2025&lt;br /&gt;
|-&lt;br /&gt;
| EOY balance (year balance + surplus) || 6,500.82 || 6,206.61 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Edits: Ask the [[PSC#Members|treasurer]] about editing this page.&lt;br /&gt;
&lt;br /&gt;
[[Category: Budget]]&lt;br /&gt;
[[Category: 2024]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC&amp;diff=28749</id>
		<title>PSC</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC&amp;diff=28749"/>
		<updated>2026-01-09T14:17:26Z</updated>

		<summary type="html">&lt;p&gt;Neteler: add role &amp;quot;Treasurer&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GRASS Project Steering Committee (PSC) =&lt;br /&gt;
The Project Steering Committee plays a pivotal role in the governance and operational direction of GRASS GIS. &lt;br /&gt;
The PSC meets regularly to discuss organizational and financial aspects of the GRASS project and maintains the [[#PSC meeting agenda and minutes]].&lt;br /&gt;
The PSC is responsible for granting write access to new core developers and approving RFCs ([https://github.com/OSGeo/grass/tree/main/doc/development/rfc Request For Comments]).&lt;br /&gt;
The PSC has its own public [http://lists.osgeo.org/mailman/listinfo/grass-psc mailing list] where [[#Motions]] are passed.&lt;br /&gt;
&lt;br /&gt;
== Members ==&lt;br /&gt;
&lt;br /&gt;
* '''[https://veroandreo.gitlab.io Verónica Andreo]''', (veroandreo * gmail.com), National Research Council (CONICET) - Argentinian Space Agency (CONAE), AR - Chair&lt;br /&gt;
*'''[https://ecodiv.earth/about.html Paulo van Breugel]''', (p.vanbreugel * gmail com), HAS green academy, NL&lt;br /&gt;
*'''[https://idea.isnew.info/ Huidae Cho]''', (grass4u * gmail com), New Mexico State University, USA&lt;br /&gt;
*'''[https://geomatics.fsv.cvut.cz/en/employees/linda-karlovska/ Linda Karlovská]''', (linda.karlovska * seznam cz), Czech Technical University in Prague, CZ&lt;br /&gt;
*'''[https://www.osgeo.org/member/kudrnovsky/ Helmut Kudrnovsky]''', (hellik * web de), Environment Agency Austria, Vienna, AT&lt;br /&gt;
*'''Nicklas Larsson''', (n_larsson * yahoo com), Hungarian National Museum, HU&lt;br /&gt;
*'''[https://www.mundialis.de/neteler/ Markus Neteler]''', (neteler * osgeo org), mundialis, Bonn, DE&lt;br /&gt;
*'''[https://cnr.ncsu.edu/geospatial/people/vaclav-petras/ Vaclav Petráš]''', (wenzeslaus * gmail com), CGA, North Carolina State University, Raleigh NC, USA - Treasurer&lt;br /&gt;
*'''[https://cnr.ncsu.edu/geospatial/people/anna-petrasova Anna Petrášová]''', (kratochanna * gmail com). CGA, North Carolina State University, Raleigh NC, USA&lt;br /&gt;
&lt;br /&gt;
== PSC meeting agenda and minutes ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:4&amp;quot;&amp;gt;&lt;br /&gt;
* [[PSC Meeting 2025-11-14]]&lt;br /&gt;
* [[PSC Meeting 2025-08-08]]&lt;br /&gt;
* [[PSC Meeting 2025-05-23]]&lt;br /&gt;
* [[PSC Meeting 2025-05-09]]&lt;br /&gt;
* [[PSC Meeting 2025-02-14]]&lt;br /&gt;
* [[PSC Meeting 2024-11-22]]&lt;br /&gt;
* [[PSC Meeting 2024-11-08]]&lt;br /&gt;
* [[PSC Meeting 2024-08-09]]&lt;br /&gt;
* [[PSC Meeting 2024-06-14]]&lt;br /&gt;
* [[PSC Meeting 2024-05-10]]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20240209 PSC Meeting 2024-02-09]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20231110 PSC Meeting 2023-11-10]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20230811 PSC Meeting 2023-08-11]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20230512 PSC Meeting 2023-05-12]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20230210 PSC Meeting 2023-02-10]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20221111 PSC Meeting 2022-11-11]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20220812 PSC Meeting 2022-08-12]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20220513 PSC Meeting 2022-05-13]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20220211 PSC Meeting 2022-02-11]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20211112 PSC Meeting 2021-11-12]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20210729 PSC Meeting 2021-07-29]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20210511 PSC Meeting 2021-05-11]&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20210203 PSC Meeting 2021-02-03]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motions ==&lt;br /&gt;
&lt;br /&gt;
Motions are approved at meetings or on the grass-psc mailing list. Listed motions are approved unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
=== 2025 ===&lt;br /&gt;
&lt;br /&gt;
* Reimburse Alen Mangafic for stickers for FOSS4G Auckland 2025 (NZ) (14 Nov 2025, [[PSC Meeting 2025-11-14]])&lt;br /&gt;
* GitHub write access to Corey White as new core developer (20 May 2025, granted)&lt;br /&gt;
* Join [https://numfocus.org/ NumFOCUS] by signing Fiscal Sponsorship Agreement, signed by AP, VP, LK, VA, MN, which is the majority of PSC (5 out of 9, NumFOCUS required 5)&lt;br /&gt;
* Adopt new logo and branding (3 Apr 2025, [https://lists.osgeo.org/pipermail/grass-psc/2025-March/002995.html email], [https://github.com/OSGeo/grass-website/pull/506 PR])&lt;br /&gt;
* Use &amp;quot;GRASS&amp;quot; as the project name (26 Feb 2025, [https://lists.osgeo.org/pipermail/grass-psc/2025-February/002970.html email])&lt;br /&gt;
&lt;br /&gt;
=== 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Approve and adopt [https://github.com/OSGeo/grass/pull/4566 C++17 Standard Support RFC] (28 Nov 2024)&lt;br /&gt;
* Apply for NumFOCUS membership (8 Nov 2024, [[PSC_Meeting_2024-11-08|meeting]])&lt;br /&gt;
* Pay Publer's business plan for one year, 3 accounts and test. Use GRASS budget sitting at OSGeo (8 Nov 2024, [[PSC_Meeting_2024-11-08|meeting]])&lt;br /&gt;
* Approve Linda's student grant final report and issue second payment (27 May 2024)&lt;br /&gt;
* Support Letter for LoC of FOSS4G 2025 Hiroshima (wording approved, 10 May 2024)&lt;br /&gt;
* GitHub write access to Linda Karlovska as a new core developer (granted, 26 Jan 2024)&lt;br /&gt;
&lt;br /&gt;
=== 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Approve Linda's student grant proposal and issue first payment (27 Dec 2023) &lt;br /&gt;
* Github write access to Edouard Choinière as a new core developer (granted, 18 Dec 2023) &lt;br /&gt;
* Appoint Vaclav Petras as new treasurer (5 Dec 2023)&lt;br /&gt;
* Approve and adopt [https://github.com/OSGeo/grass/blob/main/doc/development/rfc/version_numbering.md RFC: Version Numbering] (5 Jun 2023)&lt;br /&gt;
* Approve and adopt RFC: Python Language Support (5 Jun 2023)&lt;br /&gt;
* Approve Linda's student grant final report (16 Mar 2023)&lt;br /&gt;
* Appoint Markus Neteler as new treasurer (19 Jan 2023)&lt;br /&gt;
&lt;br /&gt;
=== 2022 ===&lt;br /&gt;
&lt;br /&gt;
* Approve Linda's proposal for GRASS mini grant (19 Nov 2022)&lt;br /&gt;
* Approve final report of Caitlin Haedrich's mini grant (30 Apr 2022)&lt;br /&gt;
* Approve final report of Linda Kladivova's mini grant (10 Mar 2022)&lt;br /&gt;
* Approve mini grant for Caitlin Haedrich (6 Jan 2022)&lt;br /&gt;
&lt;br /&gt;
=== 2021 ===&lt;br /&gt;
&lt;br /&gt;
* Approve mini grant for Linda Kladivova (21 Dec 2021)&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/RFC/7_LanguageStandardsSupport RFC 7: Language Standards Support] (approved, 29 Mar 2021)&lt;br /&gt;
* Approving of Veronica Andreo as GRASS GIS PSC chair (approved, 3 Feb 2021) - See [https://trac.osgeo.org/grass/wiki/PSC/Minutes/PSC_Meeting_20210203 minutes Feb 3, 2021]&lt;br /&gt;
* PSC mandates will last 6 years with 1/2 of PSC elected every 3 years (approved, 3 Feb 2021)&lt;br /&gt;
* PSC roles and tasks will be also renewed every 3 years (approved, 3 Feb 2021)&lt;br /&gt;
* When a PSC member steps down, s/he might be replaced by the next person in the previous election results ranking (approved, 3 Feb 2021)&lt;br /&gt;
&lt;br /&gt;
=== 2020 ===&lt;br /&gt;
&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/PSC/Election2020 Elections 2020]&lt;br /&gt;
* GitHub write access to Nicklas Larsson as a new core developer (granted, 24 Dec 2020)&lt;br /&gt;
* GitHub write access to Tomáš Zigo as a new core developer (granted, 29 Nov 2020)&lt;br /&gt;
* Second payment for new GRASS GIS Hugo based web site (approved, 1 Oct 2020)&lt;br /&gt;
* First payment for new GRASS GIS Hugo based web site (approved, 25 Feb 2020)&lt;br /&gt;
* Prague 2019 Community Sprint Reimbursements (approved, 14 Jan 2020)&lt;br /&gt;
&lt;br /&gt;
For older motions, see [https://trac.osgeo.org/grass/wiki/PSC/Motions the list of motions] from 2006 to 2020.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
*[http://lists.osgeo.org/mailman/listinfo/grass-psc PSC mailing list]&lt;br /&gt;
*[https://github.com/OSGeo/grass/tree/main/doc/development/rfc RFCs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Elections ==&lt;br /&gt;
&lt;br /&gt;
* [[PSC Election 2024]] (completed in Oct. 2024)&lt;br /&gt;
*[https://trac.osgeo.org/grass/wiki/PSC/Election2020 PSC Election 2020] (completed in Jan. 2021)&lt;br /&gt;
*[https://trac.osgeo.org/grass/wiki/PSC/Election2016 PSC Election 2016] (completed in Aug. 2016)&lt;br /&gt;
*[https://trac.osgeo.org/grass/wiki/PSC/Election2012 PSC Election 2012] (completed in Nov. 2012)&lt;br /&gt;
*[https://trac.osgeo.org/grass/wiki/PSC/Creation2006 PSC created in 2006]&lt;br /&gt;
&lt;br /&gt;
== Former PSC members ==&lt;br /&gt;
&lt;br /&gt;
Period 2020-2024:&lt;br /&gt;
&lt;br /&gt;
*'''Michael Barton''', USA&lt;br /&gt;
*'''Martin Landa''', Czech Republic&lt;br /&gt;
*'''Helena Mitasova''', USA&lt;br /&gt;
&lt;br /&gt;
Period 2021-2023:&lt;br /&gt;
&lt;br /&gt;
*'''Moritz Lennert''', Belgium (stepped down in 2023, replaced by '''Helmut Kudrnovsky''', Austria)&lt;br /&gt;
&lt;br /&gt;
Period 2016-2020:&lt;br /&gt;
&lt;br /&gt;
*'''Michael Barton''', USA&lt;br /&gt;
*'''Margherita Di Leo''', Italy (dileomargherita * gmail com). [http://forest.jrc.ec.europa.eu/team/person/35/detail/ Home Page] European Commission, Joint Research Centre (JRC), IT&lt;br /&gt;
*'''Martin Landa''', Czech Republic&lt;br /&gt;
*'''Moritz Lennert''', Belgium&lt;br /&gt;
*'''Peter Löwe''', Germany (peter DOT loewe AT gmx DOT de) [https://wiki.osgeo.org/wiki/User:Peter_Loewe Home page]. TIB Hannover, DE&lt;br /&gt;
*'''Helena Mitasova''', USA&lt;br /&gt;
*'''Markus Neteler (chair)''', Italy &lt;br /&gt;
*'''Anna Petrášová''', USA&lt;br /&gt;
*'''Vaclav Petras''', USA&lt;br /&gt;
&lt;br /&gt;
Period 2012-2016:&lt;br /&gt;
&lt;br /&gt;
*'''Michael Barton''', USA&lt;br /&gt;
*'''Hamish Bowman''', New Zealand&lt;br /&gt;
*'''Massimiliano Cannata''', Switzerland&lt;br /&gt;
*'''Moritz Lennert''', Belgium&lt;br /&gt;
*'''Margherita Di Leo''', Italy&lt;br /&gt;
*'''Martin Landa''', Czech Republic&lt;br /&gt;
*'''Markus Metz''', Germany&lt;br /&gt;
*'''Helena Mitasova''', USA&lt;br /&gt;
*'''Scott Mitchell''', Canada&lt;br /&gt;
*'''Markus Neteler (chair)''', Italy &lt;br /&gt;
&lt;br /&gt;
Period 2006-2012:&lt;br /&gt;
&lt;br /&gt;
*'''Michael Barton, USA&lt;br /&gt;
*'''Dylan Beaudette''' USA&lt;br /&gt;
*'''Hamish Bowman, New Zealand&lt;br /&gt;
*'''Massimiliano Cannata, Switzerland&lt;br /&gt;
*'''Brad Douglas''' (rez * touchofmadness com), USA&lt;br /&gt;
*'''Paul Kelly''' (paul-grass stjohnspoint co uk), UK&lt;br /&gt;
*'''Helena Mitasova, USA&lt;br /&gt;
*'''Scott Mitchell, Canada&lt;br /&gt;
*'''Markus Neteler (chair), Italy&lt;br /&gt;
*'''Maciej Sieczka''' (msieczka * sieczka org) [http://www.sieczka.org Home page], PL&lt;br /&gt;
&lt;br /&gt;
=== Former chair persons ===&lt;br /&gt;
&lt;br /&gt;
*Period 2016-2020: '''Markus Neteler''', Germany (neteler * osgeo org) [https://www.mundialis.de/neteler/ Home page]. mundialis, Bonn, DE&lt;br /&gt;
*Period 2012-2016: '''Markus Neteler''', Germany (neteler * osgeo org) [https://wiki.osgeo.org/wiki/Markus_Neteler Home page]. Trento, IT&lt;br /&gt;
*Period 2006-2012: '''Markus Neteler''', Germany (neteler * osgeo org) [https://wiki.osgeo.org/wiki/Markus_Neteler Home page]. Trento, IT&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Working_with_GRASS_without_starting_it_explicitly&amp;diff=28748</id>
		<title>Working with GRASS without starting it explicitly</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Working_with_GRASS_without_starting_it_explicitly&amp;diff=28748"/>
		<updated>2026-01-09T14:15:11Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Attempt to cleanup the page (remove old GRASS 7 cruft)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GRASS GIS modules and the import of GRASS Python packages works only in a specific environmental settings (GRASS session). This settings is ensured by starting GRASS GIS application which prepares this GRASS session for you. It is possible to set up you system in the way that the GRASS session will be always active (i.e. the GRASS startup script is not running, just the environmental settings are done). People often prefer to set up the GRASS environment in their script or program and this is what this article discuss. However, it must be noted that the the generally preferred (and easy) way is to create scripts and programs as GRASS modules which means that your don't have to bother with setting up the environment since the GRASS module should be always invoked only in GRASS session.&lt;br /&gt;
&lt;br /&gt;
== GRASS sessions ==&lt;br /&gt;
&lt;br /&gt;
It is possible to access GRASS modules without explicitly starting a &amp;quot;GRASS session&amp;quot;. GRASS libraries require certain [https://grass.osgeo.org/grass-stable/manuals/variables.html environment variables] to be set. In fact a &amp;quot;GRASS session&amp;quot; is just a set of processes (e.g. a shell and/or GUI) which have the necessary environment settings, specifically:&lt;br /&gt;
&lt;br /&gt;
* '''GISBASE''' needs to be set to the top-level directory of the GRASS installation.&lt;br /&gt;
* '''GISRC''' needs to contain the absolute path to a file containing settings for '''GISDBASE''', '''LOCATION_NAME''' and '''MAPSET'''.&lt;br /&gt;
* '''PATH''' needs to include '''$GISBASE/bin''' and '''$GISBASE/scripts'''.&lt;br /&gt;
&lt;br /&gt;
If the GRASS libraries are shared libraries, the loader needs to be able to find them. This normally means that '''LD_LIBRARY_PATH''' (Linux, ...), '''DYLD_LIBRARY_PATH''' (MacOSX) or '''PATH''' (Windows) need to contain '''$GISBASE/lib''', although there are other means to the same end (e.g. on Linux, putting $GISBASE/lib (with $GISBASE replaced by its actual value) into /etc/ld.so.conf then running ldconfig).&lt;br /&gt;
&lt;br /&gt;
Some libraries and modules use other variables. More information for most of them is available in the file ''$GISBASE/docs/html/variables.html''. The display libraries used by ''d.*'' commands use additional variables, which are documented along with the individual drivers.&lt;br /&gt;
&lt;br /&gt;
=== Batch jobs ===&lt;br /&gt;
&lt;br /&gt;
You can run GRASS scripts non-interactively from outside of a GRASS session with the GRASS_BATCH_JOB environment variable. When GRASS is started with this environment variable set it will automatically run the contents of the script given in the variable, then close the GRASS session when complete. In this way full lock-checking, GRASS variables setup, and temporary file cleaning tasks are still performed.&lt;br /&gt;
&lt;br /&gt;
See the [[GRASS_and_Shell#GRASS_Batch_jobs|Batch jobs]] section of the GRASS shell-help wiki page for details.&lt;br /&gt;
&lt;br /&gt;
=== Starting a GRASS session and terminating it automatically ===&lt;br /&gt;
&lt;br /&gt;
A GRASS session can be started and terminated automatically with the -e flag.&lt;br /&gt;
&lt;br /&gt;
Since GRASS GIS 7 you can execute commands from outside by passing the command to be executed (or a script with a collection of GRASS GIS commands) to the --exec flag:&lt;br /&gt;
&lt;br /&gt;
Creating a new Location based on a geodata file's projection (-c) and exit (-e) immediately:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass -c elevation.tiff -e /path/to/grassdata/test1/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Linking external raster data to PERMANENT Mapset:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass /path/to/grassdata/test1/PERMANENT/ -e --exec r.external input=basins.tiff output=basins&lt;br /&gt;
grass /path/to/grassdata/test1/PERMANENT/ -e --exec r.external input=elevation.tiff output=elevation&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get statistics for one raster map:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass /path/to/grassdata/test1/PERMANENT/ -e --exec r.univar map=elevation&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Start a GRASS session but do not terminate it automatically ====&lt;br /&gt;
&lt;br /&gt;
Compare the rasters visually:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grass /path/to/grassdata/test1/PERMANENT/ --exec g.gui.mapswipe first=elevation second=basins&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read more in the [https://grass.osgeo.org/grass-stable/manuals/grass.html#batch-jobs-with-the-exec-interface manual].&lt;br /&gt;
&lt;br /&gt;
==== Python examples ====&lt;br /&gt;
&lt;br /&gt;
For details on GRASS GIS Python programming, see also [[GRASS Python Scripting Library]].&lt;br /&gt;
&lt;br /&gt;
===== Python: GRASS GIS 7 with an external library: grass-session =====&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/zarch/grass-session &amp;quot;grass-session&amp;quot; Python library] is an easy way to control GRASS GIS from &amp;quot;outside&amp;quot;-Python. To install the current version, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# see also: https://pypi.org/project/grass-session/&lt;br /&gt;
&lt;br /&gt;
pip install grass-session&lt;br /&gt;
# for the latest development version use:&lt;br /&gt;
# pip install git+https://github.com/zarch/grass-session.git&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then write &lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# filename: test_session.py&lt;br /&gt;
&lt;br /&gt;
from grass_session import Session&lt;br /&gt;
from grass.script import core as gcore&lt;br /&gt;
&lt;br /&gt;
# create a new location from EPSG code (can also be a GeoTIFF or SHP or ... file)&lt;br /&gt;
with Session(gisdb=&amp;quot;/tmp&amp;quot;, location=&amp;quot;mylocation&amp;quot;,&lt;br /&gt;
             create_opts=&amp;quot;EPSG:4326&amp;quot;):&lt;br /&gt;
   # run something in PERMANENT mapset:&lt;br /&gt;
   print(gcore.parse_command(&amp;quot;g.gisenv&amp;quot;, flags=&amp;quot;s&amp;quot;))&lt;br /&gt;
# expected output:&lt;br /&gt;
# {u'GISDBASE': u&amp;quot;'/tmp/';&amp;quot;,&lt;br /&gt;
#  u'LOCATION_NAME': u&amp;quot;'mylocation';&amp;quot;,&lt;br /&gt;
#  u'MAPSET': u&amp;quot;'PERMANENT';&amp;quot;,}&lt;br /&gt;
&lt;br /&gt;
# create a new mapset in an existing location&lt;br /&gt;
with Session(gisdb=&amp;quot;/tmp&amp;quot;, location=&amp;quot;mylocation&amp;quot;, mapset=&amp;quot;test&amp;quot;,&lt;br /&gt;
             create_opts=&amp;quot;&amp;quot;):&lt;br /&gt;
    # do something in the test mapset.&lt;br /&gt;
    print(gcore.parse_command(&amp;quot;g.gisenv&amp;quot;, flags=&amp;quot;s&amp;quot;))&lt;br /&gt;
# expected output:&lt;br /&gt;
# {u'GISDBASE': u&amp;quot;'/tmp/';&amp;quot;,&lt;br /&gt;
#  u'LOCATION_NAME': u&amp;quot;'mylocation';&amp;quot;,&lt;br /&gt;
#  u'MAPSET': u&amp;quot;'test';&amp;quot;,}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The grass-session library looks at the &amp;lt;tt&amp;gt;GRASSBIN&amp;lt;/tt&amp;gt; environmental variable. If the variable is not set, the library tries to use the current stable release of GRASS GIS (e.g. &amp;lt;tt&amp;gt;grass84&amp;lt;/tt&amp;gt; on Linux for the 8.4 release).&lt;br /&gt;
For instance, to execute the previous example using a custom installation of 8.5 version, write:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# WAY 1&lt;br /&gt;
# set variable &amp;quot;on the fly&amp;quot; for python call&lt;br /&gt;
GRASSBIN=&amp;quot;$HOME/bin/grass85 python test_session.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# WAY 2&lt;br /&gt;
export GRASSBIN=&amp;quot;$HOME/bin/grass85&amp;quot;&lt;br /&gt;
python3 test_session.py&lt;br /&gt;
{'GISDBASE': &amp;quot;'/tmp';&amp;quot;, 'LOCATION_NAME': &amp;quot;'mylocation';&amp;quot;, 'MAPSET': &amp;quot;'PERMANENT';&amp;quot;}&lt;br /&gt;
{'GISDBASE': &amp;quot;'/tmp';&amp;quot;, 'LOCATION_NAME': &amp;quot;'mylocation';&amp;quot;, 'MAPSET': &amp;quot;'test';&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See below for a solution with docker.&lt;br /&gt;
&lt;br /&gt;
====== Using 'grass-session' with PyGRASS ======&lt;br /&gt;
&lt;br /&gt;
If you need to use python libraries that are using ctypes, run it like this for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# file: test_session_ctypes.py&lt;br /&gt;
import grass_session&lt;br /&gt;
from grass.pygrass.vector import VectorTopo&lt;br /&gt;
&lt;br /&gt;
print('DONE!')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above script will raise an exception because is not possible to dynamically import the linked library in the same process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ GRASSBIN=/home/pietro/.local/bin/grass python test.py &lt;br /&gt;
GRASSBIN: /home/pietro/.local/bin/grass&lt;br /&gt;
GISBASE: /home/pietro/.local/grass&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;test.py&amp;quot;, line 3, in &amp;lt;module&amp;gt;&lt;br /&gt;
    from grass.pygrass.vector import VectorTopo&lt;br /&gt;
  File &amp;quot;/home/pietro/.local/grass/etc/python/grass/pygrass/vector/__init__.py&amp;quot;, line 5, in &amp;lt;module&amp;gt;&lt;br /&gt;
    import grass.lib.gis as libgis&lt;br /&gt;
  File &amp;quot;/home/pietro/.local/grass/etc/python/grass/lib/gis.py&amp;quot;, line 23, in &amp;lt;module&amp;gt;&lt;br /&gt;
    _libs[&amp;quot;grass_gis.&amp;quot;] = load_library(&amp;quot;grass_gis.&amp;quot;)&lt;br /&gt;
  File &amp;quot;/home/pietro/.local/grass/etc/python/grass/lib/ctypes_loader.py&amp;quot;, line 62, in load_library&lt;br /&gt;
    return self.load(path)&lt;br /&gt;
  File &amp;quot;/home/pietro/.local/grass/etc/python/grass/lib/ctypes_loader.py&amp;quot;, line 78, in load&lt;br /&gt;
    raise ImportError(e)&lt;br /&gt;
ImportError: libgrass_datetime..so: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But you can set the &amp;lt;tt&amp;gt;LD_LIBRARY_PATH&amp;lt;/tt&amp;gt; variable before launching the program. For instance from the command line you can define:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ LD_LIBRARY_PATH=/home/pietro/.local/grass/lib \&lt;br /&gt;
   GRASSBIN=/home/pietro/.local/bin/grass \&lt;br /&gt;
   python test_session_ctypes.py&lt;br /&gt;
GRASSBIN: /home/pietro/.local/bin/grass&lt;br /&gt;
GISBASE: /home/pietro/.local/grass&lt;br /&gt;
DONE!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The use of the &amp;lt;tt&amp;gt;with-statement&amp;lt;/tt&amp;gt; close automatically the session.&lt;br /&gt;
If you have to manage more complex workflow you can manually define the opening and closing actions.&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
# import grass_session&lt;br /&gt;
from grass_session import Session&lt;br /&gt;
&lt;br /&gt;
# import grass python libraries&lt;br /&gt;
from grass.pygrass.modules.shortcuts import general as g&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# set some common environmental variables, like:&lt;br /&gt;
os.environ.update(dict(GRASS_COMPRESS_NULLS='1',&lt;br /&gt;
                       GRASS_COMPRESSOR='ZSTD'))&lt;br /&gt;
&lt;br /&gt;
# create a PERMANENT mapset&lt;br /&gt;
# create a Session instance&lt;br /&gt;
PERMANENT = Session()&lt;br /&gt;
PERMANENT.open(gisdb='/tmp', location='mytest',&lt;br /&gt;
               create_opts='EPSG:4326')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# execute some command inside PERMANENT&lt;br /&gt;
g.mapsets(flags=&amp;quot;l&amp;quot;)&lt;br /&gt;
g.list(type=&amp;quot;raster&amp;quot;, flags=&amp;quot;m&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# exit from PERMANENT&lt;br /&gt;
PERMANENT.close()&lt;br /&gt;
&lt;br /&gt;
# create a new mapset in the same location&lt;br /&gt;
user = Session()&lt;br /&gt;
user.open(gisdb='/tmp', location='mytest', mapset='user',&lt;br /&gt;
               create_opts='')&lt;br /&gt;
&lt;br /&gt;
# execute some command inside user&lt;br /&gt;
g.mapsets(flags=&amp;quot;l&amp;quot;)&lt;br /&gt;
g.list(type=&amp;quot;raster&amp;quot;, flags=&amp;quot;m&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# exit from user&lt;br /&gt;
user.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Hint: find the path to the GRASS GIS package start script =====&lt;br /&gt;
&lt;br /&gt;
Hint: in order to find the '''path to the GRASS GIS package''', launch it with &amp;lt;tt&amp;gt; --config path&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux&lt;br /&gt;
grass --config path&lt;br /&gt;
/usr/bin/grass84&lt;br /&gt;
&lt;br /&gt;
# Windows&lt;br /&gt;
C:\&amp;gt;grass.bat --config path&lt;br /&gt;
C:\OSGeo4W\apps\grass\grass84&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Python: GRASS GIS 8 with existing location =====&lt;br /&gt;
&lt;br /&gt;
See the example in the [https://grass.osgeo.org/grass-stable/manuals/libpython/script.html#module-script.setup documentation] or the script which initializes the session and lists available raster and vector maps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import subprocess&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
# define GRASS data settings (adapt to your needs)&lt;br /&gt;
grassdata = &amp;quot;/home/mneteler/grassdata/&amp;quot;&lt;br /&gt;
location = &amp;quot;nc_spm_08_grass7&amp;quot;&lt;br /&gt;
mapset = &amp;quot;user1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Python path: we ask GRASS GIS where its Python packages are&lt;br /&gt;
sys.path.append(&lt;br /&gt;
    subprocess.check_output([&amp;quot;grass&amp;quot;, &amp;quot;--config&amp;quot;, &amp;quot;python_path&amp;quot;], text=True).strip()&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Import GRASS Python bindings&lt;br /&gt;
import grass.script as gs&lt;br /&gt;
&lt;br /&gt;
# full path to new project (formerly: location)&lt;br /&gt;
project = &amp;quot;/tmp/grassproject_epsg_25832&amp;quot;&lt;br /&gt;
gs.create_project(project, epsg=&amp;quot;25832&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# initialize project&lt;br /&gt;
gs.setup.init(project)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point we are in a running GRASS GIS session, let's verify.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# show current GRASS GIS settings&lt;br /&gt;
print(&amp;quot;GRASS GIS session: tests for PROJ, GDAL, PDAL, GRASS GIS&amp;quot;)&lt;br /&gt;
print(gs.parse_command(&amp;quot;g.gisenv&amp;quot;, flags=&amp;quot;s&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we may also import further functionality (e.g. [https://grass.osgeo.org/grass-stable/manuals/libpython/grass.pygrass.vector.html?highlight=vectortopo VectorTopo of pygrass]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from grass.pygrass.vector import VectorTopo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and can for example retrieve the topology of a vector map (using the [https://grass.osgeo.org/download/data/#NorthCarolinaDataset North Carolina dataset]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
test_vect = VectorTopo(&amp;quot;zipcodes_wake&amp;quot;)&lt;br /&gt;
test_vect.open(mode=&amp;quot;r&amp;quot;)&lt;br /&gt;
test_vect.num_primitive_of(&amp;quot;point&amp;quot;)&lt;br /&gt;
test_vect.num_primitive_of(&amp;quot;line&amp;quot;)&lt;br /&gt;
test_vect.num_primitive_of(&amp;quot;centroid&amp;quot;)&lt;br /&gt;
test_vect.num_primitive_of(&amp;quot;boundary&amp;quot;)&lt;br /&gt;
test_vect.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should report:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; test_vect.num_primitive_of('point')&lt;br /&gt;
0&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; test_vect.num_primitive_of('line')&lt;br /&gt;
0&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; test_vect.num_primitive_of('centroid')&lt;br /&gt;
48&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; test_vect.num_primitive_of('boundary')&lt;br /&gt;
158&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bash examples (GNU/Linux) ====&lt;br /&gt;
&lt;br /&gt;
'''''Note: see [[GRASS_and_Shell#GRASS_Batch_jobs|GRASS Batch jobs]] for a really easy approach.'''''&lt;br /&gt;
&lt;br /&gt;
Below an example of a '''~/.bash_profile''' script to set the required settings in order to access GRASS commands outside of a GRASS GIS session&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
# GRASS environment&lt;br /&gt;
export GISBASE=/usr/local/grass&lt;br /&gt;
export GRASS_VERSION=&amp;quot;&amp;quot;&lt;br /&gt;
export GRASS_VERSION=&amp;quot;8.4&amp;quot;&lt;br /&gt;
export GISBASE=&amp;quot;/home/mundialis/src/grass-8.4.2/dist.x86_64-pc-linux-gnu/&amp;quot;&lt;br /&gt;
export GRASS_GNUPLOT=&amp;quot;gnuplot -persist&amp;quot;&lt;br /&gt;
export GRASS_HTML_BROWSER=&amp;quot;htmlview&amp;quot;&lt;br /&gt;
export GRASS_LD_LIBRARY_PATH=&amp;quot;${GISBASE}/lib&amp;quot;&lt;br /&gt;
export GRASS_PAGER=&amp;quot;more&amp;quot;&lt;br /&gt;
export GRASS_PERL=&amp;quot;/usr/bin/perl&amp;quot;&lt;br /&gt;
export GRASS_PROJSHARE=&amp;quot;/usr/local/share/proj&amp;quot;&lt;br /&gt;
export GRASS_PYTHON=&amp;quot;python&amp;quot;&lt;br /&gt;
export GRASS_SH=&amp;quot;/bin/sh&amp;quot;&lt;br /&gt;
export GRASS_SHELL_PID=&amp;quot;$$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#generate GISRCRC&lt;br /&gt;
MYGISDBASE=$HOME/grassdata&lt;br /&gt;
MYLOC=nc_spm_08_grass7&lt;br /&gt;
MYMAPSET=user1&lt;br /&gt;
&lt;br /&gt;
# Set the global grassrc file to individual file name&lt;br /&gt;
MYGISRC=&amp;quot;$HOME/.grassrc.$GRASS_VERSION.$$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;GISDBASE: $MYGISDBASE&amp;quot; &amp;gt; &amp;quot;$MYGISRC&amp;quot;&lt;br /&gt;
echo &amp;quot;LOCATION_NAME: $MYLOC&amp;quot; &amp;gt;&amp;gt; &amp;quot;$MYGISRC&amp;quot;&lt;br /&gt;
echo &amp;quot;MAPSET: $MYMAPSET&amp;quot; &amp;gt;&amp;gt; &amp;quot;$MYGISRC&amp;quot;&lt;br /&gt;
echo &amp;quot;GRASS_GUI: text&amp;quot; &amp;gt;&amp;gt; &amp;quot;$MYGISRC&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# path to GRASS settings file&lt;br /&gt;
export GISRC=$MYGISRC&lt;br /&gt;
export GRASS_PYTHON=python&lt;br /&gt;
export GRASS_MESSAGE_FORMAT=plain&lt;br /&gt;
export GRASS_TRUECOLOR=TRUE&lt;br /&gt;
export GRASS_TRANSPARENT=TRUE&lt;br /&gt;
export GRASS_PNG_AUTO_WRITE=TRUE&lt;br /&gt;
export GRASS_GNUPLOT='gnuplot -persist'&lt;br /&gt;
export GRASS_WIDTH=640&lt;br /&gt;
export GRASS_HEIGHT=480&lt;br /&gt;
export GRASS_HTML_BROWSER=firefox&lt;br /&gt;
export GRASS_PAGER=cat&lt;br /&gt;
&lt;br /&gt;
#For the temporal modules&lt;br /&gt;
export TGISDB_DRIVER=sqlite&lt;br /&gt;
export TGISDB_DATABASE=$MYGISDBASE/$MYLOC/PERMANENT/tgis/sqlite.db&lt;br /&gt;
&lt;br /&gt;
# for fun, we can even set the shell prompt to contain a hint on GRASS GIS env being active&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \W G-$GRASS_VERSION]$ &amp;quot;&lt;br /&gt;
&lt;br /&gt;
# system vars&lt;br /&gt;
export PATH=&amp;quot;$GISBASE/bin:$GISBASE/scripts:$PATH&amp;quot;&lt;br /&gt;
export LD_LIBRARY_PATH=&amp;quot;$GISBASE/lib&amp;quot;&lt;br /&gt;
export GRASS_LD_LIBRARY_PATH=&amp;quot;$LD_LIBRARY_PATH&amp;quot;&lt;br /&gt;
export PYTHONPATH=&amp;quot;$GISBASE/etc/python:$PYTHONPATH&amp;quot;&lt;br /&gt;
export MANPATH=$MANPATH:$GISBASE/man&lt;br /&gt;
&lt;br /&gt;
# test a command&lt;br /&gt;
g.list rast&lt;br /&gt;
v.info zipcodes_wake&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above script will allow GRASS commands to be used anywhere. Furthermore, if the '''~/.Xsession''' sources the bash startup scripts, the settings aren't limited to interactive shells, but also work for e.g. M-! in XEmacs). Each interactive shell gets a separate &amp;quot;session&amp;quot; (i.e. a separate $GISRC file), while GUI programs share a common session.&lt;br /&gt;
&lt;br /&gt;
Note, however, that '''~/.bash_profile''' is a personal initialization startup script and, thus, read during the login process. Any modifications to it will be read after (re-)login or explicitly sourcing it.&lt;br /&gt;
&lt;br /&gt;
At the end of the ~/.bash_profile file, the following lines can be added to ensure no duplication of entries in the PATH variable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=bash&amp;gt;&lt;br /&gt;
 PATH=`awk -F: '{for(i=1;i&amp;lt;=NF;i++){if(!($i in a)){a[$i];printf s$i;s=&amp;quot;:&amp;quot;}}}'&amp;lt;&amp;lt;&amp;lt;$PATH`&lt;br /&gt;
 PYTHONPATH=`awk -F: '{for(i=1;i&amp;lt;=NF;i++){if(!($i in a)){a[$i];printf s$i;s=&amp;quot;:&amp;quot;}}}'&amp;lt;&amp;lt;&amp;lt;$PYTHONPATH`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important notes ===&lt;br /&gt;
&lt;br /&gt;
Launching a grassXY session could still permit access on GRASS modules of the version that is set with the above script. The reason being is that grassXY scripts (e.g.: grass84) prepend the GRASS directories to '''PATH''', '''LD_LIBRARY_PATH''', etc. They won't remove any entries which are already there. A solution to this is to ''switch'' between GRASS versions by using a script like the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
        strippath()&lt;br /&gt;
        {&lt;br /&gt;
            (&lt;br /&gt;
            oldpath=&amp;quot;$1&amp;quot;&lt;br /&gt;
            newpath=&lt;br /&gt;
            IFS=:&lt;br /&gt;
            for dir in $oldpath ; do&lt;br /&gt;
                case &amp;quot;${dir}&amp;quot; in&lt;br /&gt;
                *grass*)&lt;br /&gt;
                        ;;&lt;br /&gt;
                *)&lt;br /&gt;
                        newpath=&amp;quot;$newpath:$dir&amp;quot;&lt;br /&gt;
                        ;;&lt;br /&gt;
                esac&lt;br /&gt;
            done&lt;br /&gt;
            echo &amp;quot;${newpath#:}&amp;quot;&lt;br /&gt;
            )&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        PATH=`strippath $PATH`&lt;br /&gt;
        &lt;br /&gt;
        export GISBASE=$PWD/dist.i686-pc-linux-gnu&lt;br /&gt;
        export PATH=&amp;quot;$GISBASE/bin:$GISBASE/scripts:$PATH&amp;quot;&lt;br /&gt;
        export LD_LIBRARY_PATH=&amp;quot;$GISBASE/lib&amp;quot;&lt;br /&gt;
        export PYTHONPATH=&amp;quot;$GISBASE/etc/python&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note: the above script needs to be &amp;quot;source&amp;quot;d; executing it won't work. It might also require some adjustments (e.g. the ''GISBASE'' variable).'''&lt;br /&gt;
&lt;br /&gt;
Using normal grass sessions commands are recorded in '''$GISDBASE/$LOCATION_NAME/$MAPSET/.bash_history'''. While working with &amp;quot;pure&amp;quot; bash, shell entries go in '''~/.bash_history'''. Merging existing &amp;quot;grass-bash_history(-ies)&amp;quot; with the bash history log, would probably be not a good idea. Perhaps it is wise(r) to use normal GRASS sessions when working on real projects. Nevertheless, it is upon the users preferences and expertise level to decide what is best.&lt;br /&gt;
&lt;br /&gt;
=== Hints and troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
Some hints for MS Windows users:&lt;br /&gt;
&lt;br /&gt;
# The Python interpreter (python.exe) needs to be in the PATH&lt;br /&gt;
# Python needs to be associated with the .py extension&lt;br /&gt;
# PATHEXT needs to include .py if you want to be able to omit the extension&lt;br /&gt;
&lt;br /&gt;
When everything works well, the installer should take care of all of these.&lt;br /&gt;
&lt;br /&gt;
To manage parallel sessions on Linux, use process ID (PID) as lock file number and set the GIS_LOCK variable, for example&lt;br /&gt;
&lt;br /&gt;
  export GIS_LOCK=$$&lt;br /&gt;
&lt;br /&gt;
in Bash.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
* Instructions and discussion on [http://n2.nabble.com/can-I-access-mapset-outside-of-grass-by-using-python-td3405902.html#a3405902 how to access GRASS mapsets outside of a GRASS session] in the grass-user mailing list.&lt;br /&gt;
* removing duplicate entries in $PATH taken from [http://chunchung.blogspot.com/2007/11/remove-duplicate-paths-from-path-in.html]&lt;br /&gt;
&lt;br /&gt;
== GRASS databases ==&lt;br /&gt;
&lt;br /&gt;
(project file structure)&lt;br /&gt;
&lt;br /&gt;
=== Minimal mapsets ===&lt;br /&gt;
&lt;br /&gt;
within a functional LOCATION (see below) the minimal mapset is a subdirectory of the MAPSET's name, containing a WIND file. The WIND file can simply be copied from PERMANENT/DEFAULT_WIND. Optionally you can put a VAR file in there too to define the default database driver to use.&lt;br /&gt;
&lt;br /&gt;
* You can create a new mapset when starting GRASS with the -c flag. e.g.&lt;br /&gt;
 grass -c /path/to/location/new_mapset_name&lt;br /&gt;
&lt;br /&gt;
=== Minimal locations ===&lt;br /&gt;
&lt;br /&gt;
Within the GISDATABASE (which is simply a subdirectory some where), the minimum LOCATION consists of a directory giving the LOCATION its name, which in turn contains a PERMANENT subdirectory for the PERMANENT mapset. The PERMANENT mapset contains a few special files that regular mapsets don't. These are:&lt;br /&gt;
; PROJ_INFO: contains the location's projection information&lt;br /&gt;
; PROJ_UNITS: contains the location's map units definition&lt;br /&gt;
; DEFAULT_WIND: the default region (WINDow file). The format is identical to the WIND files created by g.region&lt;br /&gt;
; WIND: (optional?)&lt;br /&gt;
&lt;br /&gt;
* see also {{src|demolocation}} in the GRASS source code&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[GRASS_and_Shell#GRASS_Batch_jobs|GRASS Batch jobs]]&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Linking to other languages]]&lt;br /&gt;
[[Category: bash]]&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
[[Category: Python]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-11-14&amp;diff=28735</id>
		<title>PSC Meeting 2025-11-14</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-11-14&amp;diff=28735"/>
		<updated>2025-12-13T15:37:02Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Minutes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Participants ==&lt;br /&gt;
&lt;br /&gt;
* Anna Petrasova&lt;br /&gt;
* Huidae Cho&lt;br /&gt;
* Linda Karlovska&lt;br /&gt;
* Markus Neteler&lt;br /&gt;
* Nicklas Larsson&lt;br /&gt;
* Paulo van Breugel&lt;br /&gt;
* Vaclav Petras&lt;br /&gt;
* Veronica Andreo&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* Report from NumFOCUS Project Summit (VP)&lt;br /&gt;
* GRASS Wiki under DDOS attack, see https://discourse.osgeo.org/t/grass-wiki-under-ddos-attack/150717&lt;br /&gt;
* New wiki page: [[Organizing GRASS Contributor Events]]&lt;br /&gt;
* GRASS Meeting 2026 - Luca's proposal&lt;br /&gt;
* Upcoming releases:&lt;br /&gt;
** Release 8.4.2 (due to relevant [https://github.com/OSGeo/grass/compare/8.4.1...releasebranch_8_4 fixes]; the branch-CI is also functional again) - [https://github.com/OSGeo/grass/milestone/27 milestone]&lt;br /&gt;
** Release 8.5.0 - [https://github.com/OSGeo/grass/milestone/22 milestone]&lt;br /&gt;
* Reimburse Alen for stickers he bought to take to NZ&lt;br /&gt;
&lt;br /&gt;
== Minutes ==&lt;br /&gt;
&lt;br /&gt;
* Report from NumFOCUS Project Summit:&lt;br /&gt;
** VP participated of the NumFOCUS projects summit; there were not many other projects attending.&lt;br /&gt;
** There are calls for small grants (USD 10K per project per year), that we should apply for, and ideally use them for development. &lt;br /&gt;
** It seems we need to apply as a project, but it is not clear who submits. In any case, the person interested in the money should lead the effort. See: https://numfocus.org/programs/small-development-grants.&lt;br /&gt;
** We had a meeting with them on Tue 18th, but AP will ask them to move it because neither VP nor VA can attend. New date: Dec 10th, 2025.&lt;br /&gt;
&lt;br /&gt;
* GRASS wiki under attack by botnet:&lt;br /&gt;
** MN set up countermeasures on the server, instructions to be dumped in our  infrastructure shared doc&lt;br /&gt;
** Not everyone has access to that doc, so we shall review and discuss our shared folder and files access “policy”.&lt;br /&gt;
&lt;br /&gt;
* New wiki page on organizing GRASS events: &lt;br /&gt;
** https://grasswiki.osgeo.org/wiki/Organizing_GRASS_Contributor_Events&lt;br /&gt;
&lt;br /&gt;
* GRASS meeting San Michele 2026:&lt;br /&gt;
** See [https://lists.osgeo.org/pipermail/grass-psc/2025-September/003054.html Luca's proposal].&lt;br /&gt;
** Nicklas is not available for any of the proposed dates.&lt;br /&gt;
** AP and VP depend on the green card, if they get it on time, any of the dates are fine.&lt;br /&gt;
** Paulo: 50% with the second date.&lt;br /&gt;
** HC: probably the second date.&lt;br /&gt;
** MN and VA: any date fine for now.&lt;br /&gt;
** Linda: new baby coming! Congrats!&lt;br /&gt;
&lt;br /&gt;
* Release 8.4.2: &lt;br /&gt;
** VP and MN will agree on a date soon to do the release together.&lt;br /&gt;
** Edouard will be invited, too.&lt;br /&gt;
&lt;br /&gt;
* Release 8.5: &lt;br /&gt;
** It will have CMake in the source code as experimental feature to try for users who compile code themselves (but extensions won’t work for them).&lt;br /&gt;
** FHS won’t work with CMake yet.&lt;br /&gt;
** It’s a matter of communication about what’s there in the source code. Binaries will be with autotools, so addons will work.&lt;br /&gt;
** Blockers: there’s an issue with r.blend and something with r.patch with vrt and nprocs &amp;gt; 1 (the latter found by Metz, but still unreported)&lt;br /&gt;
** New python API, VP will call for a webinar on it by mid-dec, to show how it works and collect some feedback, too.&lt;br /&gt;
** JSON stuff and mkdocs is in good shape to go.&lt;br /&gt;
** Jupyter notebook PR needs to be reviewed, it does not work in windows, but this is not a blocker, we can mark it as experimental.&lt;br /&gt;
** Drop support for PROJ &amp;lt; 8 and GDAL &amp;lt; 3? Nicklas created issues to get feedback, it could be done before the release. See [https://github.com/OSGeo/grass/issues/6628 #6628] and [https://github.com/OSGeo/grass/issues/6629 #6629].&lt;br /&gt;
&lt;br /&gt;
* Motion proposed and passed to reimburse Alen for the stickers. VP will contact Michael Smith, so Alen gets reimbursed.&lt;br /&gt;
&lt;br /&gt;
* Plan extraordinary meeting - PSC + Luca to plan 2026 budget + community meeting when the call for OSGeo budget is out.&lt;br /&gt;
** VP proposal: include an item to promote GRASS in other than FOSS4G conferences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_Citation_Repository&amp;diff=28734</id>
		<title>GRASS Citation Repository</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_Citation_Repository&amp;diff=28734"/>
		<updated>2025-12-13T15:31:46Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Update versions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to cite GRASS GIS ==&lt;br /&gt;
&lt;br /&gt;
Please cite GRASS when using the software in your work. Here are some choices depending on the version used and the type of citation:&lt;br /&gt;
&lt;br /&gt;
* GRASS GIS Manual citations,&lt;br /&gt;
* Peer reviewed general GRASS GIS articles,&lt;br /&gt;
* Books,&lt;br /&gt;
* Topic oriented citations.&lt;br /&gt;
&lt;br /&gt;
Please select below:&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS Manual citations ===&lt;br /&gt;
&lt;br /&gt;
DOI (for all versions, shows latest release on top): [https://doi.org/10.5281/zenodo.5176030 10.5281/zenodo.5176030]&lt;br /&gt;
&lt;br /&gt;
* '''[https://www.fair4g.org/grass.html Overview of all DOI-based references to GRASS in scientific publications (according to CrossRef)]'''&lt;br /&gt;
* '''[https://scholar.google.com/citations?user=gJ0ZB0cAAAAJ Overview of all references to GRASS in scientific publications (according to Google Scholar)]'''&lt;br /&gt;
&lt;br /&gt;
Software:&lt;br /&gt;
* GRASS Development Team, 2025. Geographic Resources Analysis Support System (GRASS) Software, Version 8.4. Open Source Geospatial Foundation. Electronic document: https://grass.osgeo.org, DOI: [https://doi.org/10.5281/zenodo.5176030 10.5281/zenodo.5176030]&lt;br /&gt;
* GRASS Development Team, 2020. Geographic Resources Analysis Support System (GRASS) Software, Version 7.8. Open Source Geospatial Foundation. Electronic document: https://grass.osgeo.org, DOI: [https://doi.org/10.5281/zenodo.5176030 10.5281/zenodo.5176030]&lt;br /&gt;
* GRASS Development Team, 2015. Geographic Resources Analysis Support System (GRASS) Software, Version 6.4. Open Source Geospatial Foundation. Electronic document: https://grass.osgeo.org, DOI: [https://doi.org/10.5281/zenodo.5176030 10.5281/zenodo.5176030]&lt;br /&gt;
&lt;br /&gt;
Programmer's manual:&lt;br /&gt;
* GRASS Development Team, 2025. Geographic Resources Analysis Support System (GRASS 8) Programmer's Manual. Open Source Geospatial Foundation Project. Electronic document: https://grass.osgeo.org/programming8/&lt;br /&gt;
* GRASS Development Team, 2020. Geographic Resources Analysis Support System (GRASS 7) Programmer's Manual. Open Source Geospatial Foundation Project. Electronic document: https://grass.osgeo.org/programming7/&lt;br /&gt;
* GRASS Development Team, 2015. Geographic Resources Analysis Support System (GRASS 6) Programmer's Manual. Open Source Geospatial Foundation Project. Electronic document: https://grass.osgeo.org/programming6/&lt;br /&gt;
&lt;br /&gt;
Related BibTeX entry:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  @Manual{GRASS_GIS_software,&lt;br /&gt;
    title = {Geographic Resources Analysis Support System (GRASS GIS) Software, Version 8.4},&lt;br /&gt;
    author = {{GRASS Development Team}},&lt;br /&gt;
    organization = {Open Source Geospatial Foundation},&lt;br /&gt;
    year = {2025},&lt;br /&gt;
    url = {https://grass.osgeo.org},&lt;br /&gt;
    doi = {https://doi.org/10.5281/zenodo.5176030}&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Historical manual pages ===&lt;br /&gt;
(Search US Army documents at https://discover.dtic.mil/products-services/)&lt;br /&gt;
&lt;br /&gt;
* Predicting Database Requirements for Geographic Information Systems in the Year 2000: Long-Term Design Issues for GRASS (1992): https://apps.dtic.mil/sti/pdfs/ADA256862.pdf&lt;br /&gt;
* Geographic Resources Analysis Support System (GRASS) Version 4.0 User's Reference Manual (1992): https://apps.dtic.mil/sti/tr/pdf/ADA255218.pdf&lt;br /&gt;
* GRASS/GIS Implementation Guide (1989): https://apps.dtic.mil/sti/tr/pdf/ADA214623.pdf&lt;br /&gt;
* r.mapcalc: An Algebra for GIS and Image Processing (1984): https://apps.dtic.mil/sti/pdfs/ADA283923.pdf&lt;br /&gt;
* FORT HOOD GEOGRAPHIC INFORMATION SYSTEM: PILOT SYSTEM DEVELOPMENT AND USER INSTRUCTIONS (1983): https://apps.dtic.mil/sti/pdfs/ADA130618.pdf&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS Addon Manual citations ===&lt;br /&gt;
&lt;br /&gt;
Hint: when citing addons, you can simply use &amp;quot;grass-stable&amp;quot; in the URL which is auto-expanded to the latest version (e.g. grass82/). Like this the latest addon version is found.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
* M. Lennert and GRASS Development Team, 2017: “Addon i.segment.stats. Geographic resources analysis support system (GRASS) software, version 7.2”, https://grass.osgeo.org/grass7/manuals/addons/i.segment.stats.html (1 June 2017)&lt;br /&gt;
&lt;br /&gt;
=== Peer reviewed general GRASS GIS articles ===&lt;br /&gt;
&lt;br /&gt;
* Neteler, M., Bowman, M.H., Landa, M., Metz, M., 2012.  &amp;lt;i&amp;gt;GRASS GIS: A multi-purpose open source GIS&amp;lt;/i&amp;gt;. Environ Model Soft 31, 124–130. ([https://dx.doi.org/10.1016/j.envsoft.2011.11.014 DOI] | [https://web.archive.org/web/20120424040115/https://gis.cri.fmach.it/uploads/neteler_grass_env_model_software.pdf PDF])&lt;br /&gt;
* Neteler, M., Bowman, M.H., Landa, M., Metz, M. (2012) &amp;quot;GRASS GIS: A multi-purpose open source GIS.&amp;quot; Environmental Modelling &amp;amp; Software. Vol 31, pp. 124–130. ([https://dx.doi.org/10.1016/j.envsoft.2011.11.014 DOI] | [https://web.archive.org/web/20120424040115/https://gis.cri.fmach.it/uploads/neteler_grass_env_model_software.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
Related Bibtex entry:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@article{neteler2012grass,&lt;br /&gt;
  title={{GRASS GIS: a multi-purpose Open Source GIS}},&lt;br /&gt;
  author={Neteler, M. and Bowman, M.H. and Landa, M. and Metz, M.},&lt;br /&gt;
  journal={Environmental Modelling \&amp;amp; Software},&lt;br /&gt;
  year={2012},&lt;br /&gt;
  volume = {31},&lt;br /&gt;
  pages = {124--130},&lt;br /&gt;
  publisher={Elsevier},&lt;br /&gt;
  doi = &amp;quot;10.1016/j.envsoft.2011.11.014&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Books ===&lt;br /&gt;
* See https://grass.osgeo.org/learn/books/&lt;br /&gt;
&lt;br /&gt;
=== Topic oriented citations ===&lt;br /&gt;
* see [[Citations for specific modules]]&lt;br /&gt;
* Citations of [[GRASS in the wild]]  (add your publications here)&lt;br /&gt;
&lt;br /&gt;
=== Historic citations ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;&lt;br /&gt;
* GRASS Development Team, 2021. GRASS GIS 7 Programmer's Manual. Open Source Geospatial Foundation, USA. Electronic document: https://grass.osgeo.org/programming7/&lt;br /&gt;
* GRASS Development Team, 2016. GRASS 6 Programmer's Manual. Open Source Geospatial Foundation, USA. Electronic document: https://grass.osgeo.org/programming6/&lt;br /&gt;
* GRASS Development Team, 2012. GRASS 6.4 Users Manual. Open Source Geospatial Foundation, USA. Electronic document: https://grass.osgeo.org/grass64/manuals/&lt;br /&gt;
* GRASS Development Team, 2007. GRASS 6.2 Users Manual. ITC-irst, Trento, Italy. Electronic document: https://grass.osgeo.org/grass62/manuals/&lt;br /&gt;
* GRASS Development Team, 2002. GRASS 5.0 Users Manual. ITC-irst, Trento, Italy. Electronic document: https://grass.osgeo.org/grass57/manuals/html57_user/&lt;br /&gt;
* U.S. Army CERL, 1993. GRASS 4.1 Reference Manual. U.S. Army Corps of Engineers, Construction Engineering Research Laboratories, Champaign, Illinois, 1-425.&lt;br /&gt;
* Westervelt, J.D., Shapiro, M., Goran, W.D., Gerdes, D.P. (1992). Geographic Resources Analysis Support System (GRASS) Version 4.0 User's Reference Manual (No. CERL-ADP-N-87/22). CONSTRUCTION ENGINEERING RESEARCH LAB (ARMY) CHAMPAIGN IL. (PDF: https://apps.dtic.mil/sti/pdfs/ADA255218.pdf)&lt;br /&gt;
* Shapiro, M., Westervelt, J., Gerdes, D., Higgins, M., &amp;amp; Larson, M. (1989). GRASS 3.0 programmer's manual (No. CERL-ADP-N-89/14). CONSTRUCTION ENGINEERING RESEARCH LAB (ARMY) CHAMPAIGN IL. (PDF: https://apps.dtic.mil/sti/pdfs/ADA252461.pdf)&lt;br /&gt;
* ''Missing: Manuals of GRASS 1.0 and 2.0 - please submit to us!''&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Newsletter citations&lt;br /&gt;
** GRASSHopper CERL, https://grass.osgeo.org/about/history/&lt;br /&gt;
** [[Newsletter citations Vol1]] 2004&lt;br /&gt;
** [[Newsletter citations Vol2]] 2005&lt;br /&gt;
** [[Newsletter citations Vol3]] 2005&lt;br /&gt;
** [[Newsletter citations Vol4]] 2006&lt;br /&gt;
&lt;br /&gt;
== Helpful tools and GRASS related bibliographic searches ==&lt;br /&gt;
* [https://grass.osgeo.org/grass-stable/manuals/addons/g.citation.html g.citation add-on module]&lt;br /&gt;
* Google Scholar:&lt;br /&gt;
** [https://scholar.google.com/scholar?q=GRASS+GIS Search for &amp;quot;GRASS GIS&amp;quot;] (activate BibTex export in &amp;quot;Scholar preferences&amp;quot;)&lt;br /&gt;
** The virtual [https://scholar.google.com/citations?user=gJ0ZB0cAAAAJ GRASS Development Team] - GRASS GIS related papers&lt;br /&gt;
* [https://www.citeulike.org CiteULike] - [https://www.citeulike.org/tag/grass Search for &amp;quot;GRASS&amp;quot;]&lt;br /&gt;
* [https://www.scripps.edu/~cdputnam/software/bibutils/ Bibutils] bibliography conversion utilities&lt;br /&gt;
* [https://gbib.seul.org Gbib BibTeX editor] for GTK+Gnome&lt;br /&gt;
* [https://jabref.sourceforge.net/ JabRef] Multi-platform, multi-format bibliography tool&lt;br /&gt;
* [https://www.zotero.org/groups/gis Zotero citation manager GIS group] - with all known GRASS GIS and other GIS related references&lt;br /&gt;
* [[GRASS in the wild‎]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Citations]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=WPS&amp;diff=28733</id>
		<title>WPS</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=WPS&amp;diff=28733"/>
		<updated>2025-12-01T19:53:41Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Update of various URLs and --wps-process-description XML output&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''GRASS based OGC Web Processing Service (WPS) standard implementations'''&lt;br /&gt;
&lt;br /&gt;
The OGC Web Processing Service (WPS) {{wikipedia||Web Processing Service}} interface standard provides rules for standardizing how inputs and outputs (requests and responses) for invoking geospatial processing services as a web service. GRASS GIS can be used as backend in several WPS service frameworks.&lt;br /&gt;
&lt;br /&gt;
== Linking to WPS server ==&lt;br /&gt;
&lt;br /&gt;
A framework has been developed to make the integration of GRASS GIS in WPS server as easy as possible. The&lt;br /&gt;
framework is called '''wps-grass-bridge''' and is available here: &lt;br /&gt;
* '''wps-grass-bridge''': https://code.google.com/archive/p/wps-grass-bridge/&lt;br /&gt;
This framework support currently PyWPS, ZOO WPS and is used by 52North WPS server. Many GRASS GIS modules can be attached out of the box.&lt;br /&gt;
&lt;br /&gt;
There are currently several '''other WPS implementations''' which use GRASS as GIS backbone:&lt;br /&gt;
* '''PyWPS''': https://pywps.org/&lt;br /&gt;
** PyWPS and wps-grass-bridge connector: https://code.google.com/archive/p/wps-grass-bridge/wikis/PyWPS_Integration.wiki&lt;br /&gt;
** [https://pywps.org/gallery/ Gallery] (live examples)&lt;br /&gt;
** PyWPS and GRASS: https://pywps-3.readthedocs.io/special/grass.html&lt;br /&gt;
* '''WPS by 52N''': https://52north.github.io/WPS/&lt;br /&gt;
** Connecting to GRASS out of the box: https://github.com/52North/WPS/tree/dev/52n-wps-grass&lt;br /&gt;
** Backend: https://mvnrepository.com/artifact/org.n52.wps/52n-wps-grass&lt;br /&gt;
** 52N-WPS-GRASS [http://geoprocessing.demo.52north.org:8080/wps/WebProcessingService?REQUEST=GetCapabilities&amp;amp;SERVICE=WPS&amp;amp;VERSION=1.0.0 Demo]&lt;br /&gt;
* '''ZOO project''' - Open OSW Platform: https://zoo-project.org/&lt;br /&gt;
** [https://zoo-project.org/code/services/ ZOO-WPS with GRASS and QGIS]&lt;br /&gt;
* R and WPS: [http://gsif.r-forge.r-project.org/WPS.html WPS class]&lt;br /&gt;
&lt;br /&gt;
== Inside GRASS ==&lt;br /&gt;
&lt;br /&gt;
In GRASS, the WPS process description can be automatically generated with the option '--wps-process-description'.&lt;br /&gt;
See [https://lists.osgeo.org/pipermail/grass-dev/2009-November/047133.html announcement].&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 r.grow --wps-process-description&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;wps:ProcessDescriptions xmlns:wps=&amp;quot;http://www.opengis.net/wps/1.0.0&amp;quot;&lt;br /&gt;
xmlns:ows=&amp;quot;http://www.opengis.net/ows/1.1&amp;quot;&lt;br /&gt;
xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
xsi:schemaLocation=&amp;quot;http://www.opengis.net/wps/1.0.0&lt;br /&gt;
 http://schemas.opengis.net/wps/1.0.0/wpsDescribeProcess_response.xsd&amp;quot;&lt;br /&gt;
 service=&amp;quot;WPS&amp;quot; version=&amp;quot;1.0.0&amp;quot; xml:lang=&amp;quot;en-US&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;ProcessDescription wps:processVersion=&amp;quot;1&amp;quot; storeSupported=&amp;quot;true&amp;quot; statusSupported=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;ows:Identifier&amp;gt;r.grow&amp;lt;/ows:Identifier&amp;gt;&lt;br /&gt;
		&amp;lt;ows:Title&amp;gt;Generates a raster map layer with contiguous areas grown by one cell.&amp;lt;/ows:Title&amp;gt;&lt;br /&gt;
		&amp;lt;ows:Abstract&amp;gt;https://grass.osgeo.org/grass-devel/manuals/r.grow.html&amp;lt;/ows:Abstract&amp;gt;&lt;br /&gt;
		&amp;lt;ows:Metadata xlink:title=&amp;quot;raster&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;ows:Metadata xlink:title=&amp;quot;distance&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;ows:Metadata xlink:title=&amp;quot;proximity&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;DataInputs&amp;gt;&lt;br /&gt;
			&amp;lt;Input minOccurs=&amp;quot;1&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;ows:Identifier&amp;gt;input&amp;lt;/ows:Identifier&amp;gt;&lt;br /&gt;
				&amp;lt;ows:Title&amp;gt;Name of input raster map&amp;lt;/ows:Title&amp;gt;&lt;br /&gt;
				&amp;lt;ComplexData maximumMegabytes=&amp;quot;2048&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;Default&amp;gt;&lt;br /&gt;
						&amp;lt;Format&amp;gt;&lt;br /&gt;
							&amp;lt;MimeType&amp;gt;image/tiff&amp;lt;/MimeType&amp;gt;&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
					&amp;lt;/Default&amp;gt;&lt;br /&gt;
					&amp;lt;Supported&amp;gt;&lt;br /&gt;
						&amp;lt;Format&amp;gt;&lt;br /&gt;
							&amp;lt;MimeType&amp;gt;image/tiff&amp;lt;/MimeType&amp;gt;&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
						&amp;lt;Format&amp;gt;&lt;br /&gt;
							&amp;lt;MimeType&amp;gt;image/geotiff&amp;lt;/MimeType&amp;gt;&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
						&amp;lt;Format&amp;gt;&lt;br /&gt;
							&amp;lt;MimeType&amp;gt;application/x-netcdf&amp;lt;/MimeType&amp;gt;&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
					&amp;lt;/Supported&amp;gt;&lt;br /&gt;
				&amp;lt;/ComplexData&amp;gt;&lt;br /&gt;
			&amp;lt;/Input&amp;gt;&lt;br /&gt;
			&amp;lt;Input minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;ows:Identifier&amp;gt;radius&amp;lt;/ows:Identifier&amp;gt;&lt;br /&gt;
				&amp;lt;ows:Title&amp;gt;Radius of buffer in raster cells&amp;lt;/ows:Title&amp;gt;&lt;br /&gt;
				&amp;lt;LiteralData&amp;gt;&lt;br /&gt;
					&amp;lt;ows:DataType ows:reference=&amp;quot;xs:float&amp;quot;&amp;gt;float&amp;lt;/ows:DataType&amp;gt;&lt;br /&gt;
					&amp;lt;ows:AnyValue/&amp;gt;&lt;br /&gt;
					&amp;lt;DefaultValue&amp;gt;1.01&amp;lt;/DefaultValue&amp;gt;&lt;br /&gt;
				&amp;lt;/LiteralData&amp;gt;&lt;br /&gt;
			&amp;lt;/Input&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
			&amp;lt;Input minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;ows:Identifier&amp;gt;-m&amp;lt;/ows:Identifier&amp;gt;&lt;br /&gt;
				&amp;lt;ows:Title&amp;gt;Radius is in map units rather than cells&amp;lt;/ows:Title&amp;gt;&lt;br /&gt;
				&amp;lt;LiteralData&amp;gt;&lt;br /&gt;
					&amp;lt;ows:DataType ows:reference=&amp;quot;xs:boolean&amp;quot;&amp;gt;boolean&amp;lt;/ows:DataType&amp;gt;&lt;br /&gt;
					&amp;lt;ows:AllowedValues&amp;gt;&lt;br /&gt;
						&amp;lt;ows:Value&amp;gt;true&amp;lt;/ows:Value&amp;gt;&lt;br /&gt;
						&amp;lt;ows:Value&amp;gt;false&amp;lt;/ows:Value&amp;gt;&lt;br /&gt;
					&amp;lt;/ows:AllowedValues&amp;gt;&lt;br /&gt;
					&amp;lt;DefaultValue&amp;gt;false&amp;lt;/DefaultValue&amp;gt;&lt;br /&gt;
				&amp;lt;/LiteralData&amp;gt;&lt;br /&gt;
			&amp;lt;/Input&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
			&amp;lt;/Input&amp;gt;&lt;br /&gt;
		&amp;lt;/DataInputs&amp;gt;&lt;br /&gt;
		&amp;lt;ProcessOutputs&amp;gt;&lt;br /&gt;
			&amp;lt;Output&amp;gt;&lt;br /&gt;
				&amp;lt;ows:Identifier&amp;gt;output&amp;lt;/ows:Identifier&amp;gt;&lt;br /&gt;
				&amp;lt;ows:Title&amp;gt;Name for output raster map&amp;lt;/ows:Title&amp;gt;&lt;br /&gt;
				&amp;lt;ComplexOutput&amp;gt;&lt;br /&gt;
					&amp;lt;Default&amp;gt;&lt;br /&gt;
						&amp;lt;Format&amp;gt;&lt;br /&gt;
							&amp;lt;MimeType&amp;gt;image/tiff&amp;lt;/MimeType&amp;gt;&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
					&amp;lt;/Default&amp;gt;&lt;br /&gt;
					&amp;lt;Supported&amp;gt;&lt;br /&gt;
						&amp;lt;Format&amp;gt;&lt;br /&gt;
							&amp;lt;MimeType&amp;gt;image/tiff&amp;lt;/MimeType&amp;gt;&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
						&amp;lt;Format&amp;gt;&lt;br /&gt;
							&amp;lt;MimeType&amp;gt;image/geotiff&amp;lt;/MimeType&amp;gt;&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
						&amp;lt;Format&amp;gt;&lt;br /&gt;
							&amp;lt;MimeType&amp;gt;application/netcdf&amp;lt;/MimeType&amp;gt;&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
						&amp;lt;Format&amp;gt;&lt;br /&gt;
							&amp;lt;MimeType&amp;gt;application/x-netcdf&amp;lt;/MimeType&amp;gt;&lt;br /&gt;
						&amp;lt;/Format&amp;gt;&lt;br /&gt;
					&amp;lt;/Supported&amp;gt;&lt;br /&gt;
				&amp;lt;/ComplexOutput&amp;gt;&lt;br /&gt;
			&amp;lt;/Output&amp;gt;&lt;br /&gt;
		&amp;lt;/ProcessOutputs&amp;gt;&lt;br /&gt;
	&amp;lt;/ProcessDescription&amp;gt;&lt;br /&gt;
&amp;lt;/wps:ProcessDescriptions&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WPS workflow idea ==&lt;br /&gt;
&lt;br /&gt;
External raster maps can directly be linked into GRASS with {{cmd|r.external}} which saves time and disk space. Additionally,&lt;br /&gt;
there is no more need to store results in the internal GRASS format - with {{cmd|r.external.out}} the resulting maps are directly written to a GDAL supported format.&lt;br /&gt;
&lt;br /&gt;
'''Preparations'''&lt;br /&gt;
&lt;br /&gt;
GRASS can be used in an automated way by just defining a set of variables. See here for [[GRASS_and_Shell#Setting_the_variables|GRASS and Shell]] settings and [[GRASS_and_Python#Creating_Python_scripts_that_call_GRASS_functionality_from_outside|GRASS and Python]].&lt;br /&gt;
&lt;br /&gt;
'''Data flow example'''&lt;br /&gt;
&lt;br /&gt;
The script content could be looking like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# register (rather than import) a GeoTIFF file in GRASS GIS:&lt;br /&gt;
r.external input=terra_lst1km20030314.LST_Day.tif output=modis_celsius&lt;br /&gt;
 &lt;br /&gt;
# define output directory for files resulting from subsequent calculations:&lt;br /&gt;
r.external.out directory=$HOME/gisoutput/ format=&amp;quot;GTiff&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# perform calculations (here: extract pixels &amp;gt; 20 deg C)&lt;br /&gt;
# store output directly as GeoTIFF file, hence add the .tif extension:&lt;br /&gt;
r.mapcalc &amp;quot;warm.tif = if(modis_celsius &amp;gt; 20.0, modis_celsius, null() )&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# cease GDAL output connection and turn back to write standard GRASS raster files:&lt;br /&gt;
r.external.out -r&lt;br /&gt;
 &lt;br /&gt;
# use the result elsewhere&lt;br /&gt;
qgis $HOME/gisoutput/warm.tif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* List of [https://scholar.google.com/scholar?hl=en&amp;amp;q=%2Bgrass+%2Bgis+%2Bwps&amp;amp;as_sdt=2001&amp;amp;as_ylo=&amp;amp;as_vis=0 GRASS-WPS articles]&lt;br /&gt;
* [https://www.youtube.com/watch?v=zCnax9w1bCs PyWPS GRASS GIS 7 and QGIS with WPS plugin in action]&lt;br /&gt;
* [https://code.google.com/archive/p/wps-grass-bridge/wikis/PyWPS_Integration.wiki PyWPS integration]&lt;br /&gt;
&lt;br /&gt;
Videos:&lt;br /&gt;
* [https://www.youtube.com/watch?v=zCnax9w1bCs PyWPS GRASS GIS 7 and QGIS with WPS plugin in action]&lt;br /&gt;
* [https://www.youtube.com/watch?v=jg2pb_Xjq8Y Development of an Open Cloud GIS with GRASS GIS, PyWPS, the wps-grass-bridge and QGIS]&lt;br /&gt;
&lt;br /&gt;
== Historical note: GRASSLinks as a precursor to WPS ==&lt;br /&gt;
&lt;br /&gt;
* GRASSLinks was originally developed from 1994-98 by Dr. Susan Huse at the Research Program in Environmental Planning and GIS (REGIS), at the University of California, Berkeley. This is claimed to be the first fully functional online GIS package offering public domain access to environmental and geographical data. &lt;br /&gt;
* [http://uspest.org/glinks35/ OSU IPPC GRASSLinks 3.5beta: A web interface for GRASS GIS version 5.x]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:OGC]]&lt;br /&gt;
[[Category:Linking to other languages]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-11-14&amp;diff=28729</id>
		<title>PSC Meeting 2025-11-14</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-11-14&amp;diff=28729"/>
		<updated>2025-11-14T11:31:42Z</updated>

		<summary type="html">&lt;p&gt;Neteler: +GRASS Wiki under DDOS attack&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* Report from NumFOCUS Project Summit (VP)&lt;br /&gt;
* GRASS Wiki under DDOS attack, see https://discourse.osgeo.org/t/grass-wiki-under-ddos-attack/150717&lt;br /&gt;
* New wiki page: [[Organizing GRASS Contributor Events]]&lt;br /&gt;
* GRASS Meeting 2026 - Luca's proposal&lt;br /&gt;
* Upcoming releases:&lt;br /&gt;
** Release 8.4.2 (due to relevant [https://github.com/OSGeo/grass/compare/8.4.1...releasebranch_8_4 fixes]; the branch-CI is also functional again) - [https://github.com/OSGeo/grass/milestone/27 milestone]&lt;br /&gt;
** Release 8.5.0 - [https://github.com/OSGeo/grass/milestone/22 milestone]&lt;br /&gt;
* Reimburse Alen for stickers he will take to NZ&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-11-14&amp;diff=28728</id>
		<title>PSC Meeting 2025-11-14</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-11-14&amp;diff=28728"/>
		<updated>2025-11-11T12:39:13Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* Report from NumFOCUS Project Summit (VP)&lt;br /&gt;
* New wiki page: [[Organizing GRASS Contributor Events]]&lt;br /&gt;
* GRASS Meeting 2026 - Luca's proposal&lt;br /&gt;
* Upcoming releases:&lt;br /&gt;
** Release 8.4.2 (due to relevant [https://github.com/OSGeo/grass/compare/8.4.1...releasebranch_8_4 fixes]; the branch-CI is also functional again) - [https://github.com/OSGeo/grass/milestone/27 milestone]&lt;br /&gt;
** Release 8.5.0 - [https://github.com/OSGeo/grass/milestone/22 milestone]&lt;br /&gt;
* Reimburse Alen for stickers he will take to NZ&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28712</id>
		<title>Compile and Install</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28712"/>
		<updated>2025-10-02T09:39:37Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Attempt to cleanup the wx package names mess in Mint&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- {{MoveToTrac}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Disclaimer''': This page explains how to turn the GRASS source code into an installable binary package (&amp;quot;compilation&amp;quot;) for different operating systems. If you just want to get ready-to-use binaries, go [https://grass.osgeo.org/download/ here], otherwise read on...&lt;br /&gt;
&lt;br /&gt;
== How to do compilation and installation of GRASS? ==&lt;br /&gt;
&lt;br /&gt;
Here we explain the procedure to compile GRASS from GitHub, but it also applies to official GRASS 8 releases.&lt;br /&gt;
&lt;br /&gt;
''For installation of precompiled binary packages, see the main [[Installation Guide]].''&lt;br /&gt;
&lt;br /&gt;
For detailed information on compilation, please see the [https://github.com/OSGeo/grass/blob/main/INSTALL.md INSTALL] file in the source code.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
==== Extra libraries ====&lt;br /&gt;
GRASS needs at least two extra libraries: PROJ and GDAL/OGR. It is recommended to download them as ready-to-use packages for your software platform (Linux distribution, Windows, Mac...).&lt;br /&gt;
&lt;br /&gt;
Other libraries needed to run GRASS are listed on the [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md requirements page].&lt;br /&gt;
&lt;br /&gt;
To compile, you will also need the respective &amp;quot;-devel&amp;quot; packages; see below for details.&lt;br /&gt;
&lt;br /&gt;
==== Download GRASS source code ====&lt;br /&gt;
&lt;br /&gt;
First, [https://grass.osgeo.org/download/ download the GRASS source code].&lt;br /&gt;
&lt;br /&gt;
=== Generic Compilation and installation procedure ===&lt;br /&gt;
&lt;br /&gt;
* It is wise that compilation processes are carried out as a normal user: If you want to get the source code in a place where you do not have write permissions (e.g. in /usr/local/src/) just follow this:&lt;br /&gt;
      cd /usr/local/src/ &lt;br /&gt;
      su -c 'mkdir grass8'&lt;br /&gt;
      su -c 'chown yourlogin:yourgroup grass8'&lt;br /&gt;
&lt;br /&gt;
Otherwise if you have permissions just continue as a normal user:&lt;br /&gt;
      mkdir $HOME/src&lt;br /&gt;
      cd $HOME/src/&lt;br /&gt;
      git clone https://github.com/OSGeo/grass.git grass_main&lt;br /&gt;
&lt;br /&gt;
* run configure with parameters to adapt the compile process to your own system. To see what options can be passed to it, run:&lt;br /&gt;
 ./configure --help | less &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The minimum set of configure parameters is &lt;br /&gt;
      ./configure ### --&amp;gt;&lt;br /&gt;
It may (!) look like this:&lt;br /&gt;
 &lt;br /&gt;
      ./configure \&lt;br /&gt;
          --with-cxx \&lt;br /&gt;
          --with-sqlite \&lt;br /&gt;
          --with-python \&lt;br /&gt;
          --with-geos \&lt;br /&gt;
          --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
          --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
          --with-freetype \&lt;br /&gt;
          --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
          --with-proj --with-proj-share=/usr/share/proj&lt;br /&gt;
&lt;br /&gt;
You may have to explicitly state the path for certain packages (i.e., gdal). The Unix 'locate' command will come in handy for finding the path of the package you need (you may have to run locate as root ex: sudo locate gdal-config).&lt;br /&gt;
&lt;br /&gt;
Please note that the paths mentioned may widely vary due to the distribution used.&lt;br /&gt;
See [[Compile_and_Install#Platform_Specific_Notes|Platform Specific Notes]] below.&lt;br /&gt;
&lt;br /&gt;
Depending on your needs it may be a good idea to include debugging hooks.&lt;br /&gt;
: See [[GRASS_Debugging#Compile_Time_Setup]].&lt;br /&gt;
 CFLAGS=&amp;quot;-ggdb -Wall -Werror-implicit-function-declaration&amp;quot; ./configure ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the end of configuration process you should get report not much different from this:&lt;br /&gt;
&lt;br /&gt;
  GRASS is now configured for:  x86_64-pc-linux-gnu&lt;br /&gt;
  &lt;br /&gt;
  Source directory:           /home/user/software/grass_main&lt;br /&gt;
  Build directory:            /home/user/software/grass_main&lt;br /&gt;
  Installation directory:     ${prefix}/grass84&lt;br /&gt;
  Startup script in directory:${exec_prefix}/bin&lt;br /&gt;
  C compiler:                 gcc -O2 -march=native -std=gnu99 -fexceptions -fstack-protector -m64 -fdiagnostics-color &lt;br /&gt;
  C++ compiler:               c++ -g -Wall&lt;br /&gt;
  Building shared libraries:  yes&lt;br /&gt;
  OpenGL platform:            X11&lt;br /&gt;
  &lt;br /&gt;
  MacOSX application:         no&lt;br /&gt;
  MacOSX architectures:       &lt;br /&gt;
  MacOSX SDK:                 &lt;br /&gt;
  &lt;br /&gt;
  BLAS support:               yes&lt;br /&gt;
  BZIP2 support:              no&lt;br /&gt;
  C++ support:                yes&lt;br /&gt;
  Cairo support:              yes&lt;br /&gt;
  DWG support:                no&lt;br /&gt;
  FFTW support:               yes&lt;br /&gt;
  FreeType support:           yes&lt;br /&gt;
  GDAL support:               yes&lt;br /&gt;
  GEOS support:               yes&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
* Let's compile it (takes a little while...)!&lt;br /&gt;
      make -j2&lt;br /&gt;
* At the end, you should get report not much different from this:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Following modules are missing the 'description.html' file in src code:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 GRASS compilation log&lt;br /&gt;
 -------------------------&lt;br /&gt;
 Started compilation: Mon 19 Aug 2024 10:47:57 PM CEST&lt;br /&gt;
 --&lt;br /&gt;
 Errors in:&lt;br /&gt;
 No errors detected.&lt;br /&gt;
 --&lt;br /&gt;
 Finished compilation: Mon 19 Aug 2024 10:55:12 PM CEST&lt;br /&gt;
 (In case of errors please change into the directory with error and run 'make')&lt;br /&gt;
&lt;br /&gt;
* If there is any error, change directory to directory with error and run &amp;quot;make&amp;quot; again. Report occurring bug to GRASS mailing list&lt;br /&gt;
* Once the installation process is finished, you're ready to install GRASS system wide.&lt;br /&gt;
      su -c 'make install'&lt;br /&gt;
* enjoy GRASS: &lt;br /&gt;
      grass&lt;br /&gt;
&lt;br /&gt;
=== What else? ===&lt;br /&gt;
&lt;br /&gt;
If you want to use [https://www.qgis.org QGIS], then also compile the GRASS-GDAL/OGR plugin. This is also useful to access your GRASS-data&lt;br /&gt;
from other application using GDAL/OGR like [[R_statistics/ R]].&lt;br /&gt;
* [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]] (enables QGIS to read GRASS data directly)&lt;br /&gt;
&lt;br /&gt;
=== Compile and install GDAL-GRASS plugin ===&lt;br /&gt;
&lt;br /&gt;
* See [[Compile and install GDAL-GRASS plugin]]&lt;br /&gt;
&lt;br /&gt;
=== Platform Specific Notes ===&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Linux comes in various flavours, i.e. distributions.&lt;br /&gt;
&lt;br /&gt;
===== Distribution related packaging =====&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Archlinux: https://aur.archlinux.org/packages/grass&lt;br /&gt;
* Centos: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Debian: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
* EPEL: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Fedora: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Ubuntu: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
&lt;br /&gt;
===== Alpine Linux =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# install compiler tools and libraries&lt;br /&gt;
apk add build-base bzip2-dev cairo-dev fftw-dev freetype-dev g++ gcc gdal-dev geos-dev git \&lt;br /&gt;
        gnutls-dev libc6-compat libjpeg-turbo-dev libpng-dev make openjpeg-dev openblas-dev \&lt;br /&gt;
        postgresql-dev proj-dev python3-dev py3-numpy-dev sqlite-dev tar tiff-dev unzip vim \&lt;br /&gt;
        wget zip zstd-dev&lt;br /&gt;
&lt;br /&gt;
# install needed tools and libraries when using GRASS&lt;br /&gt;
apk add attr bash bison bzip2 cairo curl fftw flex freetype gdal gdal-tools gettext geos gnutls \&lt;br /&gt;
        jsoncpp libbz2 libexecinfo libjpeg-turbo libpng libunwind musl musl-utils ncurses openjpeg \&lt;br /&gt;
        openblas py3-numpy py3-pillow py3-six postgresql proj-datumgrid proj-util sqlite sqlite-libs \&lt;br /&gt;
        subversion tiff zstd zstd-libs&lt;br /&gt;
&lt;br /&gt;
# get source code&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://grass.osgeo.org/grass88/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# unpack&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# change into source code (update path name as needed)&lt;br /&gt;
cd grass-8.4.git_src_snapshot_2021_05_01/&lt;br /&gt;
&lt;br /&gt;
# minimal configuration&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --without-nls \&lt;br /&gt;
  --without-wxwidgets \&lt;br /&gt;
  --without-fftw \&lt;br /&gt;
  --without-cairo \&lt;br /&gt;
  --without-freetype \&lt;br /&gt;
  --without-opengl \&lt;br /&gt;
  --without-odbc&lt;br /&gt;
&lt;br /&gt;
# compilation&lt;br /&gt;
nice make -j2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Archlinux =====&lt;br /&gt;
You can install GRASS for Archlinux distribution based like Archlinux, Manjaro, EndeavourOS ...&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Easiest method : use a prebuilt package using arch4edu repository'''&amp;lt;/big&amp;gt;&lt;br /&gt;
''&amp;quot;Arch4edu is a community repository for Arch Linux and Arch Linux ARM that strives to provide the latest versions of most software used by college students.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Add Arch4edu repository. Follow instructions from official documentation:&lt;br /&gt;
&lt;br /&gt;
https://github.com/arch4edu/arch4edu/wiki/Add-arch4edu-to-your-Archlinux&lt;br /&gt;
&lt;br /&gt;
2. Refresh packages list with&lt;br /&gt;
 &lt;br /&gt;
 pacman -Syyu&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS package&lt;br /&gt;
&lt;br /&gt;
 pacman -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Advanced method : use AUR (Arch User Repository) package'''&amp;lt;/big&amp;gt;&lt;br /&gt;
Up-to-date links to Archlinux GRASS PKGBUILDs are on Arch User Repository. &lt;br /&gt;
PKGBUILD downloads and builds automatically sources from https://grass.osgeo.org/download/software/linux/.&lt;br /&gt;
&lt;br /&gt;
You can use an AUR helper like ''pamac'', ''yay'', among others ... More info through this link https://wiki.archlinux.org/title/AUR_helpers&lt;br /&gt;
&lt;br /&gt;
Exemple with ''yay'':&lt;br /&gt;
 yay -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Expert method : compile from source code'''&amp;lt;/big&amp;gt;&lt;br /&gt;
If you want to compile it yourself, you could follow steps below :&lt;br /&gt;
&lt;br /&gt;
''(As an alternative it is recommended to download PKGBUILD from AUR and then customize to your needs)''&lt;br /&gt;
&lt;br /&gt;
Install dependencies : &lt;br /&gt;
 pacman -S bzip2 cairo fftw fontconfig freetype2 gcc-libs gdal geos glibc glu libpng libtiff libx11 libgl netcdf pdal proj python-gdal python-numpy python-pillow python-wxpython readline zlib zstd&lt;br /&gt;
&lt;br /&gt;
Download and extract sources : https://grass.osgeo.org/download/software/sources/&lt;br /&gt;
&lt;br /&gt;
We can now start building GRASS&lt;br /&gt;
&lt;br /&gt;
 export PATH=~/usr/bin:$PATH &amp;amp;&amp;amp; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
    --with-wxwidgets \&lt;br /&gt;
    --with-readline \&lt;br /&gt;
    --with-pthread \&lt;br /&gt;
    --with-netcdf \&lt;br /&gt;
    --with-nls \&lt;br /&gt;
    --with-geos \&lt;br /&gt;
    --with-postgres \&lt;br /&gt;
    --with-pdal=/usr/include/pdal \&lt;br /&gt;
    --with-bzlib \&lt;br /&gt;
    --with-zstd&lt;br /&gt;
&lt;br /&gt;
Now let's compile and install it&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
It's done, you can enjoy GRASS in Arch, just type &amp;quot;grass&amp;quot; in the terminal to launch it or look for grass in your menu.&lt;br /&gt;
&lt;br /&gt;
===== Generic procedure for Debian-based distributions (Ubuntu, ...) =====&lt;br /&gt;
&lt;br /&gt;
WORK IN PROGRESS&lt;br /&gt;
&lt;br /&gt;
1. Install official GRASS package&lt;br /&gt;
&lt;br /&gt;
 sudo apt install grass grass-dev&lt;br /&gt;
&lt;br /&gt;
2. Enable source code download&lt;br /&gt;
&lt;br /&gt;
 # do backup first&lt;br /&gt;
 sudo cp /etc/apt/sources.list /etc/apt/sources.list.orig&lt;br /&gt;
 sudo sed -i '/^#\sdeb-src /s/^# *//' /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS dependencies&lt;br /&gt;
&lt;br /&gt;
 sudo apt build-dep grass&lt;br /&gt;
&lt;br /&gt;
4. Download GRASS source code&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/osgeo/grass&lt;br /&gt;
&lt;br /&gt;
5. Compile GRASS from source code&lt;br /&gt;
 &lt;br /&gt;
 cd grass&lt;br /&gt;
&lt;br /&gt;
Configure:&lt;br /&gt;
&lt;br /&gt;
 grass --config build | sh&lt;br /&gt;
&lt;br /&gt;
Optionally install missing dependencies (can happen when official GRASS package is not compatible with GRASS main), eg.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install libzstd-dev&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
 make -j2&lt;br /&gt;
&lt;br /&gt;
6. Run locally or install&lt;br /&gt;
&lt;br /&gt;
 ./bin.x86_64-pc-linux-gnu/grass --version&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
 sudo make install&lt;br /&gt;
 grass --version&lt;br /&gt;
&lt;br /&gt;
===== Debian =====&lt;br /&gt;
&lt;br /&gt;
* Official [https://wiki.debian.org/DebianGis DebianGIS] packaging control files, available on git server:&lt;br /&gt;
  https://salsa.debian.org/debian-gis-team/grass&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Debian 11 (bullseye) ======&lt;br /&gt;
&lt;br /&gt;
Install needed packages for GRASS 8.4:&lt;br /&gt;
  apt-get update &amp;amp;&amp;amp; \&lt;br /&gt;
  apt-get install bison debhelper-compat dh-python doxygen fakeroot flex graphviz \&lt;br /&gt;
    libblas-dev libbz2-dev libcairo2-dev libfftw3-dev libfreetype6-dev \&lt;br /&gt;
    libgdal-dev libgeos-dev libgl1-mesa-dev libglu1-mesa-dev libjpeg-dev liblapack-dev libmotif-dev \&lt;br /&gt;
    default-libmysqlclient-dev libncurses5-dev libnetcdf-dev libpng-dev libpq-dev \&lt;br /&gt;
    libproj-dev libreadline-dev libsqlite3-dev libtiff-dev libxmu-dev libzstd-dev \&lt;br /&gt;
    netcdf-bin pkg-config proj-bin python3 python3-dev python3-numpy python3-pil python3-ply \&lt;br /&gt;
    python3-six python3-wxgtk4.0 wget unixodbc-dev zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download and unpack GRASS 8.4 source code (or fetch from GitHub: https://github.com/OSGeo/grass):&lt;br /&gt;
&lt;br /&gt;
  wget https://grass.osgeo.org/grass84/source/grass-8.4-latest.tar.gz&lt;br /&gt;
  tar xvfz grass-8.4-latest.tar.gz&lt;br /&gt;
  cd grass-8.4.*&lt;br /&gt;
&lt;br /&gt;
Configuration:&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-Wall -Werror-implicit-function-declaration -fno-common -Wextra -Wunused&amp;quot; \&lt;br /&gt;
  CXXFLAGS=&amp;quot;-Wall&amp;quot;  \&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --prefix=/usr/local \&lt;br /&gt;
   --with-gdal --with-proj --with-proj-share=/usr/share \&lt;br /&gt;
   --with-glw --with-nls --with-readline \&lt;br /&gt;
   --with-cxx --enable-largefile \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --with-sqlite --with-cairo --with-python=/usr/bin/python-config \&lt;br /&gt;
   --with-wxwidgets --with-geos \&lt;br /&gt;
   --with-netcdf=/usr/bin/nc-config --with-odbc=yes \&lt;br /&gt;
   --with-openmp=yes --with-pthread=no&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
  make -j2&lt;br /&gt;
&lt;br /&gt;
Install:&lt;br /&gt;
&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
  grass --version&lt;br /&gt;
&lt;br /&gt;
===== Ubuntu =====&lt;br /&gt;
&lt;br /&gt;
There is a dedicated page on how to [[Compile_and_Install_Ubuntu | Compile the GRASS source code &amp;amp; install it in Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
===== Linux Mint =====&lt;br /&gt;
&lt;br /&gt;
The [[Compile_and_Install_Ubuntu | detailed compilation guide for Ubuntu]] may just work. However, here is a short guide for Mint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 21+&lt;br /&gt;
&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade -y&lt;br /&gt;
&lt;br /&gt;
# installation of required libraries and compile tools&lt;br /&gt;
# recommended to give Python3 precedence over Python2 (which is end-of-life since 2024)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&lt;br /&gt;
# install compiler tools and further dependencies (tested with Linux Mint 21)&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  libproj-dev proj-data proj-bin \&lt;br /&gt;
  libgeos-dev \&lt;br /&gt;
  libgdal-dev python3-gdal gdal-bin \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-opengl \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  libfftw3-dev \&lt;br /&gt;
  zlib1g-dev gettext \&lt;br /&gt;
  libbz2-dev libzstd-dev libfreetype6-dev \&lt;br /&gt;
  libtiff5-dev libpnglite-dev libcairo2 libcairo2-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev libpq-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  subversion \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript wget -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GUI''' - update wxpython:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 21 only&lt;br /&gt;
sudo apt-get install wx3.0-headers libwxgtk3.0-gtk3-dev libwxbase3.0-dev libwxgtk3.0-gtk3-dev&lt;br /&gt;
pip3 install --user --upgrade typing-extensions&lt;br /&gt;
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 22+&lt;br /&gt;
sudo apt-get install wx3.2-headers libwxgtk3.2-dev libwxbase3.2-1 libgtk-3-dev python3-wxgtk4.0 \&lt;br /&gt;
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next steps:&lt;br /&gt;
* create a subdirectory in your HOME tree for storing the GRASS source code (and later compilation)&lt;br /&gt;
* get source code, one of the two options:&lt;br /&gt;
** a) download [https://grass.osgeo.org/grass84/source/snapshot/ GRASS source code weekly snapshot] (e.g. take the &amp;quot;8.x.git snapshot&amp;quot;), or&lt;br /&gt;
*** unpack source code&lt;br /&gt;
** b) current source code from GitHub:&lt;br /&gt;
*** &amp;lt;code&amp;gt;git clone https://github.com/OSGeo/grass.git&amp;lt;/code&amp;gt;&lt;br /&gt;
* change into the source code directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# in the source code directory, &amp;quot;configure&amp;quot; the source code to prepare for compilation:&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-pdal \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-openmp&lt;br /&gt;
&lt;br /&gt;
# compile GRASS&lt;br /&gt;
make -j2&lt;br /&gt;
&lt;br /&gt;
# install compiled GRASS on system&lt;br /&gt;
sudo make install&lt;br /&gt;
&lt;br /&gt;
# use GRASS! Start on command line&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Enterprise Linux =====&lt;br /&gt;
&lt;br /&gt;
Enterprise Linux (EL) and derivatives (that is, Red Hat Enterprise Linux, CentOS and Scientific Linux) is a popular and robust platform for servers and computing-heavy workstations, and is therefore a good fit for GIS specific requirements.&lt;br /&gt;
&lt;br /&gt;
See: https://wiki.osgeo.org/wiki/Enterprise_Linux_GIS&lt;br /&gt;
&lt;br /&gt;
===== Scientific Linux =====&lt;br /&gt;
&lt;br /&gt;
See Centos&lt;br /&gt;
&lt;br /&gt;
===== CentOS =====&lt;br /&gt;
&lt;br /&gt;
You first need to add the EPEL repository for PROJ and GDAL, see [https://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F here]&lt;br /&gt;
&lt;br /&gt;
Preparation '''Centos 8''':&lt;br /&gt;
  dnf install epel-release&lt;br /&gt;
&lt;br /&gt;
  dnf install flex bison make zlib-devel gcc-c++ gettext \&lt;br /&gt;
              fftw-devel libtiff-devel sqlite-devel \&lt;br /&gt;
              proj proj-devel proj-datumgrid libxml2 \&lt;br /&gt;
              geos geos-devel git \&lt;br /&gt;
              netcdf netcdf-devel atlas-devel \&lt;br /&gt;
              blas-devel lapack-devel libpq-devel \&lt;br /&gt;
              python3-devel python3-numpy \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib \&lt;br /&gt;
              gdal gdal-libs gdal-python-tools python3-gdal gdal-devel \&lt;br /&gt;
              wxGTK3-devel mesa-libGL-devel mesa-libGLU-devel \&lt;br /&gt;
              libXmu-devel libX11-devel&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8 compilation and installation'''&lt;br /&gt;
&lt;br /&gt;
[https://grass.osgeo.org/grass84/source/snapshot/ Download source code] (e.g., --&amp;gt; &amp;quot;Download latest 8.4 code)&amp;quot; and configure GRASS 8 (suggestion: save this as script):&lt;br /&gt;
&lt;br /&gt;
 ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
  --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-netcdf \&lt;br /&gt;
  --without-ffmpeg \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-fftw&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
    make&lt;br /&gt;
or on a multicore system (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
&lt;br /&gt;
For a system wide installation, run as root user:&lt;br /&gt;
    make install&lt;br /&gt;
OR simply run it directly from the source code directory (substitute ARCH with i686 or x86_64):&lt;br /&gt;
&lt;br /&gt;
    bin.$ARCH/grass -gui&lt;br /&gt;
&lt;br /&gt;
In this case, for convenience, add it to the search path:&lt;br /&gt;
    mkdir $HOME/bin&lt;br /&gt;
    cd $HOME/bin&lt;br /&gt;
    # example:&lt;br /&gt;
    ln -s $HOME/software/grass84_release/bin.x86_64-pc-linux-gnu/grass .&lt;br /&gt;
&lt;br /&gt;
Now use it subsequently with&lt;br /&gt;
    grass -gui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation grass on a HPC system with '''Centos 7''' and no root privileges:'''&lt;br /&gt;
&lt;br /&gt;
This assumes that python3, fftw, proj, gdal and geos are available on the HPC system, either as modules or as installed software.&lt;br /&gt;
&lt;br /&gt;
Download and prepare some dependencies (freetypes and zstd)&lt;br /&gt;
    mkdir -p $HOME/grass/freetypes&lt;br /&gt;
    cd $HOME/grass/freetypes&lt;br /&gt;
    wget path/to/freetype-2.9.1.tar.gz&lt;br /&gt;
    tar -xf freetype-2.9.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
    mkdir $HOME/grass/zstd&lt;br /&gt;
    cd mkdir $HOME/grass/zstd&lt;br /&gt;
    wget path/to/v1.4.4/zstd-1.4.4.tar.gz&lt;br /&gt;
    tar -xf zstd-1.4.4.tar.gz&lt;br /&gt;
    make install PREFIX=./&lt;br /&gt;
&lt;br /&gt;
Add the ZSTD path to your LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
    tee -a $HOME/.bashrc &amp;gt; /dev/null &amp;lt;&amp;lt; EOT&lt;br /&gt;
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/grass/zstd/zstd-1.4.4/lib&lt;br /&gt;
    EOT&lt;br /&gt;
&lt;br /&gt;
The configure command could look like this&lt;br /&gt;
    ./configure \&lt;br /&gt;
        -prefix=$HOME/grass \&lt;br /&gt;
        --enable-64bit --with-fftw-includes=/path/to/fftw/include/ \&lt;br /&gt;
        --with-fftw-libs=/path/to/fftw/lib/ \&lt;br /&gt;
        --with-freetype-includes=$HOME/grass/freetypes/freetype-2.9.1/include/ \&lt;br /&gt;
        --with-netcdf --with-geos --with-blas --with-lapack --with-postgres \&lt;br /&gt;
        --with-zstd-includes=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-zstd-libs=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-gdal=/path/to/gdal-config  # This could be the path to a gdal version compiled from source&lt;br /&gt;
&lt;br /&gt;
Finally as usual:&lt;br /&gt;
    make; make install&lt;br /&gt;
    &lt;br /&gt;
    grass&lt;br /&gt;
&lt;br /&gt;
===== Gentoo =====&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
See also https://packages.gentoo.org/package/sci-geosciences/grass&lt;br /&gt;
&lt;br /&gt;
===== Funtoo =====&lt;br /&gt;
&lt;br /&gt;
{{MovedToTrac|FuntooLinux}}&lt;br /&gt;
&lt;br /&gt;
===== Fedora =====&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Fedora ======&lt;br /&gt;
&lt;br /&gt;
'''Preparation''' for the compilation of GRASS 8+ source code (F36+):&lt;br /&gt;
&lt;br /&gt;
  dnf install gcc gcc-c++ bison flex ncurses-devel gettext proj-devel \&lt;br /&gt;
              gdal gdal-devel sqlite-devel xml2 mesa-libGL-devel cairo-devel \&lt;br /&gt;
              fftw-devel mesa-libGLU-devel libXmu-devel libX11-devel geos geos-devel \&lt;br /&gt;
              libtiff-devel python3-devel numpy wxGTK-devel gawk git \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib-wx doxygen python3-sphinx \&lt;br /&gt;
              libzstd-devel libzstd python3-six python3-numpy python3-wxpython4 \&lt;br /&gt;
              proj-data PDAL-devel PDAL-libs&lt;br /&gt;
&lt;br /&gt;
  # optionally also:  netcdf-devel postgresql-devel &lt;br /&gt;
  #                   atlas-devel lapack-devel lapack-devel &lt;br /&gt;
  #                   laszip laszip-devel&lt;br /&gt;
  #                   proj-data-at proj-data-au proj-data-be ...&lt;br /&gt;
&lt;br /&gt;
''Note 1: the optional ffmpeg-devel comes from the rpmfusion-free repository ([https://rpmfusion.org/Configuration/ configuration]).''&lt;br /&gt;
&lt;br /&gt;
'''Download''' and unpack the source code:&lt;br /&gt;
* GRASS 8: [https://grass.osgeo.org/grass84/source/snapshot/ weekly snapshot] - [https://github.com/OSGeo/grass/releases GitHub repository]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configure''': This is an example how to configure the source code on a Fedora system:&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --with-cxx \&lt;br /&gt;
   --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
   --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
   --with-geos \&lt;br /&gt;
   --with-pdal \&lt;br /&gt;
   --with-sqlite \&lt;br /&gt;
   --with-nls \&lt;br /&gt;
   --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
   --with-fftw \&lt;br /&gt;
   --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --enable-largefile \&lt;br /&gt;
   --without-odbc&lt;br /&gt;
&lt;br /&gt;
''Extra 1:'' If you also want '''FFMPEG support''' - it requires 'dnf install fftw-devel' from the rpmfusion-free repository. Then add to the configuration lines above:&lt;br /&gt;
&lt;br /&gt;
     --with-ffmpeg --with-ffmpeg-includes=&amp;quot;/usr/include/ffmpeg /usr/include/ffmpeg/libav* /usr/include/ffmpeg/libpostproc /usr/include/ffmpeg/libswscale&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
''Extra 2:'' For '''LAPACK/BLAS support''' (addons i.spec.unmix, v.kriging etc), install &amp;quot;dnf install lapack lapack-devel blas blas-devel atlas atlas-devel&amp;quot;. Then add to the configuration lines above:&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
&lt;br /&gt;
''Extra 3:'' For '''ZSTD support''' (Zstandard compression algorithm), first install &amp;quot;dnf install libzstd libzstd-devel zstd&amp;quot;. After installing the zstd related packages, add to the configuration lines above:&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
&lt;br /&gt;
Finally '''compile''' the configured source code:&lt;br /&gt;
    make&lt;br /&gt;
   or on multicore (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
   and&lt;br /&gt;
    make install # requires root permissions unless you become owner of /usr/local/&lt;br /&gt;
&lt;br /&gt;
Then use GRASS 8 and enjoy!&lt;br /&gt;
&lt;br /&gt;
   grass --version&lt;br /&gt;
&lt;br /&gt;
===== openSUSE =====&lt;br /&gt;
&lt;br /&gt;
To build GRASS on openSUSE:&lt;br /&gt;
&lt;br /&gt;
''Application:Geo'' repo to be added (see [https://software.opensuse.org//download.html?project=Application%3AGeo&amp;amp;package=gdal Install package Application:Geo]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# example for Leap 42 version:&lt;br /&gt;
sudo zypper addrepo https://download.opensuse.org/repositories/Application:Geo/openSUSE_Leap_42.3/Application:Geo.repo&lt;br /&gt;
sudo zypper refresh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RPM packages to be installed:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo zypper install bison flex freetype2-devel fftw3-devel gcc-c++ \&lt;br /&gt;
   libgdal-devel libgeos-devel libjpeg-devel libpng-devel libtiff-devel \&lt;br /&gt;
   man proj libproj-devel readline-devel netcdf-devel ncurses-devel \&lt;br /&gt;
   mysql-devel postgresql-devel sqlite-devel unixODBC-devel \&lt;br /&gt;
   tcl-devel tk-devel xorg-x11-Mesa-devel libXmu-devel \&lt;br /&gt;
   python-numpy python-dateutil python-devel python-opengl \&lt;br /&gt;
   python-wxWidgets python-xml python-dateutil wxWidgets-devel \&lt;br /&gt;
   zlib-devel doxygen python-sphinx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source code configuration:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 ./configure \&lt;br /&gt;
 	--enable-largefile \&lt;br /&gt;
	--with-proj-share=/usr/share/proj \&lt;br /&gt;
	--with-cxx \&lt;br /&gt;
	--with-lapack=yes \&lt;br /&gt;
	--with-motif \&lt;br /&gt;
	--with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
	--with-postgres --with-postgres-includes=/usr/include/pgsql \&lt;br /&gt;
	--with-mysql --with-mysql-includes=/usr/include/mysql \&lt;br /&gt;
	--with-fftw \&lt;br /&gt;
	--with-readline \&lt;br /&gt;
	--with-netcdf \&lt;br /&gt;
	--with-geos \&lt;br /&gt;
	--with-nls \&lt;br /&gt;
	--with-sqlite \&lt;br /&gt;
	--with-freetype \&lt;br /&gt;
	--with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
	--with-wxwidgets \&lt;br /&gt;
	--with-odbc \&lt;br /&gt;
	--with-python&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile with &amp;quot;make [-j2]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== RPM SPEC files =====&lt;br /&gt;
* [https://build.opensuse.org/package/show?package=grass&amp;amp;project=Application%3AGeo OpenSuSe]&lt;br /&gt;
* [https://pkgs.fedoraproject.org/cgit/rpms/grass.git/tree/grass.spec Fedora]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==== macOS ====&lt;br /&gt;
&lt;br /&gt;
Compiling GRASS for macOS is not fundamentally different from for other *nix systems. It is on the contrary quite similar, but what differ is the lack of a default package management system for software GRASS depends on. This leaves the mac user to either: (1) compile the dependencies one-by-one; (2) compiling with one of the third-party package management systems avaliable; or (4) a combination thereof.&lt;br /&gt;
&lt;br /&gt;
If you are interested in installing a precompiled version, please check out the [https://grass.osgeo.org/download/software/mac-osx/ official download site].&lt;br /&gt;
&lt;br /&gt;
To date, maybe the easiest way to compile for Mac is by using [https://github.com/nilason/grass-conda GRASS app build script] which is based on the instructions below for building using Anaconda. It will install dependencies, package and install an app bundle with just a command in Terminal.&lt;br /&gt;
&lt;br /&gt;
===== Compilation and installation =====&lt;br /&gt;
&lt;br /&gt;
For more up-to-date instructions please read:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/nilason/grass-conda Compiling on macOS using Conda] (Intel / Apple silicon based machine M1)&lt;br /&gt;
* [[Compiling on macOS using Anaconda]]&lt;br /&gt;
* [[Compiling on macOS using Homebrew]]&lt;br /&gt;
* [[Compiling on macOS using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
===== Legacy instructions =====&lt;br /&gt;
&lt;br /&gt;
The following compilation and installation instructions are rather outdated as a whole. They do, however, contain parts and snippets that still may be very instructive and useful.&lt;br /&gt;
&lt;br /&gt;
* [[Compiling on MacOSX]]&lt;br /&gt;
* [[Compiling on MacOSX using Fink]]&lt;br /&gt;
* [https://web.archive.org/web/20180718005252/https://www.kyngchaos.com/software/frameworks#build_scripts build scripts for dependencies]&lt;br /&gt;
&lt;br /&gt;
Troubleshooting:&lt;br /&gt;
* solving errors at starting GRASS: [[MacOSX GRASS errors]]&lt;br /&gt;
&lt;br /&gt;
==== FreeBSD / NetBSD ====&lt;br /&gt;
&lt;br /&gt;
The recommended compiler tools are GCC, GNU make, GNU coreutils (for install), and flex. All are available through the respective package managing tools (pkg_add for FreeBSD and pkgin install for NetBSD) and for recent *BSD versions most likely installed by default.&lt;br /&gt;
&lt;br /&gt;
GRASS 8 should compile on FreeBSD and NetBSD.&lt;br /&gt;
&lt;br /&gt;
It is highly recommended to install GDAL/OGR and PROJ first. These libraries and tools are available as [https://www.freebsd.org/ports/ ports for FreeBSD] and [https://www.pkgsrc.org/ packages for NetBSD].&lt;br /&gt;
&lt;br /&gt;
Optional functionality is listed with ''./configure --help'', and related libraries and tools might need to be installed first.&lt;br /&gt;
&lt;br /&gt;
You then may need to edit include/Make/Platform.make and set&lt;br /&gt;
 ICONVLIB            = -liconv&lt;br /&gt;
&lt;br /&gt;
==== AIX ====&lt;br /&gt;
&lt;br /&gt;
A recent [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81) and GNU coreutils are required. These are available with the [https://www-03.ibm.com/systems/power/software/aix/linux/toolbox/download.html IBM AIX toolbox] or through third-party AIX software repositories, e.g. [https://www.bullfreeware.com/ bullfreeware] and [https://www.perzl.org/aix/ perzl.org]. Note that 'make' does not work, only 'gmake' works. &lt;br /&gt;
&lt;br /&gt;
General instructions to compile on AIX are e.g. [https://www.perzl.org/aix/index.php?n=Main.Instructions here]&lt;br /&gt;
&lt;br /&gt;
On AIX, compilation results by default in 32 bit applications and static libraries. The [https://developer.ibm.com/components/aix/ IBM documentation] explains how to build 64 bit applications and shared libraries with GCC.&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the IBM xlc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 5.x&lt;br /&gt;
&lt;br /&gt;
export LIBPATH=/opt/freeware/lib64:/opt/freeware/lib&lt;br /&gt;
# make 'ar' happy&lt;br /&gt;
export OBJECT_MODE=64&lt;br /&gt;
&lt;br /&gt;
PREFIX=$HOME/private/bin&lt;br /&gt;
./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --disable-shared \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the GNU gcc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* if needed, [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* if needed (the name is often 'gmake' and not 'make') [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked for AIX 7.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 7.x&lt;br /&gt;
export CC=&amp;quot;gcc&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;g++&amp;quot;&lt;br /&gt;
PREFIX=$HOME/bin&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;-Wl,-bsvr4,-R,/opt/freeware/lib -L/opt/freeware/lib&amp;quot; CPPFLAGS=&amp;quot;-I/opt/freeware/include&amp;quot; ./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --enable-shared \&lt;br /&gt;
  --with-includes=/opt/freeware/include --with-libs=/opt/freeware/lib \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-gdal=$PREFIX/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib --with-sqlite-includes=$PREFIX/include \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-opengl=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MS-Windows ====&lt;br /&gt;
&lt;br /&gt;
See also [[WinGRASS Current Status]] for latest updates.&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/native =====&lt;br /&gt;
&lt;br /&gt;
GRASS on Windows using a standalone installer. It is still MinGW based (we are going to move this to CMake in 2024+).&lt;br /&gt;
&lt;br /&gt;
Instructions to compile from source code:&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/CompileOnWindows GRASS Windows Native Binary Building Guide]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/OSGeo4W =====&lt;br /&gt;
&lt;br /&gt;
OSGeo4W is an installer for a broad set of open source geospatial software packages including GRASS as well as many other packages (QGIS, GDAL/OGR, and more).&lt;br /&gt;
&lt;br /&gt;
* See [https://trac.osgeo.org/osgeo4w/ OSGeo4W]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/Cygwin =====&lt;br /&gt;
&lt;br /&gt;
* See the [[Cygwin]] wiki pages&lt;br /&gt;
&lt;br /&gt;
=== Common problems and solutions ===&lt;br /&gt;
&lt;br /&gt;
During compilation, error can occur if certain packages are not installed. Here a list of problems with solution:&lt;br /&gt;
&lt;br /&gt;
* error: X11/Xlib.h: No such file or directory&lt;br /&gt;
** this suggests that you don't have the X headers installed&lt;br /&gt;
** Solution: Install the libx11-dev package&lt;br /&gt;
&lt;br /&gt;
* error:  g.list: error while loading shared libraries: libgdal1.6.0.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
** this error appears in the shell right after the user clicks GUI's &amp;quot;Start GRASS&amp;quot; button. The GUI shows an error about geographic extent and gets closed afterwards.&lt;br /&gt;
** It happens when you launch bin.i686 executable on 64bit system. Be careful and choose the right architecture.&lt;br /&gt;
&lt;br /&gt;
* error: lib/python/ctypes&lt;br /&gt;
** This error appears during the compilation: &amp;lt;code&amp;gt;free(): invalid pointer Aborted (core dumped)&amp;lt;/code&amp;gt;&lt;br /&gt;
** It happens when you have multiple &amp;lt;code&amp;gt;libproj&amp;lt;/code&amp;gt; versions on your system (check it with command &amp;lt;code&amp;gt;ldd PATH_TO_GRASS_INSTALL/lib/libgrass_gproj.so | grep proj&amp;lt;/code&amp;gt; - when this is not your problem, you should obtain exactly one result)&lt;br /&gt;
** Solution: Try to reinstall &amp;lt;code&amp;gt;libproj-dev&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;proj-data&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Static compilation ===&lt;br /&gt;
&lt;br /&gt;
In order to get static rather than dynamically linked binaries, configure like this:&lt;br /&gt;
&lt;br /&gt;
  ./configure --disable-shared --enable-static&lt;br /&gt;
&lt;br /&gt;
This will however break the wxGUI and GRASS 8 completely because &amp;quot;ctypes&amp;quot; wants to link against shared libs, or there is something in the static libs that &amp;quot;ctypes&amp;quot; does not like.&lt;br /&gt;
&lt;br /&gt;
=== Optimization ===&lt;br /&gt;
&lt;br /&gt;
GCC and other compilers support [https://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/Optimize-Options.html#Optimize-Options optimization]&lt;br /&gt;
&lt;br /&gt;
If you would like to set compiler optimisations, for a possibly faster binary, type (don't enter a &amp;quot;;&amp;quot; anywhere):&lt;br /&gt;
&lt;br /&gt;
        CFLAGS=-O ./configure&lt;br /&gt;
or,&lt;br /&gt;
        setenv CFLAGS -O&lt;br /&gt;
        ./configure&lt;br /&gt;
&lt;br /&gt;
whichever works on your shell. Use -O2 instead of -O if your compiler supports this (note: O is the letter, not zero). Using the &amp;quot;gcc&amp;quot; compiler, you can also specify processor specific flags (examples, please suggest better settings to us):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=athlon -O2&amp;quot; # AMD Athlon processor with code optimisations&lt;br /&gt;
  CFLAGS=&amp;quot;-march=amdfam10&amp;quot;  # AMD Phenom II X4 64bit processor with gcc &amp;gt;=4.3&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium&amp;quot;    # Intel Pentium processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium4&amp;quot;   # Intel Pentium4 processor&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -msse -msse2 -mfpmath=sse -minline-all-stringops&amp;quot; # Intel XEON 64bit processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mtune=nocona -m64 -minline-all-stringops&amp;quot;            # Intel Pentium 64bit processor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To find out optional CFLAGS for your platform, enter:&lt;br /&gt;
  gcc -dumpspecs&lt;br /&gt;
&lt;br /&gt;
See also: https://gcc.gnu.org/&lt;br /&gt;
&lt;br /&gt;
A real fast GRASS version (and small binaries) will be created with LDFLAGS set to &amp;quot;stripping&amp;quot; (but this disables debugging):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -mcpu=&amp;lt;cpu_see_above&amp;gt; -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure&lt;br /&gt;
&lt;br /&gt;
=== Configure options and their meanings ===&lt;br /&gt;
&lt;br /&gt;
For configure there are many options and some GRASS modules are built only if some options are set. Here are listed common configuration options with short explanation.&lt;br /&gt;
&lt;br /&gt;
* --prefix=/path - Sets path where GRASS will be installed. GRASS will reside in /path/grass-version.&lt;br /&gt;
* --enable-largefile - Enables large (&amp;gt;2Gb on 32bit systems) support. For current large file support status look at [[Large File Support]] page.&lt;br /&gt;
* --with-cxx - Enables compilation of C++ code. Required for r.terraflow module.&lt;br /&gt;
* --with-readline - Enables readline support. If readline is enabled, you can use its history/editing facilities when entering r.mapcalc expressions on stdin.&lt;br /&gt;
* --with-glw - Enables GLw support. The GLw library provides OpenGL &amp;quot;canvas&amp;quot; widgets for Athena and Motif. &lt;br /&gt;
 &lt;br /&gt;
 That switch is unnecessary for normal compilation. It's only&lt;br /&gt;
 required for r3.showdspf, which isn't normally built; if you &lt;br /&gt;
 want it, you have build it manually &lt;br /&gt;
 (e.g. &amp;quot;make -C raster3d/r3.showdspf&amp;quot;).&lt;br /&gt;
 As similar functionality is now provided by NVIZ, r3.showdspf&lt;br /&gt;
 is deprecated.&lt;br /&gt;
 r3.showdspf uses the Motif widget (so you also need a &lt;br /&gt;
 Motif library, e.g. Lesstif or OpenMotif).&lt;br /&gt;
 [https://grass.itc.it/pipermail/grassuser/2006-December/037475.html Glynn Clements at GRASS-user mailing list]&lt;br /&gt;
&lt;br /&gt;
=== Parallelized compilation on multi-core CPUs ===&lt;br /&gt;
&lt;br /&gt;
You can dramatically accelerate the compilation of the GRASS code with the -j flag of &amp;quot;make&amp;quot; if you have a multi-core CPU system. This determines the maximum number of jobs to have running at once, so cores don't have to sit idle waiting for jobs on other cores to complete. A good rule of thumb for this value is &amp;lt;tt&amp;gt;number_of_cores * 1.5&amp;lt;/tt&amp;gt;, but note that setting any higher than the actual number of cores will only affect the timing slightly. For example, on a dual-core processor:&lt;br /&gt;
  make -j 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CFLAGS=&amp;quot;-pipe&amp;quot; doesn't seem to help much --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GRASS-GDAL plugin ==&lt;br /&gt;
&lt;br /&gt;
* see [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Addons ==&lt;br /&gt;
&lt;br /&gt;
Please note that the installation of [https://grass.osgeo.org/grass-stable/manuals/addons/ GRASS addons] can be easily done with the {{cmd|g.extension}} manager. The compile instructions below are aiming at own development.&lt;br /&gt;
&lt;br /&gt;
=== Compiled modules ===&lt;br /&gt;
&lt;br /&gt;
This is the general way which works for C modules as well as scripts (Python or Shell/Bash modules) which has HTML documentation.&lt;br /&gt;
&lt;br /&gt;
'''Requirements:'''&lt;br /&gt;
&lt;br /&gt;
Either:&lt;br /&gt;
* a binary GRASS package, or&lt;br /&gt;
* source code which has been prepared with:&lt;br /&gt;
    ./configure [opionally flags]&lt;br /&gt;
    make libs&lt;br /&gt;
&lt;br /&gt;
Each of the [[GRASS_AddOns|addon]] modules should come with a Makefile. To compile it, just run:&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;/path/to/grass84&amp;lt;/tt&amp;gt; has to be absolute, not relative.&lt;br /&gt;
&lt;br /&gt;
If using Bash it may be useful to set that up as an alias:&lt;br /&gt;
    alias gmake64='make MODULE_TOPDIR=/path/to/grass84/'&lt;br /&gt;
&lt;br /&gt;
Installation (perhaps requires &amp;quot;sudo&amp;quot;):&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/ install&lt;br /&gt;
&lt;br /&gt;
Note: Compiled addons may require a re-compilation if you changed/updated your GRASS standard binaries.&lt;br /&gt;
&lt;br /&gt;
==== If binary comes with a -dev package ====&lt;br /&gt;
&lt;br /&gt;
''(work in progress, this text states how it eventually will be :)''&lt;br /&gt;
Nowadays one does not need to the source code, nor compiling GRASS by oneself to be able to add add-ons. On Debian, you can just install the grass-dev package and then run:&lt;br /&gt;
 make MODULE_TOPDIR=/usr/lib/grass84/ INST_DIR=/usr/lib/grass84/&lt;br /&gt;
&lt;br /&gt;
The grass-dev package essentially provides GRASS's &amp;lt;tt&amp;gt;include&amp;lt;/tt&amp;gt; header files and Make configuration files.&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
&lt;br /&gt;
If the addon module is a script, it is sufficient to copy it into the (GRASS binaries) path somewhere. Alternatively, install addons into a separate GRASS addons binaries/scripts directory which is easier to maintain. It avoids getting clobbered every time you reinstall GRASS. To use these separately stored scripts, set and export the GRASS_ADDON_PATH environment variable before starting GRASS and it will automatically be added to the module search path (see the {{cmd|variables}} help page). To simplify this, do for example:&lt;br /&gt;
&lt;br /&gt;
 # add in $HOME/.bashrc:&lt;br /&gt;
 GRASS_ADDON_PATH=/usr/local/grass/addons/&lt;br /&gt;
 export GRASS_ADDON_PATH&lt;br /&gt;
&lt;br /&gt;
Make sure that the script is executable, then just call it in GRASS typing the filename. Python scripts need to be called writing the extension as well, like:&lt;br /&gt;
 &lt;br /&gt;
 GRASS (nc_spm):~ &amp;gt; v.krige.py&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PostGIS&amp;diff=28703</id>
		<title>PostGIS</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PostGIS&amp;diff=28703"/>
		<updated>2025-09-23T07:54:01Z</updated>

		<summary type="html">&lt;p&gt;Neteler: remove version from GRASS (avoid &amp;quot;7&amp;quot;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When accessing [http://www.postgis.net PostGIS] data in GRASS you can &lt;br /&gt;
* [[#Import into GRASS|import]] PostGIS (simple features) data into GRASS topological format or,&lt;br /&gt;
* [[#Link to GRASS|link]] PostGIS data as GRASS vector maps&lt;br /&gt;
&lt;br /&gt;
See also [[Working with external data in GRASS|working with external data in GRASS]].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Help pages ==&lt;br /&gt;
&lt;br /&gt;
* {{cmd|vectorintro|desc=Vector data processing in GRASS GIS}} help page&lt;br /&gt;
* {{cmd|databaseintro|desc=Database management in GRASS GIS}} help page&lt;br /&gt;
* {{cmd|sql|desc=SQL support in GRASS GIS}} help page&lt;br /&gt;
&lt;br /&gt;
* {{cmd|grass-pg|desc=PostgreSQL DB driver in GRASS}} help page&lt;br /&gt;
* {{cmd|grass-odbc|desc=ODBC DB driver in GRASS}} help page&lt;br /&gt;
&lt;br /&gt;
== Import into GRASS ==&lt;br /&gt;
&lt;br /&gt;
# {{cmd|v.in.ogr}} - imports geometry data from PostGIS into native GRASS vector format, attributes are stored using default DB settings (see {{cmd|db.connect}} for details)&lt;br /&gt;
# {{cmd|v.clean}} - clean up data after import&lt;br /&gt;
&lt;br /&gt;
''Note 1:'' There is a fundamental difference between the PostGIS format which is&lt;br /&gt;
non-topological (OGC simple feature-based) and the internal GRASS format which is topological and&lt;br /&gt;
which, thus, does not really allow for overlapping polygons. You can&lt;br /&gt;
digitize them, but they are not really useful...&lt;br /&gt;
&lt;br /&gt;
''Note 2:'' GRASS also allows reading and writing topological PostGIS data (see [http://www.postgis.org/documentation/manual-2.0/Topology.html PostGIS Topology] for details).&lt;br /&gt;
&lt;br /&gt;
{{YouTube|JoqIkL2VRVc|desc=Importing PostGIS layers into GRASS}}&lt;br /&gt;
&lt;br /&gt;
== Link to GRASS ==&lt;br /&gt;
&lt;br /&gt;
* input maps: {{cmd|v.external}}&lt;br /&gt;
**GRASS supports also write access to the map links, see [[Working with external data in GRASS#Vector data|working with external data in GRASS]] for details&lt;br /&gt;
* output maps: {{cmd|v.external.out}}&lt;br /&gt;
&lt;br /&gt;
You can register a PostGIS table in GRASS using {{cmd|v.external}}. The command below creates a link to the table 'lakes' located in database 'pgis_nc'.&lt;br /&gt;
&lt;br /&gt;
 # list available PG tables&lt;br /&gt;
 v.external input=&amp;quot;PG:host=myserver user=myuser dbname=pgis_nc&amp;quot; -l&lt;br /&gt;
 &lt;br /&gt;
 # link PG table into GRASS GIS as vector map&lt;br /&gt;
 v.external input=&amp;quot;PG:host=myserver user=myuser dbname=pgis_nc&amp;quot; layer=lakes&lt;br /&gt;
&lt;br /&gt;
The command creates in the current mapset new vector map 'lakes', the module also builds pseudo-topology for this map,&lt;br /&gt;
&lt;br /&gt;
To link a PostGIS table from non-public schema&lt;br /&gt;
&lt;br /&gt;
 v.external input=PG:&amp;lt;connection sting&amp;gt; layer=&amp;lt;schema&amp;gt;.&amp;lt;layer&amp;gt; output=&amp;lt;layer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Important note:'' In GRASS 6 the created links area ''read-only''. GRASS also allows to modify linked layers directly via OGR or PostGIS data provider, see [[Working with external data in GRASS#Vector data|working with external data in GRASS]] for details.&lt;br /&gt;
&lt;br /&gt;
{{YouTube|eB3_SmE3E9Q|desc=Link PostGIS layers as GRASS vector maps}}&lt;br /&gt;
&lt;br /&gt;
== Export to PostGIS ==&lt;br /&gt;
&lt;br /&gt;
To export GRASS vector map layer as PostGIS table use {{cmd|v.out.ogr}}, eg.&lt;br /&gt;
&lt;br /&gt;
 v.out.ogr in=lakes@PERMANENT output=PG:dbname=pgis_nc format=PostgreSQL type=area&lt;br /&gt;
&lt;br /&gt;
In GRASS also specialized module {{cmd|v.out.postgis}} exists which allows to export GRASS vector data as simple features (similarly to {{cmd|v.out.ogr}}) or in topological format (see [[PostGIS Topology]] for defails).&lt;br /&gt;
&lt;br /&gt;
Note that exporting data can be quite time-consuming task, especially when input vector map attributes are stored in DBF format. It's recommended to store attribute data in {{cmd|grass-sqlite|desc=SQLite format}} rather then in old-fashioned {{cmd|grass-dbf|desc=DBF format}}. &lt;br /&gt;
&lt;br /&gt;
{{YouTube|DTMmmcVpJKk|desc=Creating model which exports all GRASS vector maps from given mapset to PostGIS database}}&lt;br /&gt;
{{YouTube|uStN3F6ZZoc|desc=Creating model which exports all GRASS vector maps from given mapset to PostGIS database (including schema)&lt;br /&gt;
&lt;br /&gt;
1) create schema with name of input mapset&lt;br /&gt;
&lt;br /&gt;
2) copy vector maps from selected mapset to the current and stores their attributes in SQLite database&lt;br /&gt;
&lt;br /&gt;
3) exports GRASS vector maps to the selected PostGIS database&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
See also [[wxGUI Graphical Modeler]].&lt;br /&gt;
&lt;br /&gt;
== Direct access to PostGIS data ==&lt;br /&gt;
&lt;br /&gt;
''Important note:'' Direct read/write access is available only in GRASS.&lt;br /&gt;
&lt;br /&gt;
=== Direct read access ===&lt;br /&gt;
&lt;br /&gt;
GRASS allows to access PostGIS data directly via virtual mapset called 'OGR'. In this case parameter &amp;lt;tt&amp;gt;map&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;input&amp;lt;/tt&amp;gt; is used for OGR data source and &amp;lt;tt&amp;gt;layer&amp;lt;/tt&amp;gt; for table. In the command bellow is accessed PostGIS table 'lakes' from database 'pgis_nc'.&lt;br /&gt;
&lt;br /&gt;
 v.info map=PG:dbname=pgis_nc@OGR layer=lakes&lt;br /&gt;
&lt;br /&gt;
To access table from non-public schema (or schemas which are not in the search path), type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
v.info map=PG:&amp;lt;OGR data source&amp;gt; layer=&amp;lt;schema&amp;gt;.&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When accessing external data directly you don't need to create a map link by {{cmd|v.external}}. The major drawback of direct read access is that the pseudo-topology is built each time when accessing the data. From this point of view the direct access is useful when accessing data once or few times, otherwise is better to link the data by {{cmd|v.external}}.&lt;br /&gt;
&lt;br /&gt;
=== Direct write access ===&lt;br /&gt;
&lt;br /&gt;
GRASS allows to write output vector map directly via OGR library. For defining output vector data format is designed {{cmd|v.external.out}} module. For example&lt;br /&gt;
&lt;br /&gt;
 v.external.out input=PG:dbname=pgis_nc format=PostgreSQL&lt;br /&gt;
&lt;br /&gt;
causes that output vector data are written in PostGIS format in the database 'pgis_nc'. GRASS also creates automatically for every PostGIS table a new vector map in the current mapset as the link to the PostGIS table. &lt;br /&gt;
&lt;br /&gt;
PostGIS data can be accessed by the map link or directly as described in the section above. For example&lt;br /&gt;
&lt;br /&gt;
 v.extract input=lakes out=reservoir where=&amp;quot;FTYPE = 'RESERVOIR'&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 v.info map=reservoir&lt;br /&gt;
 # or&lt;br /&gt;
 v.info map=PG:dbname=pgis_nc@OGR layer=reservoir&lt;br /&gt;
&lt;br /&gt;
To switch back to GRASS native format enter&lt;br /&gt;
&lt;br /&gt;
 v.external.out -r&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Working with external data in GRASS]]&lt;br /&gt;
* [[PostGIS Topology]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.surfaces.co.il/?p=645 Tutorial by Micha Silver]&lt;br /&gt;
* [http://www.postgis.org PostGIS]&lt;br /&gt;
* [http://gdal.org/ogr OGR library]&lt;br /&gt;
* [http://www.dimensionaledge.com/main/postgis/viewshed-analysis-in-postgis-using-plr-and-grass/ Viewshed analysis in PostGIS using PL/R and GRASS] (blog post by Mark Wynter)&lt;br /&gt;
* [https://strk.kbt.io/projects/rttopo/ RT Topology Library]&lt;br /&gt;
&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Vector]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Working_with_external_data_in_GRASS&amp;diff=28702</id>
		<title>Working with external data in GRASS</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Working_with_external_data_in_GRASS&amp;diff=28702"/>
		<updated>2025-09-23T07:43:24Z</updated>

		<summary type="html">&lt;p&gt;Neteler: remove version from GRASS (avoid &amp;quot;7&amp;quot;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to effectively work with external raster and vector data in GRASS. See also [[PostGIS]] and [[PostGIS Topology]].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Raster data ==&lt;br /&gt;
&lt;br /&gt;
External raster data can be linked via {{cmd|r.external}}. List of supported formats can be determined by&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.external}} -f&lt;br /&gt;
&lt;br /&gt;
To link file-based data formats, eg. GeoTiff&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.external}} input=ncrast/urban.tif output=urban&lt;br /&gt;
&lt;br /&gt;
=== Raster data processing workflow when keeping data external ===&lt;br /&gt;
&lt;br /&gt;
External raster maps can directly be linked into GRASS with {{cmd|r.external}} which saves time and disk space. Additionally, there is no more a need to store results in the internal GRASS format - with {{cmd|r.external.out}} the resulting maps are directly written to a GDAL supported format.&lt;br /&gt;
&lt;br /&gt;
'''Preparations'''&lt;br /&gt;
&lt;br /&gt;
GRASS can be used in an automated way by just defining a set of variables. See here for [[GRASS_and_Shell#Setting_the_variables|GRASS and Shell]] settings and [[GRASS_and_Python#Creating_Python_scripts_that_call_GRASS_functionality_from_outside|GRASS and Python]].&lt;br /&gt;
&lt;br /&gt;
'''Data flow example'''&lt;br /&gt;
&lt;br /&gt;
The script content could be looking like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# register (rather than import) a GeoTIFF file in GRASS GIS:&lt;br /&gt;
r.external input=terra_lst1km20030314.LST_Day.tif output=modis_celsius&lt;br /&gt;
 &lt;br /&gt;
# define output directory for files resulting from subsequent calculations:&lt;br /&gt;
r.external.out directory=$HOME/gisoutput/ format=&amp;quot;GTiff&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# perform calculations (here: extract pixels &amp;gt; 20 deg C)&lt;br /&gt;
# store output directly as GeoTIFF file, hence add the .tif extension:&lt;br /&gt;
r.mapcalc &amp;quot;warm.tif = if(modis_celsius &amp;gt; 20.0, modis_celsius, null() )&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# cease GDAL output connection and turn back to write standard GRASS raster files:&lt;br /&gt;
r.external.out -r&lt;br /&gt;
 &lt;br /&gt;
# use the result elsewhere&lt;br /&gt;
qgis $HOME/gisoutput/warm.tif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vector data ==&lt;br /&gt;
&lt;br /&gt;
See trac {{twiki|Grass7/VectorLib/OGRInterface|OGR interface}} and {{twiki|Grass7/VectorLib/PostGISEditing| PG interface}} page for development issues.&lt;br /&gt;
&lt;br /&gt;
=== Link external data ===&lt;br /&gt;
&lt;br /&gt;
External vector data can be linked via {{cmd|v.external}} using [http://gdal.org/ogr OGR library] or ''GRASS-PostGIS data driver'' (&amp;lt;tt&amp;gt;format=PostgreSQL&amp;lt;/tt&amp;gt;). List of supported formats can be determined by&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} -f&lt;br /&gt;
&lt;br /&gt;
To link ''file-based data formats'', eg. [http://gdal.osgeo.org/ogr/drv_shapefile.html ESRI Shapefile] using OGR library&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=ncshape/ layer=railroads&lt;br /&gt;
&lt;br /&gt;
Assuming that &amp;lt;tt&amp;gt;railroads.shp&amp;lt;/tt&amp;gt; is located in directory &amp;lt;tt&amp;gt;ncshape&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To link ''database-based data formats'', eg. [http://gdal.osgeo.org/ogr/drv_pg.html PostGIS] using GRASS-PostGIS data driver&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc -l&lt;br /&gt;
 &lt;br /&gt;
 PostGIS database &amp;lt;pgis_nc&amp;gt; contains 55 feature table(s):&lt;br /&gt;
 ...&lt;br /&gt;
 bridges&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=bridges output=b&lt;br /&gt;
&lt;br /&gt;
Assuming that PostGIS layer named &amp;lt;tt&amp;gt;bridges&amp;lt;/tt&amp;gt; is located in database &amp;lt;tt&amp;gt;pgis_nc&amp;lt;/tt&amp;gt;. This layer is linked to GRASS mapset as vector map with name &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt;. {{cmd|v.external}} also builds pseudo-topology over simple features which enables GRASS to access linked vector data on level 2. Note that data are stored as simple features, so no full topology support can be build based on this data.&lt;br /&gt;
&lt;br /&gt;
By default PostGIS feature tables are linked using built-in '''GRASS-PostGIS data driver''' - it means that PostGIS geometry data are accessed by GRASS directly without any abstract level (like OGR library). When GRASS is built without PostgreSQL support or environmental variable &amp;lt;tt&amp;gt;GRASS_VECTOR_OGR&amp;lt;/tt&amp;gt; exists, then GRASS will access PostGIS data using [http://www.gdal.org/drv_pg.html OGR-PostgreSQL] driver.&lt;br /&gt;
&lt;br /&gt;
=== Direct access to external data ===&lt;br /&gt;
&lt;br /&gt;
External data can be accessed using OGR library via ''virtual'' mapset &amp;lt;tt&amp;gt;OGR&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.info}} map=PG:dbname=pgis_nc@OGR layer=bridges&lt;br /&gt;
&lt;br /&gt;
Direct access using GRASS-PostGIS data driver is not currently possible.&lt;br /&gt;
&lt;br /&gt;
=== Create new OGR layers using GRASS modules ===&lt;br /&gt;
&lt;br /&gt;
==== v.extract showcase ====&lt;br /&gt;
&lt;br /&gt;
GRASS also supports write access to the external data using OGR or GRASS-PostGIS data driver. Showcase bellow:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=bridges output=b&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.out.ascii}} input=b where=&amp;quot;cat &amp;lt; 10&amp;quot; --q&lt;br /&gt;
 &lt;br /&gt;
 375171.4992779|317756.72097616|1&lt;br /&gt;
 374247.5192779|317487.13697616|2&lt;br /&gt;
 380230.2292779|316900.97897616|3&lt;br /&gt;
 379191.4162779|316419.09697616|4&lt;br /&gt;
 388958.8222779|316332.04697616|5&lt;br /&gt;
 375875.2662779|316319.89597616|6&lt;br /&gt;
 376393.5282779|316155.96797616|7&lt;br /&gt;
 380647.5282779|316022.61797616|8&lt;br /&gt;
 376739.6982779|315970.62597616|9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} input=PG:dbname=pgis_nc format=PostgreSQL&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.extract}} input=b output=b_9 where=&amp;quot;cat &amp;lt; 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc -l&lt;br /&gt;
 &lt;br /&gt;
 PostGIS database &amp;lt;pgis_nc&amp;gt; contains 56 feature table(s):&lt;br /&gt;
 b_9&lt;br /&gt;
 bridges&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Example of direct access to external data without creating a link (only OGR data driver)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.out.ascii}} input=PG:dbname=pgis_nc@OGR layer=b_9&lt;br /&gt;
 &lt;br /&gt;
 375171.4992779|317756.72097616|1&lt;br /&gt;
 374247.5192779|317487.13697616|2&lt;br /&gt;
 380230.2292779|316900.97897616|3&lt;br /&gt;
 379191.4162779|316419.09697616|4&lt;br /&gt;
 388958.8222779|316332.04697616|5&lt;br /&gt;
 375875.2662779|316319.89597616|6&lt;br /&gt;
 376393.5282779|316155.96797616|7&lt;br /&gt;
 380647.5282779|316022.61797616|8&lt;br /&gt;
 376739.6982779|315970.62597616|9&lt;br /&gt;
&lt;br /&gt;
==== Create new empty OGR/PostGIS layer ====&lt;br /&gt;
&lt;br /&gt;
Check connection settings:&lt;br /&gt;
&lt;br /&gt;
(for GRASS-OGR data driver)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} -p&lt;br /&gt;
 &lt;br /&gt;
 dsn: /path/to/shapefiles&lt;br /&gt;
 format: ESRI Shapefile&lt;br /&gt;
&lt;br /&gt;
(for GRASS-PostGIS data driver)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} -p&lt;br /&gt;
 &lt;br /&gt;
 conninfo: dbname=pgis_nc&lt;br /&gt;
 format: PostGIS&lt;br /&gt;
&lt;br /&gt;
New OGR/PostGIS layer can be created using {{cmd|v.edit}}, note that you need to specify feature type for newly created OGR/PostGIS layer (point, line or boundary).&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.edit}} map=pmap tool=create type=point&lt;br /&gt;
&lt;br /&gt;
Check created OGR layer (direct access, OGR data driver only):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.info}} -t map=PG:dbname=pgis_nc@OGR layer=pmap&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 points=0&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Check created OGR/PostGIS layer (link):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=pmap&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.info}} -t map=pmap&lt;br /&gt;
&lt;br /&gt;
Adding new point feature:&lt;br /&gt;
&lt;br /&gt;
 cat point.txt&lt;br /&gt;
 &lt;br /&gt;
 P  1 1&lt;br /&gt;
 375171.4992779 317756.72097616&lt;br /&gt;
 1     1&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.edit}} -n map=pmap tool=add input=point.txt&lt;br /&gt;
 {{cmd|v.info}} -t map=pmap&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 points=1&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==== v.select speed test ====&lt;br /&gt;
&lt;br /&gt;
Testing data:&lt;br /&gt;
&lt;br /&gt;
* DBF input (attributes only)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.mapset}} user1&lt;br /&gt;
 {{cmd|db.connect}} -p&lt;br /&gt;
 &lt;br /&gt;
 driver:dbf&lt;br /&gt;
 database:$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.copy}} vect=bridges,b --o&lt;br /&gt;
 {{cmd|g.copy}} vect=urbanarea,u --o&lt;br /&gt;
&lt;br /&gt;
* SQLite input (attributes only)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.mapset}} sqlite&lt;br /&gt;
 {{cmd|db.connect}} -p&lt;br /&gt;
 &lt;br /&gt;
 driver:sqlite&lt;br /&gt;
 database:$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite.db&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.copy}} vect=bridges,b --o&lt;br /&gt;
 {{cmd|g.copy}} vect=urbanarea,u --o&lt;br /&gt;
&lt;br /&gt;
* Export data to PostGIS database (from mapset 'sqlite')&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.out.ogr}} input=b input=PG:dbname=pgis_nc format=PostgreSQL olayer=bridges --o&lt;br /&gt;
 {{cmd|v.out.ogr}} input=u input=PG:dbname=pgis_nc format=PostgreSQL olayer=urbanarea --o&lt;br /&gt;
&lt;br /&gt;
* PostGIS input (geometry + attributes) - OGR data driver&lt;br /&gt;
 &lt;br /&gt;
 {{cmd|g.mapset}} pg_ogr&lt;br /&gt;
 export GRASS_VECTOR_OGR=1&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=bridges output=b --o&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=urbanarea output=u --o&lt;br /&gt;
&lt;br /&gt;
* PostGIS input (geometry + attributes) - GRASS-PostGIS data driver&lt;br /&gt;
 &lt;br /&gt;
 {{cmd|g.mapset}} pg&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=bridges output=b --o&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=urbanarea output=u --o&lt;br /&gt;
&lt;br /&gt;
Writing output directly using OGR library (mapset 'pg_ogr'):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} -p&lt;br /&gt;
 &lt;br /&gt;
 dsn: PG:dbname=pgis_nc&lt;br /&gt;
 format: PostgreSQL&lt;br /&gt;
&lt;br /&gt;
Writing output directly using PostGIS data driver (mapset 'pg'):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} -p&lt;br /&gt;
 &lt;br /&gt;
 conninfo: dbname=pgis_nc&lt;br /&gt;
 format: PostgreSQL&lt;br /&gt;
&lt;br /&gt;
* DBF input&lt;br /&gt;
&lt;br /&gt;
 time {{cmd|v.select}} ain=b@user1 atype=point bin=u@user1 btype=area out=b_u ope=overlap --o&lt;br /&gt;
 &lt;br /&gt;
 real    0m6.059s&lt;br /&gt;
 user    0m4.780s&lt;br /&gt;
 sys     0m0.588s&lt;br /&gt;
&lt;br /&gt;
* SQLite input&lt;br /&gt;
&lt;br /&gt;
 time {{cmd|v.select}} ain=b@sqlite atype=point bin=u@sqlite btype=area out=b_u ope=overlap --o&lt;br /&gt;
 &lt;br /&gt;
 real    0m2.239s&lt;br /&gt;
 user    0m1.084s&lt;br /&gt;
 sys     0m0.524s&lt;br /&gt;
&lt;br /&gt;
* PostGIS input&lt;br /&gt;
&lt;br /&gt;
 time {{cmd|v.select}} ain=b atype=point bin=u btype=area out=b_u ope=overlap --o&lt;br /&gt;
 &lt;br /&gt;
 real    0m20.609s&lt;br /&gt;
 user    0m7.920s&lt;br /&gt;
 sys     0m1.644s&lt;br /&gt;
&lt;br /&gt;
''Note:'' Main reason of worse speed is random access used by v.select which is quite costly for OGR layers.&lt;br /&gt;
&lt;br /&gt;
Time consumption for native output:&lt;br /&gt;
&lt;br /&gt;
 real    0m1.631s&lt;br /&gt;
 user    0m0.860s&lt;br /&gt;
 sys     0m0.768s&lt;br /&gt;
&lt;br /&gt;
=== Digitize OGR layer using wxGUI ===&lt;br /&gt;
&lt;br /&gt;
[[Image:wxgui-digitize-postgis.png|center|thumb|640px|Example of digitizing PostGIS layer (linked via {{cmd|v.external}}) in wxGUI]]&lt;br /&gt;
&lt;br /&gt;
{{YouTube|7XKMGTcje-Q|desc=wxGUI - create and edit new OGR layer}}&lt;br /&gt;
&lt;br /&gt;
{{YouTube|cyy-1HPQR5Y|desc=wxGUI - create and edit new PostGIS layer}}&lt;br /&gt;
&lt;br /&gt;
== Using wxGUI ==&lt;br /&gt;
&lt;br /&gt;
From ''menu''&lt;br /&gt;
&lt;br /&gt;
 File -&amp;gt; Link external formats&lt;br /&gt;
&lt;br /&gt;
[[Image:wxgui-link-menu.png|center|frame|Link external data - Layer Manager menu]]&lt;br /&gt;
&lt;br /&gt;
or from ''toolbar'' in Layer Manager.&lt;br /&gt;
&lt;br /&gt;
[[Image:wxgui-link-tooltip.png|center|frame|Link external data - Layer Manager toolbar (1)]]&lt;br /&gt;
[[Image:wxgui-link-tool.png|center|frame|Link external data - Layer Manager toolbar (2)]]&lt;br /&gt;
[[Image:wxgui-v.external.png|center|thumb|400px|wxGUI {{cmd|v.external}} dialog]]&lt;br /&gt;
[[Image:wxgui-v.external.out.png|center|thumb|400px|wxGUI {{cmd|v.external.out}} dialog]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[PostGIS]]&lt;br /&gt;
* [[PostGIS Topology]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Vector]]&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Working_with_external_data_in_GRASS_7&amp;diff=28701</id>
		<title>Working with external data in GRASS 7</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Working_with_external_data_in_GRASS_7&amp;diff=28701"/>
		<updated>2025-09-23T07:41:29Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Neteler moved page Working with external data in GRASS 7 to Working with external data in GRASS: remove GRASS version from title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Working with external data in GRASS]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Working_with_external_data_in_GRASS&amp;diff=28700</id>
		<title>Working with external data in GRASS</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Working_with_external_data_in_GRASS&amp;diff=28700"/>
		<updated>2025-09-23T07:41:29Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Neteler moved page Working with external data in GRASS 7 to Working with external data in GRASS: remove GRASS version from title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to effectively work with external raster and vector data in GRASS 7. See also [[PostGIS]] and [[PostGIS Topology]].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Raster data ==&lt;br /&gt;
&lt;br /&gt;
External raster data can be linked via {{cmd|r.external}}. List of supported formats can be determined by&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.external}} -f&lt;br /&gt;
&lt;br /&gt;
To link file-based data formats, eg. GeoTiff&lt;br /&gt;
&lt;br /&gt;
 {{cmd|r.external}} input=ncrast/urban.tif output=urban&lt;br /&gt;
&lt;br /&gt;
=== Raster data processing workflow when keeping data external ===&lt;br /&gt;
&lt;br /&gt;
External raster maps can directly be linked into GRASS with {{cmd|r.external}} which saves time and disk space. Additionally, there is no more a need to store results in the internal GRASS format - with {{cmd|r.external.out}} the resulting maps are directly written to a GDAL supported format.&lt;br /&gt;
&lt;br /&gt;
'''Preparations'''&lt;br /&gt;
&lt;br /&gt;
GRASS can be used in an automated way by just defining a set of variables. See here for [[GRASS_and_Shell#Setting_the_variables|GRASS and Shell]] settings and [[GRASS_and_Python#Creating_Python_scripts_that_call_GRASS_functionality_from_outside|GRASS and Python]].&lt;br /&gt;
&lt;br /&gt;
'''Data flow example'''&lt;br /&gt;
&lt;br /&gt;
The script content could be looking like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# register (rather than import) a GeoTIFF file in GRASS GIS:&lt;br /&gt;
r.external input=terra_lst1km20030314.LST_Day.tif output=modis_celsius&lt;br /&gt;
 &lt;br /&gt;
# define output directory for files resulting from subsequent calculations:&lt;br /&gt;
r.external.out directory=$HOME/gisoutput/ format=&amp;quot;GTiff&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# perform calculations (here: extract pixels &amp;gt; 20 deg C)&lt;br /&gt;
# store output directly as GeoTIFF file, hence add the .tif extension:&lt;br /&gt;
r.mapcalc &amp;quot;warm.tif = if(modis_celsius &amp;gt; 20.0, modis_celsius, null() )&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# cease GDAL output connection and turn back to write standard GRASS raster files:&lt;br /&gt;
r.external.out -r&lt;br /&gt;
 &lt;br /&gt;
# use the result elsewhere&lt;br /&gt;
qgis $HOME/gisoutput/warm.tif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vector data ==&lt;br /&gt;
&lt;br /&gt;
See trac {{twiki|Grass7/VectorLib/OGRInterface|OGR interface}} and {{twiki|Grass7/VectorLib/PostGISEditing| PG interface}} page for development issues.&lt;br /&gt;
&lt;br /&gt;
=== Link external data ===&lt;br /&gt;
&lt;br /&gt;
External vector data can be linked via {{cmd|v.external}} using [http://gdal.org/ogr OGR library] or ''GRASS-PostGIS data driver'' (&amp;lt;tt&amp;gt;format=PostgreSQL&amp;lt;/tt&amp;gt;). List of supported formats can be determined by&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} -f&lt;br /&gt;
&lt;br /&gt;
To link ''file-based data formats'', eg. [http://gdal.osgeo.org/ogr/drv_shapefile.html ESRI Shapefile] using OGR library&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=ncshape/ layer=railroads&lt;br /&gt;
&lt;br /&gt;
Assuming that &amp;lt;tt&amp;gt;railroads.shp&amp;lt;/tt&amp;gt; is located in directory &amp;lt;tt&amp;gt;ncshape&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To link ''database-based data formats'', eg. [http://gdal.osgeo.org/ogr/drv_pg.html PostGIS] using GRASS-PostGIS data driver&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc -l&lt;br /&gt;
 &lt;br /&gt;
 PostGIS database &amp;lt;pgis_nc&amp;gt; contains 55 feature table(s):&lt;br /&gt;
 ...&lt;br /&gt;
 bridges&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=bridges output=b&lt;br /&gt;
&lt;br /&gt;
Assuming that PostGIS layer named &amp;lt;tt&amp;gt;bridges&amp;lt;/tt&amp;gt; is located in database &amp;lt;tt&amp;gt;pgis_nc&amp;lt;/tt&amp;gt;. This layer is linked to GRASS mapset as vector map with name &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt;. {{cmd|v.external}} also builds pseudo-topology over simple features which enables GRASS to access linked vector data on level 2. Note that data are stored as simple features, so no full topology support can be build based on this data.&lt;br /&gt;
&lt;br /&gt;
By default PostGIS feature tables are linked using built-in '''GRASS-PostGIS data driver''' - it means that PostGIS geometry data are accessed by GRASS directly without any abstract level (like OGR library). When GRASS is built without PostgreSQL support or environmental variable &amp;lt;tt&amp;gt;GRASS_VECTOR_OGR&amp;lt;/tt&amp;gt; exists, then GRASS will access PostGIS data using [http://www.gdal.org/drv_pg.html OGR-PostgreSQL] driver.&lt;br /&gt;
&lt;br /&gt;
=== Direct access to external data ===&lt;br /&gt;
&lt;br /&gt;
External data can be accessed using OGR library via ''virtual'' mapset &amp;lt;tt&amp;gt;OGR&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.info}} map=PG:dbname=pgis_nc@OGR layer=bridges&lt;br /&gt;
&lt;br /&gt;
Direct access using GRASS-PostGIS data driver is not currently possible.&lt;br /&gt;
&lt;br /&gt;
=== Create new OGR layers using GRASS modules ===&lt;br /&gt;
&lt;br /&gt;
==== v.extract showcase ====&lt;br /&gt;
&lt;br /&gt;
GRASS 7 also supports write access to the external data using OGR or GRASS-PostGIS data driver. Showcase bellow:&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=bridges output=b&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.out.ascii}} input=b where=&amp;quot;cat &amp;lt; 10&amp;quot; --q&lt;br /&gt;
 &lt;br /&gt;
 375171.4992779|317756.72097616|1&lt;br /&gt;
 374247.5192779|317487.13697616|2&lt;br /&gt;
 380230.2292779|316900.97897616|3&lt;br /&gt;
 379191.4162779|316419.09697616|4&lt;br /&gt;
 388958.8222779|316332.04697616|5&lt;br /&gt;
 375875.2662779|316319.89597616|6&lt;br /&gt;
 376393.5282779|316155.96797616|7&lt;br /&gt;
 380647.5282779|316022.61797616|8&lt;br /&gt;
 376739.6982779|315970.62597616|9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} input=PG:dbname=pgis_nc format=PostgreSQL&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.extract}} input=b output=b_9 where=&amp;quot;cat &amp;lt; 10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc -l&lt;br /&gt;
 &lt;br /&gt;
 PostGIS database &amp;lt;pgis_nc&amp;gt; contains 56 feature table(s):&lt;br /&gt;
 b_9&lt;br /&gt;
 bridges&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Example of direct access to external data without creating a link (only OGR data driver)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.out.ascii}} input=PG:dbname=pgis_nc@OGR layer=b_9&lt;br /&gt;
 &lt;br /&gt;
 375171.4992779|317756.72097616|1&lt;br /&gt;
 374247.5192779|317487.13697616|2&lt;br /&gt;
 380230.2292779|316900.97897616|3&lt;br /&gt;
 379191.4162779|316419.09697616|4&lt;br /&gt;
 388958.8222779|316332.04697616|5&lt;br /&gt;
 375875.2662779|316319.89597616|6&lt;br /&gt;
 376393.5282779|316155.96797616|7&lt;br /&gt;
 380647.5282779|316022.61797616|8&lt;br /&gt;
 376739.6982779|315970.62597616|9&lt;br /&gt;
&lt;br /&gt;
==== Create new empty OGR/PostGIS layer ====&lt;br /&gt;
&lt;br /&gt;
Check connection settings:&lt;br /&gt;
&lt;br /&gt;
(for GRASS-OGR data driver)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} -p&lt;br /&gt;
 &lt;br /&gt;
 dsn: /path/to/shapefiles&lt;br /&gt;
 format: ESRI Shapefile&lt;br /&gt;
&lt;br /&gt;
(for GRASS-PostGIS data driver)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} -p&lt;br /&gt;
 &lt;br /&gt;
 conninfo: dbname=pgis_nc&lt;br /&gt;
 format: PostGIS&lt;br /&gt;
&lt;br /&gt;
New OGR/PostGIS layer can be created using {{cmd|v.edit}}, note that you need to specify feature type for newly created OGR/PostGIS layer (point, line or boundary).&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.edit}} map=pmap tool=create type=point&lt;br /&gt;
&lt;br /&gt;
Check created OGR layer (direct access, OGR data driver only):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.info}} -t map=PG:dbname=pgis_nc@OGR layer=pmap&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 points=0&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Check created OGR/PostGIS layer (link):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=pmap&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.info}} -t map=pmap&lt;br /&gt;
&lt;br /&gt;
Adding new point feature:&lt;br /&gt;
&lt;br /&gt;
 cat point.txt&lt;br /&gt;
 &lt;br /&gt;
 P  1 1&lt;br /&gt;
 375171.4992779 317756.72097616&lt;br /&gt;
 1     1&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.edit}} -n map=pmap tool=add input=point.txt&lt;br /&gt;
 {{cmd|v.info}} -t map=pmap&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 points=1&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==== v.select speed test ====&lt;br /&gt;
&lt;br /&gt;
Testing data:&lt;br /&gt;
&lt;br /&gt;
* DBF input (attributes only)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.mapset}} user1&lt;br /&gt;
 {{cmd|db.connect}} -p&lt;br /&gt;
 &lt;br /&gt;
 driver:dbf&lt;br /&gt;
 database:$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.copy}} vect=bridges,b --o&lt;br /&gt;
 {{cmd|g.copy}} vect=urbanarea,u --o&lt;br /&gt;
&lt;br /&gt;
* SQLite input (attributes only)&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.mapset}} sqlite&lt;br /&gt;
 {{cmd|db.connect}} -p&lt;br /&gt;
 &lt;br /&gt;
 driver:sqlite&lt;br /&gt;
 database:$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite.db&lt;br /&gt;
&lt;br /&gt;
 {{cmd|g.copy}} vect=bridges,b --o&lt;br /&gt;
 {{cmd|g.copy}} vect=urbanarea,u --o&lt;br /&gt;
&lt;br /&gt;
* Export data to PostGIS database (from mapset 'sqlite')&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.out.ogr}} input=b input=PG:dbname=pgis_nc format=PostgreSQL olayer=bridges --o&lt;br /&gt;
 {{cmd|v.out.ogr}} input=u input=PG:dbname=pgis_nc format=PostgreSQL olayer=urbanarea --o&lt;br /&gt;
&lt;br /&gt;
* PostGIS input (geometry + attributes) - OGR data driver&lt;br /&gt;
 &lt;br /&gt;
 {{cmd|g.mapset}} pg_ogr&lt;br /&gt;
 export GRASS_VECTOR_OGR=1&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=bridges output=b --o&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=urbanarea output=u --o&lt;br /&gt;
&lt;br /&gt;
* PostGIS input (geometry + attributes) - GRASS-PostGIS data driver&lt;br /&gt;
 &lt;br /&gt;
 {{cmd|g.mapset}} pg&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=bridges output=b --o&lt;br /&gt;
 {{cmd|v.external}} input=PG:dbname=pgis_nc layer=urbanarea output=u --o&lt;br /&gt;
&lt;br /&gt;
Writing output directly using OGR library (mapset 'pg_ogr'):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} -p&lt;br /&gt;
 &lt;br /&gt;
 dsn: PG:dbname=pgis_nc&lt;br /&gt;
 format: PostgreSQL&lt;br /&gt;
&lt;br /&gt;
Writing output directly using PostGIS data driver (mapset 'pg'):&lt;br /&gt;
&lt;br /&gt;
 {{cmd|v.external.out}} -p&lt;br /&gt;
 &lt;br /&gt;
 conninfo: dbname=pgis_nc&lt;br /&gt;
 format: PostgreSQL&lt;br /&gt;
&lt;br /&gt;
* DBF input&lt;br /&gt;
&lt;br /&gt;
 time {{cmd|v.select}} ain=b@user1 atype=point bin=u@user1 btype=area out=b_u ope=overlap --o&lt;br /&gt;
 &lt;br /&gt;
 real    0m6.059s&lt;br /&gt;
 user    0m4.780s&lt;br /&gt;
 sys     0m0.588s&lt;br /&gt;
&lt;br /&gt;
* SQLite input&lt;br /&gt;
&lt;br /&gt;
 time {{cmd|v.select}} ain=b@sqlite atype=point bin=u@sqlite btype=area out=b_u ope=overlap --o&lt;br /&gt;
 &lt;br /&gt;
 real    0m2.239s&lt;br /&gt;
 user    0m1.084s&lt;br /&gt;
 sys     0m0.524s&lt;br /&gt;
&lt;br /&gt;
* PostGIS input&lt;br /&gt;
&lt;br /&gt;
 time {{cmd|v.select}} ain=b atype=point bin=u btype=area out=b_u ope=overlap --o&lt;br /&gt;
 &lt;br /&gt;
 real    0m20.609s&lt;br /&gt;
 user    0m7.920s&lt;br /&gt;
 sys     0m1.644s&lt;br /&gt;
&lt;br /&gt;
''Note:'' Main reason of worse speed is random access used by v.select which is quite costly for OGR layers.&lt;br /&gt;
&lt;br /&gt;
Time consumption for native output:&lt;br /&gt;
&lt;br /&gt;
 real    0m1.631s&lt;br /&gt;
 user    0m0.860s&lt;br /&gt;
 sys     0m0.768s&lt;br /&gt;
&lt;br /&gt;
=== Digitize OGR layer using wxGUI ===&lt;br /&gt;
&lt;br /&gt;
[[Image:wxgui-digitize-postgis.png|center|thumb|640px|Example of digitizing PostGIS layer (linked via {{cmd|v.external}}) in wxGUI]]&lt;br /&gt;
&lt;br /&gt;
{{YouTube|7XKMGTcje-Q|desc=wxGUI - create and edit new OGR layer}}&lt;br /&gt;
&lt;br /&gt;
{{YouTube|cyy-1HPQR5Y|desc=wxGUI - create and edit new PostGIS layer}}&lt;br /&gt;
&lt;br /&gt;
== Using wxGUI ==&lt;br /&gt;
&lt;br /&gt;
From ''menu''&lt;br /&gt;
&lt;br /&gt;
 File -&amp;gt; Link external formats&lt;br /&gt;
&lt;br /&gt;
[[Image:wxgui-link-menu.png|center|frame|Link external data - Layer Manager menu]]&lt;br /&gt;
&lt;br /&gt;
or from ''toolbar'' in Layer Manager.&lt;br /&gt;
&lt;br /&gt;
[[Image:wxgui-link-tooltip.png|center|frame|Link external data - Layer Manager toolbar (1)]]&lt;br /&gt;
[[Image:wxgui-link-tool.png|center|frame|Link external data - Layer Manager toolbar (2)]]&lt;br /&gt;
[[Image:wxgui-v.external.png|center|thumb|400px|wxGUI {{cmd|v.external}} dialog]]&lt;br /&gt;
[[Image:wxgui-v.external.out.png|center|thumb|400px|wxGUI {{cmd|v.external.out}} dialog]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[PostGIS]]&lt;br /&gt;
* [[PostGIS Topology]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Vector]]&lt;br /&gt;
[[Category:FAQ]]&lt;br /&gt;
[[Category:GRASS 7]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_Citation_Repository&amp;diff=28641</id>
		<title>GRASS Citation Repository</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_Citation_Repository&amp;diff=28641"/>
		<updated>2025-08-21T08:05:28Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* GRASS GIS Manual citations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How to cite GRASS GIS ==&lt;br /&gt;
&lt;br /&gt;
Please cite GRASS when using the software in your work. Here are some choices depending on the version used and the type of citation:&lt;br /&gt;
&lt;br /&gt;
* GRASS GIS Manual citations,&lt;br /&gt;
* Peer reviewed general GRASS GIS articles,&lt;br /&gt;
* Books,&lt;br /&gt;
* Topic oriented citations.&lt;br /&gt;
&lt;br /&gt;
Please select below:&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS Manual citations ===&lt;br /&gt;
&lt;br /&gt;
DOI (for all versions, shows latest release on top): [https://doi.org/10.5281/zenodo.5176030 10.5281/zenodo.5176030]&lt;br /&gt;
&lt;br /&gt;
'''[https://www.fair4g.org/grass.html Overview of all DOI-based references to GRASS in scientific publications (according to CrossRef)]'''&lt;br /&gt;
&lt;br /&gt;
Software:&lt;br /&gt;
* GRASS Development Team, 2022. Geographic Resources Analysis Support System (GRASS) Software, Version 8.2. Open Source Geospatial Foundation. Electronic document: https://grass.osgeo.org, DOI: [https://doi.org/10.5281/zenodo.5176030 10.5281/zenodo.5176030]&lt;br /&gt;
* GRASS Development Team, 2017. Geographic Resources Analysis Support System (GRASS) Software, Version 7.2. Open Source Geospatial Foundation. Electronic document: https://grass.osgeo.org, DOI: [https://doi.org/10.5281/zenodo.5176030 10.5281/zenodo.5176030]&lt;br /&gt;
* GRASS Development Team, 2016. Geographic Resources Analysis Support System (GRASS) Software, Version 7.0. Open Source Geospatial Foundation. Electronic document: https://grass.osgeo.org, DOI: [https://doi.org/10.5281/zenodo.5176030 10.5281/zenodo.5176030]&lt;br /&gt;
* GRASS Development Team, 2015. Geographic Resources Analysis Support System (GRASS) Software, Version 6.4. Open Source Geospatial Foundation. Electronic document: https://grass.osgeo.org, DOI: [https://doi.org/10.5281/zenodo.5176030 10.5281/zenodo.5176030]&lt;br /&gt;
&lt;br /&gt;
Programmer's manual:&lt;br /&gt;
* GRASS Development Team, 2024. Geographic Resources Analysis Support System (GRASS 8) Programmer's Manual. Open Source Geospatial Foundation Project. Electronic document: https://grass.osgeo.org/programming8/&lt;br /&gt;
* GRASS Development Team, 2017. Geographic Resources Analysis Support System (GRASS 7) Programmer's Manual. Open Source Geospatial Foundation Project. Electronic document: https://grass.osgeo.org/programming7/&lt;br /&gt;
* GRASS Development Team, 2015. Geographic Resources Analysis Support System (GRASS 6) Programmer's Manual. Open Source Geospatial Foundation Project. Electronic document: https://grass.osgeo.org/programming6/&lt;br /&gt;
&lt;br /&gt;
Related BibTeX entry:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  @Manual{GRASS_GIS_software,&lt;br /&gt;
    title = {Geographic Resources Analysis Support System (GRASS GIS) Software, Version 8.2},&lt;br /&gt;
    author = {{GRASS Development Team}},&lt;br /&gt;
    organization = {Open Source Geospatial Foundation},&lt;br /&gt;
    year = {2022},&lt;br /&gt;
    url = {https://grass.osgeo.org},&lt;br /&gt;
    doi = {https://doi.org/10.5281/zenodo.5176030}&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Historical manual pages ===&lt;br /&gt;
(Search US Army documents at https://discover.dtic.mil/products-services/)&lt;br /&gt;
&lt;br /&gt;
* Predicting Database Requirements for Geographic Information Systems in the Year 2000: Long-Term Design Issues for GRASS (1992): https://apps.dtic.mil/sti/pdfs/ADA256862.pdf&lt;br /&gt;
* Geographic Resources Analysis Support System (GRASS) Version 4.0 User's Reference Manual (1992): https://apps.dtic.mil/sti/tr/pdf/ADA255218.pdf&lt;br /&gt;
* GRASS/GIS Implementation Guide (1989): https://apps.dtic.mil/sti/tr/pdf/ADA214623.pdf&lt;br /&gt;
* r.mapcalc: An Algebra for GIS and Image Processing (1984): https://apps.dtic.mil/sti/pdfs/ADA283923.pdf&lt;br /&gt;
* FORT HOOD GEOGRAPHIC INFORMATION SYSTEM: PILOT SYSTEM DEVELOPMENT AND USER INSTRUCTIONS (1983): https://apps.dtic.mil/sti/pdfs/ADA130618.pdf&lt;br /&gt;
&lt;br /&gt;
=== GRASS GIS Addon Manual citations ===&lt;br /&gt;
&lt;br /&gt;
Hint: when citing addons, you can simply use &amp;quot;grass-stable&amp;quot; in the URL which is auto-expanded to the latest version (e.g. grass82/). Like this the latest addon version is found.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
* M. Lennert and GRASS Development Team, 2017: “Addon i.segment.stats. Geographic resources analysis support system (GRASS) software, version 7.2”, https://grass.osgeo.org/grass7/manuals/addons/i.segment.stats.html (1 June 2017)&lt;br /&gt;
&lt;br /&gt;
=== Peer reviewed general GRASS GIS articles ===&lt;br /&gt;
&lt;br /&gt;
* Neteler, M., Bowman, M.H., Landa, M., Metz, M., 2012.  &amp;lt;i&amp;gt;GRASS GIS: A multi-purpose open source GIS&amp;lt;/i&amp;gt;. Environ Model Soft 31, 124–130. ([https://dx.doi.org/10.1016/j.envsoft.2011.11.014 DOI] | [https://web.archive.org/web/20120424040115/https://gis.cri.fmach.it/uploads/neteler_grass_env_model_software.pdf PDF])&lt;br /&gt;
* Neteler, M., Bowman, M.H., Landa, M., Metz, M. (2012) &amp;quot;GRASS GIS: A multi-purpose open source GIS.&amp;quot; Environmental Modelling &amp;amp; Software. Vol 31, pp. 124–130. ([https://dx.doi.org/10.1016/j.envsoft.2011.11.014 DOI] | [https://web.archive.org/web/20120424040115/https://gis.cri.fmach.it/uploads/neteler_grass_env_model_software.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
Related Bibtex entry:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@article{neteler2012grass,&lt;br /&gt;
  title={{GRASS GIS: a multi-purpose Open Source GIS}},&lt;br /&gt;
  author={Neteler, M. and Bowman, M.H. and Landa, M. and Metz, M.},&lt;br /&gt;
  journal={Environmental Modelling \&amp;amp; Software},&lt;br /&gt;
  year={2012},&lt;br /&gt;
  volume = {31},&lt;br /&gt;
  pages = {124--130},&lt;br /&gt;
  publisher={Elsevier},&lt;br /&gt;
  doi = &amp;quot;10.1016/j.envsoft.2011.11.014&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Books ===&lt;br /&gt;
* See https://grass.osgeo.org/learn/books/&lt;br /&gt;
&lt;br /&gt;
=== Topic oriented citations ===&lt;br /&gt;
* see [[Citations for specific modules]]&lt;br /&gt;
* Citations of [[GRASS in the wild]]  (add your publications here)&lt;br /&gt;
&lt;br /&gt;
=== Historic citations ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;grey&amp;quot;&amp;gt;&lt;br /&gt;
* GRASS Development Team, 2021. GRASS GIS 7 Programmer's Manual. Open Source Geospatial Foundation, USA. Electronic document: https://grass.osgeo.org/programming7/&lt;br /&gt;
* GRASS Development Team, 2016. GRASS 6 Programmer's Manual. Open Source Geospatial Foundation, USA. Electronic document: https://grass.osgeo.org/programming6/&lt;br /&gt;
* GRASS Development Team, 2012. GRASS 6.4 Users Manual. Open Source Geospatial Foundation, USA. Electronic document: https://grass.osgeo.org/grass64/manuals/&lt;br /&gt;
* GRASS Development Team, 2007. GRASS 6.2 Users Manual. ITC-irst, Trento, Italy. Electronic document: https://grass.osgeo.org/grass62/manuals/&lt;br /&gt;
* GRASS Development Team, 2002. GRASS 5.0 Users Manual. ITC-irst, Trento, Italy. Electronic document: https://grass.osgeo.org/grass57/manuals/html57_user/&lt;br /&gt;
* U.S. Army CERL, 1993. GRASS 4.1 Reference Manual. U.S. Army Corps of Engineers, Construction Engineering Research Laboratories, Champaign, Illinois, 1-425.&lt;br /&gt;
* Westervelt, J.D., Shapiro, M., Goran, W.D., Gerdes, D.P. (1992). Geographic Resources Analysis Support System (GRASS) Version 4.0 User's Reference Manual (No. CERL-ADP-N-87/22). CONSTRUCTION ENGINEERING RESEARCH LAB (ARMY) CHAMPAIGN IL. (PDF: https://apps.dtic.mil/sti/pdfs/ADA255218.pdf)&lt;br /&gt;
* Shapiro, M., Westervelt, J., Gerdes, D., Higgins, M., &amp;amp; Larson, M. (1989). GRASS 3.0 programmer's manual (No. CERL-ADP-N-89/14). CONSTRUCTION ENGINEERING RESEARCH LAB (ARMY) CHAMPAIGN IL. (PDF: https://apps.dtic.mil/sti/pdfs/ADA252461.pdf)&lt;br /&gt;
* ''Missing: Manuals of GRASS 1.0 and 2.0 - please submit to us!''&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Newsletter citations&lt;br /&gt;
** GRASSHopper CERL, https://grass.osgeo.org/about/history/&lt;br /&gt;
** [[Newsletter citations Vol1]] 2004&lt;br /&gt;
** [[Newsletter citations Vol2]] 2005&lt;br /&gt;
** [[Newsletter citations Vol3]] 2005&lt;br /&gt;
** [[Newsletter citations Vol4]] 2006&lt;br /&gt;
&lt;br /&gt;
== Helpful tools and GRASS related bibliographic searches ==&lt;br /&gt;
* [https://grass.osgeo.org/grass-stable/manuals/addons/g.citation.html g.citation add-on module]&lt;br /&gt;
* Google Scholar:&lt;br /&gt;
** [https://scholar.google.com/scholar?q=GRASS+GIS Search for &amp;quot;GRASS GIS&amp;quot;] (activate BibTex export in &amp;quot;Scholar preferences&amp;quot;)&lt;br /&gt;
** The virtual [https://scholar.google.com/citations?user=gJ0ZB0cAAAAJ GRASS Development Team] - GRASS GIS related papers&lt;br /&gt;
* [https://www.citeulike.org CiteULike] - [https://www.citeulike.org/tag/grass Search for &amp;quot;GRASS&amp;quot;]&lt;br /&gt;
* [https://www.scripps.edu/~cdputnam/software/bibutils/ Bibutils] bibliography conversion utilities&lt;br /&gt;
* [https://gbib.seul.org Gbib BibTeX editor] for GTK+Gnome&lt;br /&gt;
* [https://jabref.sourceforge.net/ JabRef] Multi-platform, multi-format bibliography tool&lt;br /&gt;
* [https://www.zotero.org/groups/gis Zotero citation manager GIS group] - with all known GRASS GIS and other GIS related references&lt;br /&gt;
* [[GRASS in the wild‎]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Citations]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-08-08&amp;diff=28625</id>
		<title>PSC Meeting 2025-08-08</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-08-08&amp;diff=28625"/>
		<updated>2025-08-10T21:19:23Z</updated>

		<summary type="html">&lt;p&gt;Neteler: add missing :Category:PSC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Participants ==&lt;br /&gt;
&lt;br /&gt;
* Anna Petrasova&lt;br /&gt;
* Helmut Kudrnovsky&lt;br /&gt;
* Huidae Cho&lt;br /&gt;
* Linda Karlovska&lt;br /&gt;
* Nicklas Larsson&lt;br /&gt;
* Paulo van Breugel&lt;br /&gt;
* Vaclav Petras&lt;br /&gt;
* Veronica Andreo&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* GRASS presence on different events&lt;br /&gt;
* Release 8.5&lt;br /&gt;
* New docs status&lt;br /&gt;
* Website rebranding status&lt;br /&gt;
* Mailing list removal? Question from Vicky in chat&lt;br /&gt;
* Decide on the Workspace topic and whether the solution suggested [https://github.com/OSGeo/grass/discussions/5916#discussioncomment-14045240 here] can be implemented. This would help to finalize and merge this [https://github.com/OSGeo/grass/pull/3113 PR].&lt;br /&gt;
* Discussion on the [https://github.com/OSGeo/grass/discussions/5909 workflow proposal]. Perhaps we need a File Browser pane?&lt;br /&gt;
&lt;br /&gt;
== Minutes ==&lt;br /&gt;
&lt;br /&gt;
* GRASS presence on different events&lt;br /&gt;
** FOSS4G EU: Alen presented the state of GRASS talk.&lt;br /&gt;
** FOSS4G NA (Nov 3-5)&lt;br /&gt;
*** Workshop: GRASS Addon Development with Python, Corey &amp;amp; Caitlin.&lt;br /&gt;
*** Talk: GRASS Meets Longest Flow Paths, Shortest Compute Times, Huidae.&lt;br /&gt;
*** Talk: State of GRASS, Corey.&lt;br /&gt;
** FOSS4G 2025 NZ: &lt;br /&gt;
*** Alen and Luca will attend and present the state of GRASS talk (Corey as co-author as he wrote the original abstract).&lt;br /&gt;
** FOSS4G.be: Moritz will present a state of GRASS talk&lt;br /&gt;
&lt;br /&gt;
* GRASS 8.5 Release postponed to fall&lt;br /&gt;
** Waiting for JSON stuff from GSoC, which needs to be reviewed before release.&lt;br /&gt;
** Fix r.mapcalc issues regarding parallelization.&lt;br /&gt;
** Mac binaries: There's an issue with code signing. Needs to be solved before the release.&lt;br /&gt;
** Release scripts are in addons, and they run in a Docker image. Still several steps need to be manual and they are different depending on the type of release, i.e., major, minor, micro or RC.&lt;br /&gt;
** Jupyter notebook integration into GUI. Some things need to be defined/solved first: &lt;br /&gt;
*** Where to start the Jupyter server?&lt;br /&gt;
*** Where to store the notebooks: current working directory, let users choose, outside projects, within mapsets, provide a good default?&lt;br /&gt;
*** What happens when users do not have the dependencies installed?&lt;br /&gt;
*** It should work in Windows (both OSGeo4W and standalone installer).&lt;br /&gt;
** FHS should be ready for 8.6&lt;br /&gt;
&lt;br /&gt;
* New docs: &lt;br /&gt;
** They are up and running, but there's still something missing on the automatic upload part (currently a personal GH token of MN is used which expires every 3 months).&lt;br /&gt;
** There’s the question of whether we need to have docs updated all the time or only when we release. In that sense, this is not a blocker for the release, but a nice-to-have.&lt;br /&gt;
** For this release, we do not remove the HTML files, which are mostly used locally in the GUI or when called with g.manual from the terminal.&lt;br /&gt;
** Addon docs with new format: they work online.&lt;br /&gt;
&lt;br /&gt;
* GSoC: &lt;br /&gt;
** The student and mentors are working hard on adding JSON output to C tools.&lt;br /&gt;
** They are obsoleting the -g flag and moving to the format option. &lt;br /&gt;
** More clean-up should be done before GRASS 9 + Python tools.&lt;br /&gt;
&lt;br /&gt;
* CMake: &lt;br /&gt;
** We need 3 steps: FHS ([https://github.com/OSGeo/grass/pull/5630 PR WIP]), GUI (Nicklas has a follow-up PR, but will need help with this), extensions (nothing done so far).&lt;br /&gt;
** MSVC binaries are built fine, but they don’t work out of the box because of missing environment variables; Can make them work by manually setting environment variables though; g.gui fails with Python exceptions&lt;br /&gt;
&lt;br /&gt;
* Vicky's questions in the [https://matrix.to/#/!BOjyJgENYOLyXbRKxO:gitter.im/$xIdFsIr_HiEm6ASHtQCEt7GQkIrz_5zlLKOr-UpZLgo?via=gitter.im&amp;amp;via=matrix.org&amp;amp;via=osgeo.org GRASS chat]: &lt;br /&gt;
** We need to understand what they want to remove, and why; grass-user and grass-dev archives must not be removed, and neither must other list archives.&lt;br /&gt;
** Anna sends an email to Vicky.&lt;br /&gt;
&lt;br /&gt;
* Workspace discussion:&lt;br /&gt;
** We agreed on having them within mapsets, but being asked if we want to save them or not - the opposite view is to save them automatically with a timer or so&lt;br /&gt;
* Anna proposed to remove the lock to delete maps in different mapsets from the GUI - check if this is independent from the owners of mapsets.&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-08-08&amp;diff=28624</id>
		<title>PSC Meeting 2025-08-08</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-08-08&amp;diff=28624"/>
		<updated>2025-08-10T21:17:24Z</updated>

		<summary type="html">&lt;p&gt;Neteler: explain personal GH token use in automatic manual upload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Participants ==&lt;br /&gt;
&lt;br /&gt;
* Anna Petrasova&lt;br /&gt;
* Helmut Kudrnovsky&lt;br /&gt;
* Huidae Cho&lt;br /&gt;
* Linda Karlovska&lt;br /&gt;
* Nicklas Larsson&lt;br /&gt;
* Paulo van Breugel&lt;br /&gt;
* Vaclav Petras&lt;br /&gt;
* Veronica Andreo&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* GRASS presence on different events&lt;br /&gt;
* Release 8.5&lt;br /&gt;
* New docs status&lt;br /&gt;
* Website rebranding status&lt;br /&gt;
* Mailing list removal? Question from Vicky in chat&lt;br /&gt;
* Decide on the Workspace topic and whether the solution suggested [https://github.com/OSGeo/grass/discussions/5916#discussioncomment-14045240 here] can be implemented. This would help to finalize and merge this [https://github.com/OSGeo/grass/pull/3113 PR].&lt;br /&gt;
* Discussion on the [https://github.com/OSGeo/grass/discussions/5909 workflow proposal]. Perhaps we need a File Browser pane?&lt;br /&gt;
&lt;br /&gt;
== Minutes ==&lt;br /&gt;
&lt;br /&gt;
* GRASS presence on different events&lt;br /&gt;
** FOSS4G EU: Alen presented the state of GRASS talk.&lt;br /&gt;
** FOSS4G NA (Nov 3-5)&lt;br /&gt;
*** Workshop: GRASS Addon Development with Python, Corey &amp;amp; Caitlin.&lt;br /&gt;
*** Talk: GRASS Meets Longest Flow Paths, Shortest Compute Times, Huidae.&lt;br /&gt;
*** Talk: State of GRASS, Corey.&lt;br /&gt;
** FOSS4G 2025 NZ: &lt;br /&gt;
*** Alen and Luca will attend and present the state of GRASS talk (Corey as co-author as he wrote the original abstract).&lt;br /&gt;
** FOSS4G.be: Moritz will present a state of GRASS talk&lt;br /&gt;
&lt;br /&gt;
* GRASS 8.5 Release postponed to fall&lt;br /&gt;
** Waiting for JSON stuff from GSoC, which needs to be reviewed before release.&lt;br /&gt;
** Fix r.mapcalc issues regarding parallelization.&lt;br /&gt;
** Mac binaries: There's an issue with code signing. Needs to be solved before the release.&lt;br /&gt;
** Release scripts are in addons, and they run in a Docker image. Still several steps need to be manual and they are different depending on the type of release, i.e., major, minor, micro or RC.&lt;br /&gt;
** Jupyter notebook integration into GUI. Some things need to be defined/solved first: &lt;br /&gt;
*** Where to start the Jupyter server?&lt;br /&gt;
*** Where to store the notebooks: current working directory, let users choose, outside projects, within mapsets, provide a good default?&lt;br /&gt;
*** What happens when users do not have the dependencies installed?&lt;br /&gt;
*** It should work in Windows (both OSGeo4W and standalone installer).&lt;br /&gt;
** FHS should be ready for 8.6&lt;br /&gt;
&lt;br /&gt;
* New docs: &lt;br /&gt;
** They are up and running, but there's still something missing on the automatic upload part (currently a personal GH token of MN is used which expires every 3 months).&lt;br /&gt;
** There’s the question of whether we need to have docs updated all the time or only when we release. In that sense, this is not a blocker for the release, but a nice-to-have.&lt;br /&gt;
** For this release, we do not remove the HTML files, which are mostly used locally in the GUI or when called with g.manual from the terminal.&lt;br /&gt;
** Addon docs with new format: they work online.&lt;br /&gt;
&lt;br /&gt;
* GSoC: &lt;br /&gt;
** The student and mentors are working hard on adding JSON output to C tools.&lt;br /&gt;
** They are obsoleting the -g flag and moving to the format option. &lt;br /&gt;
** More clean-up should be done before GRASS 9 + Python tools.&lt;br /&gt;
&lt;br /&gt;
* CMake: &lt;br /&gt;
** We need 3 steps: FHS ([https://github.com/OSGeo/grass/pull/5630 PR WIP]), GUI (Nicklas has a follow-up PR, but will need help with this), extensions (nothing done so far).&lt;br /&gt;
** MSVC binaries are built fine, but they don’t work out of the box because of missing environment variables; Can make them work by manually setting environment variables though; g.gui fails with Python exceptions&lt;br /&gt;
&lt;br /&gt;
* Vicky's questions in the [https://matrix.to/#/!BOjyJgENYOLyXbRKxO:gitter.im/$xIdFsIr_HiEm6ASHtQCEt7GQkIrz_5zlLKOr-UpZLgo?via=gitter.im&amp;amp;via=matrix.org&amp;amp;via=osgeo.org GRASS chat]: &lt;br /&gt;
** We need to understand what they want to remove, and why; grass-user and grass-dev archives must not be removed, and neither must other list archives.&lt;br /&gt;
** Anna sends an email to Vicky.&lt;br /&gt;
&lt;br /&gt;
* Workspace discussion:&lt;br /&gt;
** We agreed on having them within mapsets, but being asked if we want to save them or not - the opposite view is to save them automatically with a timer or so&lt;br /&gt;
* Anna proposed to remove the lock to delete maps in different mapsets from the GUI - check if this is independent from the owners of mapsets.&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28558</id>
		<title>Compile and Install</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28558"/>
		<updated>2025-07-10T10:43:31Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Linux Mint */ + libgtk-3-dev&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- {{MoveToTrac}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Disclaimer''': This page explains how to turn the GRASS source code into an installable binary package (&amp;quot;compilation&amp;quot;) for different operating systems. If you just want to get ready-to-use binaries, go [https://grass.osgeo.org/download/ here], otherwise read on...&lt;br /&gt;
&lt;br /&gt;
== How to do compilation and installation of GRASS? ==&lt;br /&gt;
&lt;br /&gt;
Here we explain the procedure to compile GRASS from GitHub, but it also applies to official GRASS 8 releases.&lt;br /&gt;
&lt;br /&gt;
''For installation of precompiled binary packages, see the main [[Installation Guide]].''&lt;br /&gt;
&lt;br /&gt;
For detailed information on compilation, please see the [https://github.com/OSGeo/grass/blob/main/INSTALL.md INSTALL] file in the source code.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
==== Extra libraries ====&lt;br /&gt;
GRASS needs at least two extra libraries: PROJ and GDAL/OGR. It is recommended to download them as ready-to-use packages for your software platform (Linux distribution, Windows, Mac...).&lt;br /&gt;
&lt;br /&gt;
Other libraries needed to run GRASS are listed on the [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md requirements page].&lt;br /&gt;
&lt;br /&gt;
To compile, you will also need the respective &amp;quot;-devel&amp;quot; packages; see below for details.&lt;br /&gt;
&lt;br /&gt;
==== Download GRASS source code ====&lt;br /&gt;
&lt;br /&gt;
First, [https://grass.osgeo.org/download/ download the GRASS source code].&lt;br /&gt;
&lt;br /&gt;
=== Generic Compilation and installation procedure ===&lt;br /&gt;
&lt;br /&gt;
* It is wise that compilation processes are carried out as a normal user: If you want to get the source code in a place where you do not have write permissions (e.g. in /usr/local/src/) just follow this:&lt;br /&gt;
      cd /usr/local/src/ &lt;br /&gt;
      su -c 'mkdir grass8'&lt;br /&gt;
      su -c 'chown yourlogin:yourgroup grass8'&lt;br /&gt;
&lt;br /&gt;
Otherwise if you have permissions just continue as a normal user:&lt;br /&gt;
      mkdir $HOME/src&lt;br /&gt;
      cd $HOME/src/&lt;br /&gt;
      git clone https://github.com/OSGeo/grass.git grass_main&lt;br /&gt;
&lt;br /&gt;
* run configure with parameters to adapt the compile process to your own system. To see what options can be passed to it, run:&lt;br /&gt;
 ./configure --help | less &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The minimum set of configure parameters is &lt;br /&gt;
      ./configure ### --&amp;gt;&lt;br /&gt;
It may (!) look like this:&lt;br /&gt;
 &lt;br /&gt;
      ./configure \&lt;br /&gt;
          --with-cxx \&lt;br /&gt;
          --with-sqlite \&lt;br /&gt;
          --with-python \&lt;br /&gt;
          --with-geos \&lt;br /&gt;
          --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
          --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
          --with-freetype \&lt;br /&gt;
          --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
          --with-proj --with-proj-share=/usr/share/proj&lt;br /&gt;
&lt;br /&gt;
You may have to explicitly state the path for certain packages (i.e., gdal). The Unix 'locate' command will come in handy for finding the path of the package you need (you may have to run locate as root ex: sudo locate gdal-config).&lt;br /&gt;
&lt;br /&gt;
Please note that the paths mentioned may widely vary due to the distribution used.&lt;br /&gt;
See [[Compile_and_Install#Platform_Specific_Notes|Platform Specific Notes]] below.&lt;br /&gt;
&lt;br /&gt;
Depending on your needs it may be a good idea to include debugging hooks.&lt;br /&gt;
: See [[GRASS_Debugging#Compile_Time_Setup]].&lt;br /&gt;
 CFLAGS=&amp;quot;-ggdb -Wall -Werror-implicit-function-declaration&amp;quot; ./configure ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the end of configuration process you should get report not much different from this:&lt;br /&gt;
&lt;br /&gt;
  GRASS is now configured for:  x86_64-pc-linux-gnu&lt;br /&gt;
  &lt;br /&gt;
  Source directory:           /home/user/software/grass_main&lt;br /&gt;
  Build directory:            /home/user/software/grass_main&lt;br /&gt;
  Installation directory:     ${prefix}/grass84&lt;br /&gt;
  Startup script in directory:${exec_prefix}/bin&lt;br /&gt;
  C compiler:                 gcc -O2 -march=native -std=gnu99 -fexceptions -fstack-protector -m64 -fdiagnostics-color &lt;br /&gt;
  C++ compiler:               c++ -g -Wall&lt;br /&gt;
  Building shared libraries:  yes&lt;br /&gt;
  OpenGL platform:            X11&lt;br /&gt;
  &lt;br /&gt;
  MacOSX application:         no&lt;br /&gt;
  MacOSX architectures:       &lt;br /&gt;
  MacOSX SDK:                 &lt;br /&gt;
  &lt;br /&gt;
  BLAS support:               yes&lt;br /&gt;
  BZIP2 support:              no&lt;br /&gt;
  C++ support:                yes&lt;br /&gt;
  Cairo support:              yes&lt;br /&gt;
  DWG support:                no&lt;br /&gt;
  FFTW support:               yes&lt;br /&gt;
  FreeType support:           yes&lt;br /&gt;
  GDAL support:               yes&lt;br /&gt;
  GEOS support:               yes&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
* Let's compile it (takes a little while...)!&lt;br /&gt;
      make -j2&lt;br /&gt;
* At the end, you should get report not much different from this:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Following modules are missing the 'description.html' file in src code:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 GRASS compilation log&lt;br /&gt;
 -------------------------&lt;br /&gt;
 Started compilation: Mon 19 Aug 2024 10:47:57 PM CEST&lt;br /&gt;
 --&lt;br /&gt;
 Errors in:&lt;br /&gt;
 No errors detected.&lt;br /&gt;
 --&lt;br /&gt;
 Finished compilation: Mon 19 Aug 2024 10:55:12 PM CEST&lt;br /&gt;
 (In case of errors please change into the directory with error and run 'make')&lt;br /&gt;
&lt;br /&gt;
* If there is any error, change directory to directory with error and run &amp;quot;make&amp;quot; again. Report occurring bug to GRASS mailing list&lt;br /&gt;
* Once the installation process is finished, you're ready to install GRASS system wide.&lt;br /&gt;
      su -c 'make install'&lt;br /&gt;
* enjoy GRASS: &lt;br /&gt;
      grass&lt;br /&gt;
&lt;br /&gt;
=== What else? ===&lt;br /&gt;
&lt;br /&gt;
If you want to use [https://www.qgis.org QGIS], then also compile the GRASS-GDAL/OGR plugin. This is also useful to access your GRASS-data&lt;br /&gt;
from other application using GDAL/OGR like [[R_statistics/ R]].&lt;br /&gt;
* [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]] (enables QGIS to read GRASS data directly)&lt;br /&gt;
&lt;br /&gt;
=== Compile and install GDAL-GRASS plugin ===&lt;br /&gt;
&lt;br /&gt;
* See [[Compile and install GDAL-GRASS plugin]]&lt;br /&gt;
&lt;br /&gt;
=== Platform Specific Notes ===&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Linux comes in various flavours, i.e. distributions.&lt;br /&gt;
&lt;br /&gt;
===== Distribution related packaging =====&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Archlinux: https://aur.archlinux.org/packages/grass&lt;br /&gt;
* Centos: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Debian: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
* EPEL: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Fedora: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Ubuntu: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
&lt;br /&gt;
===== Alpine Linux =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# install compiler tools and libraries&lt;br /&gt;
apk add build-base bzip2-dev cairo-dev fftw-dev freetype-dev g++ gcc gdal-dev geos-dev git \&lt;br /&gt;
        gnutls-dev libc6-compat libjpeg-turbo-dev libpng-dev make openjpeg-dev openblas-dev \&lt;br /&gt;
        postgresql-dev proj-dev python3-dev py3-numpy-dev sqlite-dev tar tiff-dev unzip vim \&lt;br /&gt;
        wget zip zstd-dev&lt;br /&gt;
&lt;br /&gt;
# install needed tools and libraries when using GRASS&lt;br /&gt;
apk add attr bash bison bzip2 cairo curl fftw flex freetype gdal gdal-tools gettext geos gnutls \&lt;br /&gt;
        jsoncpp libbz2 libexecinfo libjpeg-turbo libpng libunwind musl musl-utils ncurses openjpeg \&lt;br /&gt;
        openblas py3-numpy py3-pillow py3-six postgresql proj-datumgrid proj-util sqlite sqlite-libs \&lt;br /&gt;
        subversion tiff zstd zstd-libs&lt;br /&gt;
&lt;br /&gt;
# get source code&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://grass.osgeo.org/grass88/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# unpack&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# change into source code (update path name as needed)&lt;br /&gt;
cd grass-8.4.git_src_snapshot_2021_05_01/&lt;br /&gt;
&lt;br /&gt;
# minimal configuration&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --without-nls \&lt;br /&gt;
  --without-wxwidgets \&lt;br /&gt;
  --without-fftw \&lt;br /&gt;
  --without-cairo \&lt;br /&gt;
  --without-freetype \&lt;br /&gt;
  --without-opengl \&lt;br /&gt;
  --without-odbc&lt;br /&gt;
&lt;br /&gt;
# compilation&lt;br /&gt;
nice make -j2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Archlinux =====&lt;br /&gt;
You can install GRASS for Archlinux distribution based like Archlinux, Manjaro, EndeavourOS ...&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Easiest method : use a prebuilt package using arch4edu repository'''&amp;lt;/big&amp;gt;&lt;br /&gt;
''&amp;quot;Arch4edu is a community repository for Arch Linux and Arch Linux ARM that strives to provide the latest versions of most software used by college students.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Add Arch4edu repository. Follow instructions from official documentation:&lt;br /&gt;
&lt;br /&gt;
https://github.com/arch4edu/arch4edu/wiki/Add-arch4edu-to-your-Archlinux&lt;br /&gt;
&lt;br /&gt;
2. Refresh packages list with&lt;br /&gt;
 &lt;br /&gt;
 pacman -Syyu&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS package&lt;br /&gt;
&lt;br /&gt;
 pacman -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Advanced method : use AUR (Arch User Repository) package'''&amp;lt;/big&amp;gt;&lt;br /&gt;
Up-to-date links to Archlinux GRASS PKGBUILDs are on Arch User Repository. &lt;br /&gt;
PKGBUILD downloads and builds automatically sources from https://grass.osgeo.org/download/software/linux/.&lt;br /&gt;
&lt;br /&gt;
You can use an AUR helper like ''pamac'', ''yay'', among others ... More info through this link https://wiki.archlinux.org/title/AUR_helpers&lt;br /&gt;
&lt;br /&gt;
Exemple with ''yay'':&lt;br /&gt;
 yay -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Expert method : compile from source code'''&amp;lt;/big&amp;gt;&lt;br /&gt;
If you want to compile it yourself, you could follow steps below :&lt;br /&gt;
&lt;br /&gt;
''(As an alternative it is recommended to download PKGBUILD from AUR and then customize to your needs)''&lt;br /&gt;
&lt;br /&gt;
Install dependencies : &lt;br /&gt;
 pacman -S bzip2 cairo fftw fontconfig freetype2 gcc-libs gdal geos glibc glu libpng libtiff libx11 libgl netcdf pdal proj python-gdal python-numpy python-pillow python-wxpython readline zlib zstd&lt;br /&gt;
&lt;br /&gt;
Download and extract sources : https://grass.osgeo.org/download/software/sources/&lt;br /&gt;
&lt;br /&gt;
We can now start building GRASS&lt;br /&gt;
&lt;br /&gt;
 export PATH=~/usr/bin:$PATH &amp;amp;&amp;amp; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
    --with-wxwidgets \&lt;br /&gt;
    --with-readline \&lt;br /&gt;
    --with-pthread \&lt;br /&gt;
    --with-netcdf \&lt;br /&gt;
    --with-nls \&lt;br /&gt;
    --with-geos \&lt;br /&gt;
    --with-postgres \&lt;br /&gt;
    --with-pdal=/usr/include/pdal \&lt;br /&gt;
    --with-bzlib \&lt;br /&gt;
    --with-zstd&lt;br /&gt;
&lt;br /&gt;
Now let's compile and install it&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
It's done, you can enjoy GRASS in Arch, just type &amp;quot;grass&amp;quot; in the terminal to launch it or look for grass in your menu.&lt;br /&gt;
&lt;br /&gt;
===== Generic procedure for Debian-based distributions (Ubuntu, ...) =====&lt;br /&gt;
&lt;br /&gt;
WORK IN PROGRESS&lt;br /&gt;
&lt;br /&gt;
1. Install official GRASS package&lt;br /&gt;
&lt;br /&gt;
 sudo apt install grass grass-dev&lt;br /&gt;
&lt;br /&gt;
2. Enable source code download&lt;br /&gt;
&lt;br /&gt;
 # do backup first&lt;br /&gt;
 sudo cp /etc/apt/sources.list /etc/apt/sources.list.orig&lt;br /&gt;
 sudo sed -i '/^#\sdeb-src /s/^# *//' /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS dependencies&lt;br /&gt;
&lt;br /&gt;
 sudo apt build-dep grass&lt;br /&gt;
&lt;br /&gt;
4. Download GRASS source code&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/osgeo/grass&lt;br /&gt;
&lt;br /&gt;
5. Compile GRASS from source code&lt;br /&gt;
 &lt;br /&gt;
 cd grass&lt;br /&gt;
&lt;br /&gt;
Configure:&lt;br /&gt;
&lt;br /&gt;
 grass --config build | sh&lt;br /&gt;
&lt;br /&gt;
Optionally install missing dependencies (can happen when official GRASS package is not compatible with GRASS main), eg.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install libzstd-dev&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
 make -j2&lt;br /&gt;
&lt;br /&gt;
6. Run locally or install&lt;br /&gt;
&lt;br /&gt;
 ./bin.x86_64-pc-linux-gnu/grass --version&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
 sudo make install&lt;br /&gt;
 grass --version&lt;br /&gt;
&lt;br /&gt;
===== Debian =====&lt;br /&gt;
&lt;br /&gt;
* Official [https://wiki.debian.org/DebianGis DebianGIS] packaging control files, available on git server:&lt;br /&gt;
  https://salsa.debian.org/debian-gis-team/grass&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Debian 11 (bullseye) ======&lt;br /&gt;
&lt;br /&gt;
Install needed packages for GRASS 8.4:&lt;br /&gt;
  apt-get update &amp;amp;&amp;amp; \&lt;br /&gt;
  apt-get install bison debhelper-compat dh-python doxygen fakeroot flex graphviz \&lt;br /&gt;
    libblas-dev libbz2-dev libcairo2-dev libfftw3-dev libfreetype6-dev \&lt;br /&gt;
    libgdal-dev libgeos-dev libgl1-mesa-dev libglu1-mesa-dev libjpeg-dev liblapack-dev libmotif-dev \&lt;br /&gt;
    default-libmysqlclient-dev libncurses5-dev libnetcdf-dev libpng-dev libpq-dev \&lt;br /&gt;
    libproj-dev libreadline-dev libsqlite3-dev libtiff-dev libxmu-dev libzstd-dev \&lt;br /&gt;
    netcdf-bin pkg-config proj-bin python3 python3-dev python3-numpy python3-pil python3-ply \&lt;br /&gt;
    python3-six python3-wxgtk4.0 wget unixodbc-dev zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download and unpack GRASS 8.4 source code (or fetch from GitHub: https://github.com/OSGeo/grass):&lt;br /&gt;
&lt;br /&gt;
  wget https://grass.osgeo.org/grass84/source/grass-8.4-latest.tar.gz&lt;br /&gt;
  tar xvfz grass-8.4-latest.tar.gz&lt;br /&gt;
  cd grass-8.4.*&lt;br /&gt;
&lt;br /&gt;
Configuration:&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-Wall -Werror-implicit-function-declaration -fno-common -Wextra -Wunused&amp;quot; \&lt;br /&gt;
  CXXFLAGS=&amp;quot;-Wall&amp;quot;  \&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --prefix=/usr/local \&lt;br /&gt;
   --with-gdal --with-proj --with-proj-share=/usr/share \&lt;br /&gt;
   --with-glw --with-nls --with-readline \&lt;br /&gt;
   --with-cxx --enable-largefile \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --with-sqlite --with-cairo --with-python=/usr/bin/python-config \&lt;br /&gt;
   --with-wxwidgets --with-geos \&lt;br /&gt;
   --with-netcdf=/usr/bin/nc-config --with-odbc=yes \&lt;br /&gt;
   --with-openmp=yes --with-pthread=no&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
  make -j2&lt;br /&gt;
&lt;br /&gt;
Install:&lt;br /&gt;
&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
  grass --version&lt;br /&gt;
&lt;br /&gt;
===== Ubuntu =====&lt;br /&gt;
&lt;br /&gt;
There is a dedicated page on how to [[Compile_and_Install_Ubuntu | Compile the GRASS source code &amp;amp; install it in Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
===== Linux Mint =====&lt;br /&gt;
&lt;br /&gt;
The [[Compile_and_Install_Ubuntu | detailed compilation guide for Ubuntu]] may just work. However, here is a short guide for Mint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 21+&lt;br /&gt;
&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade -y&lt;br /&gt;
&lt;br /&gt;
# installation of required libraries and compile tools&lt;br /&gt;
# recommended to give Python3 precedence over Python2 (which is end-of-life since 2024)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&lt;br /&gt;
# install compiler tools and further dependencies (tested with Linux Mint 21)&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  libproj-dev proj-data proj-bin \&lt;br /&gt;
  libgeos-dev \&lt;br /&gt;
  libgdal-dev python3-gdal gdal-bin \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-opengl \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  wx3.2-headers libwxgtk3.2-dev libwxbase3.2-1 libfftw3-dev libgtk-3-dev\&lt;br /&gt;
  libncurses5-dev zlib1g-dev gettext \&lt;br /&gt;
  libbz2-dev libzstd-dev libfreetype6-dev \&lt;br /&gt;
  libtiff5-dev libpnglite-dev libcairo libcairo-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev libpq-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  subversion \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript wget -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GUI''' - update wxpython:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next steps:&lt;br /&gt;
* create a subdirectory in your HOME tree for storing the GRASS source code (and later compilation)&lt;br /&gt;
* get source code, one of the two options:&lt;br /&gt;
** a) download [https://grass.osgeo.org/grass84/source/snapshot/ GRASS source code weekly snapshot] (e.g. take the &amp;quot;8.x.git snapshot&amp;quot;), or&lt;br /&gt;
*** unpack source code&lt;br /&gt;
** b) current source code from GitHub:&lt;br /&gt;
*** &amp;lt;code&amp;gt;git clone https://github.com/OSGeo/grass.git&amp;lt;/code&amp;gt;&lt;br /&gt;
* change into the source code directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# in the source code directory, &amp;quot;configure&amp;quot; the source code to prepare for compilation:&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-pdal \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-openmp&lt;br /&gt;
&lt;br /&gt;
# compile GRASS&lt;br /&gt;
make -j2&lt;br /&gt;
&lt;br /&gt;
# install compiled GRASS on system&lt;br /&gt;
sudo make install&lt;br /&gt;
&lt;br /&gt;
# use GRASS! Start on command line&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Enterprise Linux =====&lt;br /&gt;
&lt;br /&gt;
Enterprise Linux (EL) and derivatives (that is, Red Hat Enterprise Linux, CentOS and Scientific Linux) is a popular and robust platform for servers and computing-heavy workstations, and is therefore a good fit for GIS specific requirements.&lt;br /&gt;
&lt;br /&gt;
See: https://wiki.osgeo.org/wiki/Enterprise_Linux_GIS&lt;br /&gt;
&lt;br /&gt;
===== Scientific Linux =====&lt;br /&gt;
&lt;br /&gt;
See Centos&lt;br /&gt;
&lt;br /&gt;
===== CentOS =====&lt;br /&gt;
&lt;br /&gt;
You first need to add the EPEL repository for PROJ and GDAL, see [https://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F here]&lt;br /&gt;
&lt;br /&gt;
Preparation '''Centos 8''':&lt;br /&gt;
  dnf install epel-release&lt;br /&gt;
&lt;br /&gt;
  dnf install flex bison make zlib-devel gcc-c++ gettext \&lt;br /&gt;
              fftw-devel libtiff-devel sqlite-devel \&lt;br /&gt;
              proj proj-devel proj-datumgrid libxml2 \&lt;br /&gt;
              geos geos-devel git \&lt;br /&gt;
              netcdf netcdf-devel atlas-devel \&lt;br /&gt;
              blas-devel lapack-devel libpq-devel \&lt;br /&gt;
              python3-devel python3-numpy \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib \&lt;br /&gt;
              gdal gdal-libs gdal-python-tools python3-gdal gdal-devel \&lt;br /&gt;
              wxGTK3-devel mesa-libGL-devel mesa-libGLU-devel \&lt;br /&gt;
              libXmu-devel libX11-devel&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8 compilation and installation'''&lt;br /&gt;
&lt;br /&gt;
[https://grass.osgeo.org/grass84/source/snapshot/ Download source code] (e.g., --&amp;gt; &amp;quot;Download latest 8.4 code)&amp;quot; and configure GRASS 8 (suggestion: save this as script):&lt;br /&gt;
&lt;br /&gt;
 ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
  --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-netcdf \&lt;br /&gt;
  --without-ffmpeg \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-fftw&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
    make&lt;br /&gt;
or on a multicore system (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
&lt;br /&gt;
For a system wide installation, run as root user:&lt;br /&gt;
    make install&lt;br /&gt;
OR simply run it directly from the source code directory (substitute ARCH with i686 or x86_64):&lt;br /&gt;
&lt;br /&gt;
    bin.$ARCH/grass -gui&lt;br /&gt;
&lt;br /&gt;
In this case, for convenience, add it to the search path:&lt;br /&gt;
    mkdir $HOME/bin&lt;br /&gt;
    cd $HOME/bin&lt;br /&gt;
    # example:&lt;br /&gt;
    ln -s $HOME/software/grass84_release/bin.x86_64-pc-linux-gnu/grass .&lt;br /&gt;
&lt;br /&gt;
Now use it subsequently with&lt;br /&gt;
    grass -gui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation grass on a HPC system with '''Centos 7''' and no root privileges:'''&lt;br /&gt;
&lt;br /&gt;
This assumes that python3, fftw, proj, gdal and geos are available on the HPC system, either as modules or as installed software.&lt;br /&gt;
&lt;br /&gt;
Download and prepare some dependencies (freetypes and zstd)&lt;br /&gt;
    mkdir -p $HOME/grass/freetypes&lt;br /&gt;
    cd $HOME/grass/freetypes&lt;br /&gt;
    wget path/to/freetype-2.9.1.tar.gz&lt;br /&gt;
    tar -xf freetype-2.9.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
    mkdir $HOME/grass/zstd&lt;br /&gt;
    cd mkdir $HOME/grass/zstd&lt;br /&gt;
    wget path/to/v1.4.4/zstd-1.4.4.tar.gz&lt;br /&gt;
    tar -xf zstd-1.4.4.tar.gz&lt;br /&gt;
    make install PREFIX=./&lt;br /&gt;
&lt;br /&gt;
Add the ZSTD path to your LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
    tee -a $HOME/.bashrc &amp;gt; /dev/null &amp;lt;&amp;lt; EOT&lt;br /&gt;
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/grass/zstd/zstd-1.4.4/lib&lt;br /&gt;
    EOT&lt;br /&gt;
&lt;br /&gt;
The configure command could look like this&lt;br /&gt;
    ./configure \&lt;br /&gt;
        -prefix=$HOME/grass \&lt;br /&gt;
        --enable-64bit --with-fftw-includes=/path/to/fftw/include/ \&lt;br /&gt;
        --with-fftw-libs=/path/to/fftw/lib/ \&lt;br /&gt;
        --with-freetype-includes=$HOME/grass/freetypes/freetype-2.9.1/include/ \&lt;br /&gt;
        --with-netcdf --with-geos --with-blas --with-lapack --with-postgres \&lt;br /&gt;
        --with-zstd-includes=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-zstd-libs=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-gdal=/path/to/gdal-config  # This could be the path to a gdal version compiled from source&lt;br /&gt;
&lt;br /&gt;
Finally as usual:&lt;br /&gt;
    make; make install&lt;br /&gt;
    &lt;br /&gt;
    grass&lt;br /&gt;
&lt;br /&gt;
===== Gentoo =====&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
See also https://packages.gentoo.org/package/sci-geosciences/grass&lt;br /&gt;
&lt;br /&gt;
===== Funtoo =====&lt;br /&gt;
&lt;br /&gt;
{{MovedToTrac|FuntooLinux}}&lt;br /&gt;
&lt;br /&gt;
===== Fedora =====&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Fedora ======&lt;br /&gt;
&lt;br /&gt;
'''Preparation''' for the compilation of GRASS 8+ source code (F36+):&lt;br /&gt;
&lt;br /&gt;
  dnf install gcc gcc-c++ bison flex ncurses-devel gettext proj-devel \&lt;br /&gt;
              gdal gdal-devel sqlite-devel xml2 mesa-libGL-devel cairo-devel \&lt;br /&gt;
              fftw-devel mesa-libGLU-devel libXmu-devel libX11-devel geos geos-devel \&lt;br /&gt;
              libtiff-devel python3-devel numpy wxGTK-devel gawk git \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib-wx doxygen python3-sphinx \&lt;br /&gt;
              libzstd-devel libzstd python3-six python3-numpy python3-wxpython4 \&lt;br /&gt;
              proj-data PDAL-devel PDAL-libs&lt;br /&gt;
&lt;br /&gt;
  # optionally also:  netcdf-devel postgresql-devel &lt;br /&gt;
  #                   atlas-devel lapack-devel lapack-devel &lt;br /&gt;
  #                   laszip laszip-devel&lt;br /&gt;
  #                   proj-data-at proj-data-au proj-data-be ...&lt;br /&gt;
&lt;br /&gt;
''Note 1: the optional ffmpeg-devel comes from the rpmfusion-free repository ([https://rpmfusion.org/Configuration/ configuration]).''&lt;br /&gt;
&lt;br /&gt;
'''Download''' and unpack the source code:&lt;br /&gt;
* GRASS 8: [https://grass.osgeo.org/grass84/source/snapshot/ weekly snapshot] - [https://github.com/OSGeo/grass/releases GitHub repository]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configure''': This is an example how to configure the source code on a Fedora system:&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --with-cxx \&lt;br /&gt;
   --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
   --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
   --with-geos \&lt;br /&gt;
   --with-pdal \&lt;br /&gt;
   --with-sqlite \&lt;br /&gt;
   --with-nls \&lt;br /&gt;
   --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
   --with-fftw \&lt;br /&gt;
   --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --enable-largefile \&lt;br /&gt;
   --without-odbc&lt;br /&gt;
&lt;br /&gt;
''Extra 1:'' If you also want '''FFMPEG support''' - it requires 'dnf install fftw-devel' from the rpmfusion-free repository. Then add to the configuration lines above:&lt;br /&gt;
&lt;br /&gt;
     --with-ffmpeg --with-ffmpeg-includes=&amp;quot;/usr/include/ffmpeg /usr/include/ffmpeg/libav* /usr/include/ffmpeg/libpostproc /usr/include/ffmpeg/libswscale&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
''Extra 2:'' For '''LAPACK/BLAS support''' (addons i.spec.unmix, v.kriging etc), install &amp;quot;dnf install lapack lapack-devel blas blas-devel atlas atlas-devel&amp;quot;. Then add to the configuration lines above:&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
&lt;br /&gt;
''Extra 3:'' For '''ZSTD support''' (Zstandard compression algorithm), first install &amp;quot;dnf install libzstd libzstd-devel zstd&amp;quot;. After installing the zstd related packages, add to the configuration lines above:&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
&lt;br /&gt;
Finally '''compile''' the configured source code:&lt;br /&gt;
    make&lt;br /&gt;
   or on multicore (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
   and&lt;br /&gt;
    make install # requires root permissions unless you become owner of /usr/local/&lt;br /&gt;
&lt;br /&gt;
Then use GRASS 8 and enjoy!&lt;br /&gt;
&lt;br /&gt;
   grass --version&lt;br /&gt;
&lt;br /&gt;
===== openSUSE =====&lt;br /&gt;
&lt;br /&gt;
To build GRASS on openSUSE:&lt;br /&gt;
&lt;br /&gt;
''Application:Geo'' repo to be added (see [https://software.opensuse.org//download.html?project=Application%3AGeo&amp;amp;package=gdal Install package Application:Geo]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# example for Leap 42 version:&lt;br /&gt;
sudo zypper addrepo https://download.opensuse.org/repositories/Application:Geo/openSUSE_Leap_42.3/Application:Geo.repo&lt;br /&gt;
sudo zypper refresh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RPM packages to be installed:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo zypper install bison flex freetype2-devel fftw3-devel gcc-c++ \&lt;br /&gt;
   libgdal-devel libgeos-devel libjpeg-devel libpng-devel libtiff-devel \&lt;br /&gt;
   man proj libproj-devel readline-devel netcdf-devel ncurses-devel \&lt;br /&gt;
   mysql-devel postgresql-devel sqlite-devel unixODBC-devel \&lt;br /&gt;
   tcl-devel tk-devel xorg-x11-Mesa-devel libXmu-devel \&lt;br /&gt;
   python-numpy python-dateutil python-devel python-opengl \&lt;br /&gt;
   python-wxWidgets python-xml python-dateutil wxWidgets-devel \&lt;br /&gt;
   zlib-devel doxygen python-sphinx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source code configuration:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 ./configure \&lt;br /&gt;
 	--enable-largefile \&lt;br /&gt;
	--with-proj-share=/usr/share/proj \&lt;br /&gt;
	--with-cxx \&lt;br /&gt;
	--with-lapack=yes \&lt;br /&gt;
	--with-motif \&lt;br /&gt;
	--with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
	--with-postgres --with-postgres-includes=/usr/include/pgsql \&lt;br /&gt;
	--with-mysql --with-mysql-includes=/usr/include/mysql \&lt;br /&gt;
	--with-fftw \&lt;br /&gt;
	--with-readline \&lt;br /&gt;
	--with-netcdf \&lt;br /&gt;
	--with-geos \&lt;br /&gt;
	--with-nls \&lt;br /&gt;
	--with-sqlite \&lt;br /&gt;
	--with-freetype \&lt;br /&gt;
	--with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
	--with-wxwidgets \&lt;br /&gt;
	--with-odbc \&lt;br /&gt;
	--with-python&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile with &amp;quot;make [-j2]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== RPM SPEC files =====&lt;br /&gt;
* [https://build.opensuse.org/package/show?package=grass&amp;amp;project=Application%3AGeo OpenSuSe]&lt;br /&gt;
* [https://pkgs.fedoraproject.org/cgit/rpms/grass.git/tree/grass.spec Fedora]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==== macOS ====&lt;br /&gt;
&lt;br /&gt;
Compiling GRASS for macOS is not fundamentally different from for other *nix systems. It is on the contrary quite similar, but what differ is the lack of a default package management system for software GRASS depends on. This leaves the mac user to either: (1) compile the dependencies one-by-one; (2) compiling with one of the third-party package management systems avaliable; or (4) a combination thereof.&lt;br /&gt;
&lt;br /&gt;
If you are interested in installing a precompiled version, please check out the [https://grass.osgeo.org/download/software/mac-osx/ official download site].&lt;br /&gt;
&lt;br /&gt;
To date, maybe the easiest way to compile for Mac is by using [https://github.com/nilason/grass-conda GRASS app build script] which is based on the instructions below for building using Anaconda. It will install dependencies, package and install an app bundle with just a command in Terminal.&lt;br /&gt;
&lt;br /&gt;
===== Compilation and installation =====&lt;br /&gt;
&lt;br /&gt;
For more up-to-date instructions please read:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/nilason/grass-conda Compiling on macOS using Conda] (Intel / Apple silicon based machine M1)&lt;br /&gt;
* [[Compiling on macOS using Anaconda]]&lt;br /&gt;
* [[Compiling on macOS using Homebrew]]&lt;br /&gt;
* [[Compiling on macOS using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
===== Legacy instructions =====&lt;br /&gt;
&lt;br /&gt;
The following compilation and installation instructions are rather outdated as a whole. They do, however, contain parts and snippets that still may be very instructive and useful.&lt;br /&gt;
&lt;br /&gt;
* [[Compiling on MacOSX]]&lt;br /&gt;
* [[Compiling on MacOSX using Fink]]&lt;br /&gt;
* [https://web.archive.org/web/20180718005252/https://www.kyngchaos.com/software/frameworks#build_scripts build scripts for dependencies]&lt;br /&gt;
&lt;br /&gt;
Troubleshooting:&lt;br /&gt;
* solving errors at starting GRASS: [[MacOSX GRASS errors]]&lt;br /&gt;
&lt;br /&gt;
==== FreeBSD / NetBSD ====&lt;br /&gt;
&lt;br /&gt;
The recommended compiler tools are GCC, GNU make, GNU coreutils (for install), and flex. All are available through the respective package managing tools (pkg_add for FreeBSD and pkgin install for NetBSD) and for recent *BSD versions most likely installed by default.&lt;br /&gt;
&lt;br /&gt;
GRASS 8 should compile on FreeBSD and NetBSD.&lt;br /&gt;
&lt;br /&gt;
It is highly recommended to install GDAL/OGR and PROJ first. These libraries and tools are available as [https://www.freebsd.org/ports/ ports for FreeBSD] and [https://www.pkgsrc.org/ packages for NetBSD].&lt;br /&gt;
&lt;br /&gt;
Optional functionality is listed with ''./configure --help'', and related libraries and tools might need to be installed first.&lt;br /&gt;
&lt;br /&gt;
You then may need to edit include/Make/Platform.make and set&lt;br /&gt;
 ICONVLIB            = -liconv&lt;br /&gt;
&lt;br /&gt;
==== AIX ====&lt;br /&gt;
&lt;br /&gt;
A recent [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81) and GNU coreutils are required. These are available with the [https://www-03.ibm.com/systems/power/software/aix/linux/toolbox/download.html IBM AIX toolbox] or through third-party AIX software repositories, e.g. [https://www.bullfreeware.com/ bullfreeware] and [https://www.perzl.org/aix/ perzl.org]. Note that 'make' does not work, only 'gmake' works. &lt;br /&gt;
&lt;br /&gt;
General instructions to compile on AIX are e.g. [https://www.perzl.org/aix/index.php?n=Main.Instructions here]&lt;br /&gt;
&lt;br /&gt;
On AIX, compilation results by default in 32 bit applications and static libraries. The [https://developer.ibm.com/components/aix/ IBM documentation] explains how to build 64 bit applications and shared libraries with GCC.&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the IBM xlc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 5.x&lt;br /&gt;
&lt;br /&gt;
export LIBPATH=/opt/freeware/lib64:/opt/freeware/lib&lt;br /&gt;
# make 'ar' happy&lt;br /&gt;
export OBJECT_MODE=64&lt;br /&gt;
&lt;br /&gt;
PREFIX=$HOME/private/bin&lt;br /&gt;
./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --disable-shared \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the GNU gcc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* if needed, [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* if needed (the name is often 'gmake' and not 'make') [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked for AIX 7.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 7.x&lt;br /&gt;
export CC=&amp;quot;gcc&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;g++&amp;quot;&lt;br /&gt;
PREFIX=$HOME/bin&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;-Wl,-bsvr4,-R,/opt/freeware/lib -L/opt/freeware/lib&amp;quot; CPPFLAGS=&amp;quot;-I/opt/freeware/include&amp;quot; ./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --enable-shared \&lt;br /&gt;
  --with-includes=/opt/freeware/include --with-libs=/opt/freeware/lib \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-gdal=$PREFIX/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib --with-sqlite-includes=$PREFIX/include \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-opengl=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MS-Windows ====&lt;br /&gt;
&lt;br /&gt;
See also [[WinGRASS Current Status]] for latest updates.&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/native =====&lt;br /&gt;
&lt;br /&gt;
GRASS on Windows using a standalone installer. It is still MinGW based (we are going to move this to CMake in 2024+).&lt;br /&gt;
&lt;br /&gt;
Instructions to compile from source code:&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/CompileOnWindows GRASS Windows Native Binary Building Guide]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/OSGeo4W =====&lt;br /&gt;
&lt;br /&gt;
OSGeo4W is an installer for a broad set of open source geospatial software packages including GRASS as well as many other packages (QGIS, GDAL/OGR, and more).&lt;br /&gt;
&lt;br /&gt;
* See [https://trac.osgeo.org/osgeo4w/ OSGeo4W]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/Cygwin =====&lt;br /&gt;
&lt;br /&gt;
* See the [[Cygwin]] wiki pages&lt;br /&gt;
&lt;br /&gt;
=== Common problems and solutions ===&lt;br /&gt;
&lt;br /&gt;
During compilation, error can occur if certain packages are not installed. Here a list of problems with solution:&lt;br /&gt;
&lt;br /&gt;
* error: X11/Xlib.h: No such file or directory&lt;br /&gt;
** this suggests that you don't have the X headers installed&lt;br /&gt;
** Solution: Install the libx11-dev package&lt;br /&gt;
&lt;br /&gt;
* error:  g.list: error while loading shared libraries: libgdal1.6.0.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
** this error appears in the shell right after the user clicks GUI's &amp;quot;Start GRASS&amp;quot; button. The GUI shows an error about geographic extent and gets closed afterwards.&lt;br /&gt;
** It happens when you launch bin.i686 executable on 64bit system. Be careful and choose the right architecture.&lt;br /&gt;
&lt;br /&gt;
* error: lib/python/ctypes&lt;br /&gt;
** This error appears during the compilation: &amp;lt;code&amp;gt;free(): invalid pointer Aborted (core dumped)&amp;lt;/code&amp;gt;&lt;br /&gt;
** It happens when you have multiple &amp;lt;code&amp;gt;libproj&amp;lt;/code&amp;gt; versions on your system (check it with command &amp;lt;code&amp;gt;ldd PATH_TO_GRASS_INSTALL/lib/libgrass_gproj.so | grep proj&amp;lt;/code&amp;gt; - when this is not your problem, you should obtain exactly one result)&lt;br /&gt;
** Solution: Try to reinstall &amp;lt;code&amp;gt;libproj-dev&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;proj-data&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Static compilation ===&lt;br /&gt;
&lt;br /&gt;
In order to get static rather than dynamically linked binaries, configure like this:&lt;br /&gt;
&lt;br /&gt;
  ./configure --disable-shared --enable-static&lt;br /&gt;
&lt;br /&gt;
This will however break the wxGUI and GRASS 8 completely because &amp;quot;ctypes&amp;quot; wants to link against shared libs, or there is something in the static libs that &amp;quot;ctypes&amp;quot; does not like.&lt;br /&gt;
&lt;br /&gt;
=== Optimization ===&lt;br /&gt;
&lt;br /&gt;
GCC and other compilers support [https://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/Optimize-Options.html#Optimize-Options optimization]&lt;br /&gt;
&lt;br /&gt;
If you would like to set compiler optimisations, for a possibly faster binary, type (don't enter a &amp;quot;;&amp;quot; anywhere):&lt;br /&gt;
&lt;br /&gt;
        CFLAGS=-O ./configure&lt;br /&gt;
or,&lt;br /&gt;
        setenv CFLAGS -O&lt;br /&gt;
        ./configure&lt;br /&gt;
&lt;br /&gt;
whichever works on your shell. Use -O2 instead of -O if your compiler supports this (note: O is the letter, not zero). Using the &amp;quot;gcc&amp;quot; compiler, you can also specify processor specific flags (examples, please suggest better settings to us):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=athlon -O2&amp;quot; # AMD Athlon processor with code optimisations&lt;br /&gt;
  CFLAGS=&amp;quot;-march=amdfam10&amp;quot;  # AMD Phenom II X4 64bit processor with gcc &amp;gt;=4.3&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium&amp;quot;    # Intel Pentium processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium4&amp;quot;   # Intel Pentium4 processor&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -msse -msse2 -mfpmath=sse -minline-all-stringops&amp;quot; # Intel XEON 64bit processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mtune=nocona -m64 -minline-all-stringops&amp;quot;            # Intel Pentium 64bit processor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To find out optional CFLAGS for your platform, enter:&lt;br /&gt;
  gcc -dumpspecs&lt;br /&gt;
&lt;br /&gt;
See also: https://gcc.gnu.org/&lt;br /&gt;
&lt;br /&gt;
A real fast GRASS version (and small binaries) will be created with LDFLAGS set to &amp;quot;stripping&amp;quot; (but this disables debugging):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -mcpu=&amp;lt;cpu_see_above&amp;gt; -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure&lt;br /&gt;
&lt;br /&gt;
=== Configure options and their meanings ===&lt;br /&gt;
&lt;br /&gt;
For configure there are many options and some GRASS modules are built only if some options are set. Here are listed common configuration options with short explanation.&lt;br /&gt;
&lt;br /&gt;
* --prefix=/path - Sets path where GRASS will be installed. GRASS will reside in /path/grass-version.&lt;br /&gt;
* --enable-largefile - Enables large (&amp;gt;2Gb on 32bit systems) support. For current large file support status look at [[Large File Support]] page.&lt;br /&gt;
* --with-cxx - Enables compilation of C++ code. Required for r.terraflow module.&lt;br /&gt;
* --with-readline - Enables readline support. If readline is enabled, you can use its history/editing facilities when entering r.mapcalc expressions on stdin.&lt;br /&gt;
* --with-glw - Enables GLw support. The GLw library provides OpenGL &amp;quot;canvas&amp;quot; widgets for Athena and Motif. &lt;br /&gt;
 &lt;br /&gt;
 That switch is unnecessary for normal compilation. It's only&lt;br /&gt;
 required for r3.showdspf, which isn't normally built; if you &lt;br /&gt;
 want it, you have build it manually &lt;br /&gt;
 (e.g. &amp;quot;make -C raster3d/r3.showdspf&amp;quot;).&lt;br /&gt;
 As similar functionality is now provided by NVIZ, r3.showdspf&lt;br /&gt;
 is deprecated.&lt;br /&gt;
 r3.showdspf uses the Motif widget (so you also need a &lt;br /&gt;
 Motif library, e.g. Lesstif or OpenMotif).&lt;br /&gt;
 [https://grass.itc.it/pipermail/grassuser/2006-December/037475.html Glynn Clements at GRASS-user mailing list]&lt;br /&gt;
&lt;br /&gt;
=== Parallelized compilation on multi-core CPUs ===&lt;br /&gt;
&lt;br /&gt;
You can dramatically accelerate the compilation of the GRASS code with the -j flag of &amp;quot;make&amp;quot; if you have a multi-core CPU system. This determines the maximum number of jobs to have running at once, so cores don't have to sit idle waiting for jobs on other cores to complete. A good rule of thumb for this value is &amp;lt;tt&amp;gt;number_of_cores * 1.5&amp;lt;/tt&amp;gt;, but note that setting any higher than the actual number of cores will only affect the timing slightly. For example, on a dual-core processor:&lt;br /&gt;
  make -j 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CFLAGS=&amp;quot;-pipe&amp;quot; doesn't seem to help much --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GRASS-GDAL plugin ==&lt;br /&gt;
&lt;br /&gt;
* see [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Addons ==&lt;br /&gt;
&lt;br /&gt;
Please note that the installation of [https://grass.osgeo.org/grass-stable/manuals/addons/ GRASS addons] can be easily done with the {{cmd|g.extension}} manager. The compile instructions below are aiming at own development.&lt;br /&gt;
&lt;br /&gt;
=== Compiled modules ===&lt;br /&gt;
&lt;br /&gt;
This is the general way which works for C modules as well as scripts (Python or Shell/Bash modules) which has HTML documentation.&lt;br /&gt;
&lt;br /&gt;
'''Requirements:'''&lt;br /&gt;
&lt;br /&gt;
Either:&lt;br /&gt;
* a binary GRASS package, or&lt;br /&gt;
* source code which has been prepared with:&lt;br /&gt;
    ./configure [opionally flags]&lt;br /&gt;
    make libs&lt;br /&gt;
&lt;br /&gt;
Each of the [[GRASS_AddOns|addon]] modules should come with a Makefile. To compile it, just run:&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;/path/to/grass84&amp;lt;/tt&amp;gt; has to be absolute, not relative.&lt;br /&gt;
&lt;br /&gt;
If using Bash it may be useful to set that up as an alias:&lt;br /&gt;
    alias gmake64='make MODULE_TOPDIR=/path/to/grass84/'&lt;br /&gt;
&lt;br /&gt;
Installation (perhaps requires &amp;quot;sudo&amp;quot;):&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/ install&lt;br /&gt;
&lt;br /&gt;
Note: Compiled addons may require a re-compilation if you changed/updated your GRASS standard binaries.&lt;br /&gt;
&lt;br /&gt;
==== If binary comes with a -dev package ====&lt;br /&gt;
&lt;br /&gt;
''(work in progress, this text states how it eventually will be :)''&lt;br /&gt;
Nowadays one does not need to the source code, nor compiling GRASS by oneself to be able to add add-ons. On Debian, you can just install the grass-dev package and then run:&lt;br /&gt;
 make MODULE_TOPDIR=/usr/lib/grass84/ INST_DIR=/usr/lib/grass84/&lt;br /&gt;
&lt;br /&gt;
The grass-dev package essentially provides GRASS's &amp;lt;tt&amp;gt;include&amp;lt;/tt&amp;gt; header files and Make configuration files.&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
&lt;br /&gt;
If the addon module is a script, it is sufficient to copy it into the (GRASS binaries) path somewhere. Alternatively, install addons into a separate GRASS addons binaries/scripts directory which is easier to maintain. It avoids getting clobbered every time you reinstall GRASS. To use these separately stored scripts, set and export the GRASS_ADDON_PATH environment variable before starting GRASS and it will automatically be added to the module search path (see the {{cmd|variables}} help page). To simplify this, do for example:&lt;br /&gt;
&lt;br /&gt;
 # add in $HOME/.bashrc:&lt;br /&gt;
 GRASS_ADDON_PATH=/usr/local/grass/addons/&lt;br /&gt;
 export GRASS_ADDON_PATH&lt;br /&gt;
&lt;br /&gt;
Make sure that the script is executable, then just call it in GRASS typing the filename. Python scripts need to be called writing the extension as well, like:&lt;br /&gt;
 &lt;br /&gt;
 GRASS (nc_spm):~ &amp;gt; v.krige.py&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28557</id>
		<title>Compile and Install</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Compile_and_Install&amp;diff=28557"/>
		<updated>2025-07-10T10:10:14Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Linux Mint: update packages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- {{MoveToTrac}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Disclaimer''': This page explains how to turn the GRASS source code into an installable binary package (&amp;quot;compilation&amp;quot;) for different operating systems. If you just want to get ready-to-use binaries, go [https://grass.osgeo.org/download/ here], otherwise read on...&lt;br /&gt;
&lt;br /&gt;
== How to do compilation and installation of GRASS? ==&lt;br /&gt;
&lt;br /&gt;
Here we explain the procedure to compile GRASS from GitHub, but it also applies to official GRASS 8 releases.&lt;br /&gt;
&lt;br /&gt;
''For installation of precompiled binary packages, see the main [[Installation Guide]].''&lt;br /&gt;
&lt;br /&gt;
For detailed information on compilation, please see the [https://github.com/OSGeo/grass/blob/main/INSTALL.md INSTALL] file in the source code.&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
==== Extra libraries ====&lt;br /&gt;
GRASS needs at least two extra libraries: PROJ and GDAL/OGR. It is recommended to download them as ready-to-use packages for your software platform (Linux distribution, Windows, Mac...).&lt;br /&gt;
&lt;br /&gt;
Other libraries needed to run GRASS are listed on the [https://github.com/OSGeo/grass/blob/main/REQUIREMENTS.md requirements page].&lt;br /&gt;
&lt;br /&gt;
To compile, you will also need the respective &amp;quot;-devel&amp;quot; packages; see below for details.&lt;br /&gt;
&lt;br /&gt;
==== Download GRASS source code ====&lt;br /&gt;
&lt;br /&gt;
First, [https://grass.osgeo.org/download/ download the GRASS source code].&lt;br /&gt;
&lt;br /&gt;
=== Generic Compilation and installation procedure ===&lt;br /&gt;
&lt;br /&gt;
* It is wise that compilation processes are carried out as a normal user: If you want to get the source code in a place where you do not have write permissions (e.g. in /usr/local/src/) just follow this:&lt;br /&gt;
      cd /usr/local/src/ &lt;br /&gt;
      su -c 'mkdir grass8'&lt;br /&gt;
      su -c 'chown yourlogin:yourgroup grass8'&lt;br /&gt;
&lt;br /&gt;
Otherwise if you have permissions just continue as a normal user:&lt;br /&gt;
      mkdir $HOME/src&lt;br /&gt;
      cd $HOME/src/&lt;br /&gt;
      git clone https://github.com/OSGeo/grass.git grass_main&lt;br /&gt;
&lt;br /&gt;
* run configure with parameters to adapt the compile process to your own system. To see what options can be passed to it, run:&lt;br /&gt;
 ./configure --help | less &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The minimum set of configure parameters is &lt;br /&gt;
      ./configure ### --&amp;gt;&lt;br /&gt;
It may (!) look like this:&lt;br /&gt;
 &lt;br /&gt;
      ./configure \&lt;br /&gt;
          --with-cxx \&lt;br /&gt;
          --with-sqlite \&lt;br /&gt;
          --with-python \&lt;br /&gt;
          --with-geos \&lt;br /&gt;
          --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
          --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
          --with-freetype \&lt;br /&gt;
          --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
          --with-proj --with-proj-share=/usr/share/proj&lt;br /&gt;
&lt;br /&gt;
You may have to explicitly state the path for certain packages (i.e., gdal). The Unix 'locate' command will come in handy for finding the path of the package you need (you may have to run locate as root ex: sudo locate gdal-config).&lt;br /&gt;
&lt;br /&gt;
Please note that the paths mentioned may widely vary due to the distribution used.&lt;br /&gt;
See [[Compile_and_Install#Platform_Specific_Notes|Platform Specific Notes]] below.&lt;br /&gt;
&lt;br /&gt;
Depending on your needs it may be a good idea to include debugging hooks.&lt;br /&gt;
: See [[GRASS_Debugging#Compile_Time_Setup]].&lt;br /&gt;
 CFLAGS=&amp;quot;-ggdb -Wall -Werror-implicit-function-declaration&amp;quot; ./configure ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the end of configuration process you should get report not much different from this:&lt;br /&gt;
&lt;br /&gt;
  GRASS is now configured for:  x86_64-pc-linux-gnu&lt;br /&gt;
  &lt;br /&gt;
  Source directory:           /home/user/software/grass_main&lt;br /&gt;
  Build directory:            /home/user/software/grass_main&lt;br /&gt;
  Installation directory:     ${prefix}/grass84&lt;br /&gt;
  Startup script in directory:${exec_prefix}/bin&lt;br /&gt;
  C compiler:                 gcc -O2 -march=native -std=gnu99 -fexceptions -fstack-protector -m64 -fdiagnostics-color &lt;br /&gt;
  C++ compiler:               c++ -g -Wall&lt;br /&gt;
  Building shared libraries:  yes&lt;br /&gt;
  OpenGL platform:            X11&lt;br /&gt;
  &lt;br /&gt;
  MacOSX application:         no&lt;br /&gt;
  MacOSX architectures:       &lt;br /&gt;
  MacOSX SDK:                 &lt;br /&gt;
  &lt;br /&gt;
  BLAS support:               yes&lt;br /&gt;
  BZIP2 support:              no&lt;br /&gt;
  C++ support:                yes&lt;br /&gt;
  Cairo support:              yes&lt;br /&gt;
  DWG support:                no&lt;br /&gt;
  FFTW support:               yes&lt;br /&gt;
  FreeType support:           yes&lt;br /&gt;
  GDAL support:               yes&lt;br /&gt;
  GEOS support:               yes&lt;br /&gt;
  [...]&lt;br /&gt;
&lt;br /&gt;
* Let's compile it (takes a little while...)!&lt;br /&gt;
      make -j2&lt;br /&gt;
* At the end, you should get report not much different from this:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Following modules are missing the 'description.html' file in src code:&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 GRASS compilation log&lt;br /&gt;
 -------------------------&lt;br /&gt;
 Started compilation: Mon 19 Aug 2024 10:47:57 PM CEST&lt;br /&gt;
 --&lt;br /&gt;
 Errors in:&lt;br /&gt;
 No errors detected.&lt;br /&gt;
 --&lt;br /&gt;
 Finished compilation: Mon 19 Aug 2024 10:55:12 PM CEST&lt;br /&gt;
 (In case of errors please change into the directory with error and run 'make')&lt;br /&gt;
&lt;br /&gt;
* If there is any error, change directory to directory with error and run &amp;quot;make&amp;quot; again. Report occurring bug to GRASS mailing list&lt;br /&gt;
* Once the installation process is finished, you're ready to install GRASS system wide.&lt;br /&gt;
      su -c 'make install'&lt;br /&gt;
* enjoy GRASS: &lt;br /&gt;
      grass&lt;br /&gt;
&lt;br /&gt;
=== What else? ===&lt;br /&gt;
&lt;br /&gt;
If you want to use [https://www.qgis.org QGIS], then also compile the GRASS-GDAL/OGR plugin. This is also useful to access your GRASS-data&lt;br /&gt;
from other application using GDAL/OGR like [[R_statistics/ R]].&lt;br /&gt;
* [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]] (enables QGIS to read GRASS data directly)&lt;br /&gt;
&lt;br /&gt;
=== Compile and install GDAL-GRASS plugin ===&lt;br /&gt;
&lt;br /&gt;
* See [[Compile and install GDAL-GRASS plugin]]&lt;br /&gt;
&lt;br /&gt;
=== Platform Specific Notes ===&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Linux comes in various flavours, i.e. distributions.&lt;br /&gt;
&lt;br /&gt;
===== Distribution related packaging =====&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Archlinux: https://aur.archlinux.org/packages/grass&lt;br /&gt;
* Centos: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Debian: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
* EPEL: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Fedora: https://src.fedoraproject.org/rpms/grass&lt;br /&gt;
* Ubuntu: https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging&lt;br /&gt;
&lt;br /&gt;
===== Alpine Linux =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# install compiler tools and libraries&lt;br /&gt;
apk add build-base bzip2-dev cairo-dev fftw-dev freetype-dev g++ gcc gdal-dev geos-dev git \&lt;br /&gt;
        gnutls-dev libc6-compat libjpeg-turbo-dev libpng-dev make openjpeg-dev openblas-dev \&lt;br /&gt;
        postgresql-dev proj-dev python3-dev py3-numpy-dev sqlite-dev tar tiff-dev unzip vim \&lt;br /&gt;
        wget zip zstd-dev&lt;br /&gt;
&lt;br /&gt;
# install needed tools and libraries when using GRASS&lt;br /&gt;
apk add attr bash bison bzip2 cairo curl fftw flex freetype gdal gdal-tools gettext geos gnutls \&lt;br /&gt;
        jsoncpp libbz2 libexecinfo libjpeg-turbo libpng libunwind musl musl-utils ncurses openjpeg \&lt;br /&gt;
        openblas py3-numpy py3-pillow py3-six postgresql proj-datumgrid proj-util sqlite sqlite-libs \&lt;br /&gt;
        subversion tiff zstd zstd-libs&lt;br /&gt;
&lt;br /&gt;
# get source code&lt;br /&gt;
cd ~&lt;br /&gt;
wget -c https://grass.osgeo.org/grass88/source/snapshot/grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# unpack&lt;br /&gt;
tar xvfz grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
rm -f grass-8.4.git_src_snapshot_latest.tar.gz&lt;br /&gt;
&lt;br /&gt;
# change into source code (update path name as needed)&lt;br /&gt;
cd grass-8.4.git_src_snapshot_2021_05_01/&lt;br /&gt;
&lt;br /&gt;
# minimal configuration&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --without-nls \&lt;br /&gt;
  --without-wxwidgets \&lt;br /&gt;
  --without-fftw \&lt;br /&gt;
  --without-cairo \&lt;br /&gt;
  --without-freetype \&lt;br /&gt;
  --without-opengl \&lt;br /&gt;
  --without-odbc&lt;br /&gt;
&lt;br /&gt;
# compilation&lt;br /&gt;
nice make -j2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Archlinux =====&lt;br /&gt;
You can install GRASS for Archlinux distribution based like Archlinux, Manjaro, EndeavourOS ...&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Easiest method : use a prebuilt package using arch4edu repository'''&amp;lt;/big&amp;gt;&lt;br /&gt;
''&amp;quot;Arch4edu is a community repository for Arch Linux and Arch Linux ARM that strives to provide the latest versions of most software used by college students.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Add Arch4edu repository. Follow instructions from official documentation:&lt;br /&gt;
&lt;br /&gt;
https://github.com/arch4edu/arch4edu/wiki/Add-arch4edu-to-your-Archlinux&lt;br /&gt;
&lt;br /&gt;
2. Refresh packages list with&lt;br /&gt;
 &lt;br /&gt;
 pacman -Syyu&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS package&lt;br /&gt;
&lt;br /&gt;
 pacman -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Advanced method : use AUR (Arch User Repository) package'''&amp;lt;/big&amp;gt;&lt;br /&gt;
Up-to-date links to Archlinux GRASS PKGBUILDs are on Arch User Repository. &lt;br /&gt;
PKGBUILD downloads and builds automatically sources from https://grass.osgeo.org/download/software/linux/.&lt;br /&gt;
&lt;br /&gt;
You can use an AUR helper like ''pamac'', ''yay'', among others ... More info through this link https://wiki.archlinux.org/title/AUR_helpers&lt;br /&gt;
&lt;br /&gt;
Exemple with ''yay'':&lt;br /&gt;
 yay -S grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;big&amp;gt;'''Expert method : compile from source code'''&amp;lt;/big&amp;gt;&lt;br /&gt;
If you want to compile it yourself, you could follow steps below :&lt;br /&gt;
&lt;br /&gt;
''(As an alternative it is recommended to download PKGBUILD from AUR and then customize to your needs)''&lt;br /&gt;
&lt;br /&gt;
Install dependencies : &lt;br /&gt;
 pacman -S bzip2 cairo fftw fontconfig freetype2 gcc-libs gdal geos glibc glu libpng libtiff libx11 libgl netcdf pdal proj python-gdal python-numpy python-pillow python-wxpython readline zlib zstd&lt;br /&gt;
&lt;br /&gt;
Download and extract sources : https://grass.osgeo.org/download/software/sources/&lt;br /&gt;
&lt;br /&gt;
We can now start building GRASS&lt;br /&gt;
&lt;br /&gt;
 export PATH=~/usr/bin:$PATH &amp;amp;&amp;amp; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
    --with-wxwidgets \&lt;br /&gt;
    --with-readline \&lt;br /&gt;
    --with-pthread \&lt;br /&gt;
    --with-netcdf \&lt;br /&gt;
    --with-nls \&lt;br /&gt;
    --with-geos \&lt;br /&gt;
    --with-postgres \&lt;br /&gt;
    --with-pdal=/usr/include/pdal \&lt;br /&gt;
    --with-bzlib \&lt;br /&gt;
    --with-zstd&lt;br /&gt;
&lt;br /&gt;
Now let's compile and install it&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
It's done, you can enjoy GRASS in Arch, just type &amp;quot;grass&amp;quot; in the terminal to launch it or look for grass in your menu.&lt;br /&gt;
&lt;br /&gt;
===== Generic procedure for Debian-based distributions (Ubuntu, ...) =====&lt;br /&gt;
&lt;br /&gt;
WORK IN PROGRESS&lt;br /&gt;
&lt;br /&gt;
1. Install official GRASS package&lt;br /&gt;
&lt;br /&gt;
 sudo apt install grass grass-dev&lt;br /&gt;
&lt;br /&gt;
2. Enable source code download&lt;br /&gt;
&lt;br /&gt;
 # do backup first&lt;br /&gt;
 sudo cp /etc/apt/sources.list /etc/apt/sources.list.orig&lt;br /&gt;
 sudo sed -i '/^#\sdeb-src /s/^# *//' /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
3. Install GRASS dependencies&lt;br /&gt;
&lt;br /&gt;
 sudo apt build-dep grass&lt;br /&gt;
&lt;br /&gt;
4. Download GRASS source code&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/osgeo/grass&lt;br /&gt;
&lt;br /&gt;
5. Compile GRASS from source code&lt;br /&gt;
 &lt;br /&gt;
 cd grass&lt;br /&gt;
&lt;br /&gt;
Configure:&lt;br /&gt;
&lt;br /&gt;
 grass --config build | sh&lt;br /&gt;
&lt;br /&gt;
Optionally install missing dependencies (can happen when official GRASS package is not compatible with GRASS main), eg.&lt;br /&gt;
&lt;br /&gt;
 sudo apt install libzstd-dev&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
 make -j2&lt;br /&gt;
&lt;br /&gt;
6. Run locally or install&lt;br /&gt;
&lt;br /&gt;
 ./bin.x86_64-pc-linux-gnu/grass --version&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
 sudo make install&lt;br /&gt;
 grass --version&lt;br /&gt;
&lt;br /&gt;
===== Debian =====&lt;br /&gt;
&lt;br /&gt;
* Official [https://wiki.debian.org/DebianGis DebianGIS] packaging control files, available on git server:&lt;br /&gt;
  https://salsa.debian.org/debian-gis-team/grass&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Debian 11 (bullseye) ======&lt;br /&gt;
&lt;br /&gt;
Install needed packages for GRASS 8.4:&lt;br /&gt;
  apt-get update &amp;amp;&amp;amp; \&lt;br /&gt;
  apt-get install bison debhelper-compat dh-python doxygen fakeroot flex graphviz \&lt;br /&gt;
    libblas-dev libbz2-dev libcairo2-dev libfftw3-dev libfreetype6-dev \&lt;br /&gt;
    libgdal-dev libgeos-dev libgl1-mesa-dev libglu1-mesa-dev libjpeg-dev liblapack-dev libmotif-dev \&lt;br /&gt;
    default-libmysqlclient-dev libncurses5-dev libnetcdf-dev libpng-dev libpq-dev \&lt;br /&gt;
    libproj-dev libreadline-dev libsqlite3-dev libtiff-dev libxmu-dev libzstd-dev \&lt;br /&gt;
    netcdf-bin pkg-config proj-bin python3 python3-dev python3-numpy python3-pil python3-ply \&lt;br /&gt;
    python3-six python3-wxgtk4.0 wget unixodbc-dev zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Download and unpack GRASS 8.4 source code (or fetch from GitHub: https://github.com/OSGeo/grass):&lt;br /&gt;
&lt;br /&gt;
  wget https://grass.osgeo.org/grass84/source/grass-8.4-latest.tar.gz&lt;br /&gt;
  tar xvfz grass-8.4-latest.tar.gz&lt;br /&gt;
  cd grass-8.4.*&lt;br /&gt;
&lt;br /&gt;
Configuration:&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-Wall -Werror-implicit-function-declaration -fno-common -Wextra -Wunused&amp;quot; \&lt;br /&gt;
  CXXFLAGS=&amp;quot;-Wall&amp;quot;  \&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --prefix=/usr/local \&lt;br /&gt;
   --with-gdal --with-proj --with-proj-share=/usr/share \&lt;br /&gt;
   --with-glw --with-nls --with-readline \&lt;br /&gt;
   --with-cxx --enable-largefile \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --with-sqlite --with-cairo --with-python=/usr/bin/python-config \&lt;br /&gt;
   --with-wxwidgets --with-geos \&lt;br /&gt;
   --with-netcdf=/usr/bin/nc-config --with-odbc=yes \&lt;br /&gt;
   --with-openmp=yes --with-pthread=no&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
&lt;br /&gt;
  make -j2&lt;br /&gt;
&lt;br /&gt;
Install:&lt;br /&gt;
&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
  grass --version&lt;br /&gt;
&lt;br /&gt;
===== Ubuntu =====&lt;br /&gt;
&lt;br /&gt;
There is a dedicated page on how to [[Compile_and_Install_Ubuntu | Compile the GRASS source code &amp;amp; install it in Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
===== Linux Mint =====&lt;br /&gt;
&lt;br /&gt;
The [[Compile_and_Install_Ubuntu | detailed compilation guide for Ubuntu]] may just work. However, here is a short guide for Mint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Linux Mint 21+&lt;br /&gt;
&lt;br /&gt;
# be sure to have an updated system&lt;br /&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade -y&lt;br /&gt;
&lt;br /&gt;
# installation of required libraries and compile tools&lt;br /&gt;
# recommended to give Python3 precedence over Python2 (which is end-of-life since 2024)&lt;br /&gt;
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1&lt;br /&gt;
&lt;br /&gt;
# install compiler tools and further dependencies (tested with Linux Mint 21)&lt;br /&gt;
# this is a single command, please copy-paste it entirely into the terminal:&lt;br /&gt;
sudo apt-get install \&lt;br /&gt;
  build-essential \&lt;br /&gt;
  flex make bison gcc libgcc1 g++ cmake ccache \&lt;br /&gt;
  libproj-dev proj-data proj-bin \&lt;br /&gt;
  libgeos-dev \&lt;br /&gt;
  libgdal-dev python3-gdal gdal-bin \&lt;br /&gt;
  python3 python3-dev \&lt;br /&gt;
  python3-opengl \&lt;br /&gt;
  python3-wxgtk4.0 \&lt;br /&gt;
  python3-dateutil libgsl-dev python3-numpy \&lt;br /&gt;
  wx3.2-headers libwxgtk3.2-dev libwxbase3.2-1 libfftw3-dev&lt;br /&gt;
  libncurses5-dev zlib1g-dev gettext \&lt;br /&gt;
  libbz2-dev libzstd-dev libfreetype6-dev \&lt;br /&gt;
  libtiff5-dev libpnglite-dev libcairo libcairo-dev \&lt;br /&gt;
  sqlite3 libsqlite3-dev libpq-dev \&lt;br /&gt;
  libfftw3-3 libfftw3-dev \&lt;br /&gt;
  libboost-thread-dev libboost-program-options-dev \&lt;br /&gt;
  subversion \&lt;br /&gt;
  checkinstall \&lt;br /&gt;
  libglu1-mesa-dev libxmu-dev \&lt;br /&gt;
  ghostscript wget -y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GUI''' - update wxpython:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next steps:&lt;br /&gt;
* create a subdirectory in your HOME tree for storing the GRASS source code (and later compilation)&lt;br /&gt;
* get source code, one of the two options:&lt;br /&gt;
** a) download [https://grass.osgeo.org/grass84/source/snapshot/ GRASS source code weekly snapshot] (e.g. take the &amp;quot;8.x.git snapshot&amp;quot;), or&lt;br /&gt;
*** unpack source code&lt;br /&gt;
** b) current source code from GitHub:&lt;br /&gt;
*** &amp;lt;code&amp;gt;git clone https://github.com/OSGeo/grass.git&amp;lt;/code&amp;gt;&lt;br /&gt;
* change into the source code directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# in the source code directory, &amp;quot;configure&amp;quot; the source code to prepare for compilation:&lt;br /&gt;
./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-nls \&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot; \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-opengl-libs=/usr/include/GL \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-pdal \&lt;br /&gt;
  --without-netcdf \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-openmp&lt;br /&gt;
&lt;br /&gt;
# compile GRASS&lt;br /&gt;
make -j2&lt;br /&gt;
&lt;br /&gt;
# install compiled GRASS on system&lt;br /&gt;
sudo make install&lt;br /&gt;
&lt;br /&gt;
# use GRASS! Start on command line&lt;br /&gt;
grass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Enterprise Linux =====&lt;br /&gt;
&lt;br /&gt;
Enterprise Linux (EL) and derivatives (that is, Red Hat Enterprise Linux, CentOS and Scientific Linux) is a popular and robust platform for servers and computing-heavy workstations, and is therefore a good fit for GIS specific requirements.&lt;br /&gt;
&lt;br /&gt;
See: https://wiki.osgeo.org/wiki/Enterprise_Linux_GIS&lt;br /&gt;
&lt;br /&gt;
===== Scientific Linux =====&lt;br /&gt;
&lt;br /&gt;
See Centos&lt;br /&gt;
&lt;br /&gt;
===== CentOS =====&lt;br /&gt;
&lt;br /&gt;
You first need to add the EPEL repository for PROJ and GDAL, see [https://fedoraproject.org/wiki/EPEL/FAQ#How_can_I_install_the_packages_from_the_EPEL_software_repository.3F here]&lt;br /&gt;
&lt;br /&gt;
Preparation '''Centos 8''':&lt;br /&gt;
  dnf install epel-release&lt;br /&gt;
&lt;br /&gt;
  dnf install flex bison make zlib-devel gcc-c++ gettext \&lt;br /&gt;
              fftw-devel libtiff-devel sqlite-devel \&lt;br /&gt;
              proj proj-devel proj-datumgrid libxml2 \&lt;br /&gt;
              geos geos-devel git \&lt;br /&gt;
              netcdf netcdf-devel atlas-devel \&lt;br /&gt;
              blas-devel lapack-devel libpq-devel \&lt;br /&gt;
              python3-devel python3-numpy \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib \&lt;br /&gt;
              gdal gdal-libs gdal-python-tools python3-gdal gdal-devel \&lt;br /&gt;
              wxGTK3-devel mesa-libGL-devel mesa-libGLU-devel \&lt;br /&gt;
              libXmu-devel libX11-devel&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8 compilation and installation'''&lt;br /&gt;
&lt;br /&gt;
[https://grass.osgeo.org/grass84/source/snapshot/ Download source code] (e.g., --&amp;gt; &amp;quot;Download latest 8.4 code)&amp;quot; and configure GRASS 8 (suggestion: save this as script):&lt;br /&gt;
&lt;br /&gt;
 ./configure \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
  --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-python \&lt;br /&gt;
  --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
  --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
  --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
  --with-openmp \&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-fftw \&lt;br /&gt;
  --with-geos \&lt;br /&gt;
  --with-netcdf \&lt;br /&gt;
  --without-ffmpeg \&lt;br /&gt;
  --without-mysql \&lt;br /&gt;
  --without-postgres \&lt;br /&gt;
  --without-odbc \&lt;br /&gt;
  --without-fftw&lt;br /&gt;
&lt;br /&gt;
Compile:&lt;br /&gt;
    make&lt;br /&gt;
or on a multicore system (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
&lt;br /&gt;
For a system wide installation, run as root user:&lt;br /&gt;
    make install&lt;br /&gt;
OR simply run it directly from the source code directory (substitute ARCH with i686 or x86_64):&lt;br /&gt;
&lt;br /&gt;
    bin.$ARCH/grass -gui&lt;br /&gt;
&lt;br /&gt;
In this case, for convenience, add it to the search path:&lt;br /&gt;
    mkdir $HOME/bin&lt;br /&gt;
    cd $HOME/bin&lt;br /&gt;
    # example:&lt;br /&gt;
    ln -s $HOME/software/grass84_release/bin.x86_64-pc-linux-gnu/grass .&lt;br /&gt;
&lt;br /&gt;
Now use it subsequently with&lt;br /&gt;
    grass -gui&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Installation grass on a HPC system with '''Centos 7''' and no root privileges:'''&lt;br /&gt;
&lt;br /&gt;
This assumes that python3, fftw, proj, gdal and geos are available on the HPC system, either as modules or as installed software.&lt;br /&gt;
&lt;br /&gt;
Download and prepare some dependencies (freetypes and zstd)&lt;br /&gt;
    mkdir -p $HOME/grass/freetypes&lt;br /&gt;
    cd $HOME/grass/freetypes&lt;br /&gt;
    wget path/to/freetype-2.9.1.tar.gz&lt;br /&gt;
    tar -xf freetype-2.9.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
    mkdir $HOME/grass/zstd&lt;br /&gt;
    cd mkdir $HOME/grass/zstd&lt;br /&gt;
    wget path/to/v1.4.4/zstd-1.4.4.tar.gz&lt;br /&gt;
    tar -xf zstd-1.4.4.tar.gz&lt;br /&gt;
    make install PREFIX=./&lt;br /&gt;
&lt;br /&gt;
Add the ZSTD path to your LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
    tee -a $HOME/.bashrc &amp;gt; /dev/null &amp;lt;&amp;lt; EOT&lt;br /&gt;
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/grass/zstd/zstd-1.4.4/lib&lt;br /&gt;
    EOT&lt;br /&gt;
&lt;br /&gt;
The configure command could look like this&lt;br /&gt;
    ./configure \&lt;br /&gt;
        -prefix=$HOME/grass \&lt;br /&gt;
        --enable-64bit --with-fftw-includes=/path/to/fftw/include/ \&lt;br /&gt;
        --with-fftw-libs=/path/to/fftw/lib/ \&lt;br /&gt;
        --with-freetype-includes=$HOME/grass/freetypes/freetype-2.9.1/include/ \&lt;br /&gt;
        --with-netcdf --with-geos --with-blas --with-lapack --with-postgres \&lt;br /&gt;
        --with-zstd-includes=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-zstd-libs=$HOME/grass/zstd/zstd-1.4.4/lib/ \&lt;br /&gt;
        --with-gdal=/path/to/gdal-config  # This could be the path to a gdal version compiled from source&lt;br /&gt;
&lt;br /&gt;
Finally as usual:&lt;br /&gt;
    make; make install&lt;br /&gt;
    &lt;br /&gt;
    grass&lt;br /&gt;
&lt;br /&gt;
===== Gentoo =====&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-freetype=yes --with-freetype-includes=&amp;quot;/usr/include/freetype2/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
See also https://packages.gentoo.org/package/sci-geosciences/grass&lt;br /&gt;
&lt;br /&gt;
===== Funtoo =====&lt;br /&gt;
&lt;br /&gt;
{{MovedToTrac|FuntooLinux}}&lt;br /&gt;
&lt;br /&gt;
===== Fedora =====&lt;br /&gt;
&lt;br /&gt;
====== GRASS 8 on Fedora ======&lt;br /&gt;
&lt;br /&gt;
'''Preparation''' for the compilation of GRASS 8+ source code (F36+):&lt;br /&gt;
&lt;br /&gt;
  dnf install gcc gcc-c++ bison flex ncurses-devel gettext proj-devel \&lt;br /&gt;
              gdal gdal-devel sqlite-devel xml2 mesa-libGL-devel cairo-devel \&lt;br /&gt;
              fftw-devel mesa-libGLU-devel libXmu-devel libX11-devel geos geos-devel \&lt;br /&gt;
              libtiff-devel python3-devel numpy wxGTK-devel gawk git \&lt;br /&gt;
              python3-dateutil python3-imaging python3-matplotlib-wx doxygen python3-sphinx \&lt;br /&gt;
              libzstd-devel libzstd python3-six python3-numpy python3-wxpython4 \&lt;br /&gt;
              proj-data PDAL-devel PDAL-libs&lt;br /&gt;
&lt;br /&gt;
  # optionally also:  netcdf-devel postgresql-devel &lt;br /&gt;
  #                   atlas-devel lapack-devel lapack-devel &lt;br /&gt;
  #                   laszip laszip-devel&lt;br /&gt;
  #                   proj-data-at proj-data-au proj-data-be ...&lt;br /&gt;
&lt;br /&gt;
''Note 1: the optional ffmpeg-devel comes from the rpmfusion-free repository ([https://rpmfusion.org/Configuration/ configuration]).''&lt;br /&gt;
&lt;br /&gt;
'''Download''' and unpack the source code:&lt;br /&gt;
* GRASS 8: [https://grass.osgeo.org/grass84/source/snapshot/ weekly snapshot] - [https://github.com/OSGeo/grass/releases GitHub repository]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configure''': This is an example how to configure the source code on a Fedora system:&lt;br /&gt;
&lt;br /&gt;
  ./configure \&lt;br /&gt;
   --with-cxx \&lt;br /&gt;
   --with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
   --with-proj --with-proj-share=/usr/share/proj \&lt;br /&gt;
   --with-geos \&lt;br /&gt;
   --with-pdal \&lt;br /&gt;
   --with-sqlite \&lt;br /&gt;
   --with-nls \&lt;br /&gt;
   --with-wxwidgets=/usr/bin/wx-config \&lt;br /&gt;
   --with-fftw \&lt;br /&gt;
   --with-cairo --with-cairo-ldflags=-lfontconfig \&lt;br /&gt;
   --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
   --enable-largefile \&lt;br /&gt;
   --without-odbc&lt;br /&gt;
&lt;br /&gt;
''Extra 1:'' If you also want '''FFMPEG support''' - it requires 'dnf install fftw-devel' from the rpmfusion-free repository. Then add to the configuration lines above:&lt;br /&gt;
&lt;br /&gt;
     --with-ffmpeg --with-ffmpeg-includes=&amp;quot;/usr/include/ffmpeg /usr/include/ffmpeg/libav* /usr/include/ffmpeg/libpostproc /usr/include/ffmpeg/libswscale&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
''Extra 2:'' For '''LAPACK/BLAS support''' (addons i.spec.unmix, v.kriging etc), install &amp;quot;dnf install lapack lapack-devel blas blas-devel atlas atlas-devel&amp;quot;. Then add to the configuration lines above:&lt;br /&gt;
  --with-blas --with-blas-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
  --with-lapack --with-lapack-includes=/usr/include/atlas-x86_64-base/ \&lt;br /&gt;
&lt;br /&gt;
''Extra 3:'' For '''ZSTD support''' (Zstandard compression algorithm), first install &amp;quot;dnf install libzstd libzstd-devel zstd&amp;quot;. After installing the zstd related packages, add to the configuration lines above:&lt;br /&gt;
  --with-zstd \&lt;br /&gt;
&lt;br /&gt;
Finally '''compile''' the configured source code:&lt;br /&gt;
    make&lt;br /&gt;
   or on multicore (number depends of available cores):&lt;br /&gt;
    make -j4&lt;br /&gt;
   and&lt;br /&gt;
    make install # requires root permissions unless you become owner of /usr/local/&lt;br /&gt;
&lt;br /&gt;
Then use GRASS 8 and enjoy!&lt;br /&gt;
&lt;br /&gt;
   grass --version&lt;br /&gt;
&lt;br /&gt;
===== openSUSE =====&lt;br /&gt;
&lt;br /&gt;
To build GRASS on openSUSE:&lt;br /&gt;
&lt;br /&gt;
''Application:Geo'' repo to be added (see [https://software.opensuse.org//download.html?project=Application%3AGeo&amp;amp;package=gdal Install package Application:Geo]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# example for Leap 42 version:&lt;br /&gt;
sudo zypper addrepo https://download.opensuse.org/repositories/Application:Geo/openSUSE_Leap_42.3/Application:Geo.repo&lt;br /&gt;
sudo zypper refresh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RPM packages to be installed:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 sudo zypper install bison flex freetype2-devel fftw3-devel gcc-c++ \&lt;br /&gt;
   libgdal-devel libgeos-devel libjpeg-devel libpng-devel libtiff-devel \&lt;br /&gt;
   man proj libproj-devel readline-devel netcdf-devel ncurses-devel \&lt;br /&gt;
   mysql-devel postgresql-devel sqlite-devel unixODBC-devel \&lt;br /&gt;
   tcl-devel tk-devel xorg-x11-Mesa-devel libXmu-devel \&lt;br /&gt;
   python-numpy python-dateutil python-devel python-opengl \&lt;br /&gt;
   python-wxWidgets python-xml python-dateutil wxWidgets-devel \&lt;br /&gt;
   zlib-devel doxygen python-sphinx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source code configuration:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 ./configure \&lt;br /&gt;
 	--enable-largefile \&lt;br /&gt;
	--with-proj-share=/usr/share/proj \&lt;br /&gt;
	--with-cxx \&lt;br /&gt;
	--with-lapack=yes \&lt;br /&gt;
	--with-motif \&lt;br /&gt;
	--with-gdal=/usr/bin/gdal-config \&lt;br /&gt;
	--with-postgres --with-postgres-includes=/usr/include/pgsql \&lt;br /&gt;
	--with-mysql --with-mysql-includes=/usr/include/mysql \&lt;br /&gt;
	--with-fftw \&lt;br /&gt;
	--with-readline \&lt;br /&gt;
	--with-netcdf \&lt;br /&gt;
	--with-geos \&lt;br /&gt;
	--with-nls \&lt;br /&gt;
	--with-sqlite \&lt;br /&gt;
	--with-freetype \&lt;br /&gt;
	--with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
	--with-wxwidgets \&lt;br /&gt;
	--with-odbc \&lt;br /&gt;
	--with-python&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then compile with &amp;quot;make [-j2]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== RPM SPEC files =====&lt;br /&gt;
* [https://build.opensuse.org/package/show?package=grass&amp;amp;project=Application%3AGeo OpenSuSe]&lt;br /&gt;
* [https://pkgs.fedoraproject.org/cgit/rpms/grass.git/tree/grass.spec Fedora]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
==== macOS ====&lt;br /&gt;
&lt;br /&gt;
Compiling GRASS for macOS is not fundamentally different from for other *nix systems. It is on the contrary quite similar, but what differ is the lack of a default package management system for software GRASS depends on. This leaves the mac user to either: (1) compile the dependencies one-by-one; (2) compiling with one of the third-party package management systems avaliable; or (4) a combination thereof.&lt;br /&gt;
&lt;br /&gt;
If you are interested in installing a precompiled version, please check out the [https://grass.osgeo.org/download/software/mac-osx/ official download site].&lt;br /&gt;
&lt;br /&gt;
To date, maybe the easiest way to compile for Mac is by using [https://github.com/nilason/grass-conda GRASS app build script] which is based on the instructions below for building using Anaconda. It will install dependencies, package and install an app bundle with just a command in Terminal.&lt;br /&gt;
&lt;br /&gt;
===== Compilation and installation =====&lt;br /&gt;
&lt;br /&gt;
For more up-to-date instructions please read:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/nilason/grass-conda Compiling on macOS using Conda] (Intel / Apple silicon based machine M1)&lt;br /&gt;
* [[Compiling on macOS using Anaconda]]&lt;br /&gt;
* [[Compiling on macOS using Homebrew]]&lt;br /&gt;
* [[Compiling on macOS using MacPorts]]&lt;br /&gt;
&lt;br /&gt;
===== Legacy instructions =====&lt;br /&gt;
&lt;br /&gt;
The following compilation and installation instructions are rather outdated as a whole. They do, however, contain parts and snippets that still may be very instructive and useful.&lt;br /&gt;
&lt;br /&gt;
* [[Compiling on MacOSX]]&lt;br /&gt;
* [[Compiling on MacOSX using Fink]]&lt;br /&gt;
* [https://web.archive.org/web/20180718005252/https://www.kyngchaos.com/software/frameworks#build_scripts build scripts for dependencies]&lt;br /&gt;
&lt;br /&gt;
Troubleshooting:&lt;br /&gt;
* solving errors at starting GRASS: [[MacOSX GRASS errors]]&lt;br /&gt;
&lt;br /&gt;
==== FreeBSD / NetBSD ====&lt;br /&gt;
&lt;br /&gt;
The recommended compiler tools are GCC, GNU make, GNU coreutils (for install), and flex. All are available through the respective package managing tools (pkg_add for FreeBSD and pkgin install for NetBSD) and for recent *BSD versions most likely installed by default.&lt;br /&gt;
&lt;br /&gt;
GRASS 8 should compile on FreeBSD and NetBSD.&lt;br /&gt;
&lt;br /&gt;
It is highly recommended to install GDAL/OGR and PROJ first. These libraries and tools are available as [https://www.freebsd.org/ports/ ports for FreeBSD] and [https://www.pkgsrc.org/ packages for NetBSD].&lt;br /&gt;
&lt;br /&gt;
Optional functionality is listed with ''./configure --help'', and related libraries and tools might need to be installed first.&lt;br /&gt;
&lt;br /&gt;
You then may need to edit include/Make/Platform.make and set&lt;br /&gt;
 ICONVLIB            = -liconv&lt;br /&gt;
&lt;br /&gt;
==== AIX ====&lt;br /&gt;
&lt;br /&gt;
A recent [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81) and GNU coreutils are required. These are available with the [https://www-03.ibm.com/systems/power/software/aix/linux/toolbox/download.html IBM AIX toolbox] or through third-party AIX software repositories, e.g. [https://www.bullfreeware.com/ bullfreeware] and [https://www.perzl.org/aix/ perzl.org]. Note that 'make' does not work, only 'gmake' works. &lt;br /&gt;
&lt;br /&gt;
General instructions to compile on AIX are e.g. [https://www.perzl.org/aix/index.php?n=Main.Instructions here]&lt;br /&gt;
&lt;br /&gt;
On AIX, compilation results by default in 32 bit applications and static libraries. The [https://developer.ibm.com/components/aix/ IBM documentation] explains how to build 64 bit applications and shared libraries with GCC.&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the IBM xlc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 5.x&lt;br /&gt;
&lt;br /&gt;
export LIBPATH=/opt/freeware/lib64:/opt/freeware/lib&lt;br /&gt;
# make 'ar' happy&lt;br /&gt;
export OBJECT_MODE=64&lt;br /&gt;
&lt;br /&gt;
PREFIX=$HOME/private/bin&lt;br /&gt;
./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --disable-shared \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GRASS 8: Using the GNU gcc compiler:'''&lt;br /&gt;
&lt;br /&gt;
Get and install (in this order):&lt;br /&gt;
* if needed, [ftp://ftp.gnu.org/gnu/tar/ GNU tar]&lt;br /&gt;
* if needed (the name is often 'gmake' and not 'make') [ftp://ftp.gnu.org/gnu/make/ GNU make] (&amp;gt;= 3.81)&lt;br /&gt;
* [https://www.sqlite.org SQLite]&lt;br /&gt;
* [https://trac.osgeo.org/proj/ PROJ.4] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://www.gdal.org GDAL] (for ./configure parameters, see [[Talk:Compile and Install|here]])&lt;br /&gt;
* [https://grass.osgeo.org/grass84/source/snapshot/ GRASS 8]&lt;br /&gt;
&lt;br /&gt;
The environment variables and configure command that worked for AIX 7.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## AIX 7.x&lt;br /&gt;
export CC=&amp;quot;gcc&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;g++&amp;quot;&lt;br /&gt;
PREFIX=$HOME/bin&lt;br /&gt;
&lt;br /&gt;
LDFLAGS=&amp;quot;-Wl,-bsvr4,-R,/opt/freeware/lib -L/opt/freeware/lib&amp;quot; CPPFLAGS=&amp;quot;-I/opt/freeware/include&amp;quot; ./configure \&lt;br /&gt;
  --prefix=$PREFIX \&lt;br /&gt;
  --enable-shared \&lt;br /&gt;
  --with-includes=/opt/freeware/include --with-libs=/opt/freeware/lib \&lt;br /&gt;
  --with-cxx \&lt;br /&gt;
  --with-proj-includes=$PREFIX/include/ \&lt;br /&gt;
  --with-proj-libs=$PREFIX/lib/ \&lt;br /&gt;
  --with-proj-share=$PREFIX/share/proj/ \&lt;br /&gt;
  --with-gdal=$PREFIX/bin/gdal-config \&lt;br /&gt;
  --with-sqlite \&lt;br /&gt;
  --with-sqlite-libs=$PREFIX/lib --with-sqlite-includes=$PREFIX/include \&lt;br /&gt;
  --with-png=no \&lt;br /&gt;
  --with-tiff=no \&lt;br /&gt;
  --with-fftw=no \&lt;br /&gt;
  --with-cairo=no \&lt;br /&gt;
  --with-opengl=no \&lt;br /&gt;
  --with-freetype=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MS-Windows ====&lt;br /&gt;
&lt;br /&gt;
See also [[WinGRASS Current Status]] for latest updates.&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/native =====&lt;br /&gt;
&lt;br /&gt;
GRASS on Windows using a standalone installer. It is still MinGW based (we are going to move this to CMake in 2024+).&lt;br /&gt;
&lt;br /&gt;
Instructions to compile from source code:&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/CompileOnWindows GRASS Windows Native Binary Building Guide]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/OSGeo4W =====&lt;br /&gt;
&lt;br /&gt;
OSGeo4W is an installer for a broad set of open source geospatial software packages including GRASS as well as many other packages (QGIS, GDAL/OGR, and more).&lt;br /&gt;
&lt;br /&gt;
* See [https://trac.osgeo.org/osgeo4w/ OSGeo4W]&lt;br /&gt;
&lt;br /&gt;
===== MS-Windows/Cygwin =====&lt;br /&gt;
&lt;br /&gt;
* See the [[Cygwin]] wiki pages&lt;br /&gt;
&lt;br /&gt;
=== Common problems and solutions ===&lt;br /&gt;
&lt;br /&gt;
During compilation, error can occur if certain packages are not installed. Here a list of problems with solution:&lt;br /&gt;
&lt;br /&gt;
* error: X11/Xlib.h: No such file or directory&lt;br /&gt;
** this suggests that you don't have the X headers installed&lt;br /&gt;
** Solution: Install the libx11-dev package&lt;br /&gt;
&lt;br /&gt;
* error:  g.list: error while loading shared libraries: libgdal1.6.0.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
** this error appears in the shell right after the user clicks GUI's &amp;quot;Start GRASS&amp;quot; button. The GUI shows an error about geographic extent and gets closed afterwards.&lt;br /&gt;
** It happens when you launch bin.i686 executable on 64bit system. Be careful and choose the right architecture.&lt;br /&gt;
&lt;br /&gt;
* error: lib/python/ctypes&lt;br /&gt;
** This error appears during the compilation: &amp;lt;code&amp;gt;free(): invalid pointer Aborted (core dumped)&amp;lt;/code&amp;gt;&lt;br /&gt;
** It happens when you have multiple &amp;lt;code&amp;gt;libproj&amp;lt;/code&amp;gt; versions on your system (check it with command &amp;lt;code&amp;gt;ldd PATH_TO_GRASS_INSTALL/lib/libgrass_gproj.so | grep proj&amp;lt;/code&amp;gt; - when this is not your problem, you should obtain exactly one result)&lt;br /&gt;
** Solution: Try to reinstall &amp;lt;code&amp;gt;libproj-dev&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;proj-data&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Static compilation ===&lt;br /&gt;
&lt;br /&gt;
In order to get static rather than dynamically linked binaries, configure like this:&lt;br /&gt;
&lt;br /&gt;
  ./configure --disable-shared --enable-static&lt;br /&gt;
&lt;br /&gt;
This will however break the wxGUI and GRASS 8 completely because &amp;quot;ctypes&amp;quot; wants to link against shared libs, or there is something in the static libs that &amp;quot;ctypes&amp;quot; does not like.&lt;br /&gt;
&lt;br /&gt;
=== Optimization ===&lt;br /&gt;
&lt;br /&gt;
GCC and other compilers support [https://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/Optimize-Options.html#Optimize-Options optimization]&lt;br /&gt;
&lt;br /&gt;
If you would like to set compiler optimisations, for a possibly faster binary, type (don't enter a &amp;quot;;&amp;quot; anywhere):&lt;br /&gt;
&lt;br /&gt;
        CFLAGS=-O ./configure&lt;br /&gt;
or,&lt;br /&gt;
        setenv CFLAGS -O&lt;br /&gt;
        ./configure&lt;br /&gt;
&lt;br /&gt;
whichever works on your shell. Use -O2 instead of -O if your compiler supports this (note: O is the letter, not zero). Using the &amp;quot;gcc&amp;quot; compiler, you can also specify processor specific flags (examples, please suggest better settings to us):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=athlon -O2&amp;quot; # AMD Athlon processor with code optimisations&lt;br /&gt;
  CFLAGS=&amp;quot;-march=amdfam10&amp;quot;  # AMD Phenom II X4 64bit processor with gcc &amp;gt;=4.3&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium&amp;quot;    # Intel Pentium processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mcpu=pentium4&amp;quot;   # Intel Pentium4 processor&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -msse -msse2 -mfpmath=sse -minline-all-stringops&amp;quot; # Intel XEON 64bit processor&lt;br /&gt;
  CFLAGS=&amp;quot;-mtune=nocona -m64 -minline-all-stringops&amp;quot;            # Intel Pentium 64bit processor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To find out optional CFLAGS for your platform, enter:&lt;br /&gt;
  gcc -dumpspecs&lt;br /&gt;
&lt;br /&gt;
See also: https://gcc.gnu.org/&lt;br /&gt;
&lt;br /&gt;
A real fast GRASS version (and small binaries) will be created with LDFLAGS set to &amp;quot;stripping&amp;quot; (but this disables debugging):&lt;br /&gt;
&lt;br /&gt;
  CFLAGS=&amp;quot;-O2 -mcpu=&amp;lt;cpu_see_above&amp;gt; -Wall&amp;quot; LDFLAGS=&amp;quot;-s&amp;quot; ./configure&lt;br /&gt;
&lt;br /&gt;
=== Configure options and their meanings ===&lt;br /&gt;
&lt;br /&gt;
For configure there are many options and some GRASS modules are built only if some options are set. Here are listed common configuration options with short explanation.&lt;br /&gt;
&lt;br /&gt;
* --prefix=/path - Sets path where GRASS will be installed. GRASS will reside in /path/grass-version.&lt;br /&gt;
* --enable-largefile - Enables large (&amp;gt;2Gb on 32bit systems) support. For current large file support status look at [[Large File Support]] page.&lt;br /&gt;
* --with-cxx - Enables compilation of C++ code. Required for r.terraflow module.&lt;br /&gt;
* --with-readline - Enables readline support. If readline is enabled, you can use its history/editing facilities when entering r.mapcalc expressions on stdin.&lt;br /&gt;
* --with-glw - Enables GLw support. The GLw library provides OpenGL &amp;quot;canvas&amp;quot; widgets for Athena and Motif. &lt;br /&gt;
 &lt;br /&gt;
 That switch is unnecessary for normal compilation. It's only&lt;br /&gt;
 required for r3.showdspf, which isn't normally built; if you &lt;br /&gt;
 want it, you have build it manually &lt;br /&gt;
 (e.g. &amp;quot;make -C raster3d/r3.showdspf&amp;quot;).&lt;br /&gt;
 As similar functionality is now provided by NVIZ, r3.showdspf&lt;br /&gt;
 is deprecated.&lt;br /&gt;
 r3.showdspf uses the Motif widget (so you also need a &lt;br /&gt;
 Motif library, e.g. Lesstif or OpenMotif).&lt;br /&gt;
 [https://grass.itc.it/pipermail/grassuser/2006-December/037475.html Glynn Clements at GRASS-user mailing list]&lt;br /&gt;
&lt;br /&gt;
=== Parallelized compilation on multi-core CPUs ===&lt;br /&gt;
&lt;br /&gt;
You can dramatically accelerate the compilation of the GRASS code with the -j flag of &amp;quot;make&amp;quot; if you have a multi-core CPU system. This determines the maximum number of jobs to have running at once, so cores don't have to sit idle waiting for jobs on other cores to complete. A good rule of thumb for this value is &amp;lt;tt&amp;gt;number_of_cores * 1.5&amp;lt;/tt&amp;gt;, but note that setting any higher than the actual number of cores will only affect the timing slightly. For example, on a dual-core processor:&lt;br /&gt;
  make -j 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- CFLAGS=&amp;quot;-pipe&amp;quot; doesn't seem to help much --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GRASS-GDAL plugin ==&lt;br /&gt;
&lt;br /&gt;
* see [[Compile and install GRASS and QGIS with GDAL/OGR Plugin]]&lt;br /&gt;
&lt;br /&gt;
== Addons ==&lt;br /&gt;
&lt;br /&gt;
Please note that the installation of [https://grass.osgeo.org/grass-stable/manuals/addons/ GRASS addons] can be easily done with the {{cmd|g.extension}} manager. The compile instructions below are aiming at own development.&lt;br /&gt;
&lt;br /&gt;
=== Compiled modules ===&lt;br /&gt;
&lt;br /&gt;
This is the general way which works for C modules as well as scripts (Python or Shell/Bash modules) which has HTML documentation.&lt;br /&gt;
&lt;br /&gt;
'''Requirements:'''&lt;br /&gt;
&lt;br /&gt;
Either:&lt;br /&gt;
* a binary GRASS package, or&lt;br /&gt;
* source code which has been prepared with:&lt;br /&gt;
    ./configure [opionally flags]&lt;br /&gt;
    make libs&lt;br /&gt;
&lt;br /&gt;
Each of the [[GRASS_AddOns|addon]] modules should come with a Makefile. To compile it, just run:&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;/path/to/grass84&amp;lt;/tt&amp;gt; has to be absolute, not relative.&lt;br /&gt;
&lt;br /&gt;
If using Bash it may be useful to set that up as an alias:&lt;br /&gt;
    alias gmake64='make MODULE_TOPDIR=/path/to/grass84/'&lt;br /&gt;
&lt;br /&gt;
Installation (perhaps requires &amp;quot;sudo&amp;quot;):&lt;br /&gt;
    make MODULE_TOPDIR=/path/to/grass84/ install&lt;br /&gt;
&lt;br /&gt;
Note: Compiled addons may require a re-compilation if you changed/updated your GRASS standard binaries.&lt;br /&gt;
&lt;br /&gt;
==== If binary comes with a -dev package ====&lt;br /&gt;
&lt;br /&gt;
''(work in progress, this text states how it eventually will be :)''&lt;br /&gt;
Nowadays one does not need to the source code, nor compiling GRASS by oneself to be able to add add-ons. On Debian, you can just install the grass-dev package and then run:&lt;br /&gt;
 make MODULE_TOPDIR=/usr/lib/grass84/ INST_DIR=/usr/lib/grass84/&lt;br /&gt;
&lt;br /&gt;
The grass-dev package essentially provides GRASS's &amp;lt;tt&amp;gt;include&amp;lt;/tt&amp;gt; header files and Make configuration files.&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
&lt;br /&gt;
If the addon module is a script, it is sufficient to copy it into the (GRASS binaries) path somewhere. Alternatively, install addons into a separate GRASS addons binaries/scripts directory which is easier to maintain. It avoids getting clobbered every time you reinstall GRASS. To use these separately stored scripts, set and export the GRASS_ADDON_PATH environment variable before starting GRASS and it will automatically be added to the module search path (see the {{cmd|variables}} help page). To simplify this, do for example:&lt;br /&gt;
&lt;br /&gt;
 # add in $HOME/.bashrc:&lt;br /&gt;
 GRASS_ADDON_PATH=/usr/local/grass/addons/&lt;br /&gt;
 export GRASS_ADDON_PATH&lt;br /&gt;
&lt;br /&gt;
Make sure that the script is executable, then just call it in GRASS typing the filename. Python scripts need to be called writing the extension as well, like:&lt;br /&gt;
 &lt;br /&gt;
 GRASS (nc_spm):~ &amp;gt; v.krige.py&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing&amp;diff=28546</id>
		<title>Temporal data processing</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing&amp;diff=28546"/>
		<updated>2025-07-02T08:51:36Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TGRASS is the temporal enabled GRASS GIS.&lt;br /&gt;
TGRASS is completely metadata based, i.e. it does not change any data but simply handles the organization of raster, vector, raster3D maps actually stored in a GRASS GIS mapset by registering in an additional internal database. This is done specifically for managing temporal and spatial extent including temporal topology.&lt;br /&gt;
&lt;br /&gt;
Manual overview: https://grass.osgeo.org/grass-stable/manuals/temporalintro.html&lt;br /&gt;
&lt;br /&gt;
== Terminology Overview ==&lt;br /&gt;
&lt;br /&gt;
* Space time raster datasets ('''strds''') are designed to manage raster map time series. Modules that process strds have the naming prefix ''t.rast''.&lt;br /&gt;
* Space time 3D raster datasets ('''str3ds''') are designed to manage 3D raster map time series. Modules that process str3ds have the naming prefix ''t.rast3d''.&lt;br /&gt;
* Space time vector datasets ('''stvds''') are designed to manage vector map time series. Modules that process stvds have the naming prefix ''t.vect''.&lt;br /&gt;
&lt;br /&gt;
== Workflow overview ==&lt;br /&gt;
&lt;br /&gt;
# create an empty space time datasets: strds, str3ds, or stvds ({{cmd|t.create}})&lt;br /&gt;
# register the GRASS GIS maps ({{cmd|t.register}})&lt;br /&gt;
# check the generated space time datasets ({{cmd|t.list}}, {{cmd|t.info}})&lt;br /&gt;
# do your analysis: {{cmd|t.rast.aggregate}}, {{cmd|t.info}}, {{cmd|t.rast.univar}}, {{cmd|t.vect.univar}}, ... so many more!&lt;br /&gt;
&lt;br /&gt;
== Example workflow for a Chlorophyll-a MODIS time series ==&lt;br /&gt;
&lt;br /&gt;
The following examples are based on a series of MODIS L3 Chlorophyll-a product that is freely available at the [http://oceancolor.gsfc.nasa.gov/cgi/l3?sen=A&amp;amp;per=MO&amp;amp;prd=CHL_chlor_a ocean color] site. So, say we download the SMI 8-day composite product at 4.6 km resolution for the period 2003-2013. That is a 506 set of images, 46 per year. Data comes as compressed HDF4 files. Chlorophyll products file names look like this: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;A20030012003008.L3m_8D_CHL_chlor_a_4km&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
where, &lt;br /&gt;
&lt;br /&gt;
  A: MODIS/Aqua&lt;br /&gt;
  2003: Year at start&lt;br /&gt;
  001: Julian day at start&lt;br /&gt;
  2003: Year at end&lt;br /&gt;
  008: Julian day at end&lt;br /&gt;
  L3m: Level 3 data, mapped (Projection: Plate carrée)&lt;br /&gt;
  8D: 8 day composition&lt;br /&gt;
  CHL: Chlorophyll a concentration product&lt;br /&gt;
  chlor_a: algorithm used 10^(a0 + a1*X + a2*X^2 + a3*X^3 + a4*X^4) &lt;br /&gt;
  4km: 4.6km pixel size (8640x4320 image, 2.5 minute resolution)&lt;br /&gt;
&lt;br /&gt;
We now decompress files and check metadata &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Go to where the data is and decompress&lt;br /&gt;
  find -iname '*.bz2' -exec bzip2 -d {} \; &lt;br /&gt;
# Check file meta-data (GDAL utilities)&lt;br /&gt;
  gdalinfo A20030012003008.L3m_8D_CHL_chlor_a_4km&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next step is to import all 506 images into GRASS. You can use {{cmd|r.in.gdal}} or {{cmd|r.external}} for that.&lt;br /&gt;
Note that global Cl-a images as downloaded from [http://oceancolor.gsfc.nasa.gov/cgi/l3?sen=A&amp;amp;per=MO&amp;amp;prd=CHL_chlor_a ocean color] site are ~150 mb each (disk space issues!). Here, 3 different options:&lt;br /&gt;
&lt;br /&gt;
* import global images (506 images, 150 Mb each) with r.in.gdal, resize to study area and remove global files&lt;br /&gt;
* set projection and extension, and resize to study area with gdal_translate, and import already resized images with r.in.gdal&lt;br /&gt;
* import global images (506 images, 150 Mb each) with r.external, resize to study area and remove global files, as showed below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# define region extension&lt;br /&gt;
g.region -p n=-38 s=-55 w=-70 e=-56&lt;br /&gt;
&lt;br /&gt;
suffix=_tmp&lt;br /&gt;
for map in *chlor* ; do&lt;br /&gt;
    r.external input=$map output=${map}${suffix} -o&lt;br /&gt;
    r.mapcalc expression=&amp;quot;$map = ${map}${suffix}&amp;quot;&lt;br /&gt;
    g.remove type=raster name=${map}${suffix}&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once we have maps inside GRASS GIS database we can start the temporal processing. If this is the first time you'll use temporal modules, &lt;br /&gt;
you need to run &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.connect -d &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to set the default temporal GIS database connection for the current mapset. If the connection is not initially set with {{cmd|t.connect}}, any temporal module that you try to run for the first time will first set the connection to the temporal database for you. The default TGIS database of type ''sqlite3'' is located in the PERMANENT mapset directory. Temporal GIS content from all created mapsets will be stored there.&lt;br /&gt;
&lt;br /&gt;
=== Creating a STRDS and registering maps ===&lt;br /&gt;
&lt;br /&gt;
'''Creating a STRDS'''&lt;br /&gt;
&lt;br /&gt;
First step is to '''create a space time dataset''' by means of {{cmd|t.create}}. As an example, let us create a strds for the Chlorophyll-a (Cl-a) time series. We need to define the name and semantic type of the new space time dataset, its title and a description. By default a raster dataset is created with absolute time (Gregorian calendar). We can change that according to our needs with type and temporaltype options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.create type=strds temporaltype=absolute output=cla \&lt;br /&gt;
 title=&amp;quot;Chlorophyll-a concentration&amp;quot; \&lt;br /&gt;
 description=&amp;quot;MODIS L3 Chlorophyll-a concentration for Argentinian sea&amp;quot; \&lt;br /&gt;
 semantictype=mean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Registering maps'''&lt;br /&gt;
&lt;br /&gt;
Then, we '''register the maps''' in the strds using {{cmd|t.register}}. This module assigns timestamps to raster, 3D raster and vector maps and register them in the temporal database and into space time datasets. Existing timestamps can be read and used by t.register. Note that this is a metadata based registration, nothing is imported into GRASS GIS since the maps are already present in the location (hence, no duplication occurs).&lt;br /&gt;
&lt;br /&gt;
This module (and TGRASS in general) supports '''absolute time''' and '''relative time'''. The ''absolute'' temporal type refers to a fixed date or interval in the Gregorian calendar, while the ''relative'' temporal type refers to data without fixed time stamps (e.g., sequential maps used to calculate multi-decadal averages). Refer to the [http://www.geostat-course.org/system/files/Presentation_0.pdf TGRASS overview slides] for background.&lt;br /&gt;
&lt;br /&gt;
Maps can be registered by command line argument (i.e., a list of comma separated map names) or using an input file. The start time, end time and a temporal increment can be provided either by command line or in the input file. End time and increment are mutually exclusive. Maps can be registered in several space time datasets using the same timestamp. For a more detailed explanation and examples on how to register maps in stds, see also [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/maps_registration maps registration] wiki page. &lt;br /&gt;
&lt;br /&gt;
Start time and end time with absolute time must be provided using the format yyyy-mm-dd HH:MM:SS +HHMM. It is also supported to specify the date yyyy-mm-dd only. In case of relative time, the temporal unit (years, months, days, hours, minutes or seconds) must be provided. The relative start time, end time and the increment are integers (see also {{cmd|t.register}}).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: with -i we create intervals (start and end time) spanning the given increment, and starting from start.&lt;br /&gt;
t.register -i type=raster input=cla \&lt;br /&gt;
 maps=`g.list raster pattern=&amp;quot;*_chlor_*&amp;quot; separator=comma` \&lt;br /&gt;
 start=&amp;quot;2003-01-01&amp;quot; \&lt;br /&gt;
 increment=&amp;quot;8 days&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Dealing with weekly data'''&lt;br /&gt;
&lt;br /&gt;
While the former would have been the simplest solution, our 8-day products have a problem: in this example the last image of each year is not a product of an 8-day composition, but 4 or 5-day. Then, when using the increment parameter, dates (and consequently, intervals) are not set properly.&lt;br /&gt;
The solution is to create a list of maps, with their respective start and end date. As the filenames contain information regarding year and DOY (day of year), we can use the following Python script to '''read filenames and transform DOY to calendar dates''' (Thanks Soeren!). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Script to extract the input file for t.register from map names&lt;br /&gt;
# run in python&lt;br /&gt;
# modify to your needs&lt;br /&gt;
&lt;br /&gt;
from os import walk&lt;br /&gt;
f = []&lt;br /&gt;
for (dirpath, dirnames, filenames) in walk(&amp;quot;/path/to/the/maps&amp;quot;):&lt;br /&gt;
    f.extend(filenames)&lt;br /&gt;
    break&lt;br /&gt;
# to order the list    &lt;br /&gt;
f.sort() &lt;br /&gt;
&lt;br /&gt;
input_list=[]&lt;br /&gt;
&lt;br /&gt;
import datetime&lt;br /&gt;
for map_name in f:&lt;br /&gt;
  start_year = int(map_name[1:5])&lt;br /&gt;
  start_day  = int(map_name[5:8])&lt;br /&gt;
  end_year   = int(map_name[8:12])&lt;br /&gt;
  end_day    = int(map_name[12:15])&lt;br /&gt;
  start = datetime.datetime(start_year, 1, 1) + datetime.timedelta(start_day - 1)&lt;br /&gt;
  end = datetime.datetime(int(end_year), 1, 1) + datetime.timedelta(end_day)&lt;br /&gt;
  map_list = map_name + '|' + str(start) + '|' + str(end)&lt;br /&gt;
  print map_list&lt;br /&gt;
  input_list.append(map_list)&lt;br /&gt;
&lt;br /&gt;
print input_list&lt;br /&gt;
&lt;br /&gt;
txt = '\n' .join(input_list)&lt;br /&gt;
f = open(&amp;quot;input_list_cla.txt&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
f.write(txt)&lt;br /&gt;
f.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the number of characters in the filenames and the datetime library in Python, you can convert DOY in the filenames into start_time and end_time as in the file you need to pass to {{cmd|t.register}}:&lt;br /&gt;
&lt;br /&gt;
  A20030012003008.L3m_8D_CHL_chlor_a_4km_arg|2003-01-01 00:00:00|2003-01-09 00:00:00&lt;br /&gt;
  A20030092003016.L3m_8D_CHL_chlor_a_4km_arg|2003-01-09 00:00:00|2003-01-17 00:00:00&lt;br /&gt;
  A20030172003024.L3m_8D_CHL_chlor_a_4km_arg|2003-01-17 00:00:00|2003-01-25 00:00:00&lt;br /&gt;
  ...&lt;br /&gt;
  A20133452013352.L3m_8D_CHL_chlor_a_4km_arg|2013-12-11 00:00:00|2013-12-19 00:00:00&lt;br /&gt;
  A20133532013360.L3m_8D_CHL_chlor_a_4km_arg|2013-12-19 00:00:00|2013-12-27 00:00:00&lt;br /&gt;
  A20133612013365.L3m_8D_CHL_chlor_a_4km_arg|2013-12-27 00:00:00|2014-01-01 00:00:00&lt;br /&gt;
&lt;br /&gt;
and then, the command would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.register --o type=raster input=cla file=input_list_cla.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we are providing start and end time along with map names, we don't need to use the -i flag, neither set start nor increment options because that information is already contained in the file. &lt;br /&gt;
&lt;br /&gt;
'''Assign a color table'''&lt;br /&gt;
&lt;br /&gt;
We can also set a color table for all maps in the strds with {{cmd|t.rast.colors}}: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# using a predetermined color table&lt;br /&gt;
t.rast.colors input=cla color=bcyr&lt;br /&gt;
#using your dedicated color table&lt;br /&gt;
t.rast.colors input=cla rules=path/to/your/color_table&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further examples of '''extracting timestamps from map names''' can be found here: [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/maps_registration maps registration] wiki page.&lt;br /&gt;
&lt;br /&gt;
=== Getting some basic info and statistics ===&lt;br /&gt;
&lt;br /&gt;
We now check the space time data sets we have in our mapset with {{cmd|t.list}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.list type=strds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and get information about our recently created strds. See {{cmd|t.info}} for additional uses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.info type=strds input=cla &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  +-------------------- Space Time Raster Dataset -----------------------------+&lt;br /&gt;
  |                                                                            |&lt;br /&gt;
  +-------------------- Basic information -------------------------------------+&lt;br /&gt;
  | Id: ........................ cla@clorofila&lt;br /&gt;
  | Name: ...................... cla&lt;br /&gt;
  | Mapset: .................... clorofila&lt;br /&gt;
  | Creator: ................... veroandreo&lt;br /&gt;
  | Temporal type: ............. absolute&lt;br /&gt;
  | Creation time: ............. 2014-04-29 14:23:00.579342&lt;br /&gt;
  | Modification time:.......... 2014-05-12 09:15:08.917309&lt;br /&gt;
  | Semantic type:.............. mean&lt;br /&gt;
  +-------------------- Absolute time -----------------------------------------+&lt;br /&gt;
  | Start time:................. 2003-01-01 00:00:00&lt;br /&gt;
  | End time:................... 2014-01-01 00:00:00&lt;br /&gt;
  | Granularity:................ 1 day&lt;br /&gt;
  | Temporal type of maps:...... interval&lt;br /&gt;
  +-------------------- Spatial extent ----------------------------------------+&lt;br /&gt;
  | North:...................... -38.0&lt;br /&gt;
  | South:...................... -55.0&lt;br /&gt;
  | East:.. .................... -55.0&lt;br /&gt;
  | West:....................... -70.0&lt;br /&gt;
  | Top:........................ 0.0&lt;br /&gt;
  | Bottom:..................... 0.0&lt;br /&gt;
  +-------------------- Metadata information ----------------------------------+&lt;br /&gt;
  | Raster register table:...... raster_map_register_91ba57d5f0924f4fa0bd7176a1b39b2f&lt;br /&gt;
  | North-South resolution min:. 0.041667&lt;br /&gt;
  | North-South resolution max:. 0.041667&lt;br /&gt;
  | East-west resolution min:... 0.041667&lt;br /&gt;
  | East-west resolution max:... 0.041667&lt;br /&gt;
  | Minimum value min:.......... 0.02925&lt;br /&gt;
  | Minimum value max:.......... 0.26472&lt;br /&gt;
  | Maximum value min:.......... 5.2104&lt;br /&gt;
  | Maximum value max:.......... 99.953934&lt;br /&gt;
  | Aggregation type:........... None&lt;br /&gt;
  | Number of registered maps:.. 506&lt;br /&gt;
  |&lt;br /&gt;
  | Title:&lt;br /&gt;
  | Chlorophyll-a&lt;br /&gt;
  | Description:&lt;br /&gt;
  | Concentracion de Clorofila a&lt;br /&gt;
  | Command history:&lt;br /&gt;
  | # 2014-04-29 14:23:00 &lt;br /&gt;
  | t.create type=&amp;quot;strds&amp;quot; temporaltype=&amp;quot;absolute&amp;quot;&lt;br /&gt;
  |     output=&amp;quot;cla&amp;quot; title=&amp;quot;Chlorophyll-a&amp;quot;&lt;br /&gt;
  |     description=&amp;quot;Concentracion de Clorofila a&amp;quot; --o&lt;br /&gt;
  | # 2014-04-29 14:23:23 &lt;br /&gt;
  | t.register --o type=&amp;quot;rast&amp;quot; input=&amp;quot;cla&amp;quot;&lt;br /&gt;
  |     file=&amp;quot;input_list_cla.txt&amp;quot;&lt;br /&gt;
  | &lt;br /&gt;
  +----------------------------------------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
Now, we get univariate statistics from the non-null cells for each registered raster map of the strds. For that matter we use {{cmd|t.rast.univar}} which, by default, returns the name of the map, the start and end date of dataset and the following values: ''mean, minimum and maximum vale, mean_of_abs, standard deviation, variance, coeff_var, number of null cells, total number of cell''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.univar input=cla&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or, you can send the output to a text file using&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.univar input=cla separator=comma output=stats_cla.csv&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file &amp;quot;stats_cla.csv&amp;quot; you can now open in a spreadsheet or statistical software for inspection and plotting.&lt;br /&gt;
&lt;br /&gt;
=== Listing maps and selections ===&lt;br /&gt;
&lt;br /&gt;
The module {{cmd|t.rast.list}} allows you to list all the maps registered in a strds or a selection of them and, provides options for different listing methods, sorting of the list, information to print and so on. The ''where'' option in t.rast.list allows to perform different selections of maps to list. The ''columns'' that can be used to perform these selections are: ''id, name, creator, mapset, temporal_type, creation_time, start_time, end_time, north, south, west, east, nsres, ewres, cols, rows, number_of_cells, min and max''. (Note that for vector time series, i.e. stvds, the columns in {{cmd|t.vect.list}} differ from those for strds. You can check that with &amp;lt;code&amp;gt;t.vect.list --help&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=cla method=gran granule=&amp;quot;1 month&amp;quot;&lt;br /&gt;
# this will give one image every one month, 3 months, 1 year, or the granule you choose&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla order=min columns=id,name,start_time,min where=&amp;quot;min &amp;lt;= '0.05'&amp;quot; &lt;br /&gt;
# this will order by minimum value all the maps in the strds that have a minimum value lower than or equal to 0.05&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla order=max columns=name,start_time,max where=&amp;quot;max &amp;gt; '10.0'&amp;quot;&lt;br /&gt;
# maps ordered by maximum value in which maximum value is higher than 10.&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;start_time &amp;gt;= '2003-01' and start_time &amp;lt;= '2003-06'&amp;quot; &lt;br /&gt;
# all the maps in the first 6 month of the time series&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;strftime('%m', start_time)='01'&amp;quot;&lt;br /&gt;
# all the maps from January&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;strftime('%m-%d', start_time)='01-01'&amp;quot;&lt;br /&gt;
# all the maps from January, 1st&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;strftime('%w', start_time)='1'&amp;quot;&lt;br /&gt;
# all Mondays in the time series (Sunday is 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you have monthly (instead of 8-day products) data and you want to list all January maps, then you can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;start_time=datetime(start_time, 'start of year', ' 0 month')&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: '''Do not forget to use single quotes around date''', neither in {{cmd|t.rast.list}} nor in any other of the t.* modules offering the ''where'' option, because the clause will be ignored (i.e.: no selection performed) and no warning nor error will be printed.&lt;br /&gt;
&lt;br /&gt;
=== Visualization ===&lt;br /&gt;
&lt;br /&gt;
There are different visualization options for strds.&lt;br /&gt;
&lt;br /&gt;
* {{cmd|g.gui.timeline}} allows to compare temporal datasets by displaying their temporal extents in a plot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# only temporal extent&lt;br /&gt;
g.gui.timeline inputs=cla&lt;br /&gt;
# temporal and spatio-temporal extent&lt;br /&gt;
g.gui.timeline -3 inputs=cla&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Cla strds.png|center|thumb|560px|Temporal and spatio-temporal extent of cla strds.]]&lt;br /&gt;
&lt;br /&gt;
* {{cmd|g.gui.tplot}} allows to see the values of one or more temporal datasets for a queried point defined by a coordinate pair.&lt;br /&gt;
&lt;br /&gt;
Steps to use this module are:&lt;br /&gt;
&lt;br /&gt;
# Select strds&lt;br /&gt;
# Select pair of coordinates (east,north) or mark a point in the map&lt;br /&gt;
# Hit Draw&lt;br /&gt;
# Customize plot as desired&lt;br /&gt;
# Save&lt;br /&gt;
&lt;br /&gt;
[[Image:Output gguitplot.png|center|thumb|800px|Time series plot (Chlorophyll vs Time) for a certain coordinate pair in the study area]]&lt;br /&gt;
&lt;br /&gt;
* {{cmd|g.gui.animation}} is the tool for animating a series of raster and vector maps or a space time raster or vector dataset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g.gui.animation strds=cla_monthly_average&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Grass70 temporal chlorophyll anim small.gif|framed|center|Monthly mean chlorophyll-a concentration]]&lt;br /&gt;
&lt;br /&gt;
=== Aggregation ===&lt;br /&gt;
&lt;br /&gt;
For aggregations of data with different methods and different granularities, there are two very useful commands: &lt;br /&gt;
&lt;br /&gt;
* {{cmd|t.rast.series}} that applies different aggregation methods from {{cmd|r.series}} on all or a subset of raster maps in a strds, and &lt;br /&gt;
&lt;br /&gt;
* {{cmd|t.rast.aggregate}} that temporally aggregates the maps in a strds by a user defined granularity.&lt;br /&gt;
&lt;br /&gt;
With these modules it is very simple to get maps of basic statistical parameters for different temporal granules, and this permits the analysis of the spatio-temporal variability of the variable of interest.&lt;br /&gt;
&lt;br /&gt;
Some examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# yearly aggregation&lt;br /&gt;
t.rast.aggregate input=cla output=cla_yearly_average basename=cla_yearly_average \&lt;br /&gt;
  granularity=&amp;quot;1 years&amp;quot; method=average sampling=starts suffix=gran&lt;br /&gt;
&lt;br /&gt;
# yearly aggregation with corresponding methods (output: 7 strds with 11 maps each)&lt;br /&gt;
for method in average median mode minimum maximum stddev range ; do&lt;br /&gt;
    t.rast.aggregate input=cla output=cla_yearly_${method} \&lt;br /&gt;
    basename=cla_yearly_${method} granularity=&amp;quot;1 years&amp;quot; \&lt;br /&gt;
    method=${method} sampling=starts suffix=gran&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the where parameter, as exemplified before, we can select for example all 8-day products which start_time is 01 (January) over the years. Like this we can get the so-known '''climatologies'''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.series input=cla method=average where=&amp;quot;strftime('%m', start_time)='01'&amp;quot; output=january_average&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We could also get long term averages for specific periods in a time series, e.g. January 5-year mean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.series input=cla \&lt;br /&gt;
  where=&amp;quot;start_time &amp;gt;= '2005-01-01' AND start_time &amp;lt;= '2009-12-01' AND strftime('%m', start_time)='01'&amp;quot; \&lt;br /&gt;
  method=average output=jan_cla_mean_2000_2004&lt;br /&gt;
&lt;br /&gt;
# say we take a 15 years period (2000-2014) of monthly data and we want monthly 5-year averages&lt;br /&gt;
YEAR_START=(2000 2005 2010)&lt;br /&gt;
YEAR_END=(2004 2009 2014)&lt;br /&gt;
count=${#YEAR_START[@]}&lt;br /&gt;
&lt;br /&gt;
for i in `seq 1 $count` ; do&lt;br /&gt;
 echo ${YEAR_START[$i-1]} ${YEAR_END[$i-1]}&lt;br /&gt;
 for MONTH in `seq -w 1 12` ; do&lt;br /&gt;
  t.rast.series input=cla \&lt;br /&gt;
   where=&amp;quot;start_time &amp;gt;= '&amp;quot;${YEAR_START[$i-1]}&amp;quot;-01-01' AND start_time &amp;lt;= '&amp;quot;${YEAR_END[$i-1]}&amp;quot;-12-01' AND strftime('%m', start_time)='&amp;quot;${MONTH}&amp;quot;'&amp;quot; \&lt;br /&gt;
   method=average output=cla_${YEAR_START[$i-1]}_${YEAR_END[$i-1]}_month_${MONTH} --o&lt;br /&gt;
 done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generalizing a bit, to obtain monthly climatologies from a time series, we can: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# monthly climatologies&lt;br /&gt;
for MONTH in `seq -w 1 12` ; do &lt;br /&gt;
  for METHOD in average median stddev minimum maximum ; do &lt;br /&gt;
    t.rast.series input=cla method=${METHOD} where=&amp;quot;strftime('%m', start_time)='${MONTH}'&amp;quot; output=${METHOD}_${MONTH}&lt;br /&gt;
  done&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# seasonal climatologies&lt;br /&gt;
for i in &amp;quot;01 02 03&amp;quot; &amp;quot;04 05 06&amp;quot; &amp;quot;07 08 09&amp;quot; &amp;quot;10 11 12&amp;quot; ; do&lt;br /&gt;
    set -- $i ; echo $1 $2 $3&lt;br /&gt;
    for m in average median stddev minimum maximum ; do&lt;br /&gt;
        t.rast.series input=cla method=${m} output=${m}_${1} \&lt;br /&gt;
        where=&amp;quot;strftime('%m',start_time)='&amp;quot;${1}&amp;quot;' or strftime('%m',start_time)='&amp;quot;${2}&amp;quot;' or strftime('%m', start_time)='&amp;quot;${3}&amp;quot;'&amp;quot;                      &lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the climatologies previously obtained, we'll now estimate monthly anomalies in the mean, max and min Cl-a concentration. First, we need to monthly aggregate data, and then do the difference between the monthly climatology and each respective monthly aggregate. We'll do the aggregation for the average, minimum and maximum of Cl-a concentration (from 506 input maps in cla strds, we'll get 132 maps in each monthly aggregated new strds).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# monthly aggregates (132 maps)&lt;br /&gt;
for method in average minimum maximum ; do&lt;br /&gt;
    t.rast.aggregate input=cla output=cla_monthly_${method} \&lt;br /&gt;
    basename=cla_monthly_${method} \&lt;br /&gt;
    granularity=&amp;quot;1 months&amp;quot; method=${method} \&lt;br /&gt;
    sampling=contains suffix=gran&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# January anomalies in mean, min and max Cl-a&lt;br /&gt;
t.rast.list -u input=cla_monthly_average where=&amp;quot;start_time=datetime(start_time, 'start of year', '0 month')&amp;quot; columns=name&lt;br /&gt;
&lt;br /&gt;
for m in average minimum maximum ; do &lt;br /&gt;
    for i in 1 13 25 37 49 61 73 85 97 109 121 ; do # these numbers correspond to all January monthly aggregates&lt;br /&gt;
        r.mapcalc expression=&amp;quot;Jan_${m}_anomaly_${i}=cla_monthly_${m}_${i}-01_${m}&amp;quot; &lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use {{cmd|t.rast.list}} for looping, the same way you use {{cmd|g.list}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for map in `t.rast.list -u input=cla_monthly_average where=&amp;quot;strftime('%m', start_time)='01'&amp;quot; columns=name` ; do&lt;br /&gt;
    r.mapcalc expression=&amp;quot;anomaly_${map}=${map}-01_average&amp;quot; &lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generalizing, we can estimate all monthly anomalies from mean like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq -w 1 12` ; do&lt;br /&gt;
    for map in `t.rast.list -u input=cla_monthly_average columns=name where=&amp;quot;strftime('%m', start_time)='&amp;quot;${i}&amp;quot;'&amp;quot;` ; do&lt;br /&gt;
        r.mapcalc expression=&amp;quot;anomaly_${map}=${map}-average_${i}&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Say we now need to know the date of the maximum value of Cl-a concentration over all the study period and/or on a yearly basis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# map index for the overall maximum Cl-a value &lt;br /&gt;
t.rast.series input=cla method=max_raster output=cla_max_index&lt;br /&gt;
&lt;br /&gt;
# map index for the yearly maximum Cl-a value &lt;br /&gt;
t.rast.aggregate input=cla granularity=&amp;quot;1 year&amp;quot; method=max_raster output=yearly_max_index basename=yearly_max_index suffix=gran&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The outputs show (pixelwise) the map index in which the maximum value of Cl-a occurs (from 1 to 506 and from 1 to 46, for the whole time series and on a yearly basis, respectively). For relative time this is maybe enough, but you may then want to reclassify data to get DOY, for example. In that case, you may use {{cmd|r.reclass}}.&lt;br /&gt;
&lt;br /&gt;
If you already have monthly data, you can get climatologies quite simply as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# January averages&lt;br /&gt;
t.rast.series input=cla_monthly method=average where=&amp;quot;start_time=datetime(start_time, 'start of year', '0 month')&amp;quot; output=jan_average&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Spatio-temporal algebra with STRDS ===&lt;br /&gt;
&lt;br /&gt;
The module {{cmd|t.rast.mapcalc}} allows us to perform spatio-temporal mapcalc expressions on temporally sampled maps of strds. There are spatial and temporal operators available for the &amp;quot;expression&amp;quot; string. Spatial operators, functions and internal variables are those used in {{cmd|r.mapcalc}}. Temporal internal variables supported for both relative and absolute time include: td(), start_time() and end_time(). There are also several very useful internal variables supported especially for absolute time of the current sample interval or instance, e.g.: start_doy(), start_year(), start_month() and so on (see {{cmd|t.rast.mapcalc}} manual for further details and examples).&lt;br /&gt;
&lt;br /&gt;
Some examples now. Say we did some analysis and decided that we will only consider values higher than 0.05. Then, we need to set all values below that threshold to null.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.mapcalc input=cla expression=&amp;quot;if(cla &amp;lt; 0.05, null(), cla)&amp;quot; output=cla_corrected  basename=cla_corrected&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or we may also want to take negative erroneous values to the knowm minimum of the strds, so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.series input=cla method=minimum output=min_cla&lt;br /&gt;
t.rast.mapcalc input=cla expression=&amp;quot;if(cla &amp;lt; 0.0, min_cla, cla)&amp;quot; output=cla_corrected  basename=cla_corrected&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We may also need to reclassify all maps in the strds according to a certain threshold, e.g.: a certain level of Cl-a that indicates bloom conditions, in order to get bloom frequency afterwards:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# reclassify&lt;br /&gt;
t.rast.mapcalc -n input=cla output=cla_bloom basename=cla_bloom expression=&amp;quot;if(cla &amp;gt; 0.75, 1, null())&amp;quot;&lt;br /&gt;
# bloom frequency&lt;br /&gt;
t.rast.series input=cla_bloom output=bloom_freq method=count&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do you remember we wanted to get the DOY of maximum Cl-a value before? Well, here's another way of doing it... &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# overall maximum value&lt;br /&gt;
t.rast.series input=cla method=maximum output=max_cla&lt;br /&gt;
# new strds with DOY of overall maximum &lt;br /&gt;
t.rast.mapcalc -n inputs=cla output=date_max_cla expression=&amp;quot;if(cla == max_cla,start_doy(),null())&amp;quot; basename=date_max_cla &lt;br /&gt;
# map with DOY of overall maximum&lt;br /&gt;
t.rast.series input=date_max_cla method=maximum output=max_cla_date&lt;br /&gt;
# remove date_max_cla strds (we were only interested in the resulting aggregated map)&lt;br /&gt;
t.remove -rf inputs=date_max_cla &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There's also a {{cmd|t.rast.algebra}} module that allows for temporal and spatial operations on strds by means of temporal raster algebra. The module expects an expression in the following form: &amp;quot;result = expression&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The statement structure is similar to r.mapcalc, the result is the name of a new strds that will contain the result of the calculation given as expression. Expressions can be any valid or nested combination of temporal operations and spatial overlay or buffer functions that are provided by the temporal algebra. See the manual for further details and explanations.&lt;br /&gt;
&lt;br /&gt;
We'll use this module to estimate the rate of change (slope) between every pair of maps in the &amp;quot;cla&amp;quot; strds. The result will be a new strds consisting of maps with the slope value between every consecutive pair of maps in the original strds:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# we set 8 as fixed denominator, because products are 8-day compositions&lt;br /&gt;
t.rast.algebra expression=&amp;quot;slope_cla = (cla[1]-cla[0])/8.0&amp;quot; basename=slope_cla&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can then use any of the aggregation modules that we saw before to get the maximum or minimumm rate of change for different granularities.&lt;br /&gt;
&lt;br /&gt;
===== Some known issues with t.rast.mapcalc =====&lt;br /&gt;
&lt;br /&gt;
It has been observed that if the names of inputs and output space time datasets (partially) match each other, t.rast.mapcalc may not work properly (especially when several input strds are used). This is because the module uses a simple search and replace approach to substitute the input strds with the corresponding map names. Eventualy, choosing a specific order for the input strds in the input parameter may reduce the risk of wrong substitution. Therefore, especially in operations involving several strds (with partially matching names) as inputs, '''it is recommended to use {{cmd|t.rast.algebra}} that correctly recognizes spatio-temporal datasets''' rather than t.rast.mapcalc.&lt;br /&gt;
&lt;br /&gt;
=== Subseting and something else ===&lt;br /&gt;
&lt;br /&gt;
{{cmd|t.rast.extract}} is another really useful module within temporal GRASS. It allows to extract a subset of a strds and store it in a different strds. The &amp;quot;where&amp;quot; condition is used to do the subset, but you can also specify a r.mapcalc sub-expression that performs operations on all maps of the selected subset. If no r.mapcalc expression is defined, the selected maps are simply registered in the new output strds.&lt;br /&gt;
&lt;br /&gt;
Say we need to know in how many maps of the strds minimum values are below a certain threshold, and not only that, but we also want to know how many pixels per map meet that condition. Then, we can do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.extract input=cla where=&amp;quot;min &amp;lt;= '0.05'&amp;quot; output=cla_less_05 basename=cla_less_05 expression=&amp;quot;if(cla &amp;lt; 0.05, 1, null())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to extract those maps with a minimum value lower than 0.05, and in the same step put 1 in every cell meeting the criterium and null everywhere else. To get a count of maps and pixels meeting the condition we may use:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# univariate stistics to get the count per map  &lt;br /&gt;
t.rast.univar input=cla_less_05 &lt;br /&gt;
# count map of cells with min value &amp;lt; 0.05&lt;br /&gt;
t.rast.series input=cla_less_05 output=count_cla_less_05 method=count&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Importing / Exporting STRDS ===&lt;br /&gt;
&lt;br /&gt;
Say we now need to do some processing in R (e.g.: run [http://menugget.blogspot.com.ar/2012/10/dineof-data-interpolating-empirical.html DINEOF] to fill gaps in data), so we need to export our strds, hence we use {{cmd|t.rast.export}}. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.export input=cla output=cla4R compression=gzip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After we have done our analysis we can import the whole strds back to GRASS again, exporting it from R with read/write.tgrass from [http://cran.r-project.org/web/packages/spacetime/index.html spacetime] R package and using {{cmd|t.rast.import}} in GRASS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.import input=cla_from_R.tar.gz output=cla_from_R basename=new_map directory=/tmp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a full example of how to handle raster time series between GRASS and R, please visit the  [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/raster_time_series_grass_R_statistics time series GRASS-R Statistics] wiki. The example is based on North Carolina climate location [http://courses.ncsu.edu/mea592/common/media/02/nc_climate_spm_2000_2012.zip] and includes the following steps:&lt;br /&gt;
&lt;br /&gt;
# Exporting the strds out of GRASS&lt;br /&gt;
# Importing into R&lt;br /&gt;
# Re-formating the data&lt;br /&gt;
# Running [http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF DINEOF]&lt;br /&gt;
# Re-constructing the raster time series&lt;br /&gt;
# Exporting out of R, and &lt;br /&gt;
# Importing the gap-filled new strds into GRASS.&lt;br /&gt;
&lt;br /&gt;
=== Neighborhood analysis ===&lt;br /&gt;
&lt;br /&gt;
{{cmd|t.rast.neighbors}} performs a neighborhood analysis for each map in a space time raster dataset. This module supports a subset of the options already available in r.neighbors. Both, size of the neighborhood and aggregation method can be chosen. As an example, we'll estimate mean Cl-a concentration in a 3x3 neighborhood for every map in the strds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.neighbors input=cla output=cla_smoth base=cla_smooth method=average size=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Filling and reconstructing time series data with gaps ===&lt;br /&gt;
&lt;br /&gt;
==== Harmonic ANalysis of Time Series - HANTS ====&lt;br /&gt;
&lt;br /&gt;
{{AddonCmd|r.hants}} is an add-on not strictly within the temporal modules, but really useful when working with time series data, particularly with gappy data. Here's a simple example for generating a list of temporally ordered maps to use as input in '''r.hants''', running HANTS and getting a map of dominant frequencies, afterwards. See the manual for further information on parameter setting and explanations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# use t.rast.list to create a list of temporally ordered maps  &lt;br /&gt;
t.rast.list input=cla order=start_time columns=name -u &amp;gt; map_list.csv&lt;br /&gt;
&lt;br /&gt;
# a HANTS run using the list of maps&lt;br /&gt;
r.hants -l file=map_list.csv nf=5 fet=0.1 dod=11 base_period=46 suffix=_hants amplitude=amp_hants phase=pha_hants&lt;br /&gt;
&lt;br /&gt;
# dominant frequency map (0 means the dominant freq is 1, 1 that dominant freq is 2, and so on...)&lt;br /&gt;
r.series input=`g.list type=raster pattern=&amp;quot;amp_hants*&amp;quot; separator=comma` output=dominant_freq_hants method=max_raster&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Local Weighted Regression - LWR ====&lt;br /&gt;
&lt;br /&gt;
Another very useful add-on for the reconstruction of gappy time series, such as those from remote sensing imagery, is {{AddonCmd|r.series.lwr}}. This module performs a local weighted regression (LWR) of the input maps in order to estimate missing values and identify (and remove) outliers. See the manual for further information and explanations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# use same list as before&lt;br /&gt;
t.rast.list input=cla order=start_time columns=name -u &amp;gt; map_list.csv&lt;br /&gt;
&lt;br /&gt;
# run r.series.lwr&lt;br /&gt;
r.series.lwr file=map_list.csv suffix=_lwr order=2 weight=tricube range=0.0,65.0 dod=16 fet=0.1 -l&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Estimate Mean Absolute Error (MAE) ====&lt;br /&gt;
&lt;br /&gt;
One of the measures used to assess how close forecasts or predictions might be to the observed values is the&lt;br /&gt;
[https://en.wikipedia.org/wiki/Mean_absolute_error mean absolute error]. We will use it to evaluate the performance of HANTS and LWR. &lt;br /&gt;
&lt;br /&gt;
First, we will rebuild our time series with the corresponding output maps of r.hants and r.series.lwr. Here, only showed for LWR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# re-build time series &lt;br /&gt;
t.create type=strds temporaltype=absolute output=cla_lwr \&lt;br /&gt;
 title=&amp;quot;LWR output for Chl-a&amp;quot; \&lt;br /&gt;
 description=&amp;quot;MODIS Aqua L3 Chl-a 8-day 4km 2010-2013. Reconstruction with r.series.lwr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# create list with filenames to parse&lt;br /&gt;
g.list type=raster pattern=&amp;quot;*lwr&amp;quot; output=names_list&lt;br /&gt;
&lt;br /&gt;
# parse filenames, convert YYYY-DOY to YYYY-MM-DD and write file to use in t.register&lt;br /&gt;
for mapname in `cat names_list` ; do&lt;br /&gt;
  year_start=`echo ${mapname:1:4}`&lt;br /&gt;
  doy_start=`echo ${mapname:5:3}`&lt;br /&gt;
  year_end=`echo ${mapname:8:4}`&lt;br /&gt;
  doy_end=`echo ${mapname:12:3}`&lt;br /&gt;
  # convert YYYY-DOY to YYYY-MM-DD&lt;br /&gt;
  #BEWARE: leading zeros make bash assume the number is in base 8 system, not base 10!&lt;br /&gt;
  doy_start=`echo &amp;quot;$doy_start&amp;quot; | sed 's/^0*//'`&lt;br /&gt;
  doy_end=`echo &amp;quot;$doy_end&amp;quot; | sed 's/^0*//'`&lt;br /&gt;
  START_DATE=`date -d &amp;quot;${year_start}-01-01 +$(( ${doy_start} - 1 ))days&amp;quot; +%Y-%m-%d`&lt;br /&gt;
  END_DATE=`date -d &amp;quot;${year_end}-01-01 +$(( ${doy_end} ))days&amp;quot; +%Y-%m-%d`&lt;br /&gt;
  # print mapname, start and end date&lt;br /&gt;
  echo &amp;quot;$mapname|$START_DATE|$END_DATE&amp;quot; &amp;gt;&amp;gt; map_list_start_and_end_time.txt&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# register maps in strds&lt;br /&gt;
t.register input=cla_lwr type=raster file=map_list_start_and_end_time.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, we will estimate the MAE and use it to compare both methods. Again, only the example for LWR is showed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# obtain a strds of the absolute differences between predicted and observed Chl-a values &lt;br /&gt;
t.rast.algebra -n \&lt;br /&gt;
 basename=lwr_minus_orig suffix=gran \&lt;br /&gt;
 expression=&amp;quot;abs_lwr_minus_orig = abs(cla_lwr - cla)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# sum of the absolute differences (numerator) and count of non-null maps per pixel (denominator) &lt;br /&gt;
t.rast.series input=abs_lwr_minus_orig output=sum_abs_lwr_minus_orig method=sum&lt;br /&gt;
t.rast.series input=abs_lwr_minus_orig output=count_abs_lwr_minus_orig method=count&lt;br /&gt;
&lt;br /&gt;
# MAE for LWR&lt;br /&gt;
r.mapcalc expression=&amp;quot;mae_lwr = sum_abs_lwr_minus_orig / count_abs_lwr_minus_orig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# remove intermediate strds and maps&lt;br /&gt;
t.remove -rf abs_lwr_minus_orig&lt;br /&gt;
g.remove -f type=raster name=sum_abs_lwr_minus_orig,count_abs_lwr_minus_orig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's now compare the predictions generated by both methods, HANTS and LWR, and the corresponding mean absolute error maps. &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:cla_vs_cla_hants.png|center|thumb|560px|Original Chl-a time series vs HANTS output.]] || [[Image:cla_vs_cla_lwr.png|center|thumb|560px|Original Chl-a time series vs LWR output.)]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:mae_hants_map.png|center|thumb|560px|MAE of HANTS predictions.]] || [[Image:mae_lwr_map.png|center|thumb|560px|MAE of LWR predictions.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extract strds values for points in a vector ===&lt;br /&gt;
&lt;br /&gt;
Let's say we need to extract values of the strds to check the behaviour of HANTS at given locations and compare it with the original values. We can graphically do that with {{cmd|g.gui.tplot}}, but if you need to take data outside GRASS, say, read it into R and do some other analysis (See [http://grasswiki.osgeo.org/wiki/R_statistics/rgrass7#Reading_in_data R_Statistics wiki page]) you may use {{cmd|v.what.strds}}. This module retrieves raster values from a given strds to the attribute table of a point vector map.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# original data&lt;br /&gt;
v.what.strds input=points_cla strds=cla output=points_cla_out&lt;br /&gt;
v.db.select map=points_cla_out file=ts_points_cla.csv&lt;br /&gt;
&lt;br /&gt;
# HANTS' reconstructed data (several runs)&lt;br /&gt;
for i in `seq 1 13` ; do&lt;br /&gt;
    v.what.strds --overwrite input=points_cla strds=cla_hants_${i} output=points_hants_${i}_out&lt;br /&gt;
    v.db.select map=points_cla file=ts_points_hants_${i}.csv&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option would be to use {{cmd|t.rast.what}} that samples a space time raster dataset at specific vector point coordinates and writes the output to stdout or text file using different layouts. This module doesn't write the vector's attribute table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.what points=points strds=cla output=cla_points.csv null_value=NA separator=comma&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Some other modules and addons useful in the time series context ===&lt;br /&gt;
&lt;br /&gt;
* {{cmd|t.rast.accumulate}} and {{cmd|t.rast.accdetect}} to compute and detect cyclic accumulations in raster time series.&lt;br /&gt;
* {{AddonCmd|t.rast.what.aggr}} to sample a strds with a vector point map and get aggregated values of desired granularity either in stdout or in the vector's attribute table.&lt;br /&gt;
* {{AddonCmd|t.rast.out.xyz}} to export a strds to a CSV file.&lt;br /&gt;
* {{AddonCmd|t.rast.null}} to manage NULL-values of a strds.&lt;br /&gt;
* {{AddonCmd|v.strds.stats}} to calculate univariate statistics from a strds based on a vector map.&lt;br /&gt;
* {{AddonCmd|r.seasons}} to extract seasons from a time series.&lt;br /&gt;
* {{AddonCmd|r.bioclim}} to calculate bio-climatic indices.&lt;br /&gt;
* {{AddonCmd|r.change.info}} for landscape change assessment.&lt;br /&gt;
* {{AddonCmd|r.quantile.ref}} to determine the corresponding quantile for an input value from a reference raster time series.&lt;br /&gt;
* {{AddonCmd|r.regression.series}} and {{AddonCmd|r.mregression.series}} to perform univariate and multivariate linear regression among raster time series, respectively.&lt;br /&gt;
* {{AddonCmd|r.series.diversity}} to estimate diversity indices in raster time series.&lt;br /&gt;
* {{AddonCmd|r.series.decompose}} to decompose raster time series.&lt;br /&gt;
* {{AddonCmd|r.series.filter}} to apply Savitzky-Golay or median filters to raster time series.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== Best practice data organization ===&lt;br /&gt;
&lt;br /&gt;
When it comes to time series, thousands of maps are often involved. In order to keep control, here some suggestions:&lt;br /&gt;
&lt;br /&gt;
* separate original data from derived aggregates: store them in separate mapsets&lt;br /&gt;
* for specific projects, maintain them in individual mapsets. You can access the STDS stored in other mapsets (same location) through&lt;br /&gt;
 t.some.module input=my_strds@the_other_mapset output=result ...&lt;br /&gt;
as long as mapsets are indeed accessible, i.e.: in the mapset's search path (See {{cmd|g.mapsets}}).&lt;br /&gt;
&lt;br /&gt;
=== Best practice multi user management ===&lt;br /&gt;
&lt;br /&gt;
GRASS GIS supports multi-user data management and allows several users to work in the same location within their own mapsets. Data can be read from other mapsets but not edited there. The same principle applies to space time datasets (STDS), i.e. in case of having a collection of maps corresponding to a time series in a dedicated mapset, you need to also create the STDS therein (See {{cmd|t.create}} and {{cmd|t.register}}), so it is visible to other users in other mapsets when they use {{cmd|t.list}}, for example.&lt;br /&gt;
&lt;br /&gt;
=== Use of ''where'' parameter (ticket [https://trac.osgeo.org/grass/ticket/2270 #2270]) ===&lt;br /&gt;
&lt;br /&gt;
Pay attention when using the &amp;quot;where&amp;quot; option in t.* modules. In some occasions it may not yield the expected results. Given the backend database chosen for TGRASS implementation, you may not be selecting all maps you think if you forget to set time along with date in the where clause. For example, let's say we need to select maps from 2005-03-01 until 2005-05-31 included. You would think the following command would do the job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list daily_temp where=&amp;quot;start_time &amp;gt; '2005-03-01' and start_time &amp;lt;= '2005-05-31'&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
but, no... The last map in the list is:&lt;br /&gt;
&lt;br /&gt;
 temp_0516|pruebas|2005-05-30 00:00:00|2005-05-31 00:00:00&lt;br /&gt;
&lt;br /&gt;
which would be equivalent to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list daily_temp where=&amp;quot;start_time &amp;gt; '2005-03-01' and start_time &amp;lt; '2005-05-31'&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a product of sqlite. Therefore, if you need the last date included in your selection (map from 2005-05-31 in our example), you need to set time too.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list daily_temp where=&amp;quot;start_time &amp;gt; '2005-03-01' and start_time &amp;lt;= '2005-05-31 00:00:00'&amp;quot; | tail -n1&lt;br /&gt;
temp_0517|pruebas|2005-05-31 00:00:00|2005-06-01 00:00:00&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aggregation with defined granularity ===&lt;br /&gt;
&lt;br /&gt;
''Q: I need to aggregate a strds with a granularity of 1 year, but shifting the start day one month in each run, i.e.: changing the start_time to 2003-02-01, 2003-03-01, 2003-04-01 and so on... My question is: if i recursively change start_time with the 'where' parameter, will the module t.rast.aggregate &amp;quot;aggregate&amp;quot; to the next february, march, april (what i'd wish) or just till the end of 2003?''&lt;br /&gt;
&lt;br /&gt;
A: If you specify a granularity of a year, then the start time to perform the aggregation will always be shifted to the 1st January of the current year and the end time the 1st January of the next year (eg. 2002-01-01 - 2003-01-01).  If you wish to aggregate a full year but shifting one month forward then simply use a granularity of 12 months.&lt;br /&gt;
&lt;br /&gt;
=== Listing maps with specific start month ===&lt;br /&gt;
&lt;br /&gt;
''Q: I have a strds with 506 maps that correspond to 8-day composite products. I need to sequentially list all maps which &amp;quot;start_month&amp;quot; is January, February and so on... to use them as input in {{cmd|r.series}} (or {{cmd|t.rast.series}}). How can I achieve that?''&lt;br /&gt;
&lt;br /&gt;
A: You can use the [https://www.sqlite.org/lang_datefunc.html datetime functionality of SQLite] to perform this task, this should work for January:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=cla_null_mayor65 \&lt;br /&gt;
where='start_time &amp;gt;= datetime(start_time, &amp;quot;start of year&amp;quot;) and start_time &amp;lt;= datetime(start_time, &amp;quot;start of year&amp;quot;, &amp;quot;1 month&amp;quot;)'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aggregation of seasonal data ===&lt;br /&gt;
&lt;br /&gt;
''Q: How can I calculate average seasonal temperature starting from a daily temperatures temporal dataset?''&lt;br /&gt;
&lt;br /&gt;
A: Use {{cmd|t.rast.aggregate.ds}}, the input is the daily strds, the sampling stds should have seasonal intervals. Then use average as method. The output will have seasonal aggregated temperatures. For a detailed workflow see: [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/seasonal_aggregation seasonal aggregation example].&lt;br /&gt;
&lt;br /&gt;
=== Aggregation of seasonal data using time ranges ===&lt;br /&gt;
&lt;br /&gt;
A way to aggregate seasons from daily data without granularity but by using time ranges is shown here. The issue is to include for the season calculation also a month from the previous year. This can be addressed with some datetime calculations in SQLite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# We assume to have daily temperature data in DB &amp;quot;temp_daily_average&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# loop over seasons, generate aggregates:&lt;br /&gt;
### 'start_time' and 'end_time' are columns in TGRASS&lt;br /&gt;
&lt;br /&gt;
for year in `seq 2004 2014` ; do&lt;br /&gt;
&lt;br /&gt;
    # we consider also a month of the previous year&lt;br /&gt;
    for month in &amp;quot;12 01 02&amp;quot; &amp;quot;03 04 05&amp;quot; &amp;quot;06 07 08&amp;quot; &amp;quot;09 10 11&amp;quot; ; do&lt;br /&gt;
        set -- $month ; echo $1 $2 $3&lt;br /&gt;
&lt;br /&gt;
        prevyear=$year&lt;br /&gt;
        if [ $1 -eq 12 ] ; then&lt;br /&gt;
           prevyear=`expr $year - 1`&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        # prepare query strings in SQLite&lt;br /&gt;
        MYSTART=`echo &amp;quot;SELECT strftime(datetime('${prevyear}-${1}-01'));&amp;quot; | sqlite3`&lt;br /&gt;
        MYEND=`echo &amp;quot;SELECT strftime(datetime('${prevyear}-${1}-01','+3 month'));&amp;quot; | sqlite3`&lt;br /&gt;
&lt;br /&gt;
        # Debugging only, to see what it does:&lt;br /&gt;
        echo &amp;quot;---- Querying ${prevyear}-${1}-01 ... ${year}-${3}-end:&amp;quot;&lt;br /&gt;
        # we use start_time and end_time to get the proper time range&lt;br /&gt;
        t.rast.list input=temp_daily_average@modis_lst_reconstructed_europe_daily \&lt;br /&gt;
        where=&amp;quot;start_time &amp;gt;= '$MYSTART' AND end_time &amp;lt;= '$MYEND'&amp;quot; &amp;gt; list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
	&lt;br /&gt;
        head -n 3 list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
        echo &amp;quot;...&amp;quot;&lt;br /&gt;
        tail -n 3 list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
        echo &amp;quot;=======&amp;quot;&lt;br /&gt;
        rm -f list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
        &lt;br /&gt;
        # calculate aggregates:&lt;br /&gt;
        method=&amp;quot;average&amp;quot;   # median mode minimum maximum stddev&lt;br /&gt;
        &lt;br /&gt;
        t.rast.series input=temp_daily_average@modis_lst_reconstructed_europe_daily \&lt;br /&gt;
        where=&amp;quot;start_time &amp;gt;= '$MYSTART' AND end_time &amp;lt;= '$MYEND'&amp;quot; \&lt;br /&gt;
        output=temp_${method}_${prevyear}_${1}&lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Much simpler '''alternative''' (which runs in parallel on multi-cores):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.aggregate input=A output=B basename=b where=&amp;quot;start_time &amp;gt;= '2004-03-01 00:00:00'&amp;quot; granularity=&amp;quot;3 months&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to count consecutive days that meet a certain condition? ===&lt;br /&gt;
&lt;br /&gt;
This example was kindly contributed by Thomas Leppelt and shows how to obtain the number of consecutive days with temperature below 0 per week.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Set the computational region and resolution&lt;br /&gt;
g.region -p n=-30 s=-50 e=-50 w=-70 res=1&lt;br /&gt;
&lt;br /&gt;
# We create maps for 100 days&lt;br /&gt;
for map in `seq 1 100` ; do&lt;br /&gt;
 # generate synthetic maps as a seeding random values for temperatures&lt;br /&gt;
 r.mapcalc -s expression=&amp;quot;daily_temp_${map} = rand(-20,20)&amp;quot; --o&lt;br /&gt;
 echo daily_temp_${map} &amp;gt;&amp;gt; map_list.txt&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
t.create type=strds temporaltype=absolute \&lt;br /&gt;
         output=temperature_daily \&lt;br /&gt;
         title=&amp;quot;Daily Temperature&amp;quot; \&lt;br /&gt;
         description=&amp;quot;Test dataset with daily temperature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
t.register -i type=raster input=temperature_daily \&lt;br /&gt;
           file=map_list.txt start=&amp;quot;2014-03-07&amp;quot; increment=&amp;quot;1 days&amp;quot; --o&lt;br /&gt;
&lt;br /&gt;
# check general information of the daily strds&lt;br /&gt;
t.info type=strds input=temperature_daily&lt;br /&gt;
&lt;br /&gt;
# Create weekly mask to which we will add 1 or 0 according to temperature in the days within it (each map in this week mask will have a value of 7)&lt;br /&gt;
t.rast.aggregate input=temperature_daily output=weekly_mask basename=mask_week granularity=&amp;quot;1 weeks&amp;quot; method=count&lt;br /&gt;
&lt;br /&gt;
# Calculate consecutive days with negative temperatures&lt;br /&gt;
t.rast.algebra base=neg_temp_days expression=&amp;quot;consecutive_days = weekly_mask {+,contains,l} if(temperature_daily &amp;lt; 0 &amp;amp;&amp;amp; temperature_daily[-1] &amp;lt; 0 || temperature_daily[1] &amp;lt; 0 &amp;amp;&amp;amp; temperature_daily &amp;lt; 0, 1, 0)&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Online tutorials and courses ==&lt;br /&gt;
&lt;br /&gt;
* [https://web.archive.org/web/20160119125858/www.geostat-course.org/topic_gebbert/ The temporal GRASS GIS framework: Introduction and application] by Sören Gebbert (2012)&lt;br /&gt;
* CZ: [https://web.archive.org/web/20180316200749/https://training.gismentors.eu/grass-gis-pokrocily/tgrass/index.html Úvod do časoprostorových analýz] (Introduction to space-time analysis) by Martin Landa (2015)&lt;br /&gt;
* [https://gismentors.github.io/grass-gis-workshop-jena/units/21.html Sentinel spatio-temporal processing] by Martin Landa (2020)&lt;br /&gt;
* [https://github.com/veroandreo/tgrass_workshop_foss4g_eu TGRASS: temporal data processing with GRASS GIS] FOSS4G-EU workshop by Veronica Andreo, Luca Delucchi and Markus Neteler (2017)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Gebbert, S., Pebesma, E. 2014. ''TGRASS: A temporal GIS for field based environmental modeling''. Environmental Modelling &amp;amp; Software 53, 1-12 ([https://doi.org/10.1016/j.envsoft.2013.11.001 DOI]) - [https://ifgi.uni-muenster.de/~epebe_01/tgrass.pdf preprint PDF]&lt;br /&gt;
* Gebbert, S., Pebesma, E. 2017. ''The GRASS GIS temporal framework''. International Journal of Geographical Information Science 31, 1273-1292 ([https://doi.org/10.1080/13658816.2017.1306862 DOI]) - [https://figshare.com/articles/journal_contribution/The_GRASS_GIS_temporal_framework/4834013/1/files/8024429.pdf PDF]&lt;br /&gt;
* Gebbert, S., Leppelt, T., Pebesma, E., 2019. ''A topology based spatio-temporal map algebra for big data analysis''. Data 4, 86. ([https://doi.org/10.3390/data4020086 DOI]) - [https://www.mdpi.com/2306-5729/4/2/86/pdf?version=1560849201 PDF]. Content:&lt;br /&gt;
** Object oriented code design&lt;br /&gt;
** Code examples&lt;br /&gt;
*** Registration of existing raster layers&lt;br /&gt;
*** Temporal aggregation of a raster time series&lt;br /&gt;
*** Sampling a raster time series at vector points&lt;br /&gt;
*** Spatio-temporal intersection of trajectories&lt;br /&gt;
*** Benchmark Python code&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* Introduction: [http://www.slideshare.net/Luis_de_Sousa/presentation-soeren GRASS as a Temporal GIS] by Sören Gebbert (slides)&lt;br /&gt;
* [https://archive.org/details/TheTemporalGrassGisFrameworkIntroductionAndApplication# The temporal GRASS GIS framework: Introduction and application] Video of Sören Gebbert's presentation in [http://www.geostat-course.org/Muenster_2012 GEOSTAT course] 2012&lt;br /&gt;
* [https://grass.osgeo.org/grass-stable/manuals/temporalintro.html Introduction to temporal modules] (GRASS GIS manual)&lt;br /&gt;
* [https://grass.osgeo.org/grass-stable/manuals/temporal.html Available temporal modules] (GRASS GIS manual)&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/Grass7/TemporalExtension Temporal Extension] (background info in trac)&lt;br /&gt;
* [[GRASS GSoC 2013 Temporal GIS Algebra for raster and vector data in GRASS]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Temporal]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing&amp;diff=28545</id>
		<title>Temporal data processing</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing&amp;diff=28545"/>
		<updated>2025-07-02T08:49:47Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TGRASS is the temporal enabled GRASS GIS.&lt;br /&gt;
TGRASS is completely metadata based, i.e. it does not change any data but simply handles the organization of raster, vector, raster3D maps actually stored in a GRASS GIS mapset by registering in an additional internal database. This is done specifically for managing temporal and spatial extent including temporal topology.&lt;br /&gt;
&lt;br /&gt;
Manual overview: https://grass.osgeo.org/grass-stable/manuals/temporalintro.html&lt;br /&gt;
&lt;br /&gt;
== Terminology Overview ==&lt;br /&gt;
&lt;br /&gt;
* Space time raster datasets ('''strds''') are designed to manage raster map time series. Modules that process strds have the naming prefix ''t.rast''.&lt;br /&gt;
* Space time 3D raster datasets ('''str3ds''') are designed to manage 3D raster map time series. Modules that process str3ds have the naming prefix ''t.rast3d''.&lt;br /&gt;
* Space time vector datasets ('''stvds''') are designed to manage vector map time series. Modules that process stvds have the naming prefix ''t.vect''.&lt;br /&gt;
&lt;br /&gt;
== Workflow overview ==&lt;br /&gt;
&lt;br /&gt;
# create an empty space time datasets: strds, str3ds, or stvds ({{cmd|t.create}})&lt;br /&gt;
# register the GRASS GIS maps ({{cmd|t.register}})&lt;br /&gt;
# check the generated space time datasets ({{cmd|t.list}}, {{cmd|t.info}})&lt;br /&gt;
# do your analysis: {{cmd|t.rast.aggregate}}, {{cmd|t.info}}, {{cmd|t.rast.univar}}, {{cmd|t.vect.univar}}, ... so many more!&lt;br /&gt;
&lt;br /&gt;
== Example workflow for a Chlorophyll-a MODIS time series ==&lt;br /&gt;
&lt;br /&gt;
The following examples are based on a series of MODIS L3 Chlorophyll-a product that is freely available at the [http://oceancolor.gsfc.nasa.gov/cgi/l3?sen=A&amp;amp;per=MO&amp;amp;prd=CHL_chlor_a ocean color] site. So, say we download the SMI 8-day composite product at 4.6 km resolution for the period 2003-2013. That is a 506 set of images, 46 per year. Data comes as compressed HDF4 files. Chlorophyll products file names look like this: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;A20030012003008.L3m_8D_CHL_chlor_a_4km&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
where, &lt;br /&gt;
&lt;br /&gt;
  A: MODIS/Aqua&lt;br /&gt;
  2003: Year at start&lt;br /&gt;
  001: Julian day at start&lt;br /&gt;
  2003: Year at end&lt;br /&gt;
  008: Julian day at end&lt;br /&gt;
  L3m: Level 3 data, mapped (Projection: Plate carrée)&lt;br /&gt;
  8D: 8 day composition&lt;br /&gt;
  CHL: Chlorophyll a concentration product&lt;br /&gt;
  chlor_a: algorithm used 10^(a0 + a1*X + a2*X^2 + a3*X^3 + a4*X^4) &lt;br /&gt;
  4km: 4.6km pixel size (8640x4320 image, 2.5 minute resolution)&lt;br /&gt;
&lt;br /&gt;
We now decompress files and check metadata &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Go to where the data is and decompress&lt;br /&gt;
  find -iname '*.bz2' -exec bzip2 -d {} \; &lt;br /&gt;
# Check file meta-data (GDAL utilities)&lt;br /&gt;
  gdalinfo A20030012003008.L3m_8D_CHL_chlor_a_4km&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next step is to import all 506 images into GRASS. You can use {{cmd|r.in.gdal}} or {{cmd|r.external}} for that.&lt;br /&gt;
Note that global Cl-a images as downloaded from [http://oceancolor.gsfc.nasa.gov/cgi/l3?sen=A&amp;amp;per=MO&amp;amp;prd=CHL_chlor_a ocean color] site are ~150 mb each (disk space issues!). Here, 3 different options:&lt;br /&gt;
&lt;br /&gt;
* import global images (506 images, 150 Mb each) with r.in.gdal, resize to study area and remove global files&lt;br /&gt;
* set projection and extension, and resize to study area with gdal_translate, and import already resized images with r.in.gdal&lt;br /&gt;
* import global images (506 images, 150 Mb each) with r.external, resize to study area and remove global files, as showed below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# define region extension&lt;br /&gt;
g.region -p n=-38 s=-55 w=-70 e=-56&lt;br /&gt;
&lt;br /&gt;
suffix=_tmp&lt;br /&gt;
for map in *chlor* ; do&lt;br /&gt;
    r.external input=$map output=${map}${suffix} -o&lt;br /&gt;
    r.mapcalc expression=&amp;quot;$map = ${map}${suffix}&amp;quot;&lt;br /&gt;
    g.remove type=raster name=${map}${suffix}&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once we have maps inside GRASS GIS database we can start the temporal processing. If this is the first time you'll use temporal modules, &lt;br /&gt;
you need to run &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.connect -d &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to set the default temporal GIS database connection for the current mapset. If the connection is not initially set with {{cmd|t.connect}}, any temporal module that you try to run for the first time will first set the connection to the temporal database for you. The default TGIS database of type ''sqlite3'' is located in the PERMANENT mapset directory. Temporal GIS content from all created mapsets will be stored there.&lt;br /&gt;
&lt;br /&gt;
=== Creating a STRDS and registering maps ===&lt;br /&gt;
&lt;br /&gt;
'''Creating a STRDS'''&lt;br /&gt;
&lt;br /&gt;
First step is to '''create a space time dataset''' by means of {{cmd|t.create}}. As an example, let us create a strds for the Chlorophyll-a (Cl-a) time series. We need to define the name and semantic type of the new space time dataset, its title and a description. By default a raster dataset is created with absolute time (Gregorian calendar). We can change that according to our needs with type and temporaltype options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.create type=strds temporaltype=absolute output=cla \&lt;br /&gt;
 title=&amp;quot;Chlorophyll-a concentration&amp;quot; \&lt;br /&gt;
 description=&amp;quot;MODIS L3 Chlorophyll-a concentration for Argentinian sea&amp;quot; \&lt;br /&gt;
 semantictype=mean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Registering maps'''&lt;br /&gt;
&lt;br /&gt;
Then, we '''register the maps''' in the strds using {{cmd|t.register}}. This module assigns timestamps to raster, 3D raster and vector maps and register them in the temporal database and into space time datasets. Existing timestamps can be read and used by t.register. Note that this is a metadata based registration, nothing is imported into GRASS GIS since the maps are already present in the location (hence, no duplication occurs).&lt;br /&gt;
&lt;br /&gt;
This module (and TGRASS in general) supports '''absolute time''' and '''relative time'''. The ''absolute'' temporal type refers to a fixed date or interval in the Gregorian calendar, while the ''relative'' temporal type refers to data without fixed time stamps (e.g., sequential maps used to calculate multi-decadal averages). Refer to the [http://www.geostat-course.org/system/files/Presentation_0.pdf TGRASS overview slides] for background.&lt;br /&gt;
&lt;br /&gt;
Maps can be registered by command line argument (i.e., a list of comma separated map names) or using an input file. The start time, end time and a temporal increment can be provided either by command line or in the input file. End time and increment are mutually exclusive. Maps can be registered in several space time datasets using the same timestamp. For a more detailed explanation and examples on how to register maps in stds, see also [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/maps_registration maps registration] wiki page. &lt;br /&gt;
&lt;br /&gt;
Start time and end time with absolute time must be provided using the format yyyy-mm-dd HH:MM:SS +HHMM. It is also supported to specify the date yyyy-mm-dd only. In case of relative time, the temporal unit (years, months, days, hours, minutes or seconds) must be provided. The relative start time, end time and the increment are integers (see also {{cmd|t.register}}).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: with -i we create intervals (start and end time) spanning the given increment, and starting from start.&lt;br /&gt;
t.register -i type=raster input=cla \&lt;br /&gt;
 maps=`g.list raster pattern=&amp;quot;*_chlor_*&amp;quot; separator=comma` \&lt;br /&gt;
 start=&amp;quot;2003-01-01&amp;quot; \&lt;br /&gt;
 increment=&amp;quot;8 days&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Dealing with weekly data'''&lt;br /&gt;
&lt;br /&gt;
While the former would have been the simplest solution, our 8-day products have a problem: in this example the last image of each year is not a product of an 8-day composition, but 4 or 5-day. Then, when using the increment parameter, dates (and consequently, intervals) are not set properly.&lt;br /&gt;
The solution is to create a list of maps, with their respective start and end date. As the filenames contain information regarding year and DOY (day of year), we can use the following Python script to '''read filenames and transform DOY to calendar dates''' (Thanks Soeren!). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Script to extract the input file for t.register from map names&lt;br /&gt;
# run in python&lt;br /&gt;
# modify to your needs&lt;br /&gt;
&lt;br /&gt;
from os import walk&lt;br /&gt;
f = []&lt;br /&gt;
for (dirpath, dirnames, filenames) in walk(&amp;quot;/path/to/the/maps&amp;quot;):&lt;br /&gt;
    f.extend(filenames)&lt;br /&gt;
    break&lt;br /&gt;
# to order the list    &lt;br /&gt;
f.sort() &lt;br /&gt;
&lt;br /&gt;
input_list=[]&lt;br /&gt;
&lt;br /&gt;
import datetime&lt;br /&gt;
for map_name in f:&lt;br /&gt;
  start_year = int(map_name[1:5])&lt;br /&gt;
  start_day  = int(map_name[5:8])&lt;br /&gt;
  end_year   = int(map_name[8:12])&lt;br /&gt;
  end_day    = int(map_name[12:15])&lt;br /&gt;
  start = datetime.datetime(start_year, 1, 1) + datetime.timedelta(start_day - 1)&lt;br /&gt;
  end = datetime.datetime(int(end_year), 1, 1) + datetime.timedelta(end_day)&lt;br /&gt;
  map_list = map_name + '|' + str(start) + '|' + str(end)&lt;br /&gt;
  print map_list&lt;br /&gt;
  input_list.append(map_list)&lt;br /&gt;
&lt;br /&gt;
print input_list&lt;br /&gt;
&lt;br /&gt;
txt = '\n' .join(input_list)&lt;br /&gt;
f = open(&amp;quot;input_list_cla.txt&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
f.write(txt)&lt;br /&gt;
f.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the number of characters in the filenames and the datetime library in Python, you can convert DOY in the filenames into start_time and end_time as in the file you need to pass to {{cmd|t.register}}:&lt;br /&gt;
&lt;br /&gt;
  A20030012003008.L3m_8D_CHL_chlor_a_4km_arg|2003-01-01 00:00:00|2003-01-09 00:00:00&lt;br /&gt;
  A20030092003016.L3m_8D_CHL_chlor_a_4km_arg|2003-01-09 00:00:00|2003-01-17 00:00:00&lt;br /&gt;
  A20030172003024.L3m_8D_CHL_chlor_a_4km_arg|2003-01-17 00:00:00|2003-01-25 00:00:00&lt;br /&gt;
  ...&lt;br /&gt;
  A20133452013352.L3m_8D_CHL_chlor_a_4km_arg|2013-12-11 00:00:00|2013-12-19 00:00:00&lt;br /&gt;
  A20133532013360.L3m_8D_CHL_chlor_a_4km_arg|2013-12-19 00:00:00|2013-12-27 00:00:00&lt;br /&gt;
  A20133612013365.L3m_8D_CHL_chlor_a_4km_arg|2013-12-27 00:00:00|2014-01-01 00:00:00&lt;br /&gt;
&lt;br /&gt;
and then, the command would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.register --o type=raster input=cla file=input_list_cla.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we are providing start and end time along with map names, we don't need to use the -i flag, neither set start nor increment options because that information is already contained in the file. &lt;br /&gt;
&lt;br /&gt;
'''Assign a color table'''&lt;br /&gt;
&lt;br /&gt;
We can also set a color table for all maps in the strds with {{cmd|t.rast.colors}}: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# using a predetermined color table&lt;br /&gt;
t.rast.colors input=cla color=bcyr&lt;br /&gt;
#using your dedicated color table&lt;br /&gt;
t.rast.colors input=cla rules=path/to/your/color_table&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further examples of '''extracting timestamps from map names''' can be found here: [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/maps_registration maps registration] wiki page.&lt;br /&gt;
&lt;br /&gt;
=== Getting some basic info and statistics ===&lt;br /&gt;
&lt;br /&gt;
We now check the space time data sets we have in our mapset with {{cmd|t.list}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.list type=strds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and get information about our recently created strds. See {{cmd|t.info}} for additional uses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.info type=strds input=cla &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  +-------------------- Space Time Raster Dataset -----------------------------+&lt;br /&gt;
  |                                                                            |&lt;br /&gt;
  +-------------------- Basic information -------------------------------------+&lt;br /&gt;
  | Id: ........................ cla@clorofila&lt;br /&gt;
  | Name: ...................... cla&lt;br /&gt;
  | Mapset: .................... clorofila&lt;br /&gt;
  | Creator: ................... veroandreo&lt;br /&gt;
  | Temporal type: ............. absolute&lt;br /&gt;
  | Creation time: ............. 2014-04-29 14:23:00.579342&lt;br /&gt;
  | Modification time:.......... 2014-05-12 09:15:08.917309&lt;br /&gt;
  | Semantic type:.............. mean&lt;br /&gt;
  +-------------------- Absolute time -----------------------------------------+&lt;br /&gt;
  | Start time:................. 2003-01-01 00:00:00&lt;br /&gt;
  | End time:................... 2014-01-01 00:00:00&lt;br /&gt;
  | Granularity:................ 1 day&lt;br /&gt;
  | Temporal type of maps:...... interval&lt;br /&gt;
  +-------------------- Spatial extent ----------------------------------------+&lt;br /&gt;
  | North:...................... -38.0&lt;br /&gt;
  | South:...................... -55.0&lt;br /&gt;
  | East:.. .................... -55.0&lt;br /&gt;
  | West:....................... -70.0&lt;br /&gt;
  | Top:........................ 0.0&lt;br /&gt;
  | Bottom:..................... 0.0&lt;br /&gt;
  +-------------------- Metadata information ----------------------------------+&lt;br /&gt;
  | Raster register table:...... raster_map_register_91ba57d5f0924f4fa0bd7176a1b39b2f&lt;br /&gt;
  | North-South resolution min:. 0.041667&lt;br /&gt;
  | North-South resolution max:. 0.041667&lt;br /&gt;
  | East-west resolution min:... 0.041667&lt;br /&gt;
  | East-west resolution max:... 0.041667&lt;br /&gt;
  | Minimum value min:.......... 0.02925&lt;br /&gt;
  | Minimum value max:.......... 0.26472&lt;br /&gt;
  | Maximum value min:.......... 5.2104&lt;br /&gt;
  | Maximum value max:.......... 99.953934&lt;br /&gt;
  | Aggregation type:........... None&lt;br /&gt;
  | Number of registered maps:.. 506&lt;br /&gt;
  |&lt;br /&gt;
  | Title:&lt;br /&gt;
  | Chlorophyll-a&lt;br /&gt;
  | Description:&lt;br /&gt;
  | Concentracion de Clorofila a&lt;br /&gt;
  | Command history:&lt;br /&gt;
  | # 2014-04-29 14:23:00 &lt;br /&gt;
  | t.create type=&amp;quot;strds&amp;quot; temporaltype=&amp;quot;absolute&amp;quot;&lt;br /&gt;
  |     output=&amp;quot;cla&amp;quot; title=&amp;quot;Chlorophyll-a&amp;quot;&lt;br /&gt;
  |     description=&amp;quot;Concentracion de Clorofila a&amp;quot; --o&lt;br /&gt;
  | # 2014-04-29 14:23:23 &lt;br /&gt;
  | t.register --o type=&amp;quot;rast&amp;quot; input=&amp;quot;cla&amp;quot;&lt;br /&gt;
  |     file=&amp;quot;input_list_cla.txt&amp;quot;&lt;br /&gt;
  | &lt;br /&gt;
  +----------------------------------------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
Now, we get univariate statistics from the non-null cells for each registered raster map of the strds. For that matter we use {{cmd|t.rast.univar}} which, by default, returns the name of the map, the start and end date of dataset and the following values: ''mean, minimum and maximum vale, mean_of_abs, standard deviation, variance, coeff_var, number of null cells, total number of cell''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.univar input=cla&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or, you can send the output to a text file using&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.univar input=cla separator=comma output=stats_cla.csv&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file &amp;quot;stats_cla.csv&amp;quot; you can now open in a spreadsheet or statistical software for inspection and plotting.&lt;br /&gt;
&lt;br /&gt;
=== Listing maps and selections ===&lt;br /&gt;
&lt;br /&gt;
The module {{cmd|t.rast.list}} allows you to list all the maps registered in a strds or a selection of them and, provides options for different listing methods, sorting of the list, information to print and so on. The ''where'' option in t.rast.list allows to perform different selections of maps to list. The ''columns'' that can be used to perform these selections are: ''id, name, creator, mapset, temporal_type, creation_time, start_time, end_time, north, south, west, east, nsres, ewres, cols, rows, number_of_cells, min and max''. (Note that for vector time series, i.e. stvds, the columns in {{cmd|t.vect.list}} differ from those for strds. You can check that with &amp;lt;code&amp;gt;t.vect.list --help&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=cla method=gran granule=&amp;quot;1 month&amp;quot;&lt;br /&gt;
# this will give one image every one month, 3 months, 1 year, or the granule you choose&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla order=min columns=id,name,start_time,min where=&amp;quot;min &amp;lt;= '0.05'&amp;quot; &lt;br /&gt;
# this will order by minimum value all the maps in the strds that have a minimum value lower than or equal to 0.05&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla order=max columns=name,start_time,max where=&amp;quot;max &amp;gt; '10.0'&amp;quot;&lt;br /&gt;
# maps ordered by maximum value in which maximum value is higher than 10.&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;start_time &amp;gt;= '2003-01' and start_time &amp;lt;= '2003-06'&amp;quot; &lt;br /&gt;
# all the maps in the first 6 month of the time series&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;strftime('%m', start_time)='01'&amp;quot;&lt;br /&gt;
# all the maps from January&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;strftime('%m-%d', start_time)='01-01'&amp;quot;&lt;br /&gt;
# all the maps from January, 1st&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;strftime('%w', start_time)='1'&amp;quot;&lt;br /&gt;
# all Mondays in the time series (Sunday is 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you have monthly (instead of 8-day products) data and you want to list all January maps, then you can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;start_time=datetime(start_time, 'start of year', ' 0 month')&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: '''Do not forget to use single quotes around date''', neither in {{cmd|t.rast.list}} nor in any other of the t.* modules offering the ''where'' option, because the clause will be ignored (i.e.: no selection performed) and no warning nor error will be printed.&lt;br /&gt;
&lt;br /&gt;
=== Visualization ===&lt;br /&gt;
&lt;br /&gt;
There are different visualization options for strds.&lt;br /&gt;
&lt;br /&gt;
* {{cmd|g.gui.timeline}} allows to compare temporal datasets by displaying their temporal extents in a plot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# only temporal extent&lt;br /&gt;
g.gui.timeline inputs=cla&lt;br /&gt;
# temporal and spatio-temporal extent&lt;br /&gt;
g.gui.timeline -3 inputs=cla&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Cla strds.png|center|thumb|560px|Temporal and spatio-temporal extent of cla strds.]]&lt;br /&gt;
&lt;br /&gt;
* {{cmd|g.gui.tplot}} allows to see the values of one or more temporal datasets for a queried point defined by a coordinate pair.&lt;br /&gt;
&lt;br /&gt;
Steps to use this module are:&lt;br /&gt;
&lt;br /&gt;
# Select strds&lt;br /&gt;
# Select pair of coordinates (east,north) or mark a point in the map&lt;br /&gt;
# Hit Draw&lt;br /&gt;
# Customize plot as desired&lt;br /&gt;
# Save&lt;br /&gt;
&lt;br /&gt;
[[Image:Output gguitplot.png|center|thumb|800px|Time series plot (Chlorophyll vs Time) for a certain coordinate pair in the study area]]&lt;br /&gt;
&lt;br /&gt;
* {{cmd|g.gui.animation}} is the tool for animating a series of raster and vector maps or a space time raster or vector dataset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g.gui.animation strds=cla_monthly_average&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Grass70 temporal chlorophyll anim small.gif|framed|center|Monthly mean chlorophyll-a concentration]]&lt;br /&gt;
&lt;br /&gt;
=== Aggregation ===&lt;br /&gt;
&lt;br /&gt;
For aggregations of data with different methods and different granularities, there are two very useful commands: &lt;br /&gt;
&lt;br /&gt;
* {{cmd|t.rast.series}} that applies different aggregation methods from {{cmd|r.series}} on all or a subset of raster maps in a strds, and &lt;br /&gt;
&lt;br /&gt;
* {{cmd|t.rast.aggregate}} that temporally aggregates the maps in a strds by a user defined granularity.&lt;br /&gt;
&lt;br /&gt;
With these modules it is very simple to get maps of basic statistical parameters for different temporal granules, and this permits the analysis of the spatio-temporal variability of the variable of interest.&lt;br /&gt;
&lt;br /&gt;
Some examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# yearly aggregation&lt;br /&gt;
t.rast.aggregate input=cla output=cla_yearly_average basename=cla_yearly_average \&lt;br /&gt;
  granularity=&amp;quot;1 years&amp;quot; method=average sampling=starts suffix=gran&lt;br /&gt;
&lt;br /&gt;
# yearly aggregation with corresponding methods (output: 7 strds with 11 maps each)&lt;br /&gt;
for method in average median mode minimum maximum stddev range ; do&lt;br /&gt;
    t.rast.aggregate input=cla output=cla_yearly_${method} \&lt;br /&gt;
    basename=cla_yearly_${method} granularity=&amp;quot;1 years&amp;quot; \&lt;br /&gt;
    method=${method} sampling=starts suffix=gran&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the where parameter, as exemplified before, we can select for example all 8-day products which start_time is 01 (January) over the years. Like this we can get the so-known '''climatologies'''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.series input=cla method=average where=&amp;quot;strftime('%m', start_time)='01'&amp;quot; output=january_average&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We could also get long term averages for specific periods in a time series, e.g. January 5-year mean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.series input=cla \&lt;br /&gt;
  where=&amp;quot;start_time &amp;gt;= '2005-01-01' AND start_time &amp;lt;= '2009-12-01' AND strftime('%m', start_time)='01'&amp;quot; \&lt;br /&gt;
  method=average output=jan_cla_mean_2000_2004&lt;br /&gt;
&lt;br /&gt;
# say we take a 15 years period (2000-2014) of monthly data and we want monthly 5-year averages&lt;br /&gt;
YEAR_START=(2000 2005 2010)&lt;br /&gt;
YEAR_END=(2004 2009 2014)&lt;br /&gt;
count=${#YEAR_START[@]}&lt;br /&gt;
&lt;br /&gt;
for i in `seq 1 $count` ; do&lt;br /&gt;
 echo ${YEAR_START[$i-1]} ${YEAR_END[$i-1]}&lt;br /&gt;
 for MONTH in `seq -w 1 12` ; do&lt;br /&gt;
  t.rast.series input=cla \&lt;br /&gt;
   where=&amp;quot;start_time &amp;gt;= '&amp;quot;${YEAR_START[$i-1]}&amp;quot;-01-01' AND start_time &amp;lt;= '&amp;quot;${YEAR_END[$i-1]}&amp;quot;-12-01' AND strftime('%m', start_time)='&amp;quot;${MONTH}&amp;quot;'&amp;quot; \&lt;br /&gt;
   method=average output=cla_${YEAR_START[$i-1]}_${YEAR_END[$i-1]}_month_${MONTH} --o&lt;br /&gt;
 done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generalizing a bit, to obtain monthly climatologies from a time series, we can: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# monthly climatologies&lt;br /&gt;
for MONTH in `seq -w 1 12` ; do &lt;br /&gt;
  for METHOD in average median stddev minimum maximum ; do &lt;br /&gt;
    t.rast.series input=cla method=${METHOD} where=&amp;quot;strftime('%m', start_time)='${MONTH}'&amp;quot; output=${METHOD}_${MONTH}&lt;br /&gt;
  done&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# seasonal climatologies&lt;br /&gt;
for i in &amp;quot;01 02 03&amp;quot; &amp;quot;04 05 06&amp;quot; &amp;quot;07 08 09&amp;quot; &amp;quot;10 11 12&amp;quot; ; do&lt;br /&gt;
    set -- $i ; echo $1 $2 $3&lt;br /&gt;
    for m in average median stddev minimum maximum ; do&lt;br /&gt;
        t.rast.series input=cla method=${m} output=${m}_${1} \&lt;br /&gt;
        where=&amp;quot;strftime('%m',start_time)='&amp;quot;${1}&amp;quot;' or strftime('%m',start_time)='&amp;quot;${2}&amp;quot;' or strftime('%m', start_time)='&amp;quot;${3}&amp;quot;'&amp;quot;                      &lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the climatologies previously obtained, we'll now estimate monthly anomalies in the mean, max and min Cl-a concentration. First, we need to monthly aggregate data, and then do the difference between the monthly climatology and each respective monthly aggregate. We'll do the aggregation for the average, minimum and maximum of Cl-a concentration (from 506 input maps in cla strds, we'll get 132 maps in each monthly aggregated new strds).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# monthly aggregates (132 maps)&lt;br /&gt;
for method in average minimum maximum ; do&lt;br /&gt;
    t.rast.aggregate input=cla output=cla_monthly_${method} \&lt;br /&gt;
    basename=cla_monthly_${method} \&lt;br /&gt;
    granularity=&amp;quot;1 months&amp;quot; method=${method} \&lt;br /&gt;
    sampling=contains suffix=gran&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# January anomalies in mean, min and max Cl-a&lt;br /&gt;
t.rast.list -u input=cla_monthly_average where=&amp;quot;start_time=datetime(start_time, 'start of year', '0 month')&amp;quot; columns=name&lt;br /&gt;
&lt;br /&gt;
for m in average minimum maximum ; do &lt;br /&gt;
    for i in 1 13 25 37 49 61 73 85 97 109 121 ; do # these numbers correspond to all January monthly aggregates&lt;br /&gt;
        r.mapcalc expression=&amp;quot;Jan_${m}_anomaly_${i}=cla_monthly_${m}_${i}-01_${m}&amp;quot; &lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use {{cmd|t.rast.list}} for looping, the same way you use {{cmd|g.list}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for map in `t.rast.list -u input=cla_monthly_average where=&amp;quot;strftime('%m', start_time)='01'&amp;quot; columns=name` ; do&lt;br /&gt;
    r.mapcalc expression=&amp;quot;anomaly_${map}=${map}-01_average&amp;quot; &lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generalizing, we can estimate all monthly anomalies from mean like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq -w 1 12` ; do&lt;br /&gt;
    for map in `t.rast.list -u input=cla_monthly_average columns=name where=&amp;quot;strftime('%m', start_time)='&amp;quot;${i}&amp;quot;'&amp;quot;` ; do&lt;br /&gt;
        r.mapcalc expression=&amp;quot;anomaly_${map}=${map}-average_${i}&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Say we now need to know the date of the maximum value of Cl-a concentration over all the study period and/or on a yearly basis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# map index for the overall maximum Cl-a value &lt;br /&gt;
t.rast.series input=cla method=max_raster output=cla_max_index&lt;br /&gt;
&lt;br /&gt;
# map index for the yearly maximum Cl-a value &lt;br /&gt;
t.rast.aggregate input=cla granularity=&amp;quot;1 year&amp;quot; method=max_raster output=yearly_max_index basename=yearly_max_index suffix=gran&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The outputs show (pixelwise) the map index in which the maximum value of Cl-a occurs (from 1 to 506 and from 1 to 46, for the whole time series and on a yearly basis, respectively). For relative time this is maybe enough, but you may then want to reclassify data to get DOY, for example. In that case, you may use {{cmd|r.reclass}}.&lt;br /&gt;
&lt;br /&gt;
If you already have monthly data, you can get climatologies quite simply as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# January averages&lt;br /&gt;
t.rast.series input=cla_monthly method=average where=&amp;quot;start_time=datetime(start_time, 'start of year', '0 month')&amp;quot; output=jan_average&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Spatio-temporal algebra with STRDS ===&lt;br /&gt;
&lt;br /&gt;
The module {{cmd|t.rast.mapcalc}} allows us to perform spatio-temporal mapcalc expressions on temporally sampled maps of strds. There are spatial and temporal operators available for the &amp;quot;expression&amp;quot; string. Spatial operators, functions and internal variables are those used in {{cmd|r.mapcalc}}. Temporal internal variables supported for both relative and absolute time include: td(), start_time() and end_time(). There are also several very useful internal variables supported especially for absolute time of the current sample interval or instance, e.g.: start_doy(), start_year(), start_month() and so on (see {{cmd|t.rast.mapcalc}} manual for further details and examples).&lt;br /&gt;
&lt;br /&gt;
Some examples now. Say we did some analysis and decided that we will only consider values higher than 0.05. Then, we need to set all values below that threshold to null.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.mapcalc input=cla expression=&amp;quot;if(cla &amp;lt; 0.05, null(), cla)&amp;quot; output=cla_corrected  basename=cla_corrected&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or we may also want to take negative erroneous values to the knowm minimum of the strds, so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.series input=cla method=minimum output=min_cla&lt;br /&gt;
t.rast.mapcalc input=cla expression=&amp;quot;if(cla &amp;lt; 0.0, min_cla, cla)&amp;quot; output=cla_corrected  basename=cla_corrected&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We may also need to reclassify all maps in the strds according to a certain threshold, e.g.: a certain level of Cl-a that indicates bloom conditions, in order to get bloom frequency afterwards:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# reclassify&lt;br /&gt;
t.rast.mapcalc -n input=cla output=cla_bloom basename=cla_bloom expression=&amp;quot;if(cla &amp;gt; 0.75, 1, null())&amp;quot;&lt;br /&gt;
# bloom frequency&lt;br /&gt;
t.rast.series input=cla_bloom output=bloom_freq method=count&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do you remember we wanted to get the DOY of maximum Cl-a value before? Well, here's another way of doing it... &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# overall maximum value&lt;br /&gt;
t.rast.series input=cla method=maximum output=max_cla&lt;br /&gt;
# new strds with DOY of overall maximum &lt;br /&gt;
t.rast.mapcalc -n inputs=cla output=date_max_cla expression=&amp;quot;if(cla == max_cla,start_doy(),null())&amp;quot; basename=date_max_cla &lt;br /&gt;
# map with DOY of overall maximum&lt;br /&gt;
t.rast.series input=date_max_cla method=maximum output=max_cla_date&lt;br /&gt;
# remove date_max_cla strds (we were only interested in the resulting aggregated map)&lt;br /&gt;
t.remove -rf inputs=date_max_cla &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There's also a {{cmd|t.rast.algebra}} module that allows for temporal and spatial operations on strds by means of temporal raster algebra. The module expects an expression in the following form: &amp;quot;result = expression&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The statement structure is similar to r.mapcalc, the result is the name of a new strds that will contain the result of the calculation given as expression. Expressions can be any valid or nested combination of temporal operations and spatial overlay or buffer functions that are provided by the temporal algebra. See the manual for further details and explanations.&lt;br /&gt;
&lt;br /&gt;
We'll use this module to estimate the rate of change (slope) between every pair of maps in the &amp;quot;cla&amp;quot; strds. The result will be a new strds consisting of maps with the slope value between every consecutive pair of maps in the original strds:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# we set 8 as fixed denominator, because products are 8-day compositions&lt;br /&gt;
t.rast.algebra expression=&amp;quot;slope_cla = (cla[1]-cla[0])/8.0&amp;quot; basename=slope_cla&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can then use any of the aggregation modules that we saw before to get the maximum or minimumm rate of change for different granularities.&lt;br /&gt;
&lt;br /&gt;
===== Some known issues with t.rast.mapcalc =====&lt;br /&gt;
&lt;br /&gt;
It has been observed that if the names of inputs and output space time datasets (partially) match each other, t.rast.mapcalc may not work properly (especially when several input strds are used). This is because the module uses a simple search and replace approach to substitute the input strds with the corresponding map names. Eventualy, choosing a specific order for the input strds in the input parameter may reduce the risk of wrong substitution. Therefore, especially in operations involving several strds (with partially matching names) as inputs, '''it is recommended to use {{cmd|t.rast.algebra}} that correctly recognizes spatio-temporal datasets''' rather than t.rast.mapcalc.&lt;br /&gt;
&lt;br /&gt;
=== Subseting and something else ===&lt;br /&gt;
&lt;br /&gt;
{{cmd|t.rast.extract}} is another really useful module within temporal GRASS. It allows to extract a subset of a strds and store it in a different strds. The &amp;quot;where&amp;quot; condition is used to do the subset, but you can also specify a r.mapcalc sub-expression that performs operations on all maps of the selected subset. If no r.mapcalc expression is defined, the selected maps are simply registered in the new output strds.&lt;br /&gt;
&lt;br /&gt;
Say we need to know in how many maps of the strds minimum values are below a certain threshold, and not only that, but we also want to know how many pixels per map meet that condition. Then, we can do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.extract input=cla where=&amp;quot;min &amp;lt;= '0.05'&amp;quot; output=cla_less_05 basename=cla_less_05 expression=&amp;quot;if(cla &amp;lt; 0.05, 1, null())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to extract those maps with a minimum value lower than 0.05, and in the same step put 1 in every cell meeting the criterium and null everywhere else. To get a count of maps and pixels meeting the condition we may use:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# univariate stistics to get the count per map  &lt;br /&gt;
t.rast.univar input=cla_less_05 &lt;br /&gt;
# count map of cells with min value &amp;lt; 0.05&lt;br /&gt;
t.rast.series input=cla_less_05 output=count_cla_less_05 method=count&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Importing / Exporting STRDS ===&lt;br /&gt;
&lt;br /&gt;
Say we now need to do some processing in R (e.g.: run [http://menugget.blogspot.com.ar/2012/10/dineof-data-interpolating-empirical.html DINEOF] to fill gaps in data), so we need to export our strds, hence we use {{cmd|t.rast.export}}. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.export input=cla output=cla4R compression=gzip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After we have done our analysis we can import the whole strds back to GRASS again, exporting it from R with read/write.tgrass from [http://cran.r-project.org/web/packages/spacetime/index.html spacetime] R package and using {{cmd|t.rast.import}} in GRASS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.import input=cla_from_R.tar.gz output=cla_from_R basename=new_map directory=/tmp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a full example of how to handle raster time series between GRASS and R, please visit the  [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/raster_time_series_grass_R_statistics time series GRASS-R Statistics] wiki. The example is based on North Carolina climate location [http://courses.ncsu.edu/mea592/common/media/02/nc_climate_spm_2000_2012.zip] and includes the following steps:&lt;br /&gt;
&lt;br /&gt;
# Exporting the strds out of GRASS&lt;br /&gt;
# Importing into R&lt;br /&gt;
# Re-formating the data&lt;br /&gt;
# Running [http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF DINEOF]&lt;br /&gt;
# Re-constructing the raster time series&lt;br /&gt;
# Exporting out of R, and &lt;br /&gt;
# Importing the gap-filled new strds into GRASS.&lt;br /&gt;
&lt;br /&gt;
=== Neighborhood analysis ===&lt;br /&gt;
&lt;br /&gt;
{{cmd|t.rast.neighbors}} performs a neighborhood analysis for each map in a space time raster dataset. This module supports a subset of the options already available in r.neighbors. Both, size of the neighborhood and aggregation method can be chosen. As an example, we'll estimate mean Cl-a concentration in a 3x3 neighborhood for every map in the strds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.neighbors input=cla output=cla_smoth base=cla_smooth method=average size=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Filling and reconstructing time series data with gaps ===&lt;br /&gt;
&lt;br /&gt;
==== Harmonic ANalysis of Time Series - HANTS ====&lt;br /&gt;
&lt;br /&gt;
{{AddonCmd|r.hants}} is an add-on not strictly within the temporal modules, but really useful when working with time series data, particularly with gappy data. Here's a simple example for generating a list of temporally ordered maps to use as input in '''r.hants''', running HANTS and getting a map of dominant frequencies, afterwards. See the manual for further information on parameter setting and explanations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# use t.rast.list to create a list of temporally ordered maps  &lt;br /&gt;
t.rast.list input=cla order=start_time columns=name -u &amp;gt; map_list.csv&lt;br /&gt;
&lt;br /&gt;
# a HANTS run using the list of maps&lt;br /&gt;
r.hants -l file=map_list.csv nf=5 fet=0.1 dod=11 base_period=46 suffix=_hants amplitude=amp_hants phase=pha_hants&lt;br /&gt;
&lt;br /&gt;
# dominant frequency map (0 means the dominant freq is 1, 1 that dominant freq is 2, and so on...)&lt;br /&gt;
r.series input=`g.list type=raster pattern=&amp;quot;amp_hants*&amp;quot; separator=comma` output=dominant_freq_hants method=max_raster&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Local Weighted Regression - LWR ====&lt;br /&gt;
&lt;br /&gt;
Another very useful add-on for the reconstruction of gappy time series, such as those from remote sensing imagery, is {{AddonCmd|r.series.lwr}}. This module performs a local weighted regression (LWR) of the input maps in order to estimate missing values and identify (and remove) outliers. See the manual for further information and explanations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# use same list as before&lt;br /&gt;
t.rast.list input=cla order=start_time columns=name -u &amp;gt; map_list.csv&lt;br /&gt;
&lt;br /&gt;
# run r.series.lwr&lt;br /&gt;
r.series.lwr file=map_list.csv suffix=_lwr order=2 weight=tricube range=0.0,65.0 dod=16 fet=0.1 -l&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Estimate Mean Absolute Error (MAE) ====&lt;br /&gt;
&lt;br /&gt;
One of the measures used to assess how close forecasts or predictions might be to the observed values is the&lt;br /&gt;
[https://en.wikipedia.org/wiki/Mean_absolute_error mean absolute error]. We will use it to evaluate the performance of HANTS and LWR. &lt;br /&gt;
&lt;br /&gt;
First, we will rebuild our time series with the corresponding output maps of r.hants and r.series.lwr. Here, only showed for LWR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# re-build time series &lt;br /&gt;
t.create type=strds temporaltype=absolute output=cla_lwr \&lt;br /&gt;
 title=&amp;quot;LWR output for Chl-a&amp;quot; \&lt;br /&gt;
 description=&amp;quot;MODIS Aqua L3 Chl-a 8-day 4km 2010-2013. Reconstruction with r.series.lwr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# create list with filenames to parse&lt;br /&gt;
g.list type=raster pattern=&amp;quot;*lwr&amp;quot; output=names_list&lt;br /&gt;
&lt;br /&gt;
# parse filenames, convert YYYY-DOY to YYYY-MM-DD and write file to use in t.register&lt;br /&gt;
for mapname in `cat names_list` ; do&lt;br /&gt;
  year_start=`echo ${mapname:1:4}`&lt;br /&gt;
  doy_start=`echo ${mapname:5:3}`&lt;br /&gt;
  year_end=`echo ${mapname:8:4}`&lt;br /&gt;
  doy_end=`echo ${mapname:12:3}`&lt;br /&gt;
  # convert YYYY-DOY to YYYY-MM-DD&lt;br /&gt;
  #BEWARE: leading zeros make bash assume the number is in base 8 system, not base 10!&lt;br /&gt;
  doy_start=`echo &amp;quot;$doy_start&amp;quot; | sed 's/^0*//'`&lt;br /&gt;
  doy_end=`echo &amp;quot;$doy_end&amp;quot; | sed 's/^0*//'`&lt;br /&gt;
  START_DATE=`date -d &amp;quot;${year_start}-01-01 +$(( ${doy_start} - 1 ))days&amp;quot; +%Y-%m-%d`&lt;br /&gt;
  END_DATE=`date -d &amp;quot;${year_end}-01-01 +$(( ${doy_end} ))days&amp;quot; +%Y-%m-%d`&lt;br /&gt;
  # print mapname, start and end date&lt;br /&gt;
  echo &amp;quot;$mapname|$START_DATE|$END_DATE&amp;quot; &amp;gt;&amp;gt; map_list_start_and_end_time.txt&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# register maps in strds&lt;br /&gt;
t.register input=cla_lwr type=raster file=map_list_start_and_end_time.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, we will estimate the MAE and use it to compare both methods. Again, only the example for LWR is showed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# obtain a strds of the absolute differences between predicted and observed Chl-a values &lt;br /&gt;
t.rast.algebra -n \&lt;br /&gt;
 basename=lwr_minus_orig suffix=gran \&lt;br /&gt;
 expression=&amp;quot;abs_lwr_minus_orig = abs(cla_lwr - cla)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# sum of the absolute differences (numerator) and count of non-null maps per pixel (denominator) &lt;br /&gt;
t.rast.series input=abs_lwr_minus_orig output=sum_abs_lwr_minus_orig method=sum&lt;br /&gt;
t.rast.series input=abs_lwr_minus_orig output=count_abs_lwr_minus_orig method=count&lt;br /&gt;
&lt;br /&gt;
# MAE for LWR&lt;br /&gt;
r.mapcalc expression=&amp;quot;mae_lwr = sum_abs_lwr_minus_orig / count_abs_lwr_minus_orig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# remove intermediate strds and maps&lt;br /&gt;
t.remove -rf abs_lwr_minus_orig&lt;br /&gt;
g.remove -f type=raster name=sum_abs_lwr_minus_orig,count_abs_lwr_minus_orig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's now compare the predictions generated by both methods, HANTS and LWR, and the corresponding mean absolute error maps. &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:cla_vs_cla_hants.png|center|thumb|560px|Original Chl-a time series vs HANTS output.]] || [[Image:cla_vs_cla_lwr.png|center|thumb|560px|Original Chl-a time series vs LWR output.)]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:mae_hants_map.png|center|thumb|560px|MAE of HANTS predictions.]] || [[Image:mae_lwr_map.png|center|thumb|560px|MAE of LWR predictions.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extract strds values for points in a vector ===&lt;br /&gt;
&lt;br /&gt;
Let's say we need to extract values of the strds to check the behaviour of HANTS at given locations and compare it with the original values. We can graphically do that with {{cmd|g.gui.tplot}}, but if you need to take data outside GRASS, say, read it into R and do some other analysis (See [http://grasswiki.osgeo.org/wiki/R_statistics/rgrass7#Reading_in_data R_Statistics wiki page]) you may use {{cmd|v.what.strds}}. This module retrieves raster values from a given strds to the attribute table of a point vector map.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# original data&lt;br /&gt;
v.what.strds input=points_cla strds=cla output=points_cla_out&lt;br /&gt;
v.db.select map=points_cla_out file=ts_points_cla.csv&lt;br /&gt;
&lt;br /&gt;
# HANTS' reconstructed data (several runs)&lt;br /&gt;
for i in `seq 1 13` ; do&lt;br /&gt;
    v.what.strds --overwrite input=points_cla strds=cla_hants_${i} output=points_hants_${i}_out&lt;br /&gt;
    v.db.select map=points_cla file=ts_points_hants_${i}.csv&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option would be to use {{cmd|t.rast.what}} that samples a space time raster dataset at specific vector point coordinates and writes the output to stdout or text file using different layouts. This module doesn't write the vector's attribute table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.what points=points strds=cla output=cla_points.csv null_value=NA separator=comma&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Some other modules and addons useful in the time series context ===&lt;br /&gt;
&lt;br /&gt;
* {{cmd|t.rast.accumulate}} and {{cmd|t.rast.accdetect}} to compute and detect cyclic accumulations in raster time series.&lt;br /&gt;
* {{AddonCmd|t.rast.what.aggr}} to sample a strds with a vector point map and get aggregated values of desired granularity either in stdout or in the vector's attribute table.&lt;br /&gt;
* {{AddonCmd|t.rast.out.xyz}} to export a strds to a CSV file.&lt;br /&gt;
* {{AddonCmd|t.rast.null}} to manage NULL-values of a strds.&lt;br /&gt;
* {{AddonCmd|v.strds.stats}} to calculate univariate statistics from a strds based on a vector map.&lt;br /&gt;
* {{AddonCmd|r.seasons}} to extract seasons from a time series.&lt;br /&gt;
* {{AddonCmd|r.bioclim}} to calculate bio-climatic indices.&lt;br /&gt;
* {{AddonCmd|r.change.info}} for landscape change assessment.&lt;br /&gt;
* {{AddonCmd|r.quantile.ref}} to determine the corresponding quantile for an input value from a reference raster time series.&lt;br /&gt;
* {{AddonCmd|r.regression.series}} and {{AddonCmd|r.mregression.series}} to perform univariate and multivariate linear regression among raster time series, respectively.&lt;br /&gt;
* {{AddonCmd|r.series.diversity}} to estimate diversity indices in raster time series.&lt;br /&gt;
* {{AddonCmd|r.series.decompose}} to decompose raster time series.&lt;br /&gt;
* {{AddonCmd|r.series.filter}} to apply Savitzky-Golay or median filters to raster time series.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== Best practice data organization ===&lt;br /&gt;
&lt;br /&gt;
When it comes to time series, thousands of maps are often involved. In order to keep control, here some suggestions:&lt;br /&gt;
&lt;br /&gt;
* separate original data from derived aggregates: store them in separate mapsets&lt;br /&gt;
* for specific projects, maintain them in individual mapsets. You can access the STDS stored in other mapsets (same location) through&lt;br /&gt;
 t.some.module input=my_strds@the_other_mapset output=result ...&lt;br /&gt;
as long as mapsets are indeed accessible, i.e.: in the mapset's search path (See {{cmd|g.mapsets}}).&lt;br /&gt;
&lt;br /&gt;
=== Best practice multi user management ===&lt;br /&gt;
&lt;br /&gt;
GRASS GIS supports multi-user data management and allows several users to work in the same location within their own mapsets. Data can be read from other mapsets but not edited there. The same principle applies to space time datasets (STDS), i.e. in case of having a collection of maps corresponding to a time series in a dedicated mapset, you need to also create the STDS therein (See {{cmd|t.create}} and {{cmd|t.register}}), so it is visible to other users in other mapsets when they use {{cmd|t.list}}, for example.&lt;br /&gt;
&lt;br /&gt;
=== Use of ''where'' parameter (ticket [https://trac.osgeo.org/grass/ticket/2270 #2270]) ===&lt;br /&gt;
&lt;br /&gt;
Pay attention when using the &amp;quot;where&amp;quot; option in t.* modules. In some occasions it may not yield the expected results. Given the backend database chosen for TGRASS implementation, you may not be selecting all maps you think if you forget to set time along with date in the where clause. For example, let's say we need to select maps from 2005-03-01 until 2005-05-31 included. You would think the following command would do the job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list daily_temp where=&amp;quot;start_time &amp;gt; '2005-03-01' and start_time &amp;lt;= '2005-05-31'&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
but, no... The last map in the list is:&lt;br /&gt;
&lt;br /&gt;
 temp_0516|pruebas|2005-05-30 00:00:00|2005-05-31 00:00:00&lt;br /&gt;
&lt;br /&gt;
which would be equivalent to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list daily_temp where=&amp;quot;start_time &amp;gt; '2005-03-01' and start_time &amp;lt; '2005-05-31'&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a product of sqlite. Therefore, if you need the last date included in your selection (map from 2005-05-31 in our example), you need to set time too.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list daily_temp where=&amp;quot;start_time &amp;gt; '2005-03-01' and start_time &amp;lt;= '2005-05-31 00:00:00'&amp;quot; | tail -n1&lt;br /&gt;
temp_0517|pruebas|2005-05-31 00:00:00|2005-06-01 00:00:00&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aggregation with defined granularity ===&lt;br /&gt;
&lt;br /&gt;
''Q: I need to aggregate a strds with a granularity of 1 year, but shifting the start day one month in each run, i.e.: changing the start_time to 2003-02-01, 2003-03-01, 2003-04-01 and so on... My question is: if i recursively change start_time with the 'where' parameter, will the module t.rast.aggregate &amp;quot;aggregate&amp;quot; to the next february, march, april (what i'd wish) or just till the end of 2003?''&lt;br /&gt;
&lt;br /&gt;
A: If you specify a granularity of a year, then the start time to perform the aggregation will always be shifted to the 1st January of the current year and the end time the 1st January of the next year (eg. 2002-01-01 - 2003-01-01).  If you wish to aggregate a full year but shifting one month forward then simply use a granularity of 12 months.&lt;br /&gt;
&lt;br /&gt;
=== Listing maps with specific start month ===&lt;br /&gt;
&lt;br /&gt;
''Q: I have a strds with 506 maps that correspond to 8-day composite products. I need to sequentially list all maps which &amp;quot;start_month&amp;quot; is January, February and so on... to use them as input in {{cmd|r.series}} (or {{cmd|t.rast.series}}). How can I achieve that?''&lt;br /&gt;
&lt;br /&gt;
A: You can use the [https://www.sqlite.org/lang_datefunc.html datetime functionality of SQLite] to perform this task, this should work for January:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=cla_null_mayor65 \&lt;br /&gt;
where='start_time &amp;gt;= datetime(start_time, &amp;quot;start of year&amp;quot;) and start_time &amp;lt;= datetime(start_time, &amp;quot;start of year&amp;quot;, &amp;quot;1 month&amp;quot;)'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aggregation of seasonal data ===&lt;br /&gt;
&lt;br /&gt;
''Q: How can I calculate average seasonal temperature starting from a daily temperatures temporal dataset?''&lt;br /&gt;
&lt;br /&gt;
A: Use {{cmd|t.rast.aggregate.ds}}, the input is the daily strds, the sampling stds should have seasonal intervals. Then use average as method. The output will have seasonal aggregated temperatures. For a detailed workflow see: [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/seasonal_aggregation seasonal aggregation example].&lt;br /&gt;
&lt;br /&gt;
=== Aggregation of seasonal data using time ranges ===&lt;br /&gt;
&lt;br /&gt;
A way to aggregate seasons from daily data without granularity but by using time ranges is shown here. The issue is to include for the season calculation also a month from the previous year. This can be addressed with some datetime calculations in SQLite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# We assume to have daily temperature data in DB &amp;quot;temp_daily_average&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# loop over seasons, generate aggregates:&lt;br /&gt;
### 'start_time' and 'end_time' are columns in TGRASS&lt;br /&gt;
&lt;br /&gt;
for year in `seq 2004 2014` ; do&lt;br /&gt;
&lt;br /&gt;
    # we consider also a month of the previous year&lt;br /&gt;
    for month in &amp;quot;12 01 02&amp;quot; &amp;quot;03 04 05&amp;quot; &amp;quot;06 07 08&amp;quot; &amp;quot;09 10 11&amp;quot; ; do&lt;br /&gt;
        set -- $month ; echo $1 $2 $3&lt;br /&gt;
&lt;br /&gt;
        prevyear=$year&lt;br /&gt;
        if [ $1 -eq 12 ] ; then&lt;br /&gt;
           prevyear=`expr $year - 1`&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        # prepare query strings in SQLite&lt;br /&gt;
        MYSTART=`echo &amp;quot;SELECT strftime(datetime('${prevyear}-${1}-01'));&amp;quot; | sqlite3`&lt;br /&gt;
        MYEND=`echo &amp;quot;SELECT strftime(datetime('${prevyear}-${1}-01','+3 month'));&amp;quot; | sqlite3`&lt;br /&gt;
&lt;br /&gt;
        # Debugging only, to see what it does:&lt;br /&gt;
        echo &amp;quot;---- Querying ${prevyear}-${1}-01 ... ${year}-${3}-end:&amp;quot;&lt;br /&gt;
        # we use start_time and end_time to get the proper time range&lt;br /&gt;
        t.rast.list input=temp_daily_average@modis_lst_reconstructed_europe_daily \&lt;br /&gt;
        where=&amp;quot;start_time &amp;gt;= '$MYSTART' AND end_time &amp;lt;= '$MYEND'&amp;quot; &amp;gt; list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
	&lt;br /&gt;
        head -n 3 list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
        echo &amp;quot;...&amp;quot;&lt;br /&gt;
        tail -n 3 list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
        echo &amp;quot;=======&amp;quot;&lt;br /&gt;
        rm -f list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
        &lt;br /&gt;
        # calculate aggregates:&lt;br /&gt;
        method=&amp;quot;average&amp;quot;   # median mode minimum maximum stddev&lt;br /&gt;
        &lt;br /&gt;
        t.rast.series input=temp_daily_average@modis_lst_reconstructed_europe_daily \&lt;br /&gt;
        where=&amp;quot;start_time &amp;gt;= '$MYSTART' AND end_time &amp;lt;= '$MYEND'&amp;quot; \&lt;br /&gt;
        output=temp_${method}_${prevyear}_${1}&lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Much simpler '''alternative''' (which runs in parallel on multi-cores):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.aggregate input=A output=B basename=b where=&amp;quot;start_time &amp;gt;= '2004-03-01 00:00:00'&amp;quot; granularity=&amp;quot;3 months&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to count consecutive days that meet a certain condition? ===&lt;br /&gt;
&lt;br /&gt;
This example was kindly contributed by Thomas Leppelt and shows how to obtain the number of consecutive days with temperature below 0 per week.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Set the computational region and resolution&lt;br /&gt;
g.region -p n=-30 s=-50 e=-50 w=-70 res=1&lt;br /&gt;
&lt;br /&gt;
# We create maps for 100 days&lt;br /&gt;
for map in `seq 1 100` ; do&lt;br /&gt;
 # generate synthetic maps as a seeding random values for temperatures&lt;br /&gt;
 r.mapcalc -s expression=&amp;quot;daily_temp_${map} = rand(-20,20)&amp;quot; --o&lt;br /&gt;
 echo daily_temp_${map} &amp;gt;&amp;gt; map_list.txt&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
t.create type=strds temporaltype=absolute \&lt;br /&gt;
         output=temperature_daily \&lt;br /&gt;
         title=&amp;quot;Daily Temperature&amp;quot; \&lt;br /&gt;
         description=&amp;quot;Test dataset with daily temperature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
t.register -i type=raster input=temperature_daily \&lt;br /&gt;
           file=map_list.txt start=&amp;quot;2014-03-07&amp;quot; increment=&amp;quot;1 days&amp;quot; --o&lt;br /&gt;
&lt;br /&gt;
# check general information of the daily strds&lt;br /&gt;
t.info type=strds input=temperature_daily&lt;br /&gt;
&lt;br /&gt;
# Create weekly mask to which we will add 1 or 0 according to temperature in the days within it (each map in this week mask will have a value of 7)&lt;br /&gt;
t.rast.aggregate input=temperature_daily output=weekly_mask basename=mask_week granularity=&amp;quot;1 weeks&amp;quot; method=count&lt;br /&gt;
&lt;br /&gt;
# Calculate consecutive days with negative temperatures&lt;br /&gt;
t.rast.algebra base=neg_temp_days expression=&amp;quot;consecutive_days = weekly_mask {+,contains,l} if(temperature_daily &amp;lt; 0 &amp;amp;&amp;amp; temperature_daily[-1] &amp;lt; 0 || temperature_daily[1] &amp;lt; 0 &amp;amp;&amp;amp; temperature_daily &amp;lt; 0, 1, 0)&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Online tutorials and courses ==&lt;br /&gt;
&lt;br /&gt;
* [https://web.archive.org/web/20160119125858/www.geostat-course.org/topic_gebbert/ The temporal GRASS GIS framework: Introduction and application] by Sören Gebbert (2012)&lt;br /&gt;
* CZ: [https://web.archive.org/web/20180316200749/https://training.gismentors.eu/grass-gis-pokrocily/tgrass/index.html Úvod do časoprostorových analýz] (Introduction to space-time analysis) by Martin Landa (2015)&lt;br /&gt;
* [https://gismentors.github.io/grass-gis-workshop-jena/units/21.html Sentinel spatio-temporal processing] by Martin Landa (2020)&lt;br /&gt;
* [https://github.com/veroandreo/tgrass_workshop_foss4g_eu TGRASS: temporal data processing with GRASS GIS] FOSS4G-EU workshop by Veronica Andreo, Luca Delucchi and Markus Neteler (2017)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Gebbert, S., Pebesma, E. 2014. ''TGRASS: A temporal GIS for field based environmental modeling''. Environmental Modelling &amp;amp; Software 53, 1-12 ([https://doi.org/10.1016/j.envsoft.2013.11.001 DOI]) - [https://ifgi.uni-muenster.de/~epebe_01/tgrass.pdf preprint PDF]&lt;br /&gt;
* Gebbert, S., Pebesma, E. 2017. ''The GRASS GIS temporal framework''. International Journal of Geographical Information Science 31, 1273-1292 ([https://doi.org/10.1080/13658816.2017.1306862 DOI]) - [https://figshare.com/articles/journal_contribution/The_GRASS_GIS_temporal_framework/4834013/1/files/8024429.pdf PDF]&lt;br /&gt;
* Gebbert, S., Leppelt, T., Pebesma, E., 2019. ''A topology based spatio-temporal map algebra for big data analysis''. Data 4, 86. ([https://doi.org/10.3390/data4020086 DOI]) - [https://www.mdpi.com/2306-5729/4/2/86/pdf?version=1560849201 PDF]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* Introduction: [http://www.slideshare.net/Luis_de_Sousa/presentation-soeren GRASS as a Temporal GIS] by Sören Gebbert (slides)&lt;br /&gt;
* [https://archive.org/details/TheTemporalGrassGisFrameworkIntroductionAndApplication# The temporal GRASS GIS framework: Introduction and application] Video of Sören Gebbert's presentation in [http://www.geostat-course.org/Muenster_2012 GEOSTAT course] 2012&lt;br /&gt;
* [https://grass.osgeo.org/grass-stable/manuals/temporalintro.html Introduction to temporal modules] (GRASS GIS manual)&lt;br /&gt;
* [https://grass.osgeo.org/grass-stable/manuals/temporal.html Available temporal modules] (GRASS GIS manual)&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/Grass7/TemporalExtension Temporal Extension] (background info in trac)&lt;br /&gt;
* [[GRASS GSoC 2013 Temporal GIS Algebra for raster and vector data in GRASS]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Temporal]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing&amp;diff=28544</id>
		<title>Temporal data processing</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Temporal_data_processing&amp;diff=28544"/>
		<updated>2025-07-02T08:43:17Z</updated>

		<summary type="html">&lt;p&gt;Neteler: Cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TGRASS is the temporal enabled GRASS GIS.&lt;br /&gt;
TGRASS is completely metadata based, i.e. it does not change any data but simply handles the organization of raster, vector, raster3D maps actually stored in a GRASS GIS mapset by registering in an additional internal database. This is done specifically for managing temporal and spatial extent including temporal topology.&lt;br /&gt;
&lt;br /&gt;
Manual overview: https://grass.osgeo.org/grass-stable/manuals/temporalintro.html&lt;br /&gt;
&lt;br /&gt;
== Terminology Overview ==&lt;br /&gt;
&lt;br /&gt;
* Space time raster datasets ('''strds''') are designed to manage raster map time series. Modules that process strds have the naming prefix ''t.rast''.&lt;br /&gt;
* Space time 3D raster datasets ('''str3ds''') are designed to manage 3D raster map time series. Modules that process str3ds have the naming prefix ''t.rast3d''.&lt;br /&gt;
* Space time vector datasets ('''stvds''') are designed to manage vector map time series. Modules that process stvds have the naming prefix ''t.vect''.&lt;br /&gt;
&lt;br /&gt;
== Workflow overview ==&lt;br /&gt;
&lt;br /&gt;
# create an empty space time datasets: strds, str3ds, or stvds ({{cmd|t.create}})&lt;br /&gt;
# register the GRASS GIS maps ({{cmd|t.register}})&lt;br /&gt;
# check the generated space time datasets ({{cmd|t.list}}, {{cmd|t.info}})&lt;br /&gt;
# do your analysis: {{cmd|t.rast.aggregate}}, {{cmd|t.info}}, {{cmd|t.rast.univar}}, {{cmd|t.vect.univar}}, ... so many more!&lt;br /&gt;
&lt;br /&gt;
== Example workflow for a Chlorophyll-a MODIS time series ==&lt;br /&gt;
&lt;br /&gt;
The following examples are based on a series of MODIS L3 Chlorophyll-a product that is freely available at the [http://oceancolor.gsfc.nasa.gov/cgi/l3?sen=A&amp;amp;per=MO&amp;amp;prd=CHL_chlor_a ocean color] site. So, say we download the SMI 8-day composite product at 4.6 km resolution for the period 2003-2013. That is a 506 set of images, 46 per year. Data comes as compressed HDF4 files. Chlorophyll products file names look like this: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;A20030012003008.L3m_8D_CHL_chlor_a_4km&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
where, &lt;br /&gt;
&lt;br /&gt;
  A: MODIS/Aqua&lt;br /&gt;
  2003: Year at start&lt;br /&gt;
  001: Julian day at start&lt;br /&gt;
  2003: Year at end&lt;br /&gt;
  008: Julian day at end&lt;br /&gt;
  L3m: Level 3 data, mapped (Projection: Plate carrée)&lt;br /&gt;
  8D: 8 day composition&lt;br /&gt;
  CHL: Chlorophyll a concentration product&lt;br /&gt;
  chlor_a: algorithm used 10^(a0 + a1*X + a2*X^2 + a3*X^3 + a4*X^4) &lt;br /&gt;
  4km: 4.6km pixel size (8640x4320 image, 2.5 minute resolution)&lt;br /&gt;
&lt;br /&gt;
We now decompress files and check metadata &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Go to where the data is and decompress&lt;br /&gt;
  find -iname '*.bz2' -exec bzip2 -d {} \; &lt;br /&gt;
# Check file meta-data (GDAL utilities)&lt;br /&gt;
  gdalinfo A20030012003008.L3m_8D_CHL_chlor_a_4km&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next step is to import all 506 images into GRASS. You can use {{cmd|r.in.gdal}} or {{cmd|r.external}} for that.&lt;br /&gt;
Note that global Cl-a images as downloaded from [http://oceancolor.gsfc.nasa.gov/cgi/l3?sen=A&amp;amp;per=MO&amp;amp;prd=CHL_chlor_a ocean color] site are ~150 mb each (disk space issues!). Here, 3 different options:&lt;br /&gt;
&lt;br /&gt;
* import global images (506 images, 150 Mb each) with r.in.gdal, resize to study area and remove global files&lt;br /&gt;
* set projection and extension, and resize to study area with gdal_translate, and import already resized images with r.in.gdal&lt;br /&gt;
* import global images (506 images, 150 Mb each) with r.external, resize to study area and remove global files, as showed below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# define region extension&lt;br /&gt;
g.region -p n=-38 s=-55 w=-70 e=-56&lt;br /&gt;
&lt;br /&gt;
suffix=_tmp&lt;br /&gt;
for map in *chlor* ; do&lt;br /&gt;
    r.external input=$map output=${map}${suffix} -o&lt;br /&gt;
    r.mapcalc expression=&amp;quot;$map = ${map}${suffix}&amp;quot;&lt;br /&gt;
    g.remove type=raster name=${map}${suffix}&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once we have maps inside GRASS GIS database we can start the temporal processing. If this is the first time you'll use temporal modules, &lt;br /&gt;
you need to run &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.connect -d &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to set the default temporal GIS database connection for the current mapset. If the connection is not initially set with {{cmd|t.connect}}, any temporal module that you try to run for the first time will first set the connection to the temporal database for you. The default TGIS database of type ''sqlite3'' is located in the PERMANENT mapset directory. Temporal GIS content from all created mapsets will be stored there.&lt;br /&gt;
&lt;br /&gt;
=== Creating a STRDS and registering maps ===&lt;br /&gt;
&lt;br /&gt;
'''Creating a STRDS'''&lt;br /&gt;
&lt;br /&gt;
First step is to '''create a space time dataset''' by means of {{cmd|t.create}}. As an example, let us create a strds for the Chlorophyll-a (Cl-a) time series. We need to define the name and semantic type of the new space time dataset, its title and a description. By default a raster dataset is created with absolute time (Gregorian calendar). We can change that according to our needs with type and temporaltype options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.create type=strds temporaltype=absolute output=cla \&lt;br /&gt;
 title=&amp;quot;Chlorophyll-a concentration&amp;quot; \&lt;br /&gt;
 description=&amp;quot;MODIS L3 Chlorophyll-a concentration for Argentinian sea&amp;quot; \&lt;br /&gt;
 semantictype=mean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Registering maps'''&lt;br /&gt;
&lt;br /&gt;
Then, we '''register the maps''' in the strds using {{cmd|t.register}}. This module assigns timestamps to raster, 3D raster and vector maps and register them in the temporal database and into space time datasets. Existing timestamps can be read and used by t.register. Note that this is a metadata based registration, nothing is imported into GRASS GIS since the maps are already present in the location (hence, no duplication occurs).&lt;br /&gt;
&lt;br /&gt;
This module (and TGRASS in general) supports '''absolute time''' and '''relative time'''. The ''absolute'' temporal type refers to a fixed date or interval in the Gregorian calendar, while the ''relative'' temporal type refers to data without fixed time stamps (e.g., sequential maps used to calculate multi-decadal averages). Refer to the [http://www.geostat-course.org/system/files/Presentation_0.pdf TGRASS overview slides] for background.&lt;br /&gt;
&lt;br /&gt;
Maps can be registered by command line argument (i.e., a list of comma separated map names) or using an input file. The start time, end time and a temporal increment can be provided either by command line or in the input file. End time and increment are mutually exclusive. Maps can be registered in several space time datasets using the same timestamp. For a more detailed explanation and examples on how to register maps in stds, see also [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/maps_registration maps registration] wiki page. &lt;br /&gt;
&lt;br /&gt;
Start time and end time with absolute time must be provided using the format yyyy-mm-dd HH:MM:SS +HHMM. It is also supported to specify the date yyyy-mm-dd only. In case of relative time, the temporal unit (years, months, days, hours, minutes or seconds) must be provided. The relative start time, end time and the increment are integers (see also {{cmd|t.register}}).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# note: with -i we create intervals (start and end time) spanning the given increment, and starting from start.&lt;br /&gt;
t.register -i type=raster input=cla \&lt;br /&gt;
 maps=`g.list raster pattern=&amp;quot;*_chlor_*&amp;quot; separator=comma` \&lt;br /&gt;
 start=&amp;quot;2003-01-01&amp;quot; \&lt;br /&gt;
 increment=&amp;quot;8 days&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Dealing with weekly data'''&lt;br /&gt;
&lt;br /&gt;
While the former would have been the simplest solution, our 8-day products have a problem: in this example the last image of each year is not a product of an 8-day composition, but 4 or 5-day. Then, when using the increment parameter, dates (and consequently, intervals) are not set properly.&lt;br /&gt;
The solution is to create a list of maps, with their respective start and end date. As the filenames contain information regarding year and DOY (day of year), we can use the following Python script to '''read filenames and transform DOY to calendar dates''' (Thanks Soeren!). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Script to extract the input file for t.register from map names&lt;br /&gt;
# run in python&lt;br /&gt;
# modify to your needs&lt;br /&gt;
&lt;br /&gt;
from os import walk&lt;br /&gt;
f = []&lt;br /&gt;
for (dirpath, dirnames, filenames) in walk(&amp;quot;/path/to/the/maps&amp;quot;):&lt;br /&gt;
    f.extend(filenames)&lt;br /&gt;
    break&lt;br /&gt;
# to order the list    &lt;br /&gt;
f.sort() &lt;br /&gt;
&lt;br /&gt;
input_list=[]&lt;br /&gt;
&lt;br /&gt;
import datetime&lt;br /&gt;
for map_name in f:&lt;br /&gt;
  start_year = int(map_name[1:5])&lt;br /&gt;
  start_day  = int(map_name[5:8])&lt;br /&gt;
  end_year   = int(map_name[8:12])&lt;br /&gt;
  end_day    = int(map_name[12:15])&lt;br /&gt;
  start = datetime.datetime(start_year, 1, 1) + datetime.timedelta(start_day - 1)&lt;br /&gt;
  end = datetime.datetime(int(end_year), 1, 1) + datetime.timedelta(end_day)&lt;br /&gt;
  map_list = map_name + '|' + str(start) + '|' + str(end)&lt;br /&gt;
  print map_list&lt;br /&gt;
  input_list.append(map_list)&lt;br /&gt;
&lt;br /&gt;
print input_list&lt;br /&gt;
&lt;br /&gt;
txt = '\n' .join(input_list)&lt;br /&gt;
f = open(&amp;quot;input_list_cla.txt&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
f.write(txt)&lt;br /&gt;
f.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the number of characters in the filenames and the datetime library in Python, you can convert DOY in the filenames into start_time and end_time as in the file you need to pass to {{cmd|t.register}}:&lt;br /&gt;
&lt;br /&gt;
  A20030012003008.L3m_8D_CHL_chlor_a_4km_arg|2003-01-01 00:00:00|2003-01-09 00:00:00&lt;br /&gt;
  A20030092003016.L3m_8D_CHL_chlor_a_4km_arg|2003-01-09 00:00:00|2003-01-17 00:00:00&lt;br /&gt;
  A20030172003024.L3m_8D_CHL_chlor_a_4km_arg|2003-01-17 00:00:00|2003-01-25 00:00:00&lt;br /&gt;
  ...&lt;br /&gt;
  A20133452013352.L3m_8D_CHL_chlor_a_4km_arg|2013-12-11 00:00:00|2013-12-19 00:00:00&lt;br /&gt;
  A20133532013360.L3m_8D_CHL_chlor_a_4km_arg|2013-12-19 00:00:00|2013-12-27 00:00:00&lt;br /&gt;
  A20133612013365.L3m_8D_CHL_chlor_a_4km_arg|2013-12-27 00:00:00|2014-01-01 00:00:00&lt;br /&gt;
&lt;br /&gt;
and then, the command would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.register --o type=raster input=cla file=input_list_cla.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we are providing start and end time along with map names, we don't need to use the -i flag, neither set start nor increment options because that information is already contained in the file. &lt;br /&gt;
&lt;br /&gt;
'''Assign a color table'''&lt;br /&gt;
&lt;br /&gt;
We can also set a color table for all maps in the strds with {{cmd|t.rast.colors}}: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# using a predetermined color table&lt;br /&gt;
t.rast.colors input=cla color=bcyr&lt;br /&gt;
#using your dedicated color table&lt;br /&gt;
t.rast.colors input=cla rules=path/to/your/color_table&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further examples of '''extracting timestamps from map names''' can be found here: [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/maps_registration maps registration] wiki page.&lt;br /&gt;
&lt;br /&gt;
=== Getting some basic info and statistics ===&lt;br /&gt;
&lt;br /&gt;
We now check the space time data sets we have in our mapset with {{cmd|t.list}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.list type=strds&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and get information about our recently created strds. See {{cmd|t.info}} for additional uses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.info type=strds input=cla &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  +-------------------- Space Time Raster Dataset -----------------------------+&lt;br /&gt;
  |                                                                            |&lt;br /&gt;
  +-------------------- Basic information -------------------------------------+&lt;br /&gt;
  | Id: ........................ cla@clorofila&lt;br /&gt;
  | Name: ...................... cla&lt;br /&gt;
  | Mapset: .................... clorofila&lt;br /&gt;
  | Creator: ................... veroandreo&lt;br /&gt;
  | Temporal type: ............. absolute&lt;br /&gt;
  | Creation time: ............. 2014-04-29 14:23:00.579342&lt;br /&gt;
  | Modification time:.......... 2014-05-12 09:15:08.917309&lt;br /&gt;
  | Semantic type:.............. mean&lt;br /&gt;
  +-------------------- Absolute time -----------------------------------------+&lt;br /&gt;
  | Start time:................. 2003-01-01 00:00:00&lt;br /&gt;
  | End time:................... 2014-01-01 00:00:00&lt;br /&gt;
  | Granularity:................ 1 day&lt;br /&gt;
  | Temporal type of maps:...... interval&lt;br /&gt;
  +-------------------- Spatial extent ----------------------------------------+&lt;br /&gt;
  | North:...................... -38.0&lt;br /&gt;
  | South:...................... -55.0&lt;br /&gt;
  | East:.. .................... -55.0&lt;br /&gt;
  | West:....................... -70.0&lt;br /&gt;
  | Top:........................ 0.0&lt;br /&gt;
  | Bottom:..................... 0.0&lt;br /&gt;
  +-------------------- Metadata information ----------------------------------+&lt;br /&gt;
  | Raster register table:...... raster_map_register_91ba57d5f0924f4fa0bd7176a1b39b2f&lt;br /&gt;
  | North-South resolution min:. 0.041667&lt;br /&gt;
  | North-South resolution max:. 0.041667&lt;br /&gt;
  | East-west resolution min:... 0.041667&lt;br /&gt;
  | East-west resolution max:... 0.041667&lt;br /&gt;
  | Minimum value min:.......... 0.02925&lt;br /&gt;
  | Minimum value max:.......... 0.26472&lt;br /&gt;
  | Maximum value min:.......... 5.2104&lt;br /&gt;
  | Maximum value max:.......... 99.953934&lt;br /&gt;
  | Aggregation type:........... None&lt;br /&gt;
  | Number of registered maps:.. 506&lt;br /&gt;
  |&lt;br /&gt;
  | Title:&lt;br /&gt;
  | Chlorophyll-a&lt;br /&gt;
  | Description:&lt;br /&gt;
  | Concentracion de Clorofila a&lt;br /&gt;
  | Command history:&lt;br /&gt;
  | # 2014-04-29 14:23:00 &lt;br /&gt;
  | t.create type=&amp;quot;strds&amp;quot; temporaltype=&amp;quot;absolute&amp;quot;&lt;br /&gt;
  |     output=&amp;quot;cla&amp;quot; title=&amp;quot;Chlorophyll-a&amp;quot;&lt;br /&gt;
  |     description=&amp;quot;Concentracion de Clorofila a&amp;quot; --o&lt;br /&gt;
  | # 2014-04-29 14:23:23 &lt;br /&gt;
  | t.register --o type=&amp;quot;rast&amp;quot; input=&amp;quot;cla&amp;quot;&lt;br /&gt;
  |     file=&amp;quot;input_list_cla.txt&amp;quot;&lt;br /&gt;
  | &lt;br /&gt;
  +----------------------------------------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
Now, we get univariate statistics from the non-null cells for each registered raster map of the strds. For that matter we use {{cmd|t.rast.univar}} which, by default, returns the name of the map, the start and end date of dataset and the following values: ''mean, minimum and maximum vale, mean_of_abs, standard deviation, variance, coeff_var, number of null cells, total number of cell''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.univar input=cla&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or, you can send the output to a text file using&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.univar input=cla separator=comma output=stats_cla.csv&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file &amp;quot;stats_cla.csv&amp;quot; you can now open in a spreadsheet or statistical software for inspection and plotting.&lt;br /&gt;
&lt;br /&gt;
=== Listing maps and selections ===&lt;br /&gt;
&lt;br /&gt;
The module {{cmd|t.rast.list}} allows you to list all the maps registered in a strds or a selection of them and, provides options for different listing methods, sorting of the list, information to print and so on. The ''where'' option in t.rast.list allows to perform different selections of maps to list. The ''columns'' that can be used to perform these selections are: ''id, name, creator, mapset, temporal_type, creation_time, start_time, end_time, north, south, west, east, nsres, ewres, cols, rows, number_of_cells, min and max''. (Note that for vector time series, i.e. stvds, the columns in {{cmd|t.vect.list}} differ from those for strds. You can check that with &amp;lt;code&amp;gt;t.vect.list --help&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=cla method=gran granule=&amp;quot;1 month&amp;quot;&lt;br /&gt;
# this will give one image every one month, 3 months, 1 year, or the granule you choose&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla order=min columns=id,name,start_time,min where=&amp;quot;min &amp;lt;= '0.05'&amp;quot; &lt;br /&gt;
# this will order by minimum value all the maps in the strds that have a minimum value lower than or equal to 0.05&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla order=max columns=name,start_time,max where=&amp;quot;max &amp;gt; '10.0'&amp;quot;&lt;br /&gt;
# maps ordered by maximum value in which maximum value is higher than 10.&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;start_time &amp;gt;= '2003-01' and start_time &amp;lt;= '2003-06'&amp;quot; &lt;br /&gt;
# all the maps in the first 6 month of the time series&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;strftime('%m', start_time)='01'&amp;quot;&lt;br /&gt;
# all the maps from January&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;strftime('%m-%d', start_time)='01-01'&amp;quot;&lt;br /&gt;
# all the maps from January, 1st&lt;br /&gt;
&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;strftime('%w', start_time)='1'&amp;quot;&lt;br /&gt;
# all Mondays in the time series (Sunday is 0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you have monthly (instead of 8-day products) data and you want to list all January maps, then you can do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=cla where=&amp;quot;start_time=datetime(start_time, 'start of year', ' 0 month')&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: '''Do not forget to use single quotes around date''', neither in {{cmd|t.rast.list}} nor in any other of the t.* modules offering the ''where'' option, because the clause will be ignored (i.e.: no selection performed) and no warning nor error will be printed.&lt;br /&gt;
&lt;br /&gt;
=== Visualization ===&lt;br /&gt;
&lt;br /&gt;
There are different visualization options for strds.&lt;br /&gt;
&lt;br /&gt;
* {{cmd|g.gui.timeline}} allows to compare temporal datasets by displaying their temporal extents in a plot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# only temporal extent&lt;br /&gt;
g.gui.timeline inputs=cla&lt;br /&gt;
# temporal and spatio-temporal extent&lt;br /&gt;
g.gui.timeline -3 inputs=cla&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Cla strds.png|center|thumb|560px|Temporal and spatio-temporal extent of cla strds.]]&lt;br /&gt;
&lt;br /&gt;
* {{cmd|g.gui.tplot}} allows to see the values of one or more temporal datasets for a queried point defined by a coordinate pair.&lt;br /&gt;
&lt;br /&gt;
Steps to use this module are:&lt;br /&gt;
&lt;br /&gt;
# Select strds&lt;br /&gt;
# Select pair of coordinates (east,north) or mark a point in the map&lt;br /&gt;
# Hit Draw&lt;br /&gt;
# Customize plot as desired&lt;br /&gt;
# Save&lt;br /&gt;
&lt;br /&gt;
[[Image:Output gguitplot.png|center|thumb|800px|Time series plot (Chlorophyll vs Time) for a certain coordinate pair in the study area]]&lt;br /&gt;
&lt;br /&gt;
* {{cmd|g.gui.animation}} is the tool for animating a series of raster and vector maps or a space time raster or vector dataset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g.gui.animation strds=cla_monthly_average&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Grass70 temporal chlorophyll anim small.gif|framed|center|Monthly mean chlorophyll-a concentration]]&lt;br /&gt;
&lt;br /&gt;
=== Aggregation ===&lt;br /&gt;
&lt;br /&gt;
For aggregations of data with different methods and different granularities, there are two very useful commands: &lt;br /&gt;
&lt;br /&gt;
* {{cmd|t.rast.series}} that applies different aggregation methods from {{cmd|r.series}} on all or a subset of raster maps in a strds, and &lt;br /&gt;
&lt;br /&gt;
* {{cmd|t.rast.aggregate}} that temporally aggregates the maps in a strds by a user defined granularity.&lt;br /&gt;
&lt;br /&gt;
With these modules it is very simple to get maps of basic statistical parameters for different temporal granules, and this permits the analysis of the spatio-temporal variability of the variable of interest.&lt;br /&gt;
&lt;br /&gt;
Some examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# yearly aggregation&lt;br /&gt;
t.rast.aggregate input=cla output=cla_yearly_average basename=cla_yearly_average \&lt;br /&gt;
  granularity=&amp;quot;1 years&amp;quot; method=average sampling=starts suffix=gran&lt;br /&gt;
&lt;br /&gt;
# yearly aggregation with corresponding methods (output: 7 strds with 11 maps each)&lt;br /&gt;
for method in average median mode minimum maximum stddev range ; do&lt;br /&gt;
    t.rast.aggregate input=cla output=cla_yearly_${method} \&lt;br /&gt;
    basename=cla_yearly_${method} granularity=&amp;quot;1 years&amp;quot; \&lt;br /&gt;
    method=${method} sampling=starts suffix=gran&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the where parameter, as exemplified before, we can select for example all 8-day products which start_time is 01 (January) over the years. Like this we can get the so-known '''climatologies'''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.series input=cla method=average where=&amp;quot;strftime('%m', start_time)='01'&amp;quot; output=january_average&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We could also get long term averages for specific periods in a time series, e.g. January 5-year mean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.series input=cla \&lt;br /&gt;
  where=&amp;quot;start_time &amp;gt;= '2005-01-01' AND start_time &amp;lt;= '2009-12-01' AND strftime('%m', start_time)='01'&amp;quot; \&lt;br /&gt;
  method=average output=jan_cla_mean_2000_2004&lt;br /&gt;
&lt;br /&gt;
# say we take a 15 years period (2000-2014) of monthly data and we want monthly 5-year averages&lt;br /&gt;
YEAR_START=(2000 2005 2010)&lt;br /&gt;
YEAR_END=(2004 2009 2014)&lt;br /&gt;
count=${#YEAR_START[@]}&lt;br /&gt;
&lt;br /&gt;
for i in `seq 1 $count` ; do&lt;br /&gt;
 echo ${YEAR_START[$i-1]} ${YEAR_END[$i-1]}&lt;br /&gt;
 for MONTH in `seq -w 1 12` ; do&lt;br /&gt;
  t.rast.series input=cla \&lt;br /&gt;
   where=&amp;quot;start_time &amp;gt;= '&amp;quot;${YEAR_START[$i-1]}&amp;quot;-01-01' AND start_time &amp;lt;= '&amp;quot;${YEAR_END[$i-1]}&amp;quot;-12-01' AND strftime('%m', start_time)='&amp;quot;${MONTH}&amp;quot;'&amp;quot; \&lt;br /&gt;
   method=average output=cla_${YEAR_START[$i-1]}_${YEAR_END[$i-1]}_month_${MONTH} --o&lt;br /&gt;
 done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generalizing a bit, to obtain monthly climatologies from a time series, we can: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# monthly climatologies&lt;br /&gt;
for MONTH in `seq -w 1 12` ; do &lt;br /&gt;
  for METHOD in average median stddev minimum maximum ; do &lt;br /&gt;
    t.rast.series input=cla method=${METHOD} where=&amp;quot;strftime('%m', start_time)='${MONTH}'&amp;quot; output=${METHOD}_${MONTH}&lt;br /&gt;
  done&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# seasonal climatologies&lt;br /&gt;
for i in &amp;quot;01 02 03&amp;quot; &amp;quot;04 05 06&amp;quot; &amp;quot;07 08 09&amp;quot; &amp;quot;10 11 12&amp;quot; ; do&lt;br /&gt;
    set -- $i ; echo $1 $2 $3&lt;br /&gt;
    for m in average median stddev minimum maximum ; do&lt;br /&gt;
        t.rast.series input=cla method=${m} output=${m}_${1} \&lt;br /&gt;
        where=&amp;quot;strftime('%m',start_time)='&amp;quot;${1}&amp;quot;' or strftime('%m',start_time)='&amp;quot;${2}&amp;quot;' or strftime('%m', start_time)='&amp;quot;${3}&amp;quot;'&amp;quot;                      &lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the climatologies previously obtained, we'll now estimate monthly anomalies in the mean, max and min Cl-a concentration. First, we need to monthly aggregate data, and then do the difference between the monthly climatology and each respective monthly aggregate. We'll do the aggregation for the average, minimum and maximum of Cl-a concentration (from 506 input maps in cla strds, we'll get 132 maps in each monthly aggregated new strds).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# monthly aggregates (132 maps)&lt;br /&gt;
for method in average minimum maximum ; do&lt;br /&gt;
    t.rast.aggregate input=cla output=cla_monthly_${method} \&lt;br /&gt;
    basename=cla_monthly_${method} \&lt;br /&gt;
    granularity=&amp;quot;1 months&amp;quot; method=${method} \&lt;br /&gt;
    sampling=contains suffix=gran&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# January anomalies in mean, min and max Cl-a&lt;br /&gt;
t.rast.list -u input=cla_monthly_average where=&amp;quot;start_time=datetime(start_time, 'start of year', '0 month')&amp;quot; columns=name&lt;br /&gt;
&lt;br /&gt;
for m in average minimum maximum ; do &lt;br /&gt;
    for i in 1 13 25 37 49 61 73 85 97 109 121 ; do # these numbers correspond to all January monthly aggregates&lt;br /&gt;
        r.mapcalc expression=&amp;quot;Jan_${m}_anomaly_${i}=cla_monthly_${m}_${i}-01_${m}&amp;quot; &lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use {{cmd|t.rast.list}} for looping, the same way you use {{cmd|g.list}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for map in `t.rast.list -u input=cla_monthly_average where=&amp;quot;strftime('%m', start_time)='01'&amp;quot; columns=name` ; do&lt;br /&gt;
    r.mapcalc expression=&amp;quot;anomaly_${map}=${map}-01_average&amp;quot; &lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generalizing, we can estimate all monthly anomalies from mean like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
for i in `seq -w 1 12` ; do&lt;br /&gt;
    for map in `t.rast.list -u input=cla_monthly_average columns=name where=&amp;quot;strftime('%m', start_time)='&amp;quot;${i}&amp;quot;'&amp;quot;` ; do&lt;br /&gt;
        r.mapcalc expression=&amp;quot;anomaly_${map}=${map}-average_${i}&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Say we now need to know the date of the maximum value of Cl-a concentration over all the study period and/or on a yearly basis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# map index for the overall maximum Cl-a value &lt;br /&gt;
t.rast.series input=cla method=max_raster output=cla_max_index&lt;br /&gt;
&lt;br /&gt;
# map index for the yearly maximum Cl-a value &lt;br /&gt;
t.rast.aggregate input=cla granularity=&amp;quot;1 year&amp;quot; method=max_raster output=yearly_max_index basename=yearly_max_index suffix=gran&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The outputs show (pixelwise) the map index in which the maximum value of Cl-a occurs (from 1 to 506 and from 1 to 46, for the whole time series and on a yearly basis, respectively). For relative time this is maybe enough, but you may then want to reclassify data to get DOY, for example. In that case, you may use {{cmd|r.reclass}}.&lt;br /&gt;
&lt;br /&gt;
If you already have monthly data, you can get climatologies quite simply as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# January averages&lt;br /&gt;
t.rast.series input=cla_monthly method=average where=&amp;quot;start_time=datetime(start_time, 'start of year', '0 month')&amp;quot; output=jan_average&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Spatio-temporal algebra with STRDS ===&lt;br /&gt;
&lt;br /&gt;
The module {{cmd|t.rast.mapcalc}} allows us to perform spatio-temporal mapcalc expressions on temporally sampled maps of strds. There are spatial and temporal operators available for the &amp;quot;expression&amp;quot; string. Spatial operators, functions and internal variables are those used in {{cmd|r.mapcalc}}. Temporal internal variables supported for both relative and absolute time include: td(), start_time() and end_time(). There are also several very useful internal variables supported especially for absolute time of the current sample interval or instance, e.g.: start_doy(), start_year(), start_month() and so on (see {{cmd|t.rast.mapcalc}} manual for further details and examples).&lt;br /&gt;
&lt;br /&gt;
Some examples now. Say we did some analysis and decided that we will only consider values higher than 0.05. Then, we need to set all values below that threshold to null.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.mapcalc input=cla expression=&amp;quot;if(cla &amp;lt; 0.05, null(), cla)&amp;quot; output=cla_corrected  basename=cla_corrected&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or we may also want to take negative erroneous values to the knowm minimum of the strds, so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.series input=cla method=minimum output=min_cla&lt;br /&gt;
t.rast.mapcalc input=cla expression=&amp;quot;if(cla &amp;lt; 0.0, min_cla, cla)&amp;quot; output=cla_corrected  basename=cla_corrected&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We may also need to reclassify all maps in the strds according to a certain threshold, e.g.: a certain level of Cl-a that indicates bloom conditions, in order to get bloom frequency afterwards:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# reclassify&lt;br /&gt;
t.rast.mapcalc -n input=cla output=cla_bloom basename=cla_bloom expression=&amp;quot;if(cla &amp;gt; 0.75, 1, null())&amp;quot;&lt;br /&gt;
# bloom frequency&lt;br /&gt;
t.rast.series input=cla_bloom output=bloom_freq method=count&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do you remember we wanted to get the DOY of maximum Cl-a value before? Well, here's another way of doing it... &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# overall maximum value&lt;br /&gt;
t.rast.series input=cla method=maximum output=max_cla&lt;br /&gt;
# new strds with DOY of overall maximum &lt;br /&gt;
t.rast.mapcalc -n inputs=cla output=date_max_cla expression=&amp;quot;if(cla == max_cla,start_doy(),null())&amp;quot; basename=date_max_cla &lt;br /&gt;
# map with DOY of overall maximum&lt;br /&gt;
t.rast.series input=date_max_cla method=maximum output=max_cla_date&lt;br /&gt;
# remove date_max_cla strds (we were only interested in the resulting aggregated map)&lt;br /&gt;
t.remove -rf inputs=date_max_cla &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There's also a {{cmd|t.rast.algebra}} module that allows for temporal and spatial operations on strds by means of temporal raster algebra. The module expects an expression in the following form: &amp;quot;result = expression&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The statement structure is similar to r.mapcalc, the result is the name of a new strds that will contain the result of the calculation given as expression. Expressions can be any valid or nested combination of temporal operations and spatial overlay or buffer functions that are provided by the temporal algebra. See the manual for further details and explanations.&lt;br /&gt;
&lt;br /&gt;
We'll use this module to estimate the rate of change (slope) between every pair of maps in the &amp;quot;cla&amp;quot; strds. The result will be a new strds consisting of maps with the slope value between every consecutive pair of maps in the original strds:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# we set 8 as fixed denominator, because products are 8-day compositions&lt;br /&gt;
t.rast.algebra expression=&amp;quot;slope_cla = (cla[1]-cla[0])/8.0&amp;quot; basename=slope_cla&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can then use any of the aggregation modules that we saw before to get the maximum or minimumm rate of change for different granularities.&lt;br /&gt;
&lt;br /&gt;
===== Some known issues with t.rast.mapcalc =====&lt;br /&gt;
&lt;br /&gt;
It has been observed that if the names of inputs and output space time datasets (partially) match each other, t.rast.mapcalc may not work properly (especially when several input strds are used). This is because the module uses a simple search and replace approach to substitute the input strds with the corresponding map names. Eventualy, choosing a specific order for the input strds in the input parameter may reduce the risk of wrong substitution. Therefore, especially in operations involving several strds (with partially matching names) as inputs, '''it is recommended to use {{cmd|t.rast.algebra}} that correctly recognizes spatio-temporal datasets''' rather than t.rast.mapcalc.&lt;br /&gt;
&lt;br /&gt;
=== Subseting and something else ===&lt;br /&gt;
&lt;br /&gt;
{{cmd|t.rast.extract}} is another really useful module within temporal GRASS. It allows to extract a subset of a strds and store it in a different strds. The &amp;quot;where&amp;quot; condition is used to do the subset, but you can also specify a r.mapcalc sub-expression that performs operations on all maps of the selected subset. If no r.mapcalc expression is defined, the selected maps are simply registered in the new output strds.&lt;br /&gt;
&lt;br /&gt;
Say we need to know in how many maps of the strds minimum values are below a certain threshold, and not only that, but we also want to know how many pixels per map meet that condition. Then, we can do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.extract input=cla where=&amp;quot;min &amp;lt;= '0.05'&amp;quot; output=cla_less_05 basename=cla_less_05 expression=&amp;quot;if(cla &amp;lt; 0.05, 1, null())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to extract those maps with a minimum value lower than 0.05, and in the same step put 1 in every cell meeting the criterium and null everywhere else. To get a count of maps and pixels meeting the condition we may use:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# univariate stistics to get the count per map  &lt;br /&gt;
t.rast.univar input=cla_less_05 &lt;br /&gt;
# count map of cells with min value &amp;lt; 0.05&lt;br /&gt;
t.rast.series input=cla_less_05 output=count_cla_less_05 method=count&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Importing / Exporting STRDS ===&lt;br /&gt;
&lt;br /&gt;
Say we now need to do some processing in R (e.g.: run [http://menugget.blogspot.com.ar/2012/10/dineof-data-interpolating-empirical.html DINEOF] to fill gaps in data), so we need to export our strds, hence we use {{cmd|t.rast.export}}. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.export input=cla output=cla4R compression=gzip&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After we have done our analysis we can import the whole strds back to GRASS again, exporting it from R with read/write.tgrass from [http://cran.r-project.org/web/packages/spacetime/index.html spacetime] R package and using {{cmd|t.rast.import}} in GRASS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.import input=cla_from_R.tar.gz output=cla_from_R basename=new_map directory=/tmp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a full example of how to handle raster time series between GRASS and R, please visit the  [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/raster_time_series_grass_R_statistics time series GRASS-R Statistics] wiki. The example is based on North Carolina climate location [http://courses.ncsu.edu/mea592/common/media/02/nc_climate_spm_2000_2012.zip] and includes the following steps:&lt;br /&gt;
&lt;br /&gt;
# Exporting the strds out of GRASS&lt;br /&gt;
# Importing into R&lt;br /&gt;
# Re-formating the data&lt;br /&gt;
# Running [http://modb.oce.ulg.ac.be/mediawiki/index.php/DINEOF DINEOF]&lt;br /&gt;
# Re-constructing the raster time series&lt;br /&gt;
# Exporting out of R, and &lt;br /&gt;
# Importing the gap-filled new strds into GRASS.&lt;br /&gt;
&lt;br /&gt;
=== Neighborhood analysis ===&lt;br /&gt;
&lt;br /&gt;
{{cmd|t.rast.neighbors}} performs a neighborhood analysis for each map in a space time raster dataset. This module supports a subset of the options already available in r.neighbors. Both, size of the neighborhood and aggregation method can be chosen. As an example, we'll estimate mean Cl-a concentration in a 3x3 neighborhood for every map in the strds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.neighbors input=cla output=cla_smoth base=cla_smooth method=average size=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Filling and reconstructing time series data with gaps ===&lt;br /&gt;
&lt;br /&gt;
==== Harmonic ANalysis of Time Series - HANTS ====&lt;br /&gt;
&lt;br /&gt;
{{AddonCmd|r.hants}} is an add-on not strictly within the temporal modules, but really useful when working with time series data, particularly with gappy data. Here's a simple example for generating a list of temporally ordered maps to use as input in '''r.hants''', running HANTS and getting a map of dominant frequencies, afterwards. See the manual for further information on parameter setting and explanations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# use t.rast.list to create a list of temporally ordered maps  &lt;br /&gt;
t.rast.list input=cla order=start_time columns=name -u &amp;gt; map_list.csv&lt;br /&gt;
&lt;br /&gt;
# a HANTS run using the list of maps&lt;br /&gt;
r.hants -l file=map_list.csv nf=5 fet=0.1 dod=11 base_period=46 suffix=_hants amplitude=amp_hants phase=pha_hants&lt;br /&gt;
&lt;br /&gt;
# dominant frequency map (0 means the dominant freq is 1, 1 that dominant freq is 2, and so on...)&lt;br /&gt;
r.series input=`g.list type=raster pattern=&amp;quot;amp_hants*&amp;quot; separator=comma` output=dominant_freq_hants method=max_raster&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Local Weighted Regression - LWR ====&lt;br /&gt;
&lt;br /&gt;
Another very useful add-on for the reconstruction of gappy time series, such as those from remote sensing imagery, is {{AddonCmd|r.series.lwr}}. This module performs a local weighted regression (LWR) of the input maps in order to estimate missing values and identify (and remove) outliers. See the manual for further information and explanations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# use same list as before&lt;br /&gt;
t.rast.list input=cla order=start_time columns=name -u &amp;gt; map_list.csv&lt;br /&gt;
&lt;br /&gt;
# run r.series.lwr&lt;br /&gt;
r.series.lwr file=map_list.csv suffix=_lwr order=2 weight=tricube range=0.0,65.0 dod=16 fet=0.1 -l&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Estimate Mean Absolute Error (MAE) ====&lt;br /&gt;
&lt;br /&gt;
One of the measures used to assess how close forecasts or predictions might be to the observed values is the&lt;br /&gt;
[https://en.wikipedia.org/wiki/Mean_absolute_error mean absolute error]. We will use it to evaluate the performance of HANTS and LWR. &lt;br /&gt;
&lt;br /&gt;
First, we will rebuild our time series with the corresponding output maps of r.hants and r.series.lwr. Here, only showed for LWR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# re-build time series &lt;br /&gt;
t.create type=strds temporaltype=absolute output=cla_lwr \&lt;br /&gt;
 title=&amp;quot;LWR output for Chl-a&amp;quot; \&lt;br /&gt;
 description=&amp;quot;MODIS Aqua L3 Chl-a 8-day 4km 2010-2013. Reconstruction with r.series.lwr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# create list with filenames to parse&lt;br /&gt;
g.list type=raster pattern=&amp;quot;*lwr&amp;quot; output=names_list&lt;br /&gt;
&lt;br /&gt;
# parse filenames, convert YYYY-DOY to YYYY-MM-DD and write file to use in t.register&lt;br /&gt;
for mapname in `cat names_list` ; do&lt;br /&gt;
  year_start=`echo ${mapname:1:4}`&lt;br /&gt;
  doy_start=`echo ${mapname:5:3}`&lt;br /&gt;
  year_end=`echo ${mapname:8:4}`&lt;br /&gt;
  doy_end=`echo ${mapname:12:3}`&lt;br /&gt;
  # convert YYYY-DOY to YYYY-MM-DD&lt;br /&gt;
  #BEWARE: leading zeros make bash assume the number is in base 8 system, not base 10!&lt;br /&gt;
  doy_start=`echo &amp;quot;$doy_start&amp;quot; | sed 's/^0*//'`&lt;br /&gt;
  doy_end=`echo &amp;quot;$doy_end&amp;quot; | sed 's/^0*//'`&lt;br /&gt;
  START_DATE=`date -d &amp;quot;${year_start}-01-01 +$(( ${doy_start} - 1 ))days&amp;quot; +%Y-%m-%d`&lt;br /&gt;
  END_DATE=`date -d &amp;quot;${year_end}-01-01 +$(( ${doy_end} ))days&amp;quot; +%Y-%m-%d`&lt;br /&gt;
  # print mapname, start and end date&lt;br /&gt;
  echo &amp;quot;$mapname|$START_DATE|$END_DATE&amp;quot; &amp;gt;&amp;gt; map_list_start_and_end_time.txt&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# register maps in strds&lt;br /&gt;
t.register input=cla_lwr type=raster file=map_list_start_and_end_time.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, we will estimate the MAE and use it to compare both methods. Again, only the example for LWR is showed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# obtain a strds of the absolute differences between predicted and observed Chl-a values &lt;br /&gt;
t.rast.algebra -n \&lt;br /&gt;
 basename=lwr_minus_orig suffix=gran \&lt;br /&gt;
 expression=&amp;quot;abs_lwr_minus_orig = abs(cla_lwr - cla)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# sum of the absolute differences (numerator) and count of non-null maps per pixel (denominator) &lt;br /&gt;
t.rast.series input=abs_lwr_minus_orig output=sum_abs_lwr_minus_orig method=sum&lt;br /&gt;
t.rast.series input=abs_lwr_minus_orig output=count_abs_lwr_minus_orig method=count&lt;br /&gt;
&lt;br /&gt;
# MAE for LWR&lt;br /&gt;
r.mapcalc expression=&amp;quot;mae_lwr = sum_abs_lwr_minus_orig / count_abs_lwr_minus_orig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# remove intermediate strds and maps&lt;br /&gt;
t.remove -rf abs_lwr_minus_orig&lt;br /&gt;
g.remove -f type=raster name=sum_abs_lwr_minus_orig,count_abs_lwr_minus_orig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's now compare the predictions generated by both methods, HANTS and LWR, and the corresponding mean absolute error maps. &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:cla_vs_cla_hants.png|center|thumb|560px|Original Chl-a time series vs HANTS output.]] || [[Image:cla_vs_cla_lwr.png|center|thumb|560px|Original Chl-a time series vs LWR output.)]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:mae_hants_map.png|center|thumb|560px|MAE of HANTS predictions.]] || [[Image:mae_lwr_map.png|center|thumb|560px|MAE of LWR predictions.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extract strds values for points in a vector ===&lt;br /&gt;
&lt;br /&gt;
Let's say we need to extract values of the strds to check the behaviour of HANTS at given locations and compare it with the original values. We can graphically do that with {{cmd|g.gui.tplot}}, but if you need to take data outside GRASS, say, read it into R and do some other analysis (See [http://grasswiki.osgeo.org/wiki/R_statistics/rgrass7#Reading_in_data R_Statistics wiki page]) you may use {{cmd|v.what.strds}}. This module retrieves raster values from a given strds to the attribute table of a point vector map.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# original data&lt;br /&gt;
v.what.strds input=points_cla strds=cla output=points_cla_out&lt;br /&gt;
v.db.select map=points_cla_out file=ts_points_cla.csv&lt;br /&gt;
&lt;br /&gt;
# HANTS' reconstructed data (several runs)&lt;br /&gt;
for i in `seq 1 13` ; do&lt;br /&gt;
    v.what.strds --overwrite input=points_cla strds=cla_hants_${i} output=points_hants_${i}_out&lt;br /&gt;
    v.db.select map=points_cla file=ts_points_hants_${i}.csv&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option would be to use {{cmd|t.rast.what}} that samples a space time raster dataset at specific vector point coordinates and writes the output to stdout or text file using different layouts. This module doesn't write the vector's attribute table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.what points=points strds=cla output=cla_points.csv null_value=NA separator=comma&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Some other modules and addons useful in the time series context ===&lt;br /&gt;
&lt;br /&gt;
* {{cmd|t.rast.accumulate}} and {{cmd|t.rast.accdetect}} to compute and detect cyclic accumulations in raster time series.&lt;br /&gt;
* {{AddonCmd|t.rast.what.aggr}} to sample a strds with a vector point map and get aggregated values of desired granularity either in stdout or in the vector's attribute table.&lt;br /&gt;
* {{AddonCmd|t.rast.out.xyz}} to export a strds to a CSV file.&lt;br /&gt;
* {{AddonCmd|t.rast.null}} to manage NULL-values of a strds.&lt;br /&gt;
* {{AddonCmd|v.strds.stats}} to calculate univariate statistics from a strds based on a vector map.&lt;br /&gt;
* {{AddonCmd|r.seasons}} to extract seasons from a time series.&lt;br /&gt;
* {{AddonCmd|r.bioclim}} to calculate bio-climatic indices.&lt;br /&gt;
* {{AddonCmd|r.change.info}} for landscape change assessment.&lt;br /&gt;
* {{AddonCmd|r.quantile.ref}} to determine the corresponding quantile for an input value from a reference raster time series.&lt;br /&gt;
* {{AddonCmd|r.regression.series}} and {{AddonCmd|r.mregression.series}} to perform univariate and multivariate linear regression among raster time series, respectively.&lt;br /&gt;
* {{AddonCmd|r.series.diversity}} to estimate diversity indices in raster time series.&lt;br /&gt;
* {{AddonCmd|r.series.decompose}} to decompose raster time series.&lt;br /&gt;
* {{AddonCmd|r.series.filter}} to apply Savitzky-Golay or median filters to raster time series.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== Best practice data organization ===&lt;br /&gt;
&lt;br /&gt;
When it comes to time series, thousands of maps are often involved. In order to keep control, here some suggestions:&lt;br /&gt;
&lt;br /&gt;
* separate original data from derived aggregates: store them in separate mapsets&lt;br /&gt;
* for specific projects, maintain them in individual mapsets. You can access the STDS stored in other mapsets (same location) through&lt;br /&gt;
 t.some.module input=my_strds@the_other_mapset output=result ...&lt;br /&gt;
as long as mapsets are indeed accessible, i.e.: in the mapset's search path (See {{cmd|g.mapsets}}).&lt;br /&gt;
&lt;br /&gt;
=== Best practice multi user management ===&lt;br /&gt;
&lt;br /&gt;
GRASS GIS supports multi-user data management and allows several users to work in the same location within their own mapsets. Data can be read from other mapsets but not edited there. The same principle applies to space time datasets (STDS), i.e. in case of having a collection of maps corresponding to a time series in a dedicated mapset, you need to also create the STDS therein (See {{cmd|t.create}} and {{cmd|t.register}}), so it is visible to other users in other mapsets when they use {{cmd|t.list}}, for example.&lt;br /&gt;
&lt;br /&gt;
=== Use of ''where'' parameter (ticket [https://trac.osgeo.org/grass/ticket/2270 #2270]) ===&lt;br /&gt;
&lt;br /&gt;
Pay attention when using the &amp;quot;where&amp;quot; option in t.* modules. In some occasions it may not yield the expected results. Given the backend database chosen for TGRASS implementation, you may not be selecting all maps you think if you forget to set time along with date in the where clause. For example, let's say we need to select maps from 2005-03-01 until 2005-05-31 included. You would think the following command would do the job:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list daily_temp where=&amp;quot;start_time &amp;gt; '2005-03-01' and start_time &amp;lt;= '2005-05-31'&amp;quot; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
but, no... The last map in the list is:&lt;br /&gt;
&lt;br /&gt;
 temp_0516|pruebas|2005-05-30 00:00:00|2005-05-31 00:00:00&lt;br /&gt;
&lt;br /&gt;
which would be equivalent to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list daily_temp where=&amp;quot;start_time &amp;gt; '2005-03-01' and start_time &amp;lt; '2005-05-31'&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a product of sqlite. Therefore, if you need the last date included in your selection (map from 2005-05-31 in our example), you need to set time too.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list daily_temp where=&amp;quot;start_time &amp;gt; '2005-03-01' and start_time &amp;lt;= '2005-05-31 00:00:00'&amp;quot; | tail -n1&lt;br /&gt;
temp_0517|pruebas|2005-05-31 00:00:00|2005-06-01 00:00:00&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aggregation with defined granularity ===&lt;br /&gt;
&lt;br /&gt;
''Q: I need to aggregate a strds with a granularity of 1 year, but shifting the start day one month in each run, i.e.: changing the start_time to 2003-02-01, 2003-03-01, 2003-04-01 and so on... My question is: if i recursively change start_time with the 'where' parameter, will the module t.rast.aggregate &amp;quot;aggregate&amp;quot; to the next february, march, april (what i'd wish) or just till the end of 2003?''&lt;br /&gt;
&lt;br /&gt;
A: If you specify a granularity of a year, then the start time to perform the aggregation will always be shifted to the 1st January of the current year and the end time the 1st January of the next year (eg. 2002-01-01 - 2003-01-01).  If you wish to aggregate a full year but shifting one month forward then simply use a granularity of 12 months.&lt;br /&gt;
&lt;br /&gt;
=== Listing maps with specific start month ===&lt;br /&gt;
&lt;br /&gt;
''Q: I have a strds with 506 maps that correspond to 8-day composite products. I need to sequentially list all maps which &amp;quot;start_month&amp;quot; is January, February and so on... to use them as input in {{cmd|r.series}} (or {{cmd|t.rast.series}}). How can I achieve that?''&lt;br /&gt;
&lt;br /&gt;
A: You can use the [https://www.sqlite.org/lang_datefunc.html datetime functionality of SQLite] to perform this task, this should work for January:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.list input=cla_null_mayor65 \&lt;br /&gt;
where='start_time &amp;gt;= datetime(start_time, &amp;quot;start of year&amp;quot;) and start_time &amp;lt;= datetime(start_time, &amp;quot;start of year&amp;quot;, &amp;quot;1 month&amp;quot;)'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aggregation of seasonal data ===&lt;br /&gt;
&lt;br /&gt;
''Q: How can I calculate average seasonal temperature starting from a daily temperatures temporal dataset?''&lt;br /&gt;
&lt;br /&gt;
A: Use {{cmd|t.rast.aggregate.ds}}, the input is the daily strds, the sampling stds should have seasonal intervals. Then use average as method. The output will have seasonal aggregated temperatures. For a detailed workflow see: [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/seasonal_aggregation seasonal aggregation example].&lt;br /&gt;
&lt;br /&gt;
=== Aggregation of seasonal data using time ranges ===&lt;br /&gt;
&lt;br /&gt;
A way to aggregate seasons from daily data without granularity but by using time ranges is shown here. The issue is to include for the season calculation also a month from the previous year. This can be addressed with some datetime calculations in SQLite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# We assume to have daily temperature data in DB &amp;quot;temp_daily_average&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# loop over seasons, generate aggregates:&lt;br /&gt;
### 'start_time' and 'end_time' are columns in TGRASS&lt;br /&gt;
&lt;br /&gt;
for year in `seq 2004 2014` ; do&lt;br /&gt;
&lt;br /&gt;
    # we consider also a month of the previous year&lt;br /&gt;
    for month in &amp;quot;12 01 02&amp;quot; &amp;quot;03 04 05&amp;quot; &amp;quot;06 07 08&amp;quot; &amp;quot;09 10 11&amp;quot; ; do&lt;br /&gt;
        set -- $month ; echo $1 $2 $3&lt;br /&gt;
&lt;br /&gt;
        prevyear=$year&lt;br /&gt;
        if [ $1 -eq 12 ] ; then&lt;br /&gt;
           prevyear=`expr $year - 1`&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        # prepare query strings in SQLite&lt;br /&gt;
        MYSTART=`echo &amp;quot;SELECT strftime(datetime('${prevyear}-${1}-01'));&amp;quot; | sqlite3`&lt;br /&gt;
        MYEND=`echo &amp;quot;SELECT strftime(datetime('${prevyear}-${1}-01','+3 month'));&amp;quot; | sqlite3`&lt;br /&gt;
&lt;br /&gt;
        # Debugging only, to see what it does:&lt;br /&gt;
        echo &amp;quot;---- Querying ${prevyear}-${1}-01 ... ${year}-${3}-end:&amp;quot;&lt;br /&gt;
        # we use start_time and end_time to get the proper time range&lt;br /&gt;
        t.rast.list input=temp_daily_average@modis_lst_reconstructed_europe_daily \&lt;br /&gt;
        where=&amp;quot;start_time &amp;gt;= '$MYSTART' AND end_time &amp;lt;= '$MYEND'&amp;quot; &amp;gt; list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
	&lt;br /&gt;
        head -n 3 list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
        echo &amp;quot;...&amp;quot;&lt;br /&gt;
        tail -n 3 list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
        echo &amp;quot;=======&amp;quot;&lt;br /&gt;
        rm -f list_${prevyear}_${1}_${3}.csv&lt;br /&gt;
        &lt;br /&gt;
        # calculate aggregates:&lt;br /&gt;
        method=&amp;quot;average&amp;quot;   # median mode minimum maximum stddev&lt;br /&gt;
        &lt;br /&gt;
        t.rast.series input=temp_daily_average@modis_lst_reconstructed_europe_daily \&lt;br /&gt;
        where=&amp;quot;start_time &amp;gt;= '$MYSTART' AND end_time &amp;lt;= '$MYEND'&amp;quot; \&lt;br /&gt;
        output=temp_${method}_${prevyear}_${1}&lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Much simpler '''alternative''' (which runs in parallel on multi-cores):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
t.rast.aggregate input=A output=B basename=b where=&amp;quot;start_time &amp;gt;= '2004-03-01 00:00:00'&amp;quot; granularity=&amp;quot;3 months&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How to count consecutive days that meet a certain condition? ===&lt;br /&gt;
&lt;br /&gt;
This example was kindly contributed by Thomas Leppelt and shows how to obtain the number of consecutive days with temperature below 0 per week.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Set the computational region and resolution&lt;br /&gt;
g.region -p n=-30 s=-50 e=-50 w=-70 res=1&lt;br /&gt;
&lt;br /&gt;
# We create maps for 100 days&lt;br /&gt;
for map in `seq 1 100` ; do&lt;br /&gt;
 # generate synthetic maps as a seeding random values for temperatures&lt;br /&gt;
 r.mapcalc -s expression=&amp;quot;daily_temp_${map} = rand(-20,20)&amp;quot; --o&lt;br /&gt;
 echo daily_temp_${map} &amp;gt;&amp;gt; map_list.txt&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
t.create type=strds temporaltype=absolute \&lt;br /&gt;
         output=temperature_daily \&lt;br /&gt;
         title=&amp;quot;Daily Temperature&amp;quot; \&lt;br /&gt;
         description=&amp;quot;Test dataset with daily temperature&amp;quot;&lt;br /&gt;
&lt;br /&gt;
t.register -i type=raster input=temperature_daily \&lt;br /&gt;
           file=map_list.txt start=&amp;quot;2014-03-07&amp;quot; increment=&amp;quot;1 days&amp;quot; --o&lt;br /&gt;
&lt;br /&gt;
# check general information of the daily strds&lt;br /&gt;
t.info type=strds input=temperature_daily&lt;br /&gt;
&lt;br /&gt;
# Create weekly mask to which we will add 1 or 0 according to temperature in the days within it (each map in this week mask will have a value of 7)&lt;br /&gt;
t.rast.aggregate input=temperature_daily output=weekly_mask basename=mask_week granularity=&amp;quot;1 weeks&amp;quot; method=count&lt;br /&gt;
&lt;br /&gt;
# Calculate consecutive days with negative temperatures&lt;br /&gt;
t.rast.algebra base=neg_temp_days expression=&amp;quot;consecutive_days = weekly_mask {+,contains,l} if(temperature_daily &amp;lt; 0 &amp;amp;&amp;amp; temperature_daily[-1] &amp;lt; 0 || temperature_daily[1] &amp;lt; 0 &amp;amp;&amp;amp; temperature_daily &amp;lt; 0, 1, 0)&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Online tutorials and courses ==&lt;br /&gt;
&lt;br /&gt;
* [https://web.archive.org/web/20160119125858/www.geostat-course.org/topic_gebbert/ The temporal GRASS GIS framework: Introduction and application] by Sören Gebbert (2012)&lt;br /&gt;
* CZ: [https://web.archive.org/web/20180316200749/https://training.gismentors.eu/grass-gis-pokrocily/tgrass/index.html Úvod do časoprostorových analýz] (Introduction to space-time analysis) by Martin Landa (2015)&lt;br /&gt;
* [https://gismentors.github.io/grass-gis-workshop-jena/units/21.html Sentinel spatio-temporal processing] by Martin Landa (2020)&lt;br /&gt;
* [https://github.com/veroandreo/tgrass_workshop_foss4g_eu TGRASS: temporal data processing with GRASS GIS] FOSS4G-EU workshop by Veronica Andreo, Luca Delucchi and Markus Neteler (2017)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Gebbert, S., Pebesma, E. 2014. ''TGRASS: A temporal GIS for field based environmental modeling''. Environmental Modelling &amp;amp; Software 53, 1-12 ([http://dx.doi.org/10.1016/j.envsoft.2013.11.001 DOI]) - [http://ifgi.uni-muenster.de/~epebe_01/tgrass.pdf preprint PDF]&lt;br /&gt;
* Gebbert, S., Pebesma, E. 2017. ''The GRASS GIS temporal framework''. International Journal of Geographical Information Science 31, 1273-1292 ([http://dx.doi.org/10.1080/13658816.2017.1306862 DOI]) - [https://figshare.com/articles/journal_contribution/The_GRASS_GIS_temporal_framework/4834013/1/files/8024429.pdf PDF]&lt;br /&gt;
* Gebbert, S., Leppelt, T., Pebesma, E., 2019. ''A topology based spatio-temporal map algebra for big data analysis''. Data 4, 86. ([https://doi.org/10.3390/data4020086 DOI]) - [https://www.mdpi.com/2306-5729/4/2/86/pdf?version=1560849201 PDF]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* Introduction: [http://www.slideshare.net/Luis_de_Sousa/presentation-soeren GRASS as a Temporal GIS] by Sören Gebbert (slides)&lt;br /&gt;
* [https://archive.org/details/TheTemporalGrassGisFrameworkIntroductionAndApplication# The temporal GRASS GIS framework: Introduction and application] Video of Sören Gebbert's presentation in [http://www.geostat-course.org/Muenster_2012 GEOSTAT course] 2012&lt;br /&gt;
* [https://grass.osgeo.org/grass-stable/manuals/temporalintro.html Introduction to temporal modules] (GRASS GIS manual)&lt;br /&gt;
* [https://grass.osgeo.org/grass-stable/manuals/temporal.html Available temporal modules] (GRASS GIS manual)&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/Grass7/TemporalExtension Temporal Extension] (background info in trac)&lt;br /&gt;
* [[GRASS GSoC 2013 Temporal GIS Algebra for raster and vector data in GRASS]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: Tutorial]]&lt;br /&gt;
[[Category: Temporal]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_messages_translation&amp;diff=28526</id>
		<title>GRASS messages translation</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_messages_translation&amp;diff=28526"/>
		<updated>2025-06-22T16:09:22Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Add Weblate generated translation badge to README files */ Adding new translators&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GRASS messages translation project ==&lt;br /&gt;
&lt;br /&gt;
Many users prefer to use software in their mother tongue which is mostly not English. This requires that all GRASS software messages have to be translated to languages other than English. The GRASS Development Team is seeking translators. Please subscribe to the dedicated mailing list at&lt;br /&gt;
&lt;br /&gt;
     GRASS translations mailing list&lt;br /&gt;
     http://lists.osgeo.org/mailman/listinfo/grass-translations&lt;br /&gt;
&lt;br /&gt;
Translation related issues may be discussed there. This is an opportunity for non-programmers to contribute as messages can be easily translated. No programming skills required!&lt;br /&gt;
&lt;br /&gt;
* Join the [[GRASS_Translation_Team#Members_of_Translation_Team|team]]&lt;br /&gt;
&lt;br /&gt;
=== Wanted languages ===&lt;br /&gt;
&lt;br /&gt;
Simple Chinese, Swahili, Hindi, Greek, Tamil, Russian, Telugu, Português, ... Please join us!&lt;br /&gt;
&lt;br /&gt;
== Weblate translation platform ==&lt;br /&gt;
&lt;br /&gt;
Weblate is a web-based translation tool with tight version control integration. It features a simple and clean user interface, propagation of translations across components, quality checks and automatic linking to source files.&lt;br /&gt;
&lt;br /&gt;
(Note that we migrated from Transifex to [https://weblate.osgeo.org/projects/grass-gis/ Weblate] in 2023. All messages on Transifex have been transferred to Weblate.)&lt;br /&gt;
&lt;br /&gt;
=== How to translate ===&lt;br /&gt;
'''''NOTE: THIS IS FOR TRANSLATOR'''''&lt;br /&gt;
&lt;br /&gt;
* For terminology, please refer to the [[GRASS Translation Glossary]].&lt;br /&gt;
&lt;br /&gt;
Register yourself on the [https://weblate.osgeo.org/projects/grass-gis/ Weblate website] using the [https://www.osgeo.org/community/getting-started-osgeo/osgeo_userid/ OSGeo-ID], and start to translate (grasswxpy is the GUI translation and it should be the first translated).&lt;br /&gt;
&lt;br /&gt;
=== Using the machine translation tool ===&lt;br /&gt;
&lt;br /&gt;
Using the machine translation tool: We have added the DeepL.com API which helps for selected languages to come to speed with translations.&lt;br /&gt;
&lt;br /&gt;
Usage: login to Weblate. Then you see a button &amp;quot;Automatic suggestion&amp;quot;. Use &amp;quot;Clone Translation&amp;quot; to copy over the suggested translation, edit as needed and save it.&lt;br /&gt;
&lt;br /&gt;
[[File:Weblate with machine translation DeepL.png|thumb|800px|center|alt=Weblate with machine translation DeepL.com API|Weblate with machine translation DeepL.com API]]&lt;br /&gt;
&lt;br /&gt;
=== Automated upload of your translation work to the GRASS GIS project in GitHub ===&lt;br /&gt;
&lt;br /&gt;
Every 24 hours the new translations are automatically pushed to https://github.com/OSGeo/grass/pulls.&lt;br /&gt;
One of the maintainers will take care to merge them into the code so that it becomes part of the next release.&lt;br /&gt;
&lt;br /&gt;
=== Files to be edited ===&lt;br /&gt;
&lt;br /&gt;
==== GRASS GIS 8 translations ====&lt;br /&gt;
In GRASS GIS 8, we have only 3 types of .po files per language (the files are stored in the source code, in directory locale/po/):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Weblate widgets for embedding into other sites: https://weblate.osgeo.org/widgets/grass-gis/&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:Weblate grassgis widget.png|center|link=https://weblate.osgeo.org/projects/grass-gis/]]&lt;br /&gt;
(click to see the GRASS GIS Weblate pages)&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;grasslibs_LANG.po&amp;lt;/tt&amp;gt;: messages from libraries&lt;br /&gt;
* &amp;lt;tt&amp;gt;grassmods_LANG.po&amp;lt;/tt&amp;gt;: messages from commands (&amp;quot;modules&amp;quot;)&lt;br /&gt;
* &amp;lt;tt&amp;gt;grasswxpy_LANG.po&amp;lt;/tt&amp;gt;: messages from wxgrass/wxPython graphical user interface&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;LANG&amp;quot; in the above file names is a two character code which indicates the language. It is based on the Alpha-2 code of [http://www.loc.gov/standards/iso639-2/php/English_list.php ISO 639-1] (right column). Example: &amp;lt;tt&amp;gt;grasswxpy_pl.po&amp;lt;/tt&amp;gt; for Polish.&lt;br /&gt;
&lt;br /&gt;
'''We highly recommend to use our Weblate server: https://weblate.osgeo.org/projects/grass-gis/'''!&lt;br /&gt;
&lt;br /&gt;
==== Add support for a new language ====&lt;br /&gt;
&lt;br /&gt;
Go to any component, e.g. grasslibs - https://weblate.osgeo.org/projects/grass-gis/grasslibs/&lt;br /&gt;
&lt;br /&gt;
Then click on the &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; button to add a language. You have to do it for each component.&lt;br /&gt;
&lt;br /&gt;
==== Adding Weblate generated translation badge to README files ====&lt;br /&gt;
&lt;br /&gt;
We may consider to add a translation status badge, pointing to [https://weblate.osgeo.org/projects/grass-gis/ Weblate], to the server README.md on GitHub:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;markdown&amp;quot;&amp;gt;&lt;br /&gt;
[![Translation status](https://weblate.osgeo.org/widgets/grass-gis/-/svg-badge.svg)](https://weblate.osgeo.org/engage/grass-gis/?utm_source=widget)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yet a TODO.&lt;br /&gt;
&lt;br /&gt;
==== Adding new translators: giving credit ====&lt;br /&gt;
&lt;br /&gt;
New translators need to be added here:&lt;br /&gt;
https://github.com/OSGeo/grass/blob/main/translators.csv&lt;br /&gt;
&lt;br /&gt;
=== Weblate: technical background on the installation ===&lt;br /&gt;
&lt;br /&gt;
'''How it works:''' when a developer makes a GRASS GIS repo commit on GitHub, GitHub then calls the [https://github.com/OSGeo/grass/pull/3065#issuecomment-1716446226 webhook] on Weblate which triggers a refresh of Weblate's git fork of the GRASS GIS repo (check at ​https://github.com/osgeoweblate/grass/tree/weblate-grass-gis-grasslibs).&lt;br /&gt;
&lt;br /&gt;
For pushing translations back to GitHub, there is a setting in Weblate for that which defaults to 24 hrs (accumulates translations over a day). Then a pull request with the translations will be opened in the GRASS GIS GitHub repo.&lt;br /&gt;
&lt;br /&gt;
For technical background on the OSGeo Weblate installation, see https://wiki.osgeo.org/wiki/SAC:Weblate .&lt;br /&gt;
&lt;br /&gt;
For GRASS GIS related Weblate troubleshooting, see the discussion in this OSGeo-SAC ticket: https://trac.osgeo.org/osgeo/ticket/2981&lt;br /&gt;
&lt;br /&gt;
'''Weblate Troubleshooting:'''&lt;br /&gt;
&lt;br /&gt;
In case the Weblate's git copy of the GRASS GIS repo does no longer update due to&lt;br /&gt;
a conflict or whatever reason:&lt;br /&gt;
&lt;br /&gt;
Log into Weblate (requires administrator rights) and check on &amp;lt;https://weblate.osgeo.org/projects/grass-gis/#repository&amp;gt;&lt;br /&gt;
click on the &amp;quot;Manage&amp;quot; -&amp;gt; &amp;quot;Repository Maintenance&amp;quot;. Therein choose &amp;quot;Update&amp;quot; button, &lt;br /&gt;
&amp;quot;Update with merge without fast-forward&amp;quot;. If successful, this will create&lt;br /&gt;
another pull request in the GRASS GIS repo (trigger with &amp;quot;Push&amp;quot; button).&lt;br /&gt;
&lt;br /&gt;
=== Continuing an existing translation ===&lt;br /&gt;
&lt;br /&gt;
The file(s) are there but partially outdated? Read on.&lt;br /&gt;
&lt;br /&gt;
First '''announce''' on the [http://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list] that you plan to continue the translation of a certain language. Why? Because sometimes people silently translate already and we need these efforts to be coordinated to avoid doing it twice...&lt;br /&gt;
&lt;br /&gt;
Then get these four .po files for your language and start. If a file is missing, just ask on the list to get it generated or see next section. To get these .po files (the files are in the directory locale/po/):&lt;br /&gt;
&lt;br /&gt;
* either [https://github.com/OSGeo/grass/tree/master/locale/po/ download current .po files] directly from SVN (click on file name to download),&lt;br /&gt;
* or [https://grass.osgeo.org/download/0 download source code package] from GitHub,&lt;br /&gt;
* or download the recent [https://grass.osgeo.org/grass78/source/snapshot/ source code snapshot],&lt;br /&gt;
* or ask on the [https://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list] for these files.&lt;br /&gt;
&lt;br /&gt;
Then edit the files with a .po file editor (poEDIT or kbabel or..., see below). Take care to maintain layout and special characters. And '''submit often''' - if you wait for weeks, the messages may already be outdated and your time wasted. Just keep in touch on the [https://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list]!&lt;br /&gt;
&lt;br /&gt;
=== Starting a new translation ===&lt;br /&gt;
&lt;br /&gt;
The language you want isn't yet there? Read on.&lt;br /&gt;
&lt;br /&gt;
Briefly, the steps to create new messages files are (if you find this too complicated, ask on the [https://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list] to get these files done for you!):&lt;br /&gt;
&lt;br /&gt;
# Get the latest source code development version from either the SVN repository or as SVN snapshot (see [https://grass.osgeo.org/download/ Download]).&lt;br /&gt;
# run: './configure --with-nls [... other parameters]' to configure the GRASS source code &lt;br /&gt;
# run: 'cd locale' to change into the translation directory&lt;br /&gt;
# run: 'make pot' to create grass*.pot template files (to extract original messages)&lt;br /&gt;
# run: copy these file from templates/ into po/; rename them to contain the two characters language code (see Alpha-2 code of [http://www.loc.gov/standards/iso639-2/php/English_list.php ISO 639-1]) and to .po extension; update the file headers either manually or with your .po editing software&lt;br /&gt;
  (Example: Polish language):&lt;br /&gt;
 	        mv ./templates/grasslibs.pot ./po/grasslibs_pl.po&lt;br /&gt;
 	        mv ./templates/grassmods.pot ./po/grassmods_pl.po&lt;br /&gt;
 	        mv ./templates/grassnviz.pot ./po/grassnviz_pl.po&lt;br /&gt;
 	        mv ./templates/grasstcl.pot ./po/grasstcl_pl.po&lt;br /&gt;
 	        mv ./templates/grasswxpy.pot ./po/grasswxpy_pl.po&lt;br /&gt;
&lt;br /&gt;
Now translate the messages in these po/*.po files (using poEDIT or other editor, see below)&lt;br /&gt;
&lt;br /&gt;
From time to time messages need to be updated from the originals. This is usually done by the GRASS translation manager.&lt;br /&gt;
&lt;br /&gt;
=== Create a new project ===&lt;br /&gt;
&lt;br /&gt;
'''''NOTE: CORE DEVELOPERS ONLY!'''''&lt;br /&gt;
&lt;br /&gt;
TODO 2023: improve this section!&lt;br /&gt;
&lt;br /&gt;
A project should be done for each stable release, only an Organization Administrators can create a project. From the dashboard in the left bottom corner there is &amp;quot;'''New project'''&amp;quot; button. Fill all the field in the form. More info in [https://docs.weblate.org/en/latest/ Weblate documentation]&lt;br /&gt;
&lt;br /&gt;
Once the new project is created you need to upload the resources (the pot file to translate).&lt;br /&gt;
To create the pot files you can execute&lt;br /&gt;
  make pot&lt;br /&gt;
&lt;br /&gt;
inside the '''locale''' folder. Now you can load in the Resource section, after you added them you can link the pot file with an online version to get updates. To do this click on &amp;quot;'''Auto update resources'''&amp;quot; bottom (read also the [https://docs.weblate.org/en/latest/ Weblate documentation].&lt;br /&gt;
&lt;br /&gt;
At this point you need to load the translated po files, for each language and file you have to upload the translation po file. Some errors could appear, resolution of this problems is a TODO&lt;br /&gt;
&lt;br /&gt;
=== Get the translated po files ===&lt;br /&gt;
&lt;br /&gt;
'''''NOTE: THIS IS FOR DEVELOPERS OR POWER USERS'''''&lt;br /&gt;
&lt;br /&gt;
== Testing different languages in GRASS GIS ==&lt;br /&gt;
&lt;br /&gt;
Testing different languages requires that the respective language environment and, if needed, fonts are installed.&lt;br /&gt;
Check what languages are currently installed on your system with:&lt;br /&gt;
  locale -a&lt;br /&gt;
&lt;br /&gt;
To change to a certain language environment (locale), do the following steps (here, example for Unix style environment):&lt;br /&gt;
&lt;br /&gt;
   1. Define/check language settings:&lt;br /&gt;
     echo $LANG&lt;br /&gt;
     echo $LANGUAGE&lt;br /&gt;
     echo $LC_MESSAGES&lt;br /&gt;
  &lt;br /&gt;
   2. Change it (example for to Japanese):&lt;br /&gt;
    a) bash shell:&lt;br /&gt;
         export LANG=ja_JP.UTF-8&lt;br /&gt;
         export LANGUAGE=ja_JP.UTF-8&lt;br /&gt;
         export LC_MESSAGES=ja_JP.UTF-8&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    b) (t)csh shell:&lt;br /&gt;
         setenv LANG ja_JP.UTF-8&lt;br /&gt;
         setenv LANGUAGE ja_JP.UTF-8&lt;br /&gt;
         setenv LC_MESSAGES ja_JP.UTF-8&lt;br /&gt;
&lt;br /&gt;
Now launch GRASS in this terminal. If you launch it from an icon, you have to change the LOCALE in the computer setup program instead.&lt;br /&gt;
&lt;br /&gt;
Other common languages useful for testing are &amp;lt;tt&amp;gt;de_DE&amp;lt;/tt&amp;gt; for German, &amp;lt;tt&amp;gt;fr_FR&amp;lt;/tt&amp;gt; for French, or &amp;quot;C&amp;quot; for none (effectively &amp;lt;tt&amp;gt;en_US&amp;lt;/tt&amp;gt;, which for GRASS is the base language).&lt;br /&gt;
&lt;br /&gt;
=== Creating startup scripts for different languages ===&lt;br /&gt;
&lt;br /&gt;
GRASS in English language, save as &amp;quot;grass78eng&amp;quot; (executable flag set, store in path):&lt;br /&gt;
      #!/bin/sh&lt;br /&gt;
      export LANG=en_US&lt;br /&gt;
      export LANGUAGE=en_US&lt;br /&gt;
      export LC_MESSAGES=en_US&lt;br /&gt;
      exec grass78 &amp;quot;$@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GRASS in Japanese language, save as &amp;quot;grass78ja&amp;quot; (executable flag set, store in path):&lt;br /&gt;
      #!/bin/sh&lt;br /&gt;
      export LANG=ja_JA.UTF-8&lt;br /&gt;
      export LANGUAGE=ja_JA.UTF-8&lt;br /&gt;
      export LC_MESSAGES=ja_JA.UTF-8&lt;br /&gt;
      grass78 &amp;quot;$@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Coordination among translators ==&lt;br /&gt;
&lt;br /&gt;
If several translators work on the same language files, obviously some coordination is needed. Please announce work via the &amp;quot;translations&amp;quot; mailing list at https://lists.osgeo.org/mailman/listinfo/grass-translations &lt;br /&gt;
&lt;br /&gt;
Also the translation manager is listening there to the upload the changed files into the GRASS source code repository.&lt;br /&gt;
&lt;br /&gt;
== Best practices ==&lt;br /&gt;
&lt;br /&gt;
* Italiano: [https://tp.linux.it/buona_traduzione.html Regole per la buona traduzione]&lt;br /&gt;
&lt;br /&gt;
== Installation of language packages ==&lt;br /&gt;
&lt;br /&gt;
Example: Chinese&lt;br /&gt;
&lt;br /&gt;
* Debian, Fedora, Ubuntu, ...: the locales should be already present&lt;br /&gt;
** list all valid locales on the system: localectl list-locales&lt;br /&gt;
** show current settings: localectl status&lt;br /&gt;
** set new locale: localectl set-locale LANG=zh_CN.utf8 LC_MESSAGES=zh_CN.utf8&lt;br /&gt;
&lt;br /&gt;
== Reduction of similar messages ==&lt;br /&gt;
&lt;br /&gt;
Please re-use existing messages:&lt;br /&gt;
* https://trac.osgeo.org/grass/wiki/MessageStandardization&lt;br /&gt;
&lt;br /&gt;
== Updating messages in the source code ==&lt;br /&gt;
&lt;br /&gt;
Generally, to support i18N multiple languages, message strings in GRASS must be modified by adding so-called [https://www.gnu.org/software/gettext/ gettext macros] &amp;lt;tt&amp;gt;'''_('''&amp;quot;...&amp;quot;''')'''&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== C programming language ===&lt;br /&gt;
&lt;br /&gt;
Change from&lt;br /&gt;
  fprintf ( ..., &amp;quot;...\n&amp;quot;, ...);&lt;br /&gt;
to either&lt;br /&gt;
  fprintf ( ..., _(&amp;quot;...\n&amp;quot;), ...);&lt;br /&gt;
or usually (while omitting \n)&lt;br /&gt;
  G_message ( _(&amp;quot;...&amp;quot;), ...);&lt;br /&gt;
&lt;br /&gt;
=== Python programming language ===&lt;br /&gt;
&lt;br /&gt;
In Python, the macro is used like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
grass.message(_('Raster map &amp;lt;{name}&amp;gt; unpacked'.format(name=map_name)))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important hints ===&lt;br /&gt;
&lt;br /&gt;
Beware:&lt;br /&gt;
* G_message should be used for messages - information about the process for user while fprintf(stdout...) for data output.&lt;br /&gt;
* G_message output is not expected to be send to pipe or file.&lt;br /&gt;
* fprintf(stdout...) output is usually send to pipe or file.&lt;br /&gt;
&lt;br /&gt;
Programming details are available in the file locale/[https://github.com/OSGeo/grass/blob/master/locale/README README].&lt;br /&gt;
&lt;br /&gt;
Important:&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/MessageStandardization Message Standardization]: How should Errors/Warnings/Messages be formatted, Macros etc&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Alpha-2 code of [http://www.loc.gov/standards/iso639-2/php/English_list.php ISO 639-1] (right column)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Translation]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_messages_translation&amp;diff=28518</id>
		<title>GRASS messages translation</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_messages_translation&amp;diff=28518"/>
		<updated>2025-06-20T15:15:54Z</updated>

		<summary type="html">&lt;p&gt;Neteler: + Add translation badge to README files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GRASS messages translation project ==&lt;br /&gt;
&lt;br /&gt;
Many users prefer to use software in their mother tongue which is mostly not English. This requires that all GRASS software messages have to be translated to languages other than English. The GRASS Development Team is seeking translators. Please subscribe to the dedicated mailing list at&lt;br /&gt;
&lt;br /&gt;
     GRASS translations mailing list&lt;br /&gt;
     http://lists.osgeo.org/mailman/listinfo/grass-translations&lt;br /&gt;
&lt;br /&gt;
Translation related issues may be discussed there. This is an opportunity for non-programmers to contribute as messages can be easily translated. No programming skills required!&lt;br /&gt;
&lt;br /&gt;
* Join the [[GRASS_Translation_Team#Members_of_Translation_Team|team]]&lt;br /&gt;
&lt;br /&gt;
=== Wanted languages ===&lt;br /&gt;
&lt;br /&gt;
Simple Chinese, Swahili, Hindi, Greek, Tamil, Russian, Telugu, Português, ... Please join us!&lt;br /&gt;
&lt;br /&gt;
== Weblate translation platform ==&lt;br /&gt;
&lt;br /&gt;
Weblate is a web-based translation tool with tight version control integration. It features a simple and clean user interface, propagation of translations across components, quality checks and automatic linking to source files.&lt;br /&gt;
&lt;br /&gt;
(Note that we migrated from Transifex to [https://weblate.osgeo.org/projects/grass-gis/ Weblate] in 2023. All messages on Transifex have been transferred to Weblate.)&lt;br /&gt;
&lt;br /&gt;
=== How to translate ===&lt;br /&gt;
'''''NOTE: THIS IS FOR TRANSLATOR'''''&lt;br /&gt;
&lt;br /&gt;
* For terminology, please refer to the [[GRASS Translation Glossary]].&lt;br /&gt;
&lt;br /&gt;
Register yourself on the [https://weblate.osgeo.org/projects/grass-gis/ Weblate website] using the [https://www.osgeo.org/community/getting-started-osgeo/osgeo_userid/ OSGeo-ID], and start to translate (grasswxpy is the GUI translation and it should be the first translated).&lt;br /&gt;
&lt;br /&gt;
=== Using the machine translation tool ===&lt;br /&gt;
&lt;br /&gt;
Using the machine translation tool: We have added the DeepL.com API which helps for selected languages to come to speed with translations.&lt;br /&gt;
&lt;br /&gt;
Usage: login to Weblate. Then you see a button &amp;quot;Automatic suggestion&amp;quot;. Use &amp;quot;Clone Translation&amp;quot; to copy over the suggested translation, edit as needed and save it.&lt;br /&gt;
&lt;br /&gt;
[[File:Weblate with machine translation DeepL.png|thumb|800px|center|alt=Weblate with machine translation DeepL.com API|Weblate with machine translation DeepL.com API]]&lt;br /&gt;
&lt;br /&gt;
=== Automated upload of your translation work to the GRASS GIS project in GitHub ===&lt;br /&gt;
&lt;br /&gt;
Every 24 hours the new translations are automatically pushed to https://github.com/OSGeo/grass/pulls.&lt;br /&gt;
One of the maintainers will take care to merge them into the code so that it becomes part of the next release.&lt;br /&gt;
&lt;br /&gt;
=== Files to be edited ===&lt;br /&gt;
&lt;br /&gt;
==== GRASS GIS 8 translations ====&lt;br /&gt;
In GRASS GIS 8, we have only 3 types of .po files per language (the files are stored in the source code, in directory locale/po/):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Weblate widgets for embedding into other sites: https://weblate.osgeo.org/widgets/grass-gis/&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:Weblate grassgis widget.png|center|link=https://weblate.osgeo.org/projects/grass-gis/]]&lt;br /&gt;
(click to see the GRASS GIS Weblate pages)&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;grasslibs_LANG.po&amp;lt;/tt&amp;gt;: messages from libraries&lt;br /&gt;
* &amp;lt;tt&amp;gt;grassmods_LANG.po&amp;lt;/tt&amp;gt;: messages from commands (&amp;quot;modules&amp;quot;)&lt;br /&gt;
* &amp;lt;tt&amp;gt;grasswxpy_LANG.po&amp;lt;/tt&amp;gt;: messages from wxgrass/wxPython graphical user interface&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;LANG&amp;quot; in the above file names is a two character code which indicates the language. It is based on the Alpha-2 code of [http://www.loc.gov/standards/iso639-2/php/English_list.php ISO 639-1] (right column). Example: &amp;lt;tt&amp;gt;grasswxpy_pl.po&amp;lt;/tt&amp;gt; for Polish.&lt;br /&gt;
&lt;br /&gt;
'''We highly recommend to use our Weblate server: https://weblate.osgeo.org/projects/grass-gis/'''!&lt;br /&gt;
&lt;br /&gt;
==== Add support for a new language ====&lt;br /&gt;
&lt;br /&gt;
Go to any component, e.g. grasslibs - https://weblate.osgeo.org/projects/grass-gis/grasslibs/&lt;br /&gt;
&lt;br /&gt;
Then click on the &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; button to add a language. You have to do it for each component.&lt;br /&gt;
&lt;br /&gt;
==== Add Weblate generated translation badge to README files ====&lt;br /&gt;
&lt;br /&gt;
We may consider to add a translation status badge, pointing to [https://weblate.osgeo.org/projects/grass-gis/ Weblate], to the server README.md on GitHub:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;markdown&amp;quot;&amp;gt;&lt;br /&gt;
[![Translation status](https://weblate.osgeo.org/widgets/grass-gis/-/svg-badge.svg)](https://weblate.osgeo.org/engage/grass-gis/?utm_source=widget)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yet a TODO.&lt;br /&gt;
&lt;br /&gt;
=== Weblate: technical background on the installation ===&lt;br /&gt;
&lt;br /&gt;
'''How it works:''' when a developer makes a GRASS GIS repo commit on GitHub, GitHub then calls the [https://github.com/OSGeo/grass/pull/3065#issuecomment-1716446226 webhook] on Weblate which triggers a refresh of Weblate's git fork of the GRASS GIS repo (check at ​https://github.com/osgeoweblate/grass/tree/weblate-grass-gis-grasslibs).&lt;br /&gt;
&lt;br /&gt;
For pushing translations back to GitHub, there is a setting in Weblate for that which defaults to 24 hrs (accumulates translations over a day). Then a pull request with the translations will be opened in the GRASS GIS GitHub repo.&lt;br /&gt;
&lt;br /&gt;
For technical background on the OSGeo Weblate installation, see https://wiki.osgeo.org/wiki/SAC:Weblate .&lt;br /&gt;
&lt;br /&gt;
For GRASS GIS related Weblate troubleshooting, see the discussion in this OSGeo-SAC ticket: https://trac.osgeo.org/osgeo/ticket/2981&lt;br /&gt;
&lt;br /&gt;
'''Weblate Troubleshooting:'''&lt;br /&gt;
&lt;br /&gt;
In case the Weblate's git copy of the GRASS GIS repo does no longer update due to&lt;br /&gt;
a conflict or whatever reason:&lt;br /&gt;
&lt;br /&gt;
Log into Weblate (requires administrator rights) and check on &amp;lt;https://weblate.osgeo.org/projects/grass-gis/#repository&amp;gt;&lt;br /&gt;
click on the &amp;quot;Manage&amp;quot; -&amp;gt; &amp;quot;Repository Maintenance&amp;quot;. Therein choose &amp;quot;Update&amp;quot; button, &lt;br /&gt;
&amp;quot;Update with merge without fast-forward&amp;quot;. If successful, this will create&lt;br /&gt;
another pull request in the GRASS GIS repo (trigger with &amp;quot;Push&amp;quot; button).&lt;br /&gt;
&lt;br /&gt;
=== Continuing an existing translation ===&lt;br /&gt;
&lt;br /&gt;
The file(s) are there but partially outdated? Read on.&lt;br /&gt;
&lt;br /&gt;
First '''announce''' on the [http://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list] that you plan to continue the translation of a certain language. Why? Because sometimes people silently translate already and we need these efforts to be coordinated to avoid doing it twice...&lt;br /&gt;
&lt;br /&gt;
Then get these four .po files for your language and start. If a file is missing, just ask on the list to get it generated or see next section. To get these .po files (the files are in the directory locale/po/):&lt;br /&gt;
&lt;br /&gt;
* either [https://github.com/OSGeo/grass/tree/master/locale/po/ download current .po files] directly from SVN (click on file name to download),&lt;br /&gt;
* or [https://grass.osgeo.org/download/0 download source code package] from GitHub,&lt;br /&gt;
* or download the recent [https://grass.osgeo.org/grass78/source/snapshot/ source code snapshot],&lt;br /&gt;
* or ask on the [https://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list] for these files.&lt;br /&gt;
&lt;br /&gt;
Then edit the files with a .po file editor (poEDIT or kbabel or..., see below). Take care to maintain layout and special characters. And '''submit often''' - if you wait for weeks, the messages may already be outdated and your time wasted. Just keep in touch on the [https://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list]!&lt;br /&gt;
&lt;br /&gt;
=== Starting a new translation ===&lt;br /&gt;
&lt;br /&gt;
The language you want isn't yet there? Read on.&lt;br /&gt;
&lt;br /&gt;
Briefly, the steps to create new messages files are (if you find this too complicated, ask on the [https://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list] to get these files done for you!):&lt;br /&gt;
&lt;br /&gt;
# Get the latest source code development version from either the SVN repository or as SVN snapshot (see [https://grass.osgeo.org/download/ Download]).&lt;br /&gt;
# run: './configure --with-nls [... other parameters]' to configure the GRASS source code &lt;br /&gt;
# run: 'cd locale' to change into the translation directory&lt;br /&gt;
# run: 'make pot' to create grass*.pot template files (to extract original messages)&lt;br /&gt;
# run: copy these file from templates/ into po/; rename them to contain the two characters language code (see Alpha-2 code of [http://www.loc.gov/standards/iso639-2/php/English_list.php ISO 639-1]) and to .po extension; update the file headers either manually or with your .po editing software&lt;br /&gt;
  (Example: Polish language):&lt;br /&gt;
 	        mv ./templates/grasslibs.pot ./po/grasslibs_pl.po&lt;br /&gt;
 	        mv ./templates/grassmods.pot ./po/grassmods_pl.po&lt;br /&gt;
 	        mv ./templates/grassnviz.pot ./po/grassnviz_pl.po&lt;br /&gt;
 	        mv ./templates/grasstcl.pot ./po/grasstcl_pl.po&lt;br /&gt;
 	        mv ./templates/grasswxpy.pot ./po/grasswxpy_pl.po&lt;br /&gt;
&lt;br /&gt;
Now translate the messages in these po/*.po files (using poEDIT or other editor, see below)&lt;br /&gt;
&lt;br /&gt;
From time to time messages need to be updated from the originals. This is usually done by the GRASS translation manager.&lt;br /&gt;
&lt;br /&gt;
=== Create a new project ===&lt;br /&gt;
&lt;br /&gt;
'''''NOTE: CORE DEVELOPERS ONLY!'''''&lt;br /&gt;
&lt;br /&gt;
TODO 2023: improve this section!&lt;br /&gt;
&lt;br /&gt;
A project should be done for each stable release, only an Organization Administrators can create a project. From the dashboard in the left bottom corner there is &amp;quot;'''New project'''&amp;quot; button. Fill all the field in the form. More info in [https://docs.weblate.org/en/latest/ Weblate documentation]&lt;br /&gt;
&lt;br /&gt;
Once the new project is created you need to upload the resources (the pot file to translate).&lt;br /&gt;
To create the pot files you can execute&lt;br /&gt;
  make pot&lt;br /&gt;
&lt;br /&gt;
inside the '''locale''' folder. Now you can load in the Resource section, after you added them you can link the pot file with an online version to get updates. To do this click on &amp;quot;'''Auto update resources'''&amp;quot; bottom (read also the [https://docs.weblate.org/en/latest/ Weblate documentation].&lt;br /&gt;
&lt;br /&gt;
At this point you need to load the translated po files, for each language and file you have to upload the translation po file. Some errors could appear, resolution of this problems is a TODO&lt;br /&gt;
&lt;br /&gt;
=== Get the translated po files ===&lt;br /&gt;
&lt;br /&gt;
'''''NOTE: THIS IS FOR DEVELOPERS OR POWER USERS'''''&lt;br /&gt;
&lt;br /&gt;
== Testing different languages in GRASS GIS ==&lt;br /&gt;
&lt;br /&gt;
Testing different languages requires that the respective language environment and, if needed, fonts are installed.&lt;br /&gt;
Check what languages are currently installed on your system with:&lt;br /&gt;
  locale -a&lt;br /&gt;
&lt;br /&gt;
To change to a certain language environment (locale), do the following steps (here, example for Unix style environment):&lt;br /&gt;
&lt;br /&gt;
   1. Define/check language settings:&lt;br /&gt;
     echo $LANG&lt;br /&gt;
     echo $LANGUAGE&lt;br /&gt;
     echo $LC_MESSAGES&lt;br /&gt;
  &lt;br /&gt;
   2. Change it (example for to Japanese):&lt;br /&gt;
    a) bash shell:&lt;br /&gt;
         export LANG=ja_JP.UTF-8&lt;br /&gt;
         export LANGUAGE=ja_JP.UTF-8&lt;br /&gt;
         export LC_MESSAGES=ja_JP.UTF-8&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    b) (t)csh shell:&lt;br /&gt;
         setenv LANG ja_JP.UTF-8&lt;br /&gt;
         setenv LANGUAGE ja_JP.UTF-8&lt;br /&gt;
         setenv LC_MESSAGES ja_JP.UTF-8&lt;br /&gt;
&lt;br /&gt;
Now launch GRASS in this terminal. If you launch it from an icon, you have to change the LOCALE in the computer setup program instead.&lt;br /&gt;
&lt;br /&gt;
Other common languages useful for testing are &amp;lt;tt&amp;gt;de_DE&amp;lt;/tt&amp;gt; for German, &amp;lt;tt&amp;gt;fr_FR&amp;lt;/tt&amp;gt; for French, or &amp;quot;C&amp;quot; for none (effectively &amp;lt;tt&amp;gt;en_US&amp;lt;/tt&amp;gt;, which for GRASS is the base language).&lt;br /&gt;
&lt;br /&gt;
=== Creating startup scripts for different languages ===&lt;br /&gt;
&lt;br /&gt;
GRASS in English language, save as &amp;quot;grass78eng&amp;quot; (executable flag set, store in path):&lt;br /&gt;
      #!/bin/sh&lt;br /&gt;
      export LANG=en_US&lt;br /&gt;
      export LANGUAGE=en_US&lt;br /&gt;
      export LC_MESSAGES=en_US&lt;br /&gt;
      exec grass78 &amp;quot;$@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GRASS in Japanese language, save as &amp;quot;grass78ja&amp;quot; (executable flag set, store in path):&lt;br /&gt;
      #!/bin/sh&lt;br /&gt;
      export LANG=ja_JA.UTF-8&lt;br /&gt;
      export LANGUAGE=ja_JA.UTF-8&lt;br /&gt;
      export LC_MESSAGES=ja_JA.UTF-8&lt;br /&gt;
      grass78 &amp;quot;$@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Coordination among translators ==&lt;br /&gt;
&lt;br /&gt;
If several translators work on the same language files, obviously some coordination is needed. Please announce work via the &amp;quot;translations&amp;quot; mailing list at https://lists.osgeo.org/mailman/listinfo/grass-translations &lt;br /&gt;
&lt;br /&gt;
Also the translation manager is listening there to the upload the changed files into the GRASS source code repository.&lt;br /&gt;
&lt;br /&gt;
== Best practices ==&lt;br /&gt;
&lt;br /&gt;
* Italiano: [https://tp.linux.it/buona_traduzione.html Regole per la buona traduzione]&lt;br /&gt;
&lt;br /&gt;
== Installation of language packages ==&lt;br /&gt;
&lt;br /&gt;
Example: Chinese&lt;br /&gt;
&lt;br /&gt;
* Debian, Fedora, Ubuntu, ...: the locales should be already present&lt;br /&gt;
** list all valid locales on the system: localectl list-locales&lt;br /&gt;
** show current settings: localectl status&lt;br /&gt;
** set new locale: localectl set-locale LANG=zh_CN.utf8 LC_MESSAGES=zh_CN.utf8&lt;br /&gt;
&lt;br /&gt;
== Reduction of similar messages ==&lt;br /&gt;
&lt;br /&gt;
Please re-use existing messages:&lt;br /&gt;
* https://trac.osgeo.org/grass/wiki/MessageStandardization&lt;br /&gt;
&lt;br /&gt;
== Updating messages in the source code ==&lt;br /&gt;
&lt;br /&gt;
Generally, to support i18N multiple languages, message strings in GRASS must be modified by adding so-called [https://www.gnu.org/software/gettext/ gettext macros] &amp;lt;tt&amp;gt;'''_('''&amp;quot;...&amp;quot;''')'''&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== C programming language ===&lt;br /&gt;
&lt;br /&gt;
Change from&lt;br /&gt;
  fprintf ( ..., &amp;quot;...\n&amp;quot;, ...);&lt;br /&gt;
to either&lt;br /&gt;
  fprintf ( ..., _(&amp;quot;...\n&amp;quot;), ...);&lt;br /&gt;
or usually (while omitting \n)&lt;br /&gt;
  G_message ( _(&amp;quot;...&amp;quot;), ...);&lt;br /&gt;
&lt;br /&gt;
=== Python programming language ===&lt;br /&gt;
&lt;br /&gt;
In Python, the macro is used like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
grass.message(_('Raster map &amp;lt;{name}&amp;gt; unpacked'.format(name=map_name)))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important hints ===&lt;br /&gt;
&lt;br /&gt;
Beware:&lt;br /&gt;
* G_message should be used for messages - information about the process for user while fprintf(stdout...) for data output.&lt;br /&gt;
* G_message output is not expected to be send to pipe or file.&lt;br /&gt;
* fprintf(stdout...) output is usually send to pipe or file.&lt;br /&gt;
&lt;br /&gt;
Programming details are available in the file locale/[https://github.com/OSGeo/grass/blob/master/locale/README README].&lt;br /&gt;
&lt;br /&gt;
Important:&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/MessageStandardization Message Standardization]: How should Errors/Warnings/Messages be formatted, Macros etc&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Alpha-2 code of [http://www.loc.gov/standards/iso639-2/php/English_list.php ISO 639-1] (right column)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Translation]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-05-09&amp;diff=28516</id>
		<title>PSC Meeting 2025-05-09</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=PSC_Meeting_2025-05-09&amp;diff=28516"/>
		<updated>2025-06-17T16:57:35Z</updated>

		<summary type="html">&lt;p&gt;Neteler: added  :Category:PSC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Participants ==&lt;br /&gt;
&lt;br /&gt;
* Anna Petrasova&lt;br /&gt;
* Helmut Kudrnovsky&lt;br /&gt;
* Huidae Cho&lt;br /&gt;
* Linda Karlovska&lt;br /&gt;
* Markus Neteler&lt;br /&gt;
* Paulo van Breugel&lt;br /&gt;
* Vaclav Petras&lt;br /&gt;
* Veronica Andreo&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
The topics proposed are:&lt;br /&gt;
&lt;br /&gt;
* Hosting of GRASS server at OSL, Oregon State University. See: https://osuosl.org/blog/osl-future/.&lt;br /&gt;
* Financial Sponsoring via NumFocus. Status update.&lt;br /&gt;
* Conda update&lt;br /&gt;
* [[GRASS Developer Summit Raleigh 2025]], NC.&lt;br /&gt;
** Remote participation?&lt;br /&gt;
** Schedule&lt;br /&gt;
* Status of new docs: https://grass.osgeo.org/grass-devel/manuals/&lt;br /&gt;
* Status of doc and macOS uploads.&lt;br /&gt;
* Status of new branding.&lt;br /&gt;
** The main logo on wiki needs server-side update. Current file is https://grasswiki.osgeo.org/w/skins/common/images/grasslogo_wiki.png?3fa1b. (Also, this goes to mapping relation with OSGeo SAC.)&lt;br /&gt;
*** 7th May 2025: markusN has updated the logo on the wiki&lt;br /&gt;
* Wiki status&lt;br /&gt;
** The Main Page needs a major update and, more importantly, a ''complete change of approach''&lt;br /&gt;
** Ohloh_Project Widget is broken: [[Widget:Ohloh_Project]] used in [[Software requirements specification]]&lt;br /&gt;
*** 7th May 2025: markusN has been updated from https://www.mediawiki.org/wiki/Extension:Widgets, error messages here disappeared but the widget is not rendered yet. More time to be spent.&lt;br /&gt;
*** VP: Consider if we actually want Widget:Ohloh_Project or Widgets.&lt;br /&gt;
** There is no favicon.&lt;br /&gt;
*** 7th May 2025: markusN has added the favicon on the wiki&lt;br /&gt;
* Website&lt;br /&gt;
** we have [https://github.com/OSGeo/grass-website/issues/513 notable SEO issues] on the website which penalize our search engine ranking.&lt;br /&gt;
* GSoC.&lt;br /&gt;
* Shall we consider applying to Outreachy, too? See: https://lists.osgeo.org/pipermail/qgis-psc/2025-March/010525.html.&lt;br /&gt;
&lt;br /&gt;
== Minutes ==&lt;br /&gt;
&lt;br /&gt;
* From previous meeting:&lt;br /&gt;
** mailman migration to discourse:&lt;br /&gt;
*** The '''grass-user mailing list''' has been migrated to Discourse.&lt;br /&gt;
*** We will close the '''grass-web mailing list''' that receives spam mostly. Markus will put it into read-only mode, after an announcement to the list.&lt;br /&gt;
*** Anna will remove grass-web references from the website&lt;br /&gt;
*** We should add a “Contact us” something to the website → improve website footer&lt;br /&gt;
*** We decided to change the '''grass-stats mailing list''' and '''grass-translation mailing list''' mailing lists to read-only mode to reduce channel confusion. Markus will do this as he has permission, after an announcement has been sent to the list explaining the alternative(s).&lt;br /&gt;
*** For now, we keep the '''grass-psc mailing list''' list on mailman, but we are considering merging it to GRASS developer in Discourse, as subscribers are pretty much the same (that is, close down the mailing list). We also keep grass-announce on mailman.&lt;br /&gt;
** tutorials contributing guide: a [https://github.com/OSGeo/grass-tutorials/pull/16 PR] is there, but it seems useless. Vero volunteers to work on it; we are still trying to figure out the workflow (i.e., what to commit and so on).&lt;br /&gt;
&lt;br /&gt;
* Hosting of GRASS server at [https://wiki.osgeo.org/wiki/OSL OSL - Oregon University] using OSGeo infrastructure hosted there.&lt;br /&gt;
** OSL funding is at risk. We have no action item as OSGeo will handle this, but we will keep an eye on it in case we need to take action. &lt;br /&gt;
** News: Seems the next year is again funded ([https://osuosl.org/blog/osl-future-update/ OSL blog]).&lt;br /&gt;
&lt;br /&gt;
* NumFOCUS status update: The main reason to go with them is that they provide invoices when someone donates to the project, while OSGeo is not willing/legally able to do so, and we are missing some funding/sponsoring opportunities because of that. Also, NumFOCUS brings new funding options. &lt;br /&gt;
** Contract draft: edits concerning the PSC description were included.&lt;br /&gt;
** OSGeo cannot remain our fiscal host; it will become NumFOCUS; but we can still use the OSGeo money via reimbursements as usual.&lt;br /&gt;
** Once the agreement is signed, we’ll meet with their Finance department and go through NumFOCUS onboarding.&lt;br /&gt;
&lt;br /&gt;
* Conda&lt;br /&gt;
** Huidae built a Linux conda package, but without FHS (Filesystem Hierarchy Standard)&lt;br /&gt;
** The Windows conda package is not stable, probably a CMake issue&lt;br /&gt;
** There are 2 open issues: conda for Linux and Windows, CMake for Windows&lt;br /&gt;
** HC will resume work on it next week&lt;br /&gt;
** Instructions to test: https://github.com/OSGeo/grass/issues/5067&lt;br /&gt;
&lt;br /&gt;
* GRASS Developer Summit at Raleigh ([https://grasswiki.osgeo.org/wiki/Talk:GRASS_Developer_Summit_Raleigh_2025 agenda schedule])&lt;br /&gt;
** Remote participation? We decided async work is better according to previous years experiences, but we could define a time slot for a call with folks contributing remotely.&lt;br /&gt;
** There will be a PSC meeting during the summit: Friday 23, 5pm CET, 11am ET. Calendar invite sent.&lt;br /&gt;
&lt;br /&gt;
* New docs:&lt;br /&gt;
** They are up and looking great: https://grass.osgeo.org/grass-devel/manuals/&lt;br /&gt;
** Automatic upload from CI to the web server is WIP, needs GHA.&lt;br /&gt;
** Only some Python examples do not work, but that should be solvable.&lt;br /&gt;
** Corey is working on syncing branding among the website, docs, and tutorials&lt;br /&gt;
&lt;br /&gt;
* JSON: theoretically we want 3 types: &amp;lt;code&amp;gt;format=json&amp;lt;/code&amp;gt; (WIP), &amp;lt;code&amp;gt;--json&amp;lt;/code&amp;gt; (implemented), &amp;lt;code&amp;gt;--json-interface-description&amp;lt;/code&amp;gt; (not yet implemented) &lt;br /&gt;
&lt;br /&gt;
* Releases:&lt;br /&gt;
** 8.4.2 in [https://github.com/OSGeo/grass/milestone/27 some weeks]&lt;br /&gt;
&lt;br /&gt;
* New branding:&lt;br /&gt;
** Wiki:&lt;br /&gt;
*** logo and favicon were updated by MN&lt;br /&gt;
*** svg file in the corner? To be checked by MN -&amp;gt; done&lt;br /&gt;
*** review the Wiki landing page and redo it&lt;br /&gt;
**** highlight PSC and Events categories because that’s the current usage, and remove other links that are already on the website&lt;br /&gt;
*** Ohloh/OpenHub Project Widget is broken: let’s remove it -&amp;gt; done&lt;br /&gt;
*** Ideas on what to do with all the content we have on the media wiki: &lt;br /&gt;
**** obsolete everything and then select what to keep, &lt;br /&gt;
**** go topic by topic&lt;br /&gt;
**** obsolete everything that was not edited in the last 3 years, maybe with a bot extension?&lt;br /&gt;
**** To be discussed further&lt;br /&gt;
&lt;br /&gt;
* Website SEO issues: &lt;br /&gt;
** Our search engine ranking is partially penalized at time. See: https://github.com/OSGeo/grass-website/issues/513&lt;br /&gt;
** TODO: a volunteer to fix the issues noted in the ticket&lt;br /&gt;
&lt;br /&gt;
* Website analytics:&lt;br /&gt;
** There's the [https://2022.foss4g.org/matomo/ GFOSS.it Matomo] instance, but we do not have much control over it, only MN has a user account, via Luca D.&lt;br /&gt;
** OSGeo-SAC related [https://trac.osgeo.org/osgeo/ticket/2830 ticket] to install Matomo. Anna will revive it and Vashek will ask Howard.&lt;br /&gt;
** Corey offered to sponsor it as OpenPlains&lt;br /&gt;
** The paid option is around USD 500 yearly&lt;br /&gt;
&lt;br /&gt;
* GSoC:&lt;br /&gt;
** We got only one student this year, he'll work on the JSON project.&lt;br /&gt;
&lt;br /&gt;
[[Category:PSC]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_messages_translation&amp;diff=28483</id>
		<title>GRASS messages translation</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_messages_translation&amp;diff=28483"/>
		<updated>2025-06-03T16:02:34Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Files to be edited */ Add support for a new language&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GRASS messages translation project ==&lt;br /&gt;
&lt;br /&gt;
Many users prefer to use software in their mother tongue which is mostly not English. This requires that all GRASS software messages have to be translated to languages other than English. The GRASS Development Team is seeking translators. Please subscribe to the dedicated mailing list at&lt;br /&gt;
&lt;br /&gt;
     GRASS translations mailing list&lt;br /&gt;
     http://lists.osgeo.org/mailman/listinfo/grass-translations&lt;br /&gt;
&lt;br /&gt;
Translation related issues may be discussed there. This is an opportunity for non-programmers to contribute as messages can be easily translated. No programming skills required!&lt;br /&gt;
&lt;br /&gt;
* Join the [[GRASS_Translation_Team#Members_of_Translation_Team|team]]&lt;br /&gt;
&lt;br /&gt;
=== Wanted languages ===&lt;br /&gt;
&lt;br /&gt;
Simple Chinese, Swahili, Hindi, Greek, Tamil, Russian, Telugu, Português, ... Please join us!&lt;br /&gt;
&lt;br /&gt;
== Weblate translation platform ==&lt;br /&gt;
&lt;br /&gt;
Weblate is a web-based translation tool with tight version control integration. It features a simple and clean user interface, propagation of translations across components, quality checks and automatic linking to source files.&lt;br /&gt;
&lt;br /&gt;
(Note that we migrated from Transifex to [https://weblate.osgeo.org/projects/grass-gis/ Weblate] in 2023. All messages on Transifex have been transferred to Weblate.)&lt;br /&gt;
&lt;br /&gt;
=== How to translate ===&lt;br /&gt;
'''''NOTE: THIS IS FOR TRANSLATOR'''''&lt;br /&gt;
&lt;br /&gt;
* For terminology, please refer to the [[GRASS Translation Glossary]].&lt;br /&gt;
&lt;br /&gt;
Register yourself on the [https://weblate.osgeo.org/projects/grass-gis/ Weblate website] using the [https://www.osgeo.org/community/getting-started-osgeo/osgeo_userid/ OSGeo-ID], and start to translate (grasswxpy is the GUI translation and it should be the first translated).&lt;br /&gt;
&lt;br /&gt;
=== Using the machine translation tool ===&lt;br /&gt;
&lt;br /&gt;
Using the machine translation tool: We have added the DeepL.com API which helps for selected languages to come to speed with translations.&lt;br /&gt;
&lt;br /&gt;
Usage: login to Weblate. Then you see a button &amp;quot;Automatic suggestion&amp;quot;. Use &amp;quot;Clone Translation&amp;quot; to copy over the suggested translation, edit as needed and save it.&lt;br /&gt;
&lt;br /&gt;
[[File:Weblate with machine translation DeepL.png|thumb|800px|center|alt=Weblate with machine translation DeepL.com API|Weblate with machine translation DeepL.com API]]&lt;br /&gt;
&lt;br /&gt;
=== Automated upload of your translation work to the GRASS GIS project in GitHub ===&lt;br /&gt;
&lt;br /&gt;
Every 24 hours the new translations are automatically pushed to https://github.com/OSGeo/grass/pulls.&lt;br /&gt;
One of the maintainers will take care to merge them into the code so that it becomes part of the next release.&lt;br /&gt;
&lt;br /&gt;
=== Files to be edited ===&lt;br /&gt;
&lt;br /&gt;
==== GRASS GIS 8 translations ====&lt;br /&gt;
In GRASS GIS 8, we have only 3 types of .po files per language (the files are stored in the source code, in directory locale/po/):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Weblate widgets for embedding into other sites: https://weblate.osgeo.org/widgets/grass-gis/&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:Weblate grassgis widget.png|center|link=https://weblate.osgeo.org/projects/grass-gis/]]&lt;br /&gt;
(click to see the GRASS GIS Weblate pages)&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;grasslibs_LANG.po&amp;lt;/tt&amp;gt;: messages from libraries&lt;br /&gt;
* &amp;lt;tt&amp;gt;grassmods_LANG.po&amp;lt;/tt&amp;gt;: messages from commands (&amp;quot;modules&amp;quot;)&lt;br /&gt;
* &amp;lt;tt&amp;gt;grasswxpy_LANG.po&amp;lt;/tt&amp;gt;: messages from wxgrass/wxPython graphical user interface&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;LANG&amp;quot; in the above file names is a two character code which indicates the language. It is based on the Alpha-2 code of [http://www.loc.gov/standards/iso639-2/php/English_list.php ISO 639-1] (right column). Example: &amp;lt;tt&amp;gt;grasswxpy_pl.po&amp;lt;/tt&amp;gt; for Polish.&lt;br /&gt;
&lt;br /&gt;
'''We highly recommend to use our Weblate server: https://weblate.osgeo.org/projects/grass-gis/'''!&lt;br /&gt;
&lt;br /&gt;
==== Add support for a new language ====&lt;br /&gt;
&lt;br /&gt;
Go to any component, e.g. grasslibs - https://weblate.osgeo.org/projects/grass-gis/grasslibs/&lt;br /&gt;
&lt;br /&gt;
Then click on the &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; button to add a language. You have to do it for each component.&lt;br /&gt;
&lt;br /&gt;
=== Weblate: technical background on the installation ===&lt;br /&gt;
&lt;br /&gt;
'''How it works:''' when a developer makes a GRASS GIS repo commit on GitHub, GitHub then calls the [https://github.com/OSGeo/grass/pull/3065#issuecomment-1716446226 webhook] on Weblate which triggers a refresh of Weblate's git fork of the GRASS GIS repo (check at ​https://github.com/osgeoweblate/grass/tree/weblate-grass-gis-grasslibs).&lt;br /&gt;
&lt;br /&gt;
For pushing translations back to GitHub, there is a setting in Weblate for that which defaults to 24 hrs (accumulates translations over a day). Then a pull request with the translations will be opened in the GRASS GIS GitHub repo.&lt;br /&gt;
&lt;br /&gt;
For technical background on the OSGeo Weblate installation, see https://wiki.osgeo.org/wiki/SAC:Weblate .&lt;br /&gt;
&lt;br /&gt;
For GRASS GIS related Weblate troubleshooting, see the discussion in this OSGeo-SAC ticket: https://trac.osgeo.org/osgeo/ticket/2981&lt;br /&gt;
&lt;br /&gt;
'''Weblate Troubleshooting:'''&lt;br /&gt;
&lt;br /&gt;
In case the Weblate's git copy of the GRASS GIS repo does no longer update due to&lt;br /&gt;
a conflict or whatever reason:&lt;br /&gt;
&lt;br /&gt;
Log into Weblate (requires administrator rights) and check on &amp;lt;https://weblate.osgeo.org/projects/grass-gis/#repository&amp;gt;&lt;br /&gt;
click on the &amp;quot;Manage&amp;quot; -&amp;gt; &amp;quot;Repository Maintenance&amp;quot;. Therein choose &amp;quot;Update&amp;quot; button, &lt;br /&gt;
&amp;quot;Update with merge without fast-forward&amp;quot;. If successful, this will create&lt;br /&gt;
another pull request in the GRASS GIS repo (trigger with &amp;quot;Push&amp;quot; button).&lt;br /&gt;
&lt;br /&gt;
=== Continuing an existing translation ===&lt;br /&gt;
&lt;br /&gt;
The file(s) are there but partially outdated? Read on.&lt;br /&gt;
&lt;br /&gt;
First '''announce''' on the [http://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list] that you plan to continue the translation of a certain language. Why? Because sometimes people silently translate already and we need these efforts to be coordinated to avoid doing it twice...&lt;br /&gt;
&lt;br /&gt;
Then get these four .po files for your language and start. If a file is missing, just ask on the list to get it generated or see next section. To get these .po files (the files are in the directory locale/po/):&lt;br /&gt;
&lt;br /&gt;
* either [https://github.com/OSGeo/grass/tree/master/locale/po/ download current .po files] directly from SVN (click on file name to download),&lt;br /&gt;
* or [https://grass.osgeo.org/download/0 download source code package] from GitHub,&lt;br /&gt;
* or download the recent [https://grass.osgeo.org/grass78/source/snapshot/ source code snapshot],&lt;br /&gt;
* or ask on the [https://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list] for these files.&lt;br /&gt;
&lt;br /&gt;
Then edit the files with a .po file editor (poEDIT or kbabel or..., see below). Take care to maintain layout and special characters. And '''submit often''' - if you wait for weeks, the messages may already be outdated and your time wasted. Just keep in touch on the [https://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list]!&lt;br /&gt;
&lt;br /&gt;
=== Starting a new translation ===&lt;br /&gt;
&lt;br /&gt;
The language you want isn't yet there? Read on.&lt;br /&gt;
&lt;br /&gt;
Briefly, the steps to create new messages files are (if you find this too complicated, ask on the [https://lists.osgeo.org/mailman/listinfo/grass-translations GRASS translations mailing list] to get these files done for you!):&lt;br /&gt;
&lt;br /&gt;
# Get the latest source code development version from either the SVN repository or as SVN snapshot (see [https://grass.osgeo.org/download/ Download]).&lt;br /&gt;
# run: './configure --with-nls [... other parameters]' to configure the GRASS source code &lt;br /&gt;
# run: 'cd locale' to change into the translation directory&lt;br /&gt;
# run: 'make pot' to create grass*.pot template files (to extract original messages)&lt;br /&gt;
# run: copy these file from templates/ into po/; rename them to contain the two characters language code (see Alpha-2 code of [http://www.loc.gov/standards/iso639-2/php/English_list.php ISO 639-1]) and to .po extension; update the file headers either manually or with your .po editing software&lt;br /&gt;
  (Example: Polish language):&lt;br /&gt;
 	        mv ./templates/grasslibs.pot ./po/grasslibs_pl.po&lt;br /&gt;
 	        mv ./templates/grassmods.pot ./po/grassmods_pl.po&lt;br /&gt;
 	        mv ./templates/grassnviz.pot ./po/grassnviz_pl.po&lt;br /&gt;
 	        mv ./templates/grasstcl.pot ./po/grasstcl_pl.po&lt;br /&gt;
 	        mv ./templates/grasswxpy.pot ./po/grasswxpy_pl.po&lt;br /&gt;
&lt;br /&gt;
Now translate the messages in these po/*.po files (using poEDIT or other editor, see below)&lt;br /&gt;
&lt;br /&gt;
From time to time messages need to be updated from the originals. This is usually done by the GRASS translation manager.&lt;br /&gt;
&lt;br /&gt;
=== Create a new project ===&lt;br /&gt;
&lt;br /&gt;
'''''NOTE: CORE DEVELOPERS ONLY!'''''&lt;br /&gt;
&lt;br /&gt;
TODO 2023: improve this section!&lt;br /&gt;
&lt;br /&gt;
A project should be done for each stable release, only an Organization Administrators can create a project. From the dashboard in the left bottom corner there is &amp;quot;'''New project'''&amp;quot; button. Fill all the field in the form. More info in [https://docs.weblate.org/en/latest/ Weblate documentation]&lt;br /&gt;
&lt;br /&gt;
Once the new project is created you need to upload the resources (the pot file to translate).&lt;br /&gt;
To create the pot files you can execute&lt;br /&gt;
  make pot&lt;br /&gt;
&lt;br /&gt;
inside the '''locale''' folder. Now you can load in the Resource section, after you added them you can link the pot file with an online version to get updates. To do this click on &amp;quot;'''Auto update resources'''&amp;quot; bottom (read also the [https://docs.weblate.org/en/latest/ Weblate documentation].&lt;br /&gt;
&lt;br /&gt;
At this point you need to load the translated po files, for each language and file you have to upload the translation po file. Some errors could appear, resolution of this problems is a TODO&lt;br /&gt;
&lt;br /&gt;
=== Get the translated po files ===&lt;br /&gt;
&lt;br /&gt;
'''''NOTE: THIS IS FOR DEVELOPERS OR POWER USERS'''''&lt;br /&gt;
&lt;br /&gt;
== Testing different languages in GRASS GIS ==&lt;br /&gt;
&lt;br /&gt;
Testing different languages requires that the respective language environment and, if needed, fonts are installed.&lt;br /&gt;
Check what languages are currently installed on your system with:&lt;br /&gt;
  locale -a&lt;br /&gt;
&lt;br /&gt;
To change to a certain language environment (locale), do the following steps (here, example for Unix style environment):&lt;br /&gt;
&lt;br /&gt;
   1. Define/check language settings:&lt;br /&gt;
     echo $LANG&lt;br /&gt;
     echo $LANGUAGE&lt;br /&gt;
     echo $LC_MESSAGES&lt;br /&gt;
  &lt;br /&gt;
   2. Change it (example for to Japanese):&lt;br /&gt;
    a) bash shell:&lt;br /&gt;
         export LANG=ja_JP.UTF-8&lt;br /&gt;
         export LANGUAGE=ja_JP.UTF-8&lt;br /&gt;
         export LC_MESSAGES=ja_JP.UTF-8&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
    b) (t)csh shell:&lt;br /&gt;
         setenv LANG ja_JP.UTF-8&lt;br /&gt;
         setenv LANGUAGE ja_JP.UTF-8&lt;br /&gt;
         setenv LC_MESSAGES ja_JP.UTF-8&lt;br /&gt;
&lt;br /&gt;
Now launch GRASS in this terminal. If you launch it from an icon, you have to change the LOCALE in the computer setup program instead.&lt;br /&gt;
&lt;br /&gt;
Other common languages useful for testing are &amp;lt;tt&amp;gt;de_DE&amp;lt;/tt&amp;gt; for German, &amp;lt;tt&amp;gt;fr_FR&amp;lt;/tt&amp;gt; for French, or &amp;quot;C&amp;quot; for none (effectively &amp;lt;tt&amp;gt;en_US&amp;lt;/tt&amp;gt;, which for GRASS is the base language).&lt;br /&gt;
&lt;br /&gt;
=== Creating startup scripts for different languages ===&lt;br /&gt;
&lt;br /&gt;
GRASS in English language, save as &amp;quot;grass78eng&amp;quot; (executable flag set, store in path):&lt;br /&gt;
      #!/bin/sh&lt;br /&gt;
      export LANG=en_US&lt;br /&gt;
      export LANGUAGE=en_US&lt;br /&gt;
      export LC_MESSAGES=en_US&lt;br /&gt;
      exec grass78 &amp;quot;$@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
GRASS in Japanese language, save as &amp;quot;grass78ja&amp;quot; (executable flag set, store in path):&lt;br /&gt;
      #!/bin/sh&lt;br /&gt;
      export LANG=ja_JA.UTF-8&lt;br /&gt;
      export LANGUAGE=ja_JA.UTF-8&lt;br /&gt;
      export LC_MESSAGES=ja_JA.UTF-8&lt;br /&gt;
      grass78 &amp;quot;$@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Coordination among translators ==&lt;br /&gt;
&lt;br /&gt;
If several translators work on the same language files, obviously some coordination is needed. Please announce work via the &amp;quot;translations&amp;quot; mailing list at https://lists.osgeo.org/mailman/listinfo/grass-translations &lt;br /&gt;
&lt;br /&gt;
Also the translation manager is listening there to the upload the changed files into the GRASS source code repository.&lt;br /&gt;
&lt;br /&gt;
== Best practices ==&lt;br /&gt;
&lt;br /&gt;
* Italiano: [https://tp.linux.it/buona_traduzione.html Regole per la buona traduzione]&lt;br /&gt;
&lt;br /&gt;
== Installation of language packages ==&lt;br /&gt;
&lt;br /&gt;
Example: Chinese&lt;br /&gt;
&lt;br /&gt;
* Debian, Fedora, Ubuntu, ...: the locales should be already present&lt;br /&gt;
** list all valid locales on the system: localectl list-locales&lt;br /&gt;
** show current settings: localectl status&lt;br /&gt;
** set new locale: localectl set-locale LANG=zh_CN.utf8 LC_MESSAGES=zh_CN.utf8&lt;br /&gt;
&lt;br /&gt;
== Reduction of similar messages ==&lt;br /&gt;
&lt;br /&gt;
Please re-use existing messages:&lt;br /&gt;
* https://trac.osgeo.org/grass/wiki/MessageStandardization&lt;br /&gt;
&lt;br /&gt;
== Updating messages in the source code ==&lt;br /&gt;
&lt;br /&gt;
Generally, to support i18N multiple languages, message strings in GRASS must be modified by adding so-called [https://www.gnu.org/software/gettext/ gettext macros] &amp;lt;tt&amp;gt;'''_('''&amp;quot;...&amp;quot;''')'''&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== C programming language ===&lt;br /&gt;
&lt;br /&gt;
Change from&lt;br /&gt;
  fprintf ( ..., &amp;quot;...\n&amp;quot;, ...);&lt;br /&gt;
to either&lt;br /&gt;
  fprintf ( ..., _(&amp;quot;...\n&amp;quot;), ...);&lt;br /&gt;
or usually (while omitting \n)&lt;br /&gt;
  G_message ( _(&amp;quot;...&amp;quot;), ...);&lt;br /&gt;
&lt;br /&gt;
=== Python programming language ===&lt;br /&gt;
&lt;br /&gt;
In Python, the macro is used like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
grass.message(_('Raster map &amp;lt;{name}&amp;gt; unpacked'.format(name=map_name)))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important hints ===&lt;br /&gt;
&lt;br /&gt;
Beware:&lt;br /&gt;
* G_message should be used for messages - information about the process for user while fprintf(stdout...) for data output.&lt;br /&gt;
* G_message output is not expected to be send to pipe or file.&lt;br /&gt;
* fprintf(stdout...) output is usually send to pipe or file.&lt;br /&gt;
&lt;br /&gt;
Programming details are available in the file locale/[https://github.com/OSGeo/grass/blob/master/locale/README README].&lt;br /&gt;
&lt;br /&gt;
Important:&lt;br /&gt;
* [https://trac.osgeo.org/grass/wiki/MessageStandardization Message Standardization]: How should Errors/Warnings/Messages be formatted, Macros etc&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Alpha-2 code of [http://www.loc.gov/standards/iso639-2/php/English_list.php ISO 639-1] (right column)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: FAQ]]&lt;br /&gt;
[[Category: Translation]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Talk:GRASS_Developer_Summit_Raleigh_2025&amp;diff=28449</id>
		<title>Talk:GRASS Developer Summit Raleigh 2025</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Talk:GRASS_Developer_Summit_Raleigh_2025&amp;diff=28449"/>
		<updated>2025-05-28T13:13:17Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Markus Neteler | mundialis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{toc|right}}&lt;br /&gt;
&lt;br /&gt;
Quick links: [[GRASS Developer Summit Raleigh 2025|Meeting page]] | [[#Participant_reports|Reports]]  |  [[GRASS_Developer_Summit_Raleigh_2025#Sponsors|Sponsors]]&lt;br /&gt;
&lt;br /&gt;
== Organizing Team ==&lt;br /&gt;
&lt;br /&gt;
* Initial planning: Vaclav Petras, Anna Petrasova, Veronica Andreo, Corey White, Lois Utt, Sarah White, Doug Newcomb, Huidae Cho, Veronica Andreo ([[GRASS_Developer_Summit_Raleigh_2025#Organizing_Committee|Organizing Committee]])&lt;br /&gt;
* Budget: Vaclav Petras, Lois Utt, Anna Petrasova&lt;br /&gt;
* Raising support: Helena Mitasova, Vaclav Petras, Anna Petrasova, Michael Barton, Giuseppe Amatulli ([[NSF POSE Project 2023-2025 Timeline|NSF POSE project]] proposal authors)&lt;br /&gt;
* Travel: Lois Utt&lt;br /&gt;
* Venue: Vaclav Petras, Lois Utt&lt;br /&gt;
* Meals: Lois Utt, Sarah White, Vaclav Petras, Corey White, Anna Petrasova&lt;br /&gt;
* Agenda: Vaclav Petras, Huidae Cho, Anna Petrasova&lt;br /&gt;
* Wiki page: Vaclav Petras, Anna Petrasova&lt;br /&gt;
* Swag: Sarah White, Vaclav Petras, Anna Petrasova, Corey White&lt;br /&gt;
* Promotion, invitations, and social media: Vaclav Petras, Sarah White, Corey White, John Vogler&lt;br /&gt;
* Lightning talks organization: Vaclav Petras, Zachary Arcaro, John Vogler&lt;br /&gt;
* Lightning talk speakers: Vaclav Petras (welcome), Markus Metz and Markus Neteler (talk presented by Vaclav Petras), Anna Petrasova, Veronica Andreo, Robert Dzur, Nick Brady, Huidae Cho, Gregory Power, Doug Newcomb, Caitlin Haedrich&lt;br /&gt;
* Photography: Caitlin Haedrich, Māris Nartišs, Pratikshya Regmi&lt;br /&gt;
* Portrait photography: Riya, Caitlin Haedrich, Natalie Trso&lt;br /&gt;
&lt;br /&gt;
== Detailed Schedule ==&lt;br /&gt;
&lt;br /&gt;
=== Day 1, Monday, May 19 ===&lt;br /&gt;
&lt;br /&gt;
Location: Talley Student Union, 2610 Cates Ave ([https://www.google.com/maps/place/Talley+Student+Union/data=!4m2!3m1!1s0x0:0x38989377c96adef0?sa=X&amp;amp;ved=1t:2428&amp;amp;ictx=111 map])&lt;br /&gt;
&lt;br /&gt;
Room: 5101-Executive Board Room&lt;br /&gt;
&lt;br /&gt;
Highlighted topic: ''Contributing to GRASS. Getting started. Is it easy to contribute?''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:30-9:00 || Breakfast || Catered breakfast on site. Meet people, and plan your personal agenda for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || What to expect from the event, contributing to GRASS using Git and GitHub, making your first contribution.&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || i.hyper: Integrating Hyperspectral Imagery Processing into GRASS - Alen Mangafić&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || &lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || Project Image - Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || Catered food on site.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || We will walk to [https://www.trophybrewing.com/brewing-pizza Trophy Brewing &amp;amp; Pizza] ([https://maps.app.goo.gl/ggnZ7EvXbWqDUmvP9 directions], 30 min walk from Talley)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 2, Tuesday, May 20 ===&lt;br /&gt;
&lt;br /&gt;
Location: Talley Student Union, 2610 Cates Ave ([https://www.google.com/maps/place/Talley+Student+Union/data=!4m2!3m1!1s0x0:0x38989377c96adef0?sa=X&amp;amp;ved=1t:2428&amp;amp;ictx=111 map])&lt;br /&gt;
&lt;br /&gt;
Room: 5101-Executive Board Room&lt;br /&gt;
&lt;br /&gt;
Highlighted topics: ''Hydrology and Interfacing with R and QGIS (gathering user feedback, testing, discussing with developers, developing action items)''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:30-9:00 || Breakfast || Breakfast on site. Start the day, meet people, and plan your personal agenda for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || Introduction to writing GRASS tools, program for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || fasterRaster R package - Adam Smith&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || Hydography90m + Geocomputation Courses - Giuseppe&lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || Flood modelling with grass and itzi ([https://itzi.org]) - Laurent Courty&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || [https://maps.app.goo.gl/womSkce9DrE8CTnR8 Case dining hall]&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || [https://maps.app.goo.gl/CQiWoCAQNt1ymZkb7 Served in Jordan Hall at the Center for Geospatial Analytics], evaluate the day's accomplishments, plan and prioritize for the next few days.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 3, Wednesday, May 21 ===&lt;br /&gt;
&lt;br /&gt;
Location: Talley Student Union, 2610 Cates Ave ([https://www.google.com/maps/place/Talley+Student+Union/data=!4m2!3m1!1s0x0:0x38989377c96adef0?sa=X&amp;amp;ved=1t:2428&amp;amp;ictx=111 map])&lt;br /&gt;
&lt;br /&gt;
Room: 5101-Executive Board Room&lt;br /&gt;
&lt;br /&gt;
Highlighted topic: ''Non-coding contributions, natural language translation, and internationalization.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 7:00-9:00 || Breakfast || [https://maps.app.goo.gl/eZ8VK8Mx6TjMt9NP8 Case dining hall]&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || Introduction to non-coding contributions, tutorials, contributing examples, natural language translation and internationalization (procedures, glossaries, code customization, translation).&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || Easier access to GRASS tools - Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || &lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || GRASS backend for xarray and temporal framework global variables ([https://github.com/OSGeo/grass/issues/629]) - Laurent Courty&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || Served on site. Eat, drink, and continue the discussion from the feedback sessions.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || [https://maps.app.goo.gl/1E39eySMVaxYJUUS8 Picnic at Pullen Park, shelter #3. In case of bad weather, dinner at the Center for Geospatial Analytics.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 4, Thursday, May 22 ===&lt;br /&gt;
&lt;br /&gt;
Location: Center for Geospatial Analytics, Jordan Hall, 2800 Faucette Drive ([https://www.google.com/maps/search/Jordan+Hall/@35.7816832,-78.6772765,18z/data=!3m1!4b1?entry=ttu&amp;amp;g_ep=EgoyMDI1MDQyMC4wIKXMDSoJLDEwMjExNDUzSAFQAw%3D%3D map])&lt;br /&gt;
&lt;br /&gt;
Room: 5103 (straight from the two elevators, at the end of the hallway)&lt;br /&gt;
&lt;br /&gt;
Highlighted topic: ''Project vision and computational engine use case.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:00-9:00 || Breakfast || On site. Start the day, meet people, and plan your personal agenda for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || Project vision and the computational engine use case (missing features, documentation, user groups).&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || NSF POSE I-Corps Interviews - Corey White&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback session || YAIT - Yet Another Interface to Tools - Vaclav Petras &lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback session || Modernizing Color Tables (Brendan)&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || On site. Eat, drink, and continue the discussion from the feedback sessions.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-16:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 16:00-17:00 || Lightning talks || Fast-paced talks, showcasing applications of GRASS, room 5111.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Reception || Connect with researchers, government professionals, and industry collaborators, rooms 5111 and 5119.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 5, Friday, May 23 ===&lt;br /&gt;
&lt;br /&gt;
Location: James B. Hunt Jr. Library, 1070 Partners Way - Centennial Campus ([https://www.google.com/maps/place/James+B.+Hunt+Jr.+Library/@35.7693736,-78.679167,17z/data=!3m1!5s0x89acf5759f5a31df:0xc547454a0151c440!4m10!1m2!2m1!1shunt+library!3m6!1s0x89acf5759f591f41:0xbe0266269ce37f59!8m2!3d35.7693215!4d-78.6764409!15sCgxodW50IGxpYnJhcnlaDiIMaHVudCBsaWJyYXJ5kgESdW5pdmVyc2l0eV9saWJyYXJ54AEA!16s%2Fm%2F0r4wjf_?entry=ttu&amp;amp;g_ep=EgoyMDI1MDQyMC4wIKXMDSoJLDEwMjExNDUzSAFQAw%3D%3D map])&lt;br /&gt;
&lt;br /&gt;
Room: Faculty Research Commons - 5100 ([https://www.lib.ncsu.edu/hunt/map floor plan])&lt;br /&gt;
&lt;br /&gt;
Highlighted topic: ''GRASS project's future course.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 7:45-8:15 || Breakfast || '''Hotel Aloft (2nd floor).''' Search for Lois!&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || GRASS project's future course.&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-12:00 || PSC meeting || Project Steering Committee meets (public).&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || Rescheduled for Saturday&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || Walk to [https://maps.app.goo.gl/kHVHY62QxTd6wHKd9 On the Oval Culinary Creations]. Eat, drink, and continue the discussion from the feedback sessions.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || Dinner on your own. Corey White will organize trip to downtown. Bus 41 from Hunt library to hotel and then walk.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 6, Saturday, May 24 ===&lt;br /&gt;
&lt;br /&gt;
Location: James B. Hunt Jr. Library, 1070 Partners Way - Centennial Campus ([https://www.google.com/maps/place/James+B.+Hunt+Jr.+Library/@35.7693736,-78.679167,17z/data=!3m1!5s0x89acf5759f5a31df:0xc547454a0151c440!4m10!1m2!2m1!1shunt+library!3m6!1s0x89acf5759f591f41:0xbe0266269ce37f59!8m2!3d35.7693215!4d-78.6764409!15sCgxodW50IGxpYnJhcnlaDiIMaHVudCBsaWJyYXJ5kgESdW5pdmVyc2l0eV9saWJyYXJ54AEA!16s%2Fm%2F0r4wjf_?entry=ttu&amp;amp;g_ep=EgoyMDI1MDQyMC4wIKXMDSoJLDEwMjExNDUzSAFQAw%3D%3D map])&lt;br /&gt;
&lt;br /&gt;
'''Take bus 41 at 8.30 from Aloft.'''&lt;br /&gt;
&lt;br /&gt;
Room: Faculty Research Commons - 5100 ([https://www.lib.ncsu.edu/hunt/map floor plan])&lt;br /&gt;
&lt;br /&gt;
Highlighted topics: ''NSF POSE project evaluation.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:30-10:00 || Breakfast || We will have breakfast (yogurt, granola, pastries) at [https://maps.app.goo.gl/EwzNxeovv4rTivjK9 Lake Raleigh]. Feel free to bring your own coffee.&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || GRASS roadmap and future (Vaclav Petras)&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || GRASS tools: core and additional functionality (MartinL)&lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || Jupyter integration into GUI (Linda Karlovska)&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || Pizza. Eat, drink, and continue the discussion from the feedback sessions.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || Player's Retreat. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Daily tasks for participants ==&lt;br /&gt;
&lt;br /&gt;
* List all the things you are working on in the Participant reports section below. Update the list each day. Include things you work on with other people.&lt;br /&gt;
* If you want to discuss something with the whole group, add yourself to a Self-organized feedback sessions slot in the schedule above or tell Vaclav (Vashek) Petras.&lt;br /&gt;
* For people with triage access and above: If you are or will be working on an issue or on a PR which is not originally submitted by you, assign yourself to the issue or PR. (You can unassign yourself later if you change your mind.)&lt;br /&gt;
&lt;br /&gt;
== Participant reports ==&lt;br /&gt;
&lt;br /&gt;
Per-person reports from the meeting.&lt;br /&gt;
&lt;br /&gt;
=== Giuseppe Amatulli | Yale University ===&lt;br /&gt;
&lt;br /&gt;
* Testing r.watershed and r.stream.* for handling large datasets&lt;br /&gt;
* Running r.flowaccumulation at global level using water direction from hydrography90m &lt;br /&gt;
* Preparing the grass tutorial material for the https://www.geomorphometry2025.org/ conference&lt;br /&gt;
&lt;br /&gt;
=== Veronica Andreo | CONICET - Instituto Gulich ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/veroandreo?tab=overview&amp;amp;from=2025-05-12&amp;amp;to=2025-05-26 GitHub contributions]&lt;br /&gt;
* Enhanced the GRASS website footer.&lt;br /&gt;
* Sync icons on the Tutorials website footer to those on the main website.&lt;br /&gt;
* Fixed description tags and their display on the tutorials website.&lt;br /&gt;
* Fixed typos in Get Started tutorials.&lt;br /&gt;
* Fixed GRASS page on OSGeo website [https://www.osgeo.org/projects/grass-gis/] &lt;br /&gt;
** Changed logo, removed GIS from the name, fixed old links.&lt;br /&gt;
* Posted on social media.&lt;br /&gt;
* Discussion about hyperspectral with Alen and Anna.&lt;br /&gt;
* Expanded the GRASS acronym on the home page.&lt;br /&gt;
* Removed GIS from GRASS name on the website.&lt;br /&gt;
* Reviewed tutorials by Huidae, Michael Barton and Adam Smith.&lt;br /&gt;
* Added external tutorials by Huidae and the one from FOSS4G 2024.&lt;br /&gt;
* Enhanced and added 7 time series tutorials that were on hold from 2024.&lt;br /&gt;
* Added lightbox class in get-started tutorials and others so images can be clicked on.&lt;br /&gt;
* GRASS PSC admin stuff.&lt;br /&gt;
* Participated of the PSC meeting.&lt;br /&gt;
* Talked to Tonis Kardi from FOSS4G EU LOC to have a &amp;quot;State of GRASS&amp;quot; talk in the program. Alen will be presenting.&lt;br /&gt;
* Gave a lightning talk on Thu: GRASS-fed species distribution models.&lt;br /&gt;
* Discussed with Brendan, Corey, and Mimi about tutorials.&lt;br /&gt;
&lt;br /&gt;
=== Abdullah Azzam | New Mexico State University ===&lt;br /&gt;
Monday 5/19&lt;br /&gt;
* Created first PR; fixed broken links on the website [https://github.com/OSGeo/grass-website/pull/538 #538]&lt;br /&gt;
&lt;br /&gt;
Tuesday 5/20&lt;br /&gt;
*Started working on a new addon and switched to cookiecutter python template from the C implementation.&lt;br /&gt;
* Helped Andres compile OpenMP in Mac.&lt;br /&gt;
&lt;br /&gt;
Wednesday 5/21&lt;br /&gt;
*Drafted the addon and discussed the changes with Dr. Cho and Anna. &lt;br /&gt;
&lt;br /&gt;
Thursday 5/22&lt;br /&gt;
* Pushed a new GRASS Addon ''r.curvenumber'' [https://github.com/OSGeo/grass-addons/pull/1403 #1403]&lt;br /&gt;
&lt;br /&gt;
Friday 5/23&lt;br /&gt;
*Addressed the fixes and issues in ''r.curvenumber'' and discussed another addon with Dr. Cho&lt;br /&gt;
&lt;br /&gt;
Saturday 5/24&lt;br /&gt;
*Discussed and developed another addon ''r.scs.runoff'' with Anna.&lt;br /&gt;
&lt;br /&gt;
=== Laura Belica | NC State University ===&lt;br /&gt;
&lt;br /&gt;
*my focus was on developing a draft/test tutorial (in Quarto) for a standard basic hydrological study workflow [extraction of nested as well as disconnected study streams and watersheds informed by ground-truthed stream CHIP and outlet point data and estimating stream segment length, watershed area, mean slope, etc.]. The tutorial includes the crucial pre-work of how to figure out the most appropriate project/location and extent for elevation data import [e.g., if region of interest is much smaller than tile extent and/or spans multiple tiles] as well as considerations of some of the downstream impacts of resolution, extent, region etc. when additional datasets with different resolutions and extents (e.g., roads, land cover, sampling points) may be incorporated later.&lt;br /&gt;
&lt;br /&gt;
19 May&lt;br /&gt;
* discussed a novice user issue with 'moving' vector data from one project/location to another with Vero and learned a neat GUI option&lt;br /&gt;
* revised and added workflow tutorial text&lt;br /&gt;
&lt;br /&gt;
23 May&lt;br /&gt;
* tested workflow&lt;br /&gt;
&lt;br /&gt;
24 May&lt;br /&gt;
* worked on tutorial qmd&lt;br /&gt;
* explored different alternatives for transforming aspect for computation of mean watershed aspect within GRASS and with R and Python&lt;br /&gt;
&lt;br /&gt;
=== Shonil Sateesh Bhide | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* CI optimization&lt;br /&gt;
&lt;br /&gt;
=== Huidae Cho | New Mexico State University ===&lt;br /&gt;
&lt;br /&gt;
* CMake, conda, CI, Mentoring&lt;br /&gt;
&lt;br /&gt;
Monday 5/19&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/5680 CMake: Recognize conda installation path at runtime]: Replaced by [https://github.com/HuidaeCho/grass-conda/blob/master/recipe/post-link.sh conda post-link.sh]&lt;br /&gt;
* CMake and Conda Testing on Linux&lt;br /&gt;
* CMake Testing on Windows&lt;br /&gt;
* Mentoring: Chung-Yuan, Abdullah&lt;br /&gt;
&lt;br /&gt;
Tuesday 5/20&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/5712 CMake: Define custom complex types for MSVC LAPACKE]&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/5713 CMake: Fix build output directories for MSVC]&lt;br /&gt;
* CMake and Conda Testing on Linux&lt;br /&gt;
* CMake Testing on Windows&lt;br /&gt;
&lt;br /&gt;
Wednesday 5/21&lt;br /&gt;
* Translation Talk&lt;br /&gt;
* Translation Discussion with Edouard&lt;br /&gt;
* Flow Direction Meeting with Ondrej, Ondrej's Student, Martin, and Markus Metz&lt;br /&gt;
* CMake and Conda Testing on Linux&lt;br /&gt;
* CMake Testing on Windows&lt;br /&gt;
* Mentoring: Chung-Yuan, Abdullah&lt;br /&gt;
&lt;br /&gt;
Thursday 5/22&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/5740 CMake: Fix the parameter is incorrect: . error for MSVC]&lt;br /&gt;
* Lightning Talk&lt;br /&gt;
* CMake and Conda Testing on Linux&lt;br /&gt;
* CMake Testing on Windows&lt;br /&gt;
* CI: Discussion with Edouard&lt;br /&gt;
* Mentoring: Chung-Yuan, Abdullah&lt;br /&gt;
&lt;br /&gt;
Friday 5/23&lt;br /&gt;
* CMake and Conda Testing on Linux&lt;br /&gt;
* CMake Testing on Windows&lt;br /&gt;
* CI: Discussion with Edouard&lt;br /&gt;
* Mentoring: Chung-Yuan, Abdullah&lt;br /&gt;
&lt;br /&gt;
Saturday 5/24&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/5771 MSVC: Use the same M_PI_4 value to avoid redefinition warnings]&lt;br /&gt;
* CMake Testing on Windows&lt;br /&gt;
* Mentoring: Abdullah&lt;br /&gt;
&lt;br /&gt;
=== Edouard Choinière ===&lt;br /&gt;
&lt;br /&gt;
* Quick ideas, way too much for a week: Helping others (may take a reasonable part of the time), managing CI, setting up localization template updating workflow, backporting tool? Pytest/coverage improvements? Discuss and design other projects, to work on during the year. Open to change on other priorities once there, anything that is useful. Maybe make a little progress on high dpi GUI, especially on Windows.&lt;br /&gt;
&lt;br /&gt;
* Weekend before sprint:&lt;br /&gt;
** Clear up Renovate PRs to not use CI time during the sprint, reviewing and merging: [https://github.com/OSGeo/grass/pull/5664 #5664], [https://github.com/OSGeo/grass/pull/5665 #5665], [https://github.com/OSGeo/grass/pull/5666 #5666], [https://github.com/OSGeo/grass/pull/5667 #5667], [https://github.com/OSGeo/grass/pull/5668 #5668]&lt;br /&gt;
** PR to avoid some CI run time for the sprint: [https://github.com/OSGeo/grass/pull/5670 #5670]&lt;br /&gt;
** Reviewed open PRs for PRs that were mergeable before the sprint, updated outdated PRs to avoid having it needing CI time during sprint. Only ended up merging [https://github.com/OSGeo/grass/pull/5658 #5658], but another reviewed one that might still need changes: [https://github.com/OSGeo/grass/pull/5628 #5628]&lt;br /&gt;
* Monday May 19, 2025:&lt;br /&gt;
** PR got merged: [https://github.com/OSGeo/grass/pull/5670 #5670],[https://github.com/OSGeo/grass/pull/5550 #5550]&lt;br /&gt;
** Reviewed PRs: [https://github.com/OSGeo/grass/pull/5671 #5671], [https://github.com/OSGeo/grass/pull/5672 #5672]&lt;br /&gt;
** Discussions:&lt;br /&gt;
*** Shonil Sateesh Bhid &amp;amp; Shuham on their CI &amp;amp; pytest work and project.&lt;br /&gt;
*** Māris Nartišs about a potential issue and improvement for it. Will be discussed in the security reporting tab, also allowing to test the security vulnerability reporting process. + Research on existing solutions&lt;br /&gt;
** Reviewed: [https://github.com/OSGeo/grass/pull/5682 #5682], [https://github.com/OSGeo/grass/pull/5660 #5660],&lt;br /&gt;
** Reviewed, edited and merged: [https://github.com/OSGeo/grass/pull/3672 #3672]&lt;br /&gt;
** Discussed/helped user for: [https://github.com/OSGeo/grass/pull/5678 #5678] and [https://github.com/OSGeo/grass/pull/5684 #5684]&lt;br /&gt;
** Long discussion and vision planning for windows scripting with Vaclav, concerning [https://github.com/OSGeo/grass/pull/5624 #5624]. Tested alternatives and tried the consequences of that PR. This older PR finally got merged.&lt;br /&gt;
** Created PRs for NSIS installer: [https://github.com/OSGeo/grass/pull/5685 #5685] and also [https://github.com/OSGeo/grass/pull/5686 #5686], which should address [https://github.com/OSGeo/grass/issues/5663 #5663]. Still needs to test it.&lt;br /&gt;
** Agreed on convention for titles with Vaclav, unblocking [https://github.com/OSGeo/grass/pull/5341 #5341]&lt;br /&gt;
** Found a name with Ondrej and finally merged older PRs of an external contributor [https://github.com/OSGeo/grass/pull/5473 #5473] and [https://github.com/OSGeo/grass/pull/5474 #5474]&lt;br /&gt;
* Thursday May 20, 2025:&lt;br /&gt;
** Reviewed: [https://github.com/OSGeo/grass/pull/5695 #5695]&lt;br /&gt;
** Merged PRs: [https://github.com/OSGeo/grass/pull/5673 #5673], [https://github.com/OSGeo/grass/pull/5691 #5691], [https://github.com/OSGeo/grass/pull/5690 #5690], [https://github.com/OSGeo/grass/pull/5684 #5684],&lt;br /&gt;
** Discussed with author of [https://github.com/OSGeo/grass/pull/5660 #5660] and [https://github.com/OSGeo/grass/issues/5659 #5659] about rgb/hsl bug and tests for help.&lt;br /&gt;
** Worked with Corey to adjust markdown links for new markdownlint rule, finishing up [https://github.com/OSGeo/grass/pull/5669 #5669]&lt;br /&gt;
** Created PRs: [https://github.com/OSGeo/grass/pull/5692 #5692], [https://github.com/OSGeo/grass/pull/5694 #5694], [https://github.com/OSGeo/grass/pull/5689 #5689]&lt;br /&gt;
* Wednesday May 21, 2025:&lt;br /&gt;
** Created a new set of GitHub rulesets for the required checks, applied with Vaclav. One of them is separated in order to increase velocity during the sprint&lt;br /&gt;
** Reviewed the branch protection rules for grass-addons repo with Vaclav. Creating rulesets will be possible after the sprint with the info collected.&lt;br /&gt;
** Reviewed the security reporting settings and secret scanning settings with Vaclav for the main grass repo.&lt;br /&gt;
** Got shown by Huidae Cho how to update the translation files, and reviewed Weblate settings. No settings changed, but a backup stored for 30 days was kept.&lt;br /&gt;
** Created a first implementation of a translation file update workflow&lt;br /&gt;
** Tested out the two NSIS installer PRs, the first one, for installing the VC runtime earlier doesn't work as expected, and after more research I don't know enough to fix it. The second PR with High-DPI improvement was correct and got merged [https://github.com/OSGeo/grass/pull/5685 #5685]&lt;br /&gt;
** Helped a student set up a grass installation on WSL with conda.&lt;br /&gt;
** PRs created: [https://github.com/OSGeo/grass/pull/5736 #5736], [https://github.com/OSGeo/grass/pull/5734 #5734]&lt;br /&gt;
** My PRs that got merged: [https://github.com/OSGeo/grass/pull/5685 #5685], [https://github.com/OSGeo/grass/pull/5341 #5341], [https://github.com/OSGeo/grass/pull/5689 #5689]&lt;br /&gt;
** Reviewed and merged multiple PRs, restarting failed required checks of the previous night.&lt;br /&gt;
&lt;br /&gt;
=== Laurent Courty ===&lt;br /&gt;
&lt;br /&gt;
* Objectives: An xarray backend for GRASS STRDS. Fixing related issues&lt;br /&gt;
* May 20&lt;br /&gt;
** Presented itzi&lt;br /&gt;
** Uploaded arm64 wheels to PyPI for MacOS and Linux ([https://pypi.org/project/itzi/#files])&lt;br /&gt;
** Discussed with other developers about issue #629&lt;br /&gt;
* May 21&lt;br /&gt;
** Uploaded xarray-grass to PyPI&lt;br /&gt;
** Added CI tests to xarray-grass&lt;br /&gt;
** Discussed with the group about the xarray-grass backend&lt;br /&gt;
** Discussed with the group about solving mapset switching in the temporal framework (issue #629)&lt;br /&gt;
** Created PR #5735 to address issue #629&lt;br /&gt;
* May 22&lt;br /&gt;
** Fix bug in PR #5735&lt;br /&gt;
* May 23&lt;br /&gt;
** Continue working on xarray-grass&lt;br /&gt;
** Discussed with Vashek about the GRASS tool's python interface&lt;br /&gt;
* May 24&lt;br /&gt;
** Continue working on xarray-grass&lt;br /&gt;
** published xarray_grass-0.1.0a2 on PyPI&lt;br /&gt;
** Discussed with Vashek about the grass session issues in python&lt;br /&gt;
&lt;br /&gt;
=== Robert S. Dzur | Bohannan Huston, Inc. ===&lt;br /&gt;
&lt;br /&gt;
* r.in.pdal&lt;br /&gt;
&lt;br /&gt;
=== David W. Farris | East Carolina University ===&lt;br /&gt;
&lt;br /&gt;
* A tool to calculate gravity terrain corrections&lt;br /&gt;
&lt;br /&gt;
=== Neel Ghoshal | NC State University ===&lt;br /&gt;
• LLM for helping users find tools&amp;lt;br&amp;gt;&lt;br /&gt;
5/19&amp;lt;br&amp;gt;&lt;br /&gt;
• Learnt how to PR (#5674)&amp;lt;br&amp;gt;&lt;br /&gt;
• Setup GRASS on system&amp;lt;br&amp;gt;&lt;br /&gt;
• Found small issue with compilation document&amp;lt;br&amp;gt;&lt;br /&gt;
• Discussed about the possible use case of LLM for helping users find tools&amp;lt;br&amp;gt;&lt;br /&gt;
5/20&amp;lt;br&amp;gt;&lt;br /&gt;
• Learnt about cookie cutter&amp;lt;br&amp;gt;&lt;br /&gt;
• Set up wsl on system&amp;lt;br&amp;gt;&lt;br /&gt;
• Compiled GRASS&amp;lt;br&amp;gt;&lt;br /&gt;
• Listed data sources for LLM training&amp;lt;br&amp;gt;&lt;br /&gt;
5/21&amp;lt;br&amp;gt;&lt;br /&gt;
• Extracted tool information from Markdown files&amp;lt;br&amp;gt;&lt;br /&gt;
• Started off with data cleaning&amp;lt;br&amp;gt;&lt;br /&gt;
5/22&amp;lt;br&amp;gt;&lt;br /&gt;
• Worked on LLM setup&amp;lt;br&amp;gt;&lt;br /&gt;
5/23&amp;lt;br&amp;gt;&lt;br /&gt;
• Ran and finetuned a basic test LLM model for extracted data&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Caitlin Haedrich | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* Event photographs, food coordination&lt;br /&gt;
* git/github mentoring&lt;br /&gt;
* GRASS mentoring&lt;br /&gt;
* Lightning Talk preparation&lt;br /&gt;
* Preparing workshop for [https://www.geomorphometry2025.org/ Geomorphometry2025]&lt;br /&gt;
&lt;br /&gt;
=== Brendan Harmon | Louisiana State University ===&lt;br /&gt;
&lt;br /&gt;
* Plan: developing ([https://github.com/baharmon/r.earthworks r.earthworks]) addon &amp;amp; tutorials&lt;br /&gt;
* Log: [https://github.com/baharmon?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub activity]&lt;br /&gt;
* Activities: published r.earthworks to addons repo, discussed modernizing colors, &amp;amp; started map algebra tutorials&lt;br /&gt;
* Unfinished: develop map algebra tutorials, open issue about modernizing color, start discussion on citations, open issue about v.to.rast bug, etc...&lt;br /&gt;
&lt;br /&gt;
=== Linda Karlovska | Czech Technical University in Prague ===&lt;br /&gt;
&lt;br /&gt;
* Fix uninitialized variables in DOutFile() method: ([https://github.com/OSGeo/grass/pull/5650 PR])&lt;br /&gt;
* Update figures related to GUI: ([https://github.com/OSGeo/grass/pull/5651  PR])&lt;br /&gt;
* g.proj: upgrade to format=proj4 style text output ([https://github.com/OSGeo/grass/pull/5722  PR])&lt;br /&gt;
* g.proj: upgrade to format=wkt style text output ([https://github.com/OSGeo/grass/pull/5727  PR])&lt;br /&gt;
* g.proj: upgrade to format=shellstyle text output ([https://github.com/OSGeo/grass/pull/5728  PR])&lt;br /&gt;
&lt;br /&gt;
Working on integration of the Jupyter notebooks to GUI (work for the whole week :-))&lt;br /&gt;
&lt;br /&gt;
On Friday I presented the Jupyter Notebook integration options and led the discussion on how to address it in GRASS (the level of integration, own kernel or not etc.)&lt;br /&gt;
&lt;br /&gt;
=== Martin Landa | Czech Technical University in Prague ===&lt;br /&gt;
&lt;br /&gt;
* Tutorial: GISMentors courses updated ([https://github.com/OSGeo/grass-tutorials/pull/45 PR])&lt;br /&gt;
* libgis: G__usage_markdown() include tool label in metadata if defined ([https://github.com/OSGeo/grass/pull/5677 PR])&lt;br /&gt;
* PyGRASS: Module description property not defined always ([https://github.com/OSGeo/grass/pull/5681 PR])&lt;br /&gt;
* Website: OpenGeoLabs commercial support ([https://github.com/OSGeo/grass-website/pull/537 PR])&lt;br /&gt;
* v.select: create output also when no features found ([https://github.com/OSGeo/grass/pull/5696 PR])&lt;br /&gt;
* wxGUI: avoid creating nested list of errors (Graphical modeler) ([https://github.com/OSGeo/grass/pull/5700 PR])&lt;br /&gt;
* wxGUI/gmodeler: refactor - move ModelParamDialog to dialogs.py ([https://github.com/OSGeo/grass/pull/5715 PR])&lt;br /&gt;
* GUI: make Python editor dockable ([https://github.com/OSGeo/grass/pull/5733 PR])&lt;br /&gt;
* r.relief: module label changed to description ([https://github.com/OSGeo/grass/pull/5741 PR])&lt;br /&gt;
* GUI: propagate previously defined where option value ([https://github.com/OSGeo/grass/pull/5747 PR])&lt;br /&gt;
* GUI: always show 'Close dialog on finish' option ([https://github.com/OSGeo/grass/pull/5751 PR])&lt;br /&gt;
* GUI: do not remove parameter value on dialog update event ([https://github.com/OSGeo/grass/pull/5760 PR])&lt;br /&gt;
* documentation: add miscellaneous tools too full index (markdown) ([https://github.com/OSGeo/grass/pull/5761 PR])&lt;br /&gt;
&lt;br /&gt;
=== Nicklas Larsson | Hungarian National Museum ===&lt;br /&gt;
&lt;br /&gt;
Planned work: CMake build system; perhaps Conda recipe&lt;br /&gt;
&lt;br /&gt;
[https://github.com/nilason?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub activity]&lt;br /&gt;
&lt;br /&gt;
* Preparation for CMake build conforming to Filesystem Hierarchy Standard (FHS), resolving resource paths for both the current and FHS in code. In collaboration with Huidae Cho and with important input from Vaclav Petras ([https://github.com/OSGeo/grass/pull/5630 PR5630])&lt;br /&gt;
&lt;br /&gt;
* Helped young students in build configuration and debugging techniques.&lt;br /&gt;
&lt;br /&gt;
* Discussion with several participants on solutions to publish a GRASS package to Conda-forge.&lt;br /&gt;
&lt;br /&gt;
=== Chung-Yuan Liang ===&lt;br /&gt;
&lt;br /&gt;
* r.horizon&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/4213 PR4213]&lt;br /&gt;
** Discussed with Vashek, Anna, and Huidae regarding parallelization performance.&lt;br /&gt;
* r.mapcalc&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5742 PR5742]&lt;br /&gt;
** Parallelized a part of r.mapcalc.&lt;br /&gt;
** Discussed with Anna and Huidae how to improve the parallelization. &lt;br /&gt;
** More work is needed for better efficiency for threads &amp;gt; 4.&lt;br /&gt;
* r.univar&lt;br /&gt;
** [https://github.com/OSGeo/grass/pull/5748 PR5748], [https://github.com/OSGeo/grass/pull/5750 PR5750]&lt;br /&gt;
** Created a test for large data and parallel computations.&lt;br /&gt;
** Applied Kahan sum to avoid accumulations of floating point errors.&lt;br /&gt;
** Update reference numbers in other testing scripts that use r.univar.&lt;br /&gt;
* Discussing how to improve I/O and memory buffers for raster data in the parallelization aspect.&lt;br /&gt;
&lt;br /&gt;
=== Andres Lucero | Bohannan Huston Inc ===&lt;br /&gt;
&lt;br /&gt;
* r.in.pdal&lt;br /&gt;
&lt;br /&gt;
=== Alen Mangafić | Geodetic Institute of Slovenia ===&lt;br /&gt;
Monday May 19 &lt;br /&gt;
* Presentation of i.hyper, add-on which offers hyperspectral data support in GRASS.&lt;br /&gt;
* Architecture of the multi-module addon&lt;br /&gt;
Tuesday May 20&lt;br /&gt;
* i.hyper.import module: importing EnMAP imagery as 3D raster map&lt;br /&gt;
* i.hyper.preproc module: draft&lt;br /&gt;
Wednesday May 21&lt;br /&gt;
* i.hyper.import module: added option to generate RGB, CIR, SWIR or custom composite during import&lt;br /&gt;
* i.hyper.preproc module: implementing Savitzky-Golay filter with options for polynomial order, derivative order and window width&lt;br /&gt;
Thursday May 22 - 24&lt;br /&gt;
* i.hyper.import module: adding options for handling invalid bands, null values and clamping negative values&lt;br /&gt;
* i.hyper.export module: exporting hyperspectral 3D rasters as stacked GeoTiff&lt;br /&gt;
* commition to personal, public repo&lt;br /&gt;
* drafting future plans:&lt;br /&gt;
** i.hyper.preproc PCA, KPCA, continuum removal an wavelet transformation&lt;br /&gt;
** i.hyper.import PRISMA and Hyperion support&lt;br /&gt;
** i.hyper.export: HDF5, Zarr and IMG spport&lt;br /&gt;
** i.hyper.explore: new submodule for spectra visualization&lt;br /&gt;
* Submission of the details of the &amp;quot;State of GRASS&amp;quot; talk for FOSS4GE 2025.&lt;br /&gt;
&lt;br /&gt;
=== Helena Mitasova | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* standardized data set and related tutorials&lt;br /&gt;
* documentation for interpolation tools&lt;br /&gt;
* collaborate/coordinate/discuss hydrology tools (analytics, simulations, soil properties inputs)&lt;br /&gt;
* assist with wiki cleanup if needed&lt;br /&gt;
&lt;br /&gt;
Monday May 19&lt;br /&gt;
* investigated issues with v.surf.rst documentation in source code, tested and identified fixes needed&lt;br /&gt;
* discussed coupling GRASS with Blender versus potree for 3D object rendering with Brendan, Anna and Caitlin (for TL activities and other applications)&lt;br /&gt;
* discussed soil data for runoff estimation and other hydro topics, to be worked on on day 2&lt;br /&gt;
&lt;br /&gt;
Tuesday May 20&lt;br /&gt;
* worked with Corey on fixing v.surf.rst documentation, discussed ideas for improvements and for documentation / tutorial for cross-valiadation&lt;br /&gt;
* discussed suggestions for graphics and examples to be inculded in v.surf.rst docs with Michelle &lt;br /&gt;
* discussed new developments in hydrology tools&lt;br /&gt;
* experimented with basic/standardized versus specialized data sets for documentation and tutorials&lt;br /&gt;
&lt;br /&gt;
Wednesday May 21&lt;br /&gt;
* explored existing tutorials, emailed Paulo about finishing the one on interpolation&lt;br /&gt;
* tested NM basic data set with GIS582 class assignment (very cool)&lt;br /&gt;
* discussed design of Jnotebooks that would work with various localized data with Caitlin&lt;br /&gt;
&lt;br /&gt;
Thursday May 22&lt;br /&gt;
* discussed needed capabilities for a more advanced color ramp processing tool with Brendan&lt;br /&gt;
* added further ideas to basic dataset document after talking to Vero - we just need standardized names for the localized tutorials to work&lt;br /&gt;
* discussed infiltration fix pull request for r.sim.water with Anna - more work is needed&lt;br /&gt;
&lt;br /&gt;
=== Māris Nartišs ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/marisn?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub activity]&lt;br /&gt;
* Taking photos of the event&lt;br /&gt;
* Introduced a new GRASS core module r.smooth.edgepreserve&lt;br /&gt;
* Discussed architecture of hyperspectral data import and per-processing tool&lt;br /&gt;
* Discussed testing and organizing AI modules downloading data from internet&lt;br /&gt;
* Prepared and gave a presentation on code preparation for translations (best practice)&lt;br /&gt;
* Debugging translation file updating with Edouard&lt;br /&gt;
* Changed default multiprocessor setting to always use maximum number of available threads&lt;br /&gt;
* Unified max process setting handling in all modules that use default parser parameter&lt;br /&gt;
* Discovered and supervised fixing a bug in r.univar parallelization code&lt;br /&gt;
* Fixed initialization of private variables in OpenMP threads in r.univar&lt;br /&gt;
* Discussed requirements for raster data reading parallelization (GRASS 9)&lt;br /&gt;
* Discussed future features to be implemented (long term view)&lt;br /&gt;
* Run modules in tests under valgrind; opened multiple bug reports, but log file analysis is incomplete&lt;br /&gt;
&lt;br /&gt;
=== Ondřej Pešek | Czech Technical University in Prague ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/pesekon2?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub activity]&lt;br /&gt;
* Refactoring, fixing, improving, discussing g.gui.gmodeler&lt;br /&gt;
* Discussing hyperspectral with Alen Mangafic&lt;br /&gt;
* Discussing jupyter in single GUI with Linda Karlovska&lt;br /&gt;
* PyGRASS&lt;br /&gt;
* Docs&lt;br /&gt;
* CQ&lt;br /&gt;
* Reviewing PRs, PR archeology&lt;br /&gt;
&lt;br /&gt;
=== Vaclav (Vashek) Petras | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/wenzeslaus?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub activity]&lt;br /&gt;
* My focus: Getting feedback and ideas for computational engine use case, APIs, funding.&lt;br /&gt;
* Summit organizing&lt;br /&gt;
* Implementing rebranding on GitHub (repos, teams)&lt;br /&gt;
* Feedback session on project image&lt;br /&gt;
* Feedback session on easier access to tools (without project)&lt;br /&gt;
* Feedback session different Python APIs to access tools&lt;br /&gt;
* Feedback session on roadmap and future of GRASS&lt;br /&gt;
* Discussed pygrass access to tools with Martin Landa and Ondřej Pešek (e.g. &amp;lt;code&amp;gt;raster = Tools(group=&amp;quot;raster&amp;quot;); raster.slope_aspect(...)&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Discussed LLMs with Neel Ghoshal, Riya, Pratikshya Regmi&lt;br /&gt;
* Discussed session setup Martin Landa&lt;br /&gt;
* Discussed conda with Nicklas Larsson&lt;br /&gt;
* Discussed hyperspectral with Alen Mangafić, Veronica Andreo, and Anna Petrasova&lt;br /&gt;
* Discussed code for new smoothing tool, integer overflows, translations with Māris Nartišs&lt;br /&gt;
* Discussed parallelization with Māris Nartišs, Chung-Yuan Liang, Anna Petrasova&lt;br /&gt;
* Compared setup of GRASS session and project in fasterRaster, QGIS, and GRASS itself with Adam Smith&lt;br /&gt;
* Discussed potential of Pixi for packaging or compilation with Gregory Power&lt;br /&gt;
* Discussed itzi model distribution issues with Laurent Courty&lt;br /&gt;
* Discussed NumPy and xarray integrations with Laurent Courty&lt;br /&gt;
* Discussed r.horizon parallelization with Chung-Yuan Liang and Anna Petrasova&lt;br /&gt;
* Discussed Jupyter integration into GUI with Linda Karlovska&lt;br /&gt;
* Answered user, coding, and setup questions for Neel Ghoshal, Abdullah Azzam, Gregory Power, and Alen Mangafić&lt;br /&gt;
* Participated in the hybrid PSC meeting (presented differences between OSGeo project and NumFOCUS project)&lt;br /&gt;
* Drafted modifications of subprocess calling for tools in Python API&lt;br /&gt;
* Prototype for running tools from Python with NumPy arrays&lt;br /&gt;
&lt;br /&gt;
=== Anna Petrasova | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/petrasovaa?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub activity]&lt;br /&gt;
* plan: mentoring, documentation&lt;br /&gt;
* Monday&lt;br /&gt;
** discussing hyperspectral implementation with Alen&lt;br /&gt;
** helping mentee David Farris implementing his gravity correction addon&lt;br /&gt;
* Tuesday&lt;br /&gt;
** delivered intro to creating an addon, documentation&lt;br /&gt;
** mentoring Alen, Abdullah&lt;br /&gt;
** discussing bug in i.his.rgb with Jayneel&lt;br /&gt;
** reviews&lt;br /&gt;
* Wednesday&lt;br /&gt;
** discuss and demonstrate tutorials page&lt;br /&gt;
** mentoring Alen, Jayneel&lt;br /&gt;
** call with GSoC student&lt;br /&gt;
* Thursday&lt;br /&gt;
** lightning talk&lt;br /&gt;
** discussing openmp implementations for r.horizon, r.mapcalc, default thread number&lt;br /&gt;
* Friday&lt;br /&gt;
** grass repo README&lt;br /&gt;
** reviews&lt;br /&gt;
&lt;br /&gt;
=== Gregory Power | Town of Cary ===&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
* Investigate [https://pixi.sh/latest/ Pixi] to manage installation and build procedures.&lt;br /&gt;
* Learned more about GRASS's vector format and modules&lt;br /&gt;
** Need a deeper explanation on how the different vector subtypes behave&lt;br /&gt;
** Need a cleaner output of v.clean so users can inspect error types&lt;br /&gt;
** Documentation could use a comparison of GRASS's topological model and components with that of OGC's Simple Features&lt;br /&gt;
&lt;br /&gt;
=== Pratikshya Regmi | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* Event photographs and videos&lt;br /&gt;
* Opened a pull request to change GRASS GIS to GRASS on the documentation (this was my first contribution to GRASS)&lt;br /&gt;
* Worked on preparing the mock document for LLM RAG&lt;br /&gt;
* Wrote a tutorial to  Visualize Contour Lines with a Color Gradient with Folium.&lt;br /&gt;
* Finished mockup document and testing on LLM.&lt;br /&gt;
&lt;br /&gt;
=== Riya | Indian Institute of Technology, Roorkee ===&lt;br /&gt;
&lt;br /&gt;
* I am currently thinking of developing an AI Agent for the grass jupyter library which will help the users with mathematical calculations done in GIS.&lt;br /&gt;
&lt;br /&gt;
=== Jayneel Shah | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* improve the test coverage of imagery modules.&lt;br /&gt;
&lt;br /&gt;
=== Adam Smith | Missouri Botanical Garden ===&lt;br /&gt;
&lt;br /&gt;
Overall: R package fasterRaster (fielding bug reports, adding features)&lt;br /&gt;
&lt;br /&gt;
Monday:&lt;br /&gt;
* Assessed scope of fasterRaster issue [https://github.com/adamlilith/fasterRaster/issues/83 83]&lt;br /&gt;
&lt;br /&gt;
Tuesday:&lt;br /&gt;
* Created a PR for fasterRaster tutorial on GRASS tutorials page.&lt;br /&gt;
* Improved handling of addons, including autodetect and installing when needed, enabling easier creation of addon-dependent methods.&lt;br /&gt;
* Presented *fasterRaster* package to group.&lt;br /&gt;
&lt;br /&gt;
Wednesday:&lt;br /&gt;
* Created fasterRaster methods for neighborhood matrices, terrain ruggedness index, and multivariate environmental similarity&lt;br /&gt;
&lt;br /&gt;
=== Michelle (Mimi) Stephens | ERDC ===&lt;br /&gt;
&lt;br /&gt;
* Previous work: coupling R and Python scripts for computational analysis in GRASS.&lt;br /&gt;
* Current work: Running through GRASS commands to create visual outputs that can be added to the new GRASS 8.5 manual pages - r.mapcalc, v.surf.rst, examples with topographic parameters, LinkedIn requests.&lt;br /&gt;
* Tutorial for Windows users to install a WSL2 Linux environment. Creates a conda environment with wxpython, installs GRASS without requiring OSGeo installer. Fast, simple, and minimal install. Resolves various issues encountered in government due to automatic Windows updates, cyber security, vpn routing, user preference, and isolated distro can be completely removed if needed. -&amp;gt; Motivation for WSL2 - wanted more hands-on practice with Unix command line tools for HPC; Docker not allowed, but miniforge and Apptainer are on ERDC's HPC; able to install grass via command line (only on internet-capable HPC systems); AND - For other users that always wanted a more native feel to their grass instance!&lt;br /&gt;
* Future work: Presenting on GRASS in JUNE at CERLCON.&lt;br /&gt;
&lt;br /&gt;
=== Corey White | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* JSON, mentoring&lt;br /&gt;
&lt;br /&gt;
=== Doug Newcomb | Semi Retired Cartographer ===&lt;br /&gt;
&lt;br /&gt;
* Discussed hydroflattening method&lt;br /&gt;
* Discussed direct point cloud input to v.surf.rst&lt;br /&gt;
* Learning git procedures by updating branding (GRASS GIS to GRASS)  for raster commands&lt;br /&gt;
Tuesday&lt;br /&gt;
* Continued updating branding for raster commands&lt;br /&gt;
* Started working on tutorial for r.hydro.flatten&lt;br /&gt;
Wednesday&lt;br /&gt;
* Finalized Data set for for r.hydro.flatten&lt;br /&gt;
* Worked on Lightning Talk for Thursday&lt;br /&gt;
Thursday&lt;br /&gt;
* Continued work on r.hydro.flatten tutorial&lt;br /&gt;
* Gave lightning talk on r.hydro.flatten&lt;br /&gt;
Friday&lt;br /&gt;
* Worked with Rob Dzur on r.hydro.flatten workflow.&lt;br /&gt;
* Explored the possibility of using r.resample.bspline for areas with high standard deviation ranges.&lt;br /&gt;
&lt;br /&gt;
* Worked with Rob Dzur on identifying workflow for implimenting USGS GMI, https://www.usgs.gov/ngp-standards-and-specifications/elevation-derived-hydrography-data-acquisition-specifications-16 ,  in GRASS and connected Rob with USGS contact for GMI.&lt;br /&gt;
&lt;br /&gt;
=== Natalie Trso | Balance Geo LLC ===&lt;br /&gt;
&lt;br /&gt;
* r.sim.water&lt;br /&gt;
&lt;br /&gt;
== Guests and remote participants ==&lt;br /&gt;
&lt;br /&gt;
=== Luís de Sousa | University of Lisbon ===&lt;br /&gt;
&lt;br /&gt;
* Review outstanding PRs&lt;br /&gt;
* Prepare GRASS sessions for the OpenGeoHub Summer School&lt;br /&gt;
&lt;br /&gt;
=== Markus Neteler | mundialis ===&lt;br /&gt;
&lt;br /&gt;
* Support Wiki cleanup&lt;br /&gt;
* [https://github.com/neteler?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub contributions]&lt;br /&gt;
&lt;br /&gt;
=== Nishant Bansal | Indian Institute of Technology, Varanasi ===&lt;br /&gt;
&lt;br /&gt;
* Review the previous work on JSON during last year’s GSoC, including enhancements and the addition of JSON output support to other modules.&lt;br /&gt;
&lt;br /&gt;
=== Andy Kiley | NC DEQ ===&lt;br /&gt;
&lt;br /&gt;
* Hydrology day guest discussing stream mapping&lt;br /&gt;
&lt;br /&gt;
=== Nick Brady | Natrx ===&lt;br /&gt;
&lt;br /&gt;
* Lightning talk speaker presenting usage of GRASS in distributed environment for coastal erosion assessments&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS-Wiki&amp;diff=28348</id>
		<title>GRASS-Wiki</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS-Wiki&amp;diff=28348"/>
		<updated>2025-05-21T13:33:14Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Relevant Categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:grasslogo_vector_small.png|110x123 px|right|link=https://grass.osgeo.org]]&lt;br /&gt;
&lt;br /&gt;
= Welcome to the GRASS Wiki =&lt;br /&gt;
&lt;br /&gt;
This wiki is used by the GRASS community mainly for '''governance''', '''event planning''', and '''community coordination'''.&lt;br /&gt;
&lt;br /&gt;
Looking for how to use GRASS? Visit our main website and learning resources:&lt;br /&gt;
&lt;br /&gt;
* [https://grass.osgeo.org/ Main GRASS Website]&lt;br /&gt;
* [https://grass.osgeo.org/grass84/manuals/index.html Documentation &amp;amp; Manuals]&lt;br /&gt;
* [https://grass-tutorials.osgeo.org/ Tutorials &amp;amp; Learning Resources]&lt;br /&gt;
* [https://grass.osgeo.org/download/ Download GRASS]&lt;br /&gt;
* [https://github.com/OSGeo/grass GitHub Repository]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Support GRASS development: [https://grass.osgeo.org/contribute/sponsoring/ Donate here]'''&lt;br /&gt;
&lt;br /&gt;
== Governance ==&lt;br /&gt;
&lt;br /&gt;
* [[PSC|Project Steering Committee (PSC)]]&lt;br /&gt;
* [[PSC#PSC_meeting_agenda_and_minutes|Meeting Minutes]]&lt;br /&gt;
* [[GRASS_GIS_Budget_2025|2025 Budget]]&lt;br /&gt;
&lt;br /&gt;
== Latest Events &amp;amp; Planning ==&lt;br /&gt;
&lt;br /&gt;
* [[GRASS_Developer_Summit_Raleigh_2025|GRASS Developer Summit in Raleigh 2025]]&lt;br /&gt;
* [[GRASS_GSoC_Ideas_2025|Google Summer of Code 2025]]&lt;br /&gt;
&lt;br /&gt;
== Relevant Categories ==&lt;br /&gt;
* [[:Category:GSoC|GSoC]]&lt;br /&gt;
* [[:Category:Code_Sprint|Code sprints]]&lt;br /&gt;
* [[:Category:Workshops|Workshops]]&lt;br /&gt;
* [[:Category:Conferences|Conferences]]&lt;br /&gt;
* [[:Category:Installation|Installation]]&lt;br /&gt;
* [[:Category:Budget|Budget]]&lt;br /&gt;
* [[Special:Categories|Further categories]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Talk:GRASS_Developer_Summit_Raleigh_2025&amp;diff=28292</id>
		<title>Talk:GRASS Developer Summit Raleigh 2025</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Talk:GRASS_Developer_Summit_Raleigh_2025&amp;diff=28292"/>
		<updated>2025-05-19T13:59:16Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* Markus Neteler | mundialis */ +github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{toc|right}}&lt;br /&gt;
&lt;br /&gt;
Quick links: [[GRASS Developer Summit Raleigh 2025|Meeting page]] | [[#Participant_reports|Reports]]  |  [[GRASS_Developer_Summit_Raleigh_2025#Sponsors|Sponsors]]&lt;br /&gt;
&lt;br /&gt;
== Organizing Team ==&lt;br /&gt;
&lt;br /&gt;
* Initial planning: Vaclav Petras, Anna Petrasova, Veronica Andreo, Corey White, Lois Utt, Sarah White, Doug Newcomb, Huidae Cho, Veronica Andreo ([[GRASS_Developer_Summit_Raleigh_2025#Organizing_Committee|Organizing Committee]])&lt;br /&gt;
* Budget: Vaclav Petras, Lois Utt, Anna Petrasova&lt;br /&gt;
* Raising support: Helena Mitasova, Vaclav Petras, Anna Petrasova, Michael Barton, Giuseppe Amatulli ([[NSF POSE Project 2023-2025 Timeline|NSF POSE project]] proposal authors)&lt;br /&gt;
* Travel: Lois Utt&lt;br /&gt;
* Venue: Vaclav Petras, Lois Utt&lt;br /&gt;
* Meals: Lois Utt, Sarah White, Vaclav Petras, Corey White, Anna Petrasova&lt;br /&gt;
* Agenda: Vaclav Petras, Huidae Cho, Anna Petrasova&lt;br /&gt;
* Wiki page: Vaclav Petras, Anna Petrasova&lt;br /&gt;
* Swag: Sarah White, Vaclav Petras, Anna Petrasova, Corey White&lt;br /&gt;
* Promotion, invitations, and social media: Vaclav Petras, Sarah White, Corey White, John Vogler&lt;br /&gt;
* Lightning talks organization: Vaclav Petras, Zachary Arcaro, John Vogler&lt;br /&gt;
* Lightning talk speakers: Vaclav Petras (welcome), Markus Metz and Markus Neteler (talk presented by Vaclav Petras), Anna Petrasova, Veronica Andreo, Robert Dzur, Nick Brady, Huidae Cho, Gregory Power, Doug Newcomb, Caitlin Haedrich&lt;br /&gt;
* Photography: Caitlin Haedrich, Māris Nartišs, Pratikshya Regmi&lt;br /&gt;
&lt;br /&gt;
== Detailed Schedule ==&lt;br /&gt;
&lt;br /&gt;
=== Day 1, Monday, May 19 ===&lt;br /&gt;
&lt;br /&gt;
Location: Talley Student Union, 2610 Cates Ave ([https://www.google.com/maps/place/Talley+Student+Union/data=!4m2!3m1!1s0x0:0x38989377c96adef0?sa=X&amp;amp;ved=1t:2428&amp;amp;ictx=111 map])&lt;br /&gt;
&lt;br /&gt;
Room: 5101-Executive Board Room&lt;br /&gt;
&lt;br /&gt;
Highlighted topic: ''Contributing to GRASS. Getting started. Is it easy to contribute?''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:30-9:00 || Breakfast || Catered breakfast on site. Meet people, and plan your personal agenda for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || What to expect from the event, contributing to GRASS using Git and GitHub, making your first contribution.&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || Your topic here (10-minute presentation and 10-minute discussion)&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || Project Image - Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || Catered food on site.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || We will walk to [https://www.trophybrewing.com/brewing-pizza Trophy Brewing &amp;amp; Pizza] ([https://maps.app.goo.gl/ggnZ7EvXbWqDUmvP9 directions], 30 min walk from Talley)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 2, Tuesday, May 20 ===&lt;br /&gt;
&lt;br /&gt;
Location: Talley Student Union, 2610 Cates Ave ([https://www.google.com/maps/place/Talley+Student+Union/data=!4m2!3m1!1s0x0:0x38989377c96adef0?sa=X&amp;amp;ved=1t:2428&amp;amp;ictx=111 map])&lt;br /&gt;
&lt;br /&gt;
Room: 5101-Executive Board Room&lt;br /&gt;
&lt;br /&gt;
Highlighted topics: ''Hydrology and Interfacing with R and QGIS (gathering user feedback, testing, discussing with developers, developing action items)''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:30-9:00 || Breakfast || Breakfast on site. Start the day, meet people, and plan your personal agenda for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || Introduction to writing GRASS tools, program for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || Your topic here (10-minute presentation and 10-minute discussion)&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || [https://maps.app.goo.gl/womSkce9DrE8CTnR8 Case dining hall]&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || [https://maps.app.goo.gl/CQiWoCAQNt1ymZkb7 Served in Jordan Hall at the Center for Geospatial Analytics], evaluate the day's accomplishments, plan and prioritize for the next few days.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 3, Wednesday, May 21 ===&lt;br /&gt;
&lt;br /&gt;
Location: Talley Student Union, 2610 Cates Ave ([https://www.google.com/maps/place/Talley+Student+Union/data=!4m2!3m1!1s0x0:0x38989377c96adef0?sa=X&amp;amp;ved=1t:2428&amp;amp;ictx=111 map])&lt;br /&gt;
&lt;br /&gt;
Room: 5101-Executive Board Room&lt;br /&gt;
&lt;br /&gt;
Highlighted topic: ''Non-coding contributions, natural language translation, and internationalization.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:00-9:00 || Breakfast || [https://maps.app.goo.gl/eZ8VK8Mx6TjMt9NP8 Case dining hall]&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || Introduction to non-coding contributions, deep dive into new documentation, natural language translation and internationalization (procedures, glossaries, code customization, translation).&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || Your topic here (10-minute presentation and 10-minute discussion)&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || GSoC call&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || Served on site. Eat, drink, and continue the discussion from the feedback sessions.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || [https://maps.app.goo.gl/1E39eySMVaxYJUUS8 Picnic at Pullen Park, shelter #3. In case of bad weather, dinner at the Center for Geospatial Analytics.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 4, Thursday, May 22 ===&lt;br /&gt;
&lt;br /&gt;
Location: Center for Geospatial Analytics, Jordan Hall, 2800 Faucette Drive ([https://www.google.com/maps/search/Jordan+Hall/@35.7816832,-78.6772765,18z/data=!3m1!4b1?entry=ttu&amp;amp;g_ep=EgoyMDI1MDQyMC4wIKXMDSoJLDEwMjExNDUzSAFQAw%3D%3D map])&lt;br /&gt;
&lt;br /&gt;
Room: 5103 (straight from the two elevators, at the end of the hallway)&lt;br /&gt;
&lt;br /&gt;
Highlighted topic: ''Project vision and computational engine use case.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:00-9:00 || Breakfast || On site. Start the day, meet people, and plan your personal agenda for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || Project vision and the computational engine use case (missing features, documentation, user groups).&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || Your topic here (10-minute presentation and 10-minute discussion)&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || On site. Eat, drink, and continue the discussion from the feedback sessions.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-16:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 16:00-17:00 || Lightning talks || Fast-paced talks, showcasing applications of GRASS, room 5111.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Reception || Connect with researchers, government professionals, and industry collaborators, rooms 5111 and 5119.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 5, Friday, May 23 ===&lt;br /&gt;
&lt;br /&gt;
Location: James B. Hunt Jr. Library, 1070 Partners Way - Centennial Campus ([https://www.google.com/maps/place/James+B.+Hunt+Jr.+Library/@35.7693736,-78.679167,17z/data=!3m1!5s0x89acf5759f5a31df:0xc547454a0151c440!4m10!1m2!2m1!1shunt+library!3m6!1s0x89acf5759f591f41:0xbe0266269ce37f59!8m2!3d35.7693215!4d-78.6764409!15sCgxodW50IGxpYnJhcnlaDiIMaHVudCBsaWJyYXJ5kgESdW5pdmVyc2l0eV9saWJyYXJ54AEA!16s%2Fm%2F0r4wjf_?entry=ttu&amp;amp;g_ep=EgoyMDI1MDQyMC4wIKXMDSoJLDEwMjExNDUzSAFQAw%3D%3D map])&lt;br /&gt;
&lt;br /&gt;
Room: Faculty Research Commons - 5100 ([https://www.lib.ncsu.edu/hunt/map floor plan])&lt;br /&gt;
&lt;br /&gt;
Highlighted topic: ''GRASS project's future course.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:00-9:00 || Breakfast || On site. Start the day, meet people, and plan your personal agenda for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || GRASS project's future course.&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || PSC meeting || Project Steering Committee meets (public).&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || Your topic here (10-minute presentation and 10-minute discussion)&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || Walk to [https://maps.app.goo.gl/kHVHY62QxTd6wHKd9 On the Oval Culinary Creatins]. Eat, drink, and continue the discussion from the feedback sessions.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || Dinner on your own. Corey White will organize trip to downtown. Bus 41 from Hunt library to hotel and then walk.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Day 6, Saturday, May 24 ===&lt;br /&gt;
&lt;br /&gt;
Location: James B. Hunt Jr. Library, 1070 Partners Way - Centennial Campus ([https://www.google.com/maps/place/James+B.+Hunt+Jr.+Library/@35.7693736,-78.679167,17z/data=!3m1!5s0x89acf5759f5a31df:0xc547454a0151c440!4m10!1m2!2m1!1shunt+library!3m6!1s0x89acf5759f591f41:0xbe0266269ce37f59!8m2!3d35.7693215!4d-78.6764409!15sCgxodW50IGxpYnJhcnlaDiIMaHVudCBsaWJyYXJ5kgESdW5pdmVyc2l0eV9saWJyYXJ54AEA!16s%2Fm%2F0r4wjf_?entry=ttu&amp;amp;g_ep=EgoyMDI1MDQyMC4wIKXMDSoJLDEwMjExNDUzSAFQAw%3D%3D map])&lt;br /&gt;
&lt;br /&gt;
Room: Faculty Research Commons - 5100 ([https://www.lib.ncsu.edu/hunt/map floor plan])&lt;br /&gt;
&lt;br /&gt;
Highlighted topics: ''NSF POSE project evaluation.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Time !! Slot !! &lt;br /&gt;
|-&lt;br /&gt;
| 8:00-9:00 || Breakfast || TBA. Start the day, meet people, and plan your personal agenda for the day.&lt;br /&gt;
|-&lt;br /&gt;
| 9:00-10:00 || Morning opening sessions || NSF POSE project evaluation, contributor community feedback.&lt;br /&gt;
|-&lt;br /&gt;
| 10:00-11:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 11:00-11:20 || Self-organized feedback session || Your topic here (10-minute presentation and 10-minute discussion)&lt;br /&gt;
|-&lt;br /&gt;
| 11:20-11:40 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 11:40-12:00 || Self-organized feedback sessions || Your topic here&lt;br /&gt;
|-&lt;br /&gt;
| 12:00-13:00 || Lunch || TBA. Eat, drink, and continue the discussion from the feedback sessions.&lt;br /&gt;
|-&lt;br /&gt;
| 13:00-17:00 || Focus time || Time to work on your laptop, whiteboard solutions with a group, or anything in between.&lt;br /&gt;
|-&lt;br /&gt;
| 18:00 || Dinner || TBA. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Daily tasks for participants ==&lt;br /&gt;
&lt;br /&gt;
* List all the things you are working on in the Participant reports section below. Update the list each day. Include things you work on with other people.&lt;br /&gt;
* If you want to discuss something with the whole group, add yourself to a Self-organized feedback sessions slot in the schedule above or tell Vaclav (Vashek) Petras.&lt;br /&gt;
* For people with triage access and above: If you are or will be working on an issue or on a PR which is not originally submitted by you, assign yourself to the issue or PR. (You can unassign yourself later if you change your mind.)&lt;br /&gt;
&lt;br /&gt;
== Participant reports ==&lt;br /&gt;
&lt;br /&gt;
Per-person reports from the meeting.&lt;br /&gt;
&lt;br /&gt;
=== Giuseppe Amatulli | Yale University ===&lt;br /&gt;
&lt;br /&gt;
* Testing r.watershed and r.stream.* for handling large datasets&lt;br /&gt;
&lt;br /&gt;
=== Veronica Andreo | CONICET - Instituto Gulich ===&lt;br /&gt;
&lt;br /&gt;
* Plan: &lt;br /&gt;
** Review of temporal tutorials to push them to tutorials&lt;br /&gt;
** Sync branding between GRASS and tutorials websites&lt;br /&gt;
** GRASS project admin stuff &lt;br /&gt;
** Understand new docs contribution and building workflow&lt;br /&gt;
** Interface with R&lt;br /&gt;
* [https://github.com/veroandreo?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub contributions]&lt;br /&gt;
&lt;br /&gt;
=== Abdullah Azzam | New Mexico State University ===&lt;br /&gt;
&lt;br /&gt;
* r.runoff&lt;br /&gt;
&lt;br /&gt;
=== Michael Barton | Arizona State University ===&lt;br /&gt;
&lt;br /&gt;
* POSE related activities&lt;br /&gt;
&lt;br /&gt;
=== Laura Belica | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* tutorial development&lt;br /&gt;
&lt;br /&gt;
=== Shonil Sateesh Bhide | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* CI optimization&lt;br /&gt;
&lt;br /&gt;
=== Huidae Cho | New Mexico State University ===&lt;br /&gt;
&lt;br /&gt;
* CMake, conda, CI, Mentoring&lt;br /&gt;
&lt;br /&gt;
=== Edouard Choinière ===&lt;br /&gt;
&lt;br /&gt;
* Quick ideas, way too much for a week: Helping others (may take a reasonable part of the time), managing CI, setting up localization template updating workflow, backporting tool? Pytest/coverage improvements? Discuss and design other projects, to work on during the year. Open to change on other priorities once there, anything that is useful. Maybe make a little progress on high dpi GUI, especially on Windows.&lt;br /&gt;
&lt;br /&gt;
=== Laurent Courty ===&lt;br /&gt;
&lt;br /&gt;
* An xarray backend for GRASS STRDS. Fixing related issues&lt;br /&gt;
&lt;br /&gt;
=== Robert S. Dzur | Bohannan Huston, Inc. ===&lt;br /&gt;
&lt;br /&gt;
* r.in.pdal&lt;br /&gt;
&lt;br /&gt;
=== David W. Farris | East Carolina University ===&lt;br /&gt;
&lt;br /&gt;
* A tool to calculate gravity terrain corrections&lt;br /&gt;
&lt;br /&gt;
=== Neel Ghoshal | NC State University ===&lt;br /&gt;
&lt;br /&gt;
=== Caitlin Haedrich | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* Jupyter API, event photographs&lt;br /&gt;
&lt;br /&gt;
=== Brendan Harmon | Louisiana State University ===&lt;br /&gt;
&lt;br /&gt;
* Plugin development (r.earthworks) &amp;amp; tutorials&lt;br /&gt;
&lt;br /&gt;
=== Linda Karlovska | Czech Technical University in Prague ===&lt;br /&gt;
&lt;br /&gt;
* I plan to work on GUI enhancements, particularly the Jupyter-style interactive page for enhanced scripting and visualization.&lt;br /&gt;
&lt;br /&gt;
=== Martin Landa | Czech Technical University in Prague ===&lt;br /&gt;
&lt;br /&gt;
* Graphical modeler, Python API, Windows builds&lt;br /&gt;
&lt;br /&gt;
=== Nicklas Larsson | Hungarian National Museum ===&lt;br /&gt;
&lt;br /&gt;
* CMake build system; perhaps Conda recipe&lt;br /&gt;
&lt;br /&gt;
=== Chung-Yuan Liang ===&lt;br /&gt;
&lt;br /&gt;
* parallelize some modules, improve testing&lt;br /&gt;
&lt;br /&gt;
=== Andres Lucero | Bohannan Huston Inc ===&lt;br /&gt;
&lt;br /&gt;
* r.in.pdal&lt;br /&gt;
&lt;br /&gt;
=== Alen Mangafić | Geodetic Institute of Slovenia ===&lt;br /&gt;
&lt;br /&gt;
* Add-on which offers basic hyperspectral data support in GRASS.&lt;br /&gt;
&lt;br /&gt;
=== Helena Mitasova | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* standardized data set and related tutorials&lt;br /&gt;
* documentation for interpolation tools&lt;br /&gt;
* collaborate/coordinate/discuss hydrology tools (analytics, simulations, soil properties inputs)&lt;br /&gt;
* assist with wiki cleanup if needed&lt;br /&gt;
&lt;br /&gt;
=== Michael Mulqueen | MassGIS ===&lt;br /&gt;
&lt;br /&gt;
* depth to water, hydro from lidar, etc&lt;br /&gt;
&lt;br /&gt;
=== Māris Nartišs ===&lt;br /&gt;
&lt;br /&gt;
* Publish modules in progress.&lt;br /&gt;
&lt;br /&gt;
=== Ondřej Pešek | Czech Technical University in Prague ===&lt;br /&gt;
&lt;br /&gt;
* Many things to fix/improve in g.gui.gmodeler, finally finish an addon for CNNs in GRASS&lt;br /&gt;
&lt;br /&gt;
=== Vaclav (Vashek) Petras | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/wenzeslaus?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub activity]&lt;br /&gt;
* computational engine, APIs, funding, summit organization&lt;br /&gt;
&lt;br /&gt;
=== Anna Petrasova | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/petrasovaa?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub activity]&lt;br /&gt;
* mentoring, documentation&lt;br /&gt;
&lt;br /&gt;
=== Gregory Power | Town of Cary ===&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
&lt;br /&gt;
=== Pratikshya Regmi | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* I plan to showcase my work on integrating LLM and GRASS GIS.&lt;br /&gt;
&lt;br /&gt;
=== Riya | Indian Institute of Technology, Roorkee ===&lt;br /&gt;
&lt;br /&gt;
* I am currently thinking of developing an AI Agent for the grass jupyter library which will help the users with mathematical calculations done in GIS.&lt;br /&gt;
&lt;br /&gt;
=== Jayneel Shah | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* improve the test coverage of imagery modules.&lt;br /&gt;
&lt;br /&gt;
=== Krishna Prasad Sheshadri ===&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Adam Smith | Missouri Botanical Garden ===&lt;br /&gt;
&lt;br /&gt;
* R package fasterRaster (fielding bug reports, adding features)&lt;br /&gt;
&lt;br /&gt;
=== Michelle (Mimi) Stephens ===&lt;br /&gt;
&lt;br /&gt;
* Coding and visualization&lt;br /&gt;
&lt;br /&gt;
=== Corey White | NC State University ===&lt;br /&gt;
&lt;br /&gt;
* JSON, mentoring&lt;br /&gt;
&lt;br /&gt;
== Guests and remote participants ==&lt;br /&gt;
&lt;br /&gt;
=== Luís de Sousa | University of Lisbon ===&lt;br /&gt;
&lt;br /&gt;
* Review outstanding PRs&lt;br /&gt;
* Prepare GRASS sessions for the OpenGeoHub Summer School&lt;br /&gt;
&lt;br /&gt;
=== Markus Neteler | mundialis ===&lt;br /&gt;
&lt;br /&gt;
* Support full automation of new GRASS manual pages deployment on server (upload artifacts from GitHub to OSGeo servers (grass and download))&lt;br /&gt;
* Source code license documentation: Using SPDX License IDs ({{GH-Issues|4190}})&lt;br /&gt;
* Support Wiki cleanup&lt;br /&gt;
* [https://github.com/neteler?tab=overview&amp;amp;from=2025-05-19&amp;amp;to=2025-05-24 GitHub contributions]&lt;br /&gt;
&lt;br /&gt;
=== Nishant Bansal | Indian Institute of Technology, Varanasi ===&lt;br /&gt;
&lt;br /&gt;
* Review the previous work on JSON during last year’s GSoC, including enhancements and the addition of JSON output support to other modules.&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Main_Page_color_test&amp;diff=28278</id>
		<title>Main Page color test</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Main_Page_color_test&amp;diff=28278"/>
		<updated>2025-05-16T07:49:35Z</updated>

		<summary type="html">&lt;p&gt;Neteler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Testing colors for use in GRASS-Wiki ==&lt;br /&gt;
&lt;br /&gt;
background color test page:&lt;br /&gt;
 or/yelw: 239:223:164  #EFDFA4&lt;br /&gt;
 liyel:   240:232:196  #F0E8C4&lt;br /&gt;
 green:   206:218:151  #CEDA97&lt;br /&gt;
 pukgrn:  226:234:183  #E2EAB7&lt;br /&gt;
 aqblue:  214:228:214  #D6E4D6&lt;br /&gt;
 prpblu:  214:213:217  #D6D5D9&lt;br /&gt;
 greyblu: 218:218:219  #DADADB&lt;br /&gt;
 grblu2:  224:233:221  #E0E9DD&lt;br /&gt;
 ligrey:  220:220:220  #DCDCDC&lt;br /&gt;
 &lt;br /&gt;
 old liblue: #f8f8ff&lt;br /&gt;
&lt;br /&gt;
== Main ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;68%&amp;quot; style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-right:10px; border:1px solid #dfdfdf; background-color:#D6D5D9;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0.3em 1em 0.7em 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:grasslogo_vector_small.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== Welcome to the GRASS GIS Users Wiki ===&lt;br /&gt;
&lt;br /&gt;
The [http://grass.osgeo.org Geographic Resources Analysis Support System], commonly referred to as '''GRASS''', is a Geographic Information System ([http://en.wikipedia.org/wiki/Geographic_information_system GIS]) used for geospatial data management and analysis, image processing, graphics/maps production, spatial modeling, and visualization. GRASS is currently used in academic and commercial settings around the world, as well as by many governmental agencies and environmental consulting companies. GRASS GIS is an [http://www.osgeo.org Open Source Geospatial Foundation] project. This WIKI offers the official user community platform of the GRASS GIS project. For analysis examples, see the [http://grass.osgeo.org/screenshots/index.php GRASS GIS Gallery].&lt;br /&gt;
&lt;br /&gt;
On this Wiki, you can get and contribute to GRASS related information, documents and add-ons programs. To edit here, you need to register and login first (see top right link).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#FFF5E5;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''What's hot: [[GRASS SoC Ideas 2009]]'''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#DADADB;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== User Documentation and Support ====&lt;br /&gt;
* [[GRASS Help|GRASS Help and Getting Started]]&lt;br /&gt;
* [[GRASS Documents|In depth GRASS Documentation]]&lt;br /&gt;
* [[Installation Guide]] for precompiled binaries&lt;br /&gt;
* [[Faq|FAQ]]&lt;br /&gt;
* [[wxGUI]] - Graphical User Interface based on wxPython&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#E0E9DD;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Community ====&lt;br /&gt;
* [[GRASS Community]]: Getting in touch&lt;br /&gt;
* [[Applications|Research applications]]: What people are doing with GRASS&lt;br /&gt;
* [[GRASS migration hints|Migrating to GRASS]]&lt;br /&gt;
* [[GRASS Blogger]]&lt;br /&gt;
* Get involved: [[Project jobs]]&lt;br /&gt;
* [http://grass.osgeo.org/wiki/Special:Recentchanges?feed=rss RSS feed] of recent changes of this Wiki&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#EFDFA4;&amp;quot;&amp;gt;&lt;br /&gt;
or/yelw: 239:223:164  #EFDFA4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#F0E8C4;&amp;quot;&amp;gt;&lt;br /&gt;
liyel:   240:232:196  #F0E8C4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#CEDA97;&amp;quot;&amp;gt;&lt;br /&gt;
green:   206:218:151  #CEDA97&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#E2EAB7;&amp;quot;&amp;gt;&lt;br /&gt;
pukgrn:  226:234:183  #E2EAB7&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#D6D5D9;&amp;quot;&amp;gt;&lt;br /&gt;
prpblu:  214:213:217  #D6D5D9&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#DADADB;&amp;quot;&amp;gt;&lt;br /&gt;
greyblu: 218:218:219  #DADADB&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#D6E4D6;&amp;quot;&amp;gt;&lt;br /&gt;
aqblue:  214:228:214  #D6E4D6&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#E0E9DD;&amp;quot;&amp;gt;&lt;br /&gt;
grblu2:  224:233:221  #E0E9DD&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#f8f8ff;&amp;quot;&amp;gt;&lt;br /&gt;
old liblue: #f8f8ff&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#dcdcdc;&amp;quot;&amp;gt;&lt;br /&gt;
ligrey: #dcdcdc&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #4da948; padding:0em 1em 1em 1em; background-color:#dcdcdc;&amp;quot;&amp;gt;&lt;br /&gt;
ligrey: #dcdcdc (border #4da948)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;Have a look at the GRASS GIS users worldwide [http://grass.osgeo.org/community/ GRASS GIS User Online]. If you operate a GRASS GIS installation, you are welcome to enter your user data there. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;''[[GRASS-Wiki:Language policy|Translate this Wiki]]''&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- RIGHT COLUMN --&amp;gt;&lt;br /&gt;
| width=&amp;quot;38%&amp;quot; style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0;  border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#f8f8ff;&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:OSGeo 220pix.png|center|220px]]&lt;br /&gt;
&amp;lt;center&amp;gt;OSGeo Foundation Project&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#EFDFA4;&amp;quot;&amp;gt;&lt;br /&gt;
* [http://grass.osgeo.org/screenshots/index.php GRASS GIS Gallery]&lt;br /&gt;
* [http://trac.osgeo.org SVN/trac] Source Code Repository&lt;br /&gt;
* [http://grass.osgeo.org/community/support.php Mailing lists] and [http://grass.osgeo.org/community/support.php#irc IRC]&lt;br /&gt;
* [http://trac.osgeo.org/grass/ Report errors]&lt;br /&gt;
* [https://svn.osgeo.org/grass/grass/branches/releasebranch_6_3/COPYING Licensed under GNU GPL]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#CEDA97;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Download ====&lt;br /&gt;
* [http://grass.osgeo.org/download/ Source code and binaries]&lt;br /&gt;
* '''[[GRASS AddOns]]'''&lt;br /&gt;
* [[Promotional material]]&lt;br /&gt;
* [[Sample datasets]]&lt;br /&gt;
* [[Global datasets]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#F0E8C4;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki GRASS-trac]: the development Wiki, bugtracker, source code browser&lt;br /&gt;
* [[Development|GRASS Development]] intro&lt;br /&gt;
* [[Release Roadmap]]&lt;br /&gt;
* [[GRASS 7 ideas collection]]&lt;br /&gt;
* [[GRASS SoC Ideas|Google Summer of Code ideas collection]]&lt;br /&gt;
* [[Compile and Install]] of Source Code&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki/HowToContribute How to contribute to GRASS development] (getting write access and such)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#E2EAB7;&amp;quot;&amp;gt;&lt;br /&gt;
Project Metrics provided by [http://www.ohloh.net/projects/3666 Ohloh].&lt;br /&gt;
{{#ohloh: account=3666}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== See also ====&lt;br /&gt;
&lt;br /&gt;
The official GRASS-GIS colors described in the [http://grasswiki.osgeo.org/wiki/GRASS_Logo GRASS Logo] page&lt;br /&gt;
&lt;br /&gt;
[[Category: Colors]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Main_Page_color_test&amp;diff=28277</id>
		<title>Main Page color test</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Main_Page_color_test&amp;diff=28277"/>
		<updated>2025-05-16T07:49:04Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Testing colors for use in GRASS-Wiki ==&lt;br /&gt;
&lt;br /&gt;
background color test page:&lt;br /&gt;
 or/yelw: 239:223:164  #EFDFA4&lt;br /&gt;
 liyel:   240:232:196  #F0E8C4&lt;br /&gt;
 green:   206:218:151  #CEDA97&lt;br /&gt;
 pukgrn:  226:234:183  #E2EAB7&lt;br /&gt;
 aqblue:  214:228:214  #D6E4D6&lt;br /&gt;
 prpblu:  214:213:217  #D6D5D9&lt;br /&gt;
 greyblu: 218:218:219  #DADADB&lt;br /&gt;
 grblu2:  224:233:221  #E0E9DD&lt;br /&gt;
 ligrey:  220:220:220  #DCDCDC&lt;br /&gt;
 &lt;br /&gt;
 old liblue: #f8f8ff&lt;br /&gt;
&lt;br /&gt;
== Main ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;68%&amp;quot; style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-right:10px; border:1px solid #dfdfdf; background-color:#D6D5D9;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0.3em 1em 0.7em 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:grasslogo_vector_small.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== Welcome to the GRASS GIS Users Wiki ===&lt;br /&gt;
&lt;br /&gt;
The [http://grass.osgeo.org Geographic Resources Analysis Support System], commonly referred to as '''GRASS''', is a Geographic Information System ([http://en.wikipedia.org/wiki/Geographic_information_system GIS]) used for geospatial data management and analysis, image processing, graphics/maps production, spatial modeling, and visualization. GRASS is currently used in academic and commercial settings around the world, as well as by many governmental agencies and environmental consulting companies. GRASS GIS is an [http://www.osgeo.org Open Source Geospatial Foundation] project. This WIKI offers the official user community platform of the GRASS GIS project. For analysis examples, see the [http://grass.osgeo.org/screenshots/index.php GRASS GIS Gallery].&lt;br /&gt;
&lt;br /&gt;
On this Wiki, you can get and contribute to GRASS related information, documents and add-ons programs. To edit here, you need to register and login first (see top right link).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#FFF5E5;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''What's hot: [[GRASS SoC Ideas 2009]]'''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#DADADB;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== User Documentation and Support ====&lt;br /&gt;
* [[GRASS Help|GRASS Help and Getting Started]]&lt;br /&gt;
* [[GRASS Documents|In depth GRASS Documentation]]&lt;br /&gt;
* [[Installation Guide]] for precompiled binaries&lt;br /&gt;
* [[Faq|FAQ]]&lt;br /&gt;
* [[wxGUI]] - Graphical User Interface based on wxPython&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#E0E9DD;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Community ====&lt;br /&gt;
* [[GRASS Community]]: Getting in touch&lt;br /&gt;
* [[Applications|Research applications]]: What people are doing with GRASS&lt;br /&gt;
* [[GRASS migration hints|Migrating to GRASS]]&lt;br /&gt;
* [[GRASS Blogger]]&lt;br /&gt;
* Get involved: [[Project jobs]]&lt;br /&gt;
* [http://grass.osgeo.org/wiki/Special:Recentchanges?feed=rss RSS feed] of recent changes of this Wiki&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#EFDFA4;&amp;quot;&amp;gt;&lt;br /&gt;
or/yelw: 239:223:164  #EFDFA4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#F0E8C4;&amp;quot;&amp;gt;&lt;br /&gt;
liyel:   240:232:196  #F0E8C4&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#CEDA97;&amp;quot;&amp;gt;&lt;br /&gt;
green:   206:218:151  #CEDA97&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#E2EAB7;&amp;quot;&amp;gt;&lt;br /&gt;
pukgrn:  226:234:183  #E2EAB7&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#D6D5D9;&amp;quot;&amp;gt;&lt;br /&gt;
prpblu:  214:213:217  #D6D5D9&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#DADADB;&amp;quot;&amp;gt;&lt;br /&gt;
greyblu: 218:218:219  #DADADB&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#D6E4D6;&amp;quot;&amp;gt;&lt;br /&gt;
aqblue:  214:228:214  #D6E4D6&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#E0E9DD;&amp;quot;&amp;gt;&lt;br /&gt;
grblu2:  224:233:221  #E0E9DD&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#f8f8ff;&amp;quot;&amp;gt;&lt;br /&gt;
old liblue: #f8f8ff&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#dcdcdc;&amp;quot;&amp;gt;&lt;br /&gt;
ligrey: #dcdcdc&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #4da948; padding:0em 1em 1em 1em; background-color:#dcdcdc;&amp;quot;&amp;gt;&lt;br /&gt;
ligrey: #dcdcdc (border #4da948)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;Have a look at the GRASS GIS users worldwide [http://grass.osgeo.org/community/ GRASS GIS User Online]. If you operate a GRASS GIS installation, you are welcome to enter your user data there. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;''[[GRASS-Wiki:Language policy|Translate this Wiki]]''&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- RIGHT COLUMN --&amp;gt;&lt;br /&gt;
| width=&amp;quot;38%&amp;quot; style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0;  border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#f8f8ff;&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:OSGeo 220pix.png|center|220px]]&lt;br /&gt;
&amp;lt;center&amp;gt;OSGeo Foundation Project&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#EFDFA4;&amp;quot;&amp;gt;&lt;br /&gt;
* [http://grass.osgeo.org/screenshots/index.php GRASS GIS Gallery]&lt;br /&gt;
* [http://trac.osgeo.org SVN/trac] Source Code Repository&lt;br /&gt;
* [http://grass.osgeo.org/community/support.php Mailing lists] and [http://grass.osgeo.org/community/support.php#irc IRC]&lt;br /&gt;
* [http://trac.osgeo.org/grass/ Report errors]&lt;br /&gt;
* [https://svn.osgeo.org/grass/grass/branches/releasebranch_6_3/COPYING Licensed under GNU GPL]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#CEDA97;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Download ====&lt;br /&gt;
* [http://grass.osgeo.org/download/ Source code and binaries]&lt;br /&gt;
* '''[[GRASS AddOns]]'''&lt;br /&gt;
* [[Promotional material]]&lt;br /&gt;
* [[Sample datasets]]&lt;br /&gt;
* [[Global datasets]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#F0E8C4;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki GRASS-trac]: the development Wiki, bugtracker, source code browser&lt;br /&gt;
* [[Development|GRASS Development]] intro&lt;br /&gt;
* [[Release Roadmap]]&lt;br /&gt;
* [[GRASS 7 ideas collection]]&lt;br /&gt;
* [[GRASS SoC Ideas|Google Summer of Code ideas collection]]&lt;br /&gt;
* [[Compile and Install]] of Source Code&lt;br /&gt;
* [http://trac.osgeo.org/grass/wiki/HowToContribute How to contribute to GRASS development] (getting write access and such)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #dfdfdf; padding:0em 1em 1em 1em; background-color:#E2EAB7;&amp;quot;&amp;gt;&lt;br /&gt;
Project Metrics provided by [http://www.ohloh.net/projects/3666 Ohloh].&lt;br /&gt;
{{#ohloh: account=3666}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== See also ====&lt;br /&gt;
&lt;br /&gt;
The official GRASS-GIS colors described in the [http://grasswiki.osgeo.org/wiki/GRASS_Logo GRASS Logo] page&lt;br /&gt;
&lt;br /&gt;
[[Category: GRASS-Wiki]]&lt;br /&gt;
[[Category: Colors]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Raspberry_Pi&amp;diff=28276</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Raspberry_Pi&amp;diff=28276"/>
		<updated>2025-05-16T07:47:21Z</updated>

		<summary type="html">&lt;p&gt;Neteler: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Grass7 RaspberryPI.png|500px|right|thumb|GRASS running in the LXDE desktop environment on a Raspberry Pi]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= GRASS on the Raspberry Pi =&lt;br /&gt;
&lt;br /&gt;
The {{wikipedia|Raspberry_Pi}} is a small computer about the size of a deck of cards. It runs on a low power ARM processor similar to one used in a smart phone or tablet. Technically it's a ARM v6 SoC chip originally designed for use in a set-top TV box, meaning the general purpose CPU is rather slow, but it can handle full screen 1080p graphics without problems. It is designed for tinkering and is very cheap: US$25-35 depending on the model.&lt;br /&gt;
&lt;br /&gt;
The Pi runs Linux and a popular distribution for it is [http://www.raspbian.org/ Raspian], an ARM v6 rebuild of {{wikipedia|Debian}}'s &amp;quot;testing&amp;quot; line, which supplies builds for ARM v4 and ARM v7 but not the v6. Running the official Debian build for v4 will work, but not take full advantage of the chip.&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
&lt;br /&gt;
Since GRASS is a standard package in Debian, installation on a running Pi system is very easy. At a terminal prompt type:&lt;br /&gt;
 sudo apt-get install grass grass-doc grass-dev&lt;br /&gt;
&lt;br /&gt;
This will also bring in all of the user documentation and the development environment needed to install GRASS [[AddOns]].&lt;br /&gt;
&lt;br /&gt;
GRASS will work fine on very slow hardware with limited RAM, especially for raster maps. It was after all originally designed in the 1980s when computers were much less capable than they are today. To keep RAM use low keep your region rows x columns small, and vector features to a minimum. Typical use with the older (and smaller) [[Sample_datasets|Spearfish dataset]] should work very smoothly. The GUI can be computationally expensive, so you might consider changing the default GUI to the more lightweight Tcl/Tk version(s), or setting the default to text mode with the {{Cmd|g.gui}} module. For example:&lt;br /&gt;
 &amp;lt;font color=&amp;quot;DarkBlue&amp;quot;&amp;gt;GRASS&amp;gt;&amp;lt;/font&amp;gt; g.gui text&lt;br /&gt;
 &amp;lt;text&amp;gt; is now the default GUI&lt;br /&gt;
&lt;br /&gt;
== Compiling ==&lt;br /&gt;
&lt;br /&gt;
If you are interested in working on GRASS development or trying out experimental features in GRASS 7, Yann Chemin has [http://article.gmane.org/gmane.comp.gis.grass.devel/52126 put together some instructions on how to compile GRASS 7 on the RPi]. This was done on an older Model B unit with 256MB RAM; newer revisions of the board come with 512MB RAM.&lt;br /&gt;
&lt;br /&gt;
If you simply want to compile and build your own [[AddOns|add-on modules]] for GRASS 6.4, all you need to do is install the &amp;lt;tt&amp;gt;grass-dev&amp;lt;/tt&amp;gt; package and you're ready to go; you don't need the full GRASS source code for that. (although it is useful for reference)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How-to download, configure, compile, and install GRASS 7.svn on the RPi:&lt;br /&gt;
&lt;br /&gt;
* Use [http://www.raspbian.org/ Raspbian] as your SD card image&lt;br /&gt;
* Start the Raspberry Pi with that SD card&lt;br /&gt;
* You will be presented with a text-based start menu:&lt;br /&gt;
:- Extend the File system to the fill the SD card&lt;br /&gt;
:- Overclock to 900MHz (needs 1V power more) or more (1GHz possible)&lt;br /&gt;
:- Set up ssh server if you want to connect remotely&lt;br /&gt;
:- Go ahead to load the Debian LXDE interface&lt;br /&gt;
&lt;br /&gt;
* Once you are through all that and it has booted to the {{wikipedia|LXDE}} desktop, open a terminal, and enter these commands to update your Raspian OS and install the standard GRASS 6.4 packages with all required dependencies:&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get dist-upgrade --assume-yes&lt;br /&gt;
 sudo apt-get install grass-dev&lt;br /&gt;
&lt;br /&gt;
Next fetch the latest GRASS development source code:&lt;br /&gt;
 sudo apt-get install subversion&lt;br /&gt;
 svn checkout &amp;lt;nowiki&amp;gt;https://svn.osgeo.org/grass/grass/trunk&amp;lt;/nowiki&amp;gt; grass7_trunk&lt;br /&gt;
&lt;br /&gt;
* cd into &amp;lt;tt&amp;gt;grass7_trunk&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download and install the required build dependencies (like libcairo-dev for wxgui, etc). If you have the deb-src lines active in your /etc/apt/sources.list file, this is easily done with a single command:&lt;br /&gt;
 sudo apt-get build-dep grass&lt;br /&gt;
&lt;br /&gt;
* Lower the job priority of the build Terminal session so that the rest of the RPi will still be usable during the build:&lt;br /&gt;
 renice +17 -p $$&lt;br /&gt;
&lt;br /&gt;
* Get your config options right, here's a working example but you should adjust to suit your needs:&lt;br /&gt;
 CFLAGS=&amp;quot;-ggdb -march=native -Wall -Werror-implicit-function-declaration&amp;quot; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
    --with-tcltk-includes=/usr/include/tcl8.5 --with-cairo \&lt;br /&gt;
    --with-motif --with-python=/usr/bin/python2.7-config \&lt;br /&gt;
    --with-readline --with-cxx --with-odbc --with-sqlite \&lt;br /&gt;
    --with-freetype --with-freetype-includes=/usr/include/freetype2 \&lt;br /&gt;
    --without-postgres --with-proj-share=/usr/share/proj \&lt;br /&gt;
    --with-wxwidgets=/usr/lib/wx/config/gtk2-unicode-release-2.8 \&lt;br /&gt;
    --with-geos \&lt;br /&gt;
    2&amp;gt;&amp;amp;1 | tee config_log.txt&lt;br /&gt;
&lt;br /&gt;
: For help with the configure options run this command:&lt;br /&gt;
 ./configure --help | less&lt;br /&gt;
&lt;br /&gt;
If you are building without GUI support (text only mode) you can leave off Motif, Tcl/Tk, wxWidgets, and possibly Freetype (although that allows for background graphics rendering).&lt;br /&gt;
&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; to build it. (The first time it will take loong !)&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
* And finally install to &amp;lt;tt&amp;gt;/usr/local/&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
== Field deployment ==&lt;br /&gt;
&lt;br /&gt;
Since the RPi Model B rev2 only uses 3 watts of power (and the Model A only uses 1.5 watts), and due to its small footprint, low cost &amp;amp; easy drop-in replacability, it's ideal for use as a field datalogger run from a battery in harsh environments where you'd be loathe to leave an expensive laptop. Since it uses a standard Linux toolchain with easy access to 30000 prebuilt software packages, and encourages Python as a primary programming language, it is easy for anyone with general UNIX experience to set up with the aid of a wealth of help available on the Internet; no specialist skills working with exotic embedded hardware is needed.&lt;br /&gt;
&lt;br /&gt;
=== Rugged/waterproof case ===&lt;br /&gt;
&lt;br /&gt;
The RPi does not come with a case, you'll have to put something together yourself.&lt;br /&gt;
&lt;br /&gt;
The classic DIY field gear solution to this is to get a small Pelican Case, and drill some holes in the side where you mount some waterproof bulkhead connector fittings with silicone sealant, or install pass-through cable glands. Make the power button a red light-up one with a {{wikipedia|molly_guard}} to make it look professional. :o)&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/search?q=rugged+case+raspberry+pi Here's a web search for &amp;quot;rugged cases&amp;quot; for the RPi]&lt;br /&gt;
: ... but since it already has mounting holes on the PCB you could just mount it with rubber offsets to a backing plate cut to the interior size of your waterproof case.&lt;br /&gt;
&lt;br /&gt;
Heat dissipation should not be a major issue in most deployments.&lt;br /&gt;
&lt;br /&gt;
=== Connecting with a GPS ===&lt;br /&gt;
&lt;br /&gt;
==== Software ====&lt;br /&gt;
&lt;br /&gt;
Install the &amp;lt;tt&amp;gt;gpsd&amp;lt;/tt&amp;gt; Raspian package. This can also feed time into &amp;lt;tt&amp;gt;ntpd&amp;lt;/tt&amp;gt;, the standard UNIX time keeping deamon, with micro-second accuracy; this can be important as the RPi does not have a built-in real time clock. (see RPi forums for how to connect to a RTC via the GPIO pins)&lt;br /&gt;
&lt;br /&gt;
==== Hardware ====&lt;br /&gt;
&lt;br /&gt;
For NMEA you can plug in a RS-232 or TTL level serial connection to the GPIO dual-inline header pin block on the board.&lt;br /&gt;
&lt;br /&gt;
You can plug a GPS which communicates via USB directly into one of the RPi's USB ports, but if the GPS uses the USB port for more than just communication (i.e. to power or recharge it) you'll want to use a powered USB hub.&lt;br /&gt;
&lt;br /&gt;
AdaFruit technologies (and probably many others) sells a bare-board GPS kit for the RPi.&lt;br /&gt;
&lt;br /&gt;
=== Using as an automated datalogger ===&lt;br /&gt;
&lt;br /&gt;
You can use the RPi connected to monitoring devices to automatically poll and collect data via the GPIO pins on a regular schedule via standed UNIX {{wikipedia|cron}} jobs.&lt;br /&gt;
&lt;br /&gt;
GRASS can be run non-interactively in text mode, without the GUI (see [[GRASS_and_Shell#GRASS_Batch_jobs|GRASS Batch Jobs]]), and so beyond a simple datalogger your remote RPi can perform full data processing, creation of finished real-time maps, data plots, and finished auto-generated PDF reports, then serve these via FTP or a web page running in the background. An ethernet connection, USB WiFi dongle or VHF radio packet modem can be connected to either push the data back to your home base, or stay online ready for queries.&lt;br /&gt;
&lt;br /&gt;
To save power, pair with a low power {{wikipedia|Arduino}} board (like the ''Ultra Mini 8'') with a timer on it. You can have the system boot, perform a measurement, and send off the results, before shutting itself back down for another hour of &amp;lt;1mA sleep. In this way a small solar panel and a 6v or 12v sealed lead-acid battery (plus a 5v regulator) can keep the unit running indefinetly.&lt;br /&gt;
&lt;br /&gt;
* AdaFruit technologies (and probably many others) sells a kit with a solar panel and a rechargable cellphone-style Li-Ion battery for the RPi.&lt;br /&gt;
&lt;br /&gt;
=== Using as a field entry device ===&lt;br /&gt;
&lt;br /&gt;
It will work, but maybe the task is more suited for a jailbroken Android Tablet dual-booting into Linux? See also the [http://f-droid.org Android build of gvSIG mini], another OSGeo project.&lt;br /&gt;
&lt;br /&gt;
* [http://www.raspberrypi.org/archives/3621 See this blog post] for instructions on using a daylight readable e-Ink display (in this case a Kindle) as a small monitor which is actually usable in sunshine.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
Due to low RAM, avoid running other software when using the wxGUI, especially when launching it.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [http://grassold.osgeo.org/screenshots/platforms.php Historical screenshots of portable-GRASS running on iPAQ and handheld computers]&lt;br /&gt;
* The [http://www.raspberrypi.org/ Raspberry Pi Foundation] is a non-profit education-focused group in the UK which designs and produces the RPi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Hardware]]&lt;br /&gt;
[[Category: Android]]&lt;br /&gt;
[[Category: Installation‏‎]]&lt;br /&gt;
[[Category: Tutorial]]&lt;/div&gt;</summary>
		<author><name>Neteler</name></author>
	</entry>
</feed>