[[TOC]] = Compiling GRASS on MS-Windows = == Dependencies required for building with MinGW == Compiling your own copy of '''GRASS''' is greatly simplified by using the '''OSGeo4W''' directory structure to install most dependencies and downloading the rest from a few other locations. Follow the steps below to set up the build environment for '''GRASS'''. === Install the OSGeo4W directory structure === OSGeo4W has several of the required dependencies for compiling GRASS: 1. Download the '''OSGeo4W installer''' - [http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe 32bit] or [http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe 64bit] 2. Run the installer. 3. Select `Advanced Install`, and `Next`. 4. Set the install directory to `C:\OSGeo4W` (32bit) or `C:\OSGeo4W64` (64bit) (other directories are fine if there are no spaces in the path but make sure to adjust the instructions below). The MSYS maintainers have made it clear that they [https://sourceforge.net/tracker/?func=detail&atid=102435&aid=1511614&group_id=2435 will not support spaces in path names] nor accept patches fixing those issues. With some patches to `msys.bat` however it is possible to install a built GRASS into `C:\Program Files\`. 5. Select '''msys-grass''' (see [http://trac.osgeo.org/osgeo4w/wiki/pkg-grass pkg-grass] for details) from the `Commandline_Utilities` section for dependencies, later unselect 6. Also select: * Commandline_Utilities * '''mingw''' (see [http://trac.osgeo.org/osgeo4w/wiki/pkg-msys pkg-msys] for details) * Libs: * '''fftw-devel''' (*) * '''freetype-devel''' * '''freetype-devel-mingw''' (*) * '''gsl-devel''' * '''libcairo-devel''' (*) * '''liblas-devel''' (GRASS 7 only) * '''libpng-devel-mingw''' (*) * '''libtiff-devel''' (*) * '''libxdr''' * '''libxml2''' * '''matplotlib''' (GRASS 7 only) * '''pdcurses-devel''' * '''tcltk-devel''' (GRASS 6 only) * '''zlib-devel''' (*) 7. Optionally select also GDAL plugins for common GIS formats (be careful not to introduce GPL incompatibilities) * Libs: * '''gdal-ecw''' * '''gdal-mrsid''' 8. Click `Next`, the selected packages and their required subpackages will be downloaded and installed automatically. == Compiling and Installing GRASS (6.4.x) == 1. Download the latest weekly snapshot GRASS 6.4.x source code from [http://grass.osgeo.org/grass64/source/snapshot/ here] (for latest SVN version, see [wiki:CompileOnWindows#GRASS6.4.svnreleasebranch_64 below]) 2. Unpack to {{{c:\osgeo4w\usr\src}}} 3. To compile, type in MSYS console: {{{ cd /osgeo4w/usr/src/grass-6.4.x (change to dir of the version you downloaded) ./mswindows/osgeo4w/package.sh }}} 4. Check {{{error.log}}} for any error messages and {{{mswindows/osgeo4w/package.log}}} if you're having problems. GRASS should now be installed in {{{c:\osgeo4w\apps\grass\grass-6.4.x}}} === Usage === To start GRASS use the icon on the desktop. OR, if you want to be able to use the command line from within GRASS 1. Type in MSYS console: {{{ grass64 }}} Or to use the new wxPython GUI: {{{ grass64 -wxpython }}} == Compiling and Installing Development Versions of GRASS == === Optional Installation of Subversion === The GRASS source tree is stored in an [http://svn.osgeo.org/grass online repository] called Subversion. Rather than downloading source trees from the website, Subversion lets you keep up to date, and manage your modifications, with simple commands or a graphical tool. For details, see [wiki:HowToSVN here]. A) Command line based: 1. Download '''Collabnet Subversion Command-Line Client (1.6)''' from [http://www.collab.net/downloads/subversion/ here]. (You'll have to register on Collabnet) 2. Run the subversion installer and install it to a path without spaces such as {{{c:/Subversion}}} 3. Open {{{c:\osgeo4w\etc\ini\msys.bat}}} and at line 1 add the path to your subversion folder, e.g. change: {{{ PATH %PATH%;%OSGEO4W_ROOT%\apps\msys\bin }}} to: {{{ PATH %PATH%;%OSGEO4W_ROOT%\apps\msys\bin;c:\Subversion }}} B) Graphical user interface based: Alternatively, get '''TortoiseSVN''', a plugin for Windows Explorer, which can be used for managing the local source tree. Download [http://tortoisesvn.tigris.org/ here]. === GRASS 6.4.svn (releasebranch_64) === 1. Download the grass-6.4.svn source tree with: * Subversion (also see [wiki:DownloadSource#GRASS6.4 here]) {{{ cd /osgeo4w/usr/src svn co https://svn.osgeo.org/grass/grass/branches/releasebranch_6_4/ grass64_release cd /osgeo4w/usr/src/grass64_release }}} OR * Download a weekly snapshot from [http://grass.osgeo.org/grass64/source/snapshot/ here] and unpack to `/osgeo4w/usr/src` 2. See [wiki:CompileOnWindows#CompilingandInstalling below] for compilation and installation. 3. After installation, start with: {{{ grass64 }}} === GRASS 6.5.svn (develbranch_6) === 1. Download the grass-6.5.svn source tree with: * Subversion (also see [wiki:DownloadSource#GRASS6.5 here]) {{{ cd /osgeo4w/usr/src svn co https://svn.osgeo.org/grass/grass/branches/develbranch_6/ grass6_devel cd /osgeo4w/usr/src/grass6_devel }}} OR * Download a weekly snapshot from [http://grass.osgeo.org/grass65/source/snapshot/ here] and unpack to `/osgeo4w/usr/src` 2. See [wiki:CompileOnWindows#CompilingandInstalling below] for compilation and installation. 3. After installation, start with: {{{ grass65 }}} === GRASS 7.0.svn (trunk) === 1. Download the grass-7.0.svn source tree with: * Subversion (also see [wiki:DownloadSource#GRASS7 here]) {{{ cd /osgeo4w/usr/src svn checkout https://svn.osgeo.org/grass/grass/trunk grass_trunk cd /osgeo4w/usr/src/grass_trunk }}} OR * Download a weekly snapshot from [http://grass.osgeo.org/grass70/source/snapshot/ here] and unpack to `/osgeo4w/usr/src` 2. See [wiki:CompileOnWindows#CompilingandInstalling below] for compilation and installation. 3. After installation, start with: {{{ grass70 }}} === Compiling and Installing === To compile, type in MSYS console: {{{ ./mswindows/osgeo4w/package.sh }}} To update your source tree later using subversion and recompile type: {{{ make distclean svn up rm mswindows/osgeo4w/configure-stamp ./mswindows/osgeo4w/package.sh }}} === Troubleshooting === Here are a few common problems and their solutions: ||''With module...''||''If you get the error''||''Do the following''|| ||r.mapcalc, r.univar, or raster3d/base||No rule to make target ... needed by 'progs'||Update msys's '''make''' (see step 8 in the MinGW section [wiki:CompileOnWindows#InstalltheenvironmentforcompilationMingW above])|| ||scripts/*||!ImportError: No module named grass||Fix {{{PYTHONPATH}}} to *nix-style (eg. {{{PYTHONPATH=/osego4w/apps/Python25}}})|| == Creating a WinGRASS Installer == The instructions for creating a WinGRASS native installer (self-contained package installer) using the scripts contained in the [source:grass/trunk/mswindows mswindows] directory. In order to avoid mistakes or misunderstandings, we highly recommend to follow each step and command exactly as they are written in this document. See also [source:grass-addons/tools/wingrass-packager scripts] used for [http://wingrass.fsv.cvut.cz daily builds]. === Install OSGeo4w Tree and Compile GRASS === First of all download the OSGeo4W installer, install the required dependencies, and build GRASS from source. Do not move on to step two until you have successfully [wiki:HowToTestGrass6 tested] your new version of GRASS. === Create a GRASS self-contained Package === 1. Copy all the content of the {{{mswindows}}} directory to a temporary directory, for example {{{c:\temp}}}. 2. Edit file {{{c:\temp\GRASS-Packager.bat}}} to reflect the paths to your OSGeo4W tree and the GRASS version being packaged. Default settings is: {{{ set OSGEO4W_DIR=c:\osgeo4w Grass64-Release-Version: set PACKAGE_DIR=.\GRASS-64-Release-Package set GRASS_PREFIX=%OSGEO4W_DIR%\apps\grass\grass-6.4.1 Grass64-Devel-Version: set PACKAGE_DIR=.\GRASS-64-Devel-Package set GRASS_PREFIX=%OSGEO4W_DIR%\apps\grass\grass-6.4.1svn Grass65-Devel-Version: set PACKAGE_DIR=.\GRASS-65-Devel-Package set GRASS_PREFIX=%OSGEO4W_DIR%\apps\grass\grass-6.5.svn Grass70-Devel-Version: set PACKAGE_DIR=.\GRASS-70-Devel-Package set GRASS_PREFIX=%OSGEO4W_DIR%\apps\grass\grass-7.0.svn }}} 3. Launch the file {{{c:\temp\GRASS-Packager.bat}}} and select version to be packaged. 4. When finished, you should have a GRASS self-contained release package in {{{c:\temp\GRASS---Package}}}, e.g. {{{c:\temp\GRASS-64-Release-Package}}}. === Install NSIS (2.46) === 1. Download the [http://sourceforge.net/projects/nsis/files/NSIS%202/2.46/nsis-2.46-setup.exe/download NSIS installer] 2. Install to {{{c:\DevTools}}} === Install NSIS: Untgz Plugin (1.0.16) === 1. Download the [http://www.fdos.org/win32/nsis/plugins/untgz.1.0.16.zip NSIS Untgz Plugin] 2. Unzip to {{{c:\DevTools\Plugins\}}} === Install NSIS: !AccessControl Plugin === 1. Download the [http://nsis.sourceforge.net/AccessControl_plug-in NSIS AccessControl Plugin] 2. Unzip to {{{c:\DevTools\}}} === Create the WinGRASS Installer === 1. Edit file {{{c:\temp\GRASS-Installer.nsi}}} to reflect path to the GRASS source tree. Default settings is: {{{ Grass64: !define DEMOLOCATION_PATH "c:\osgeo4w\usr\src\grass64_release\demolocation" !define MSYS_BATCH "C:\OSGeo4W\usr\src\grass64_release\mswindows\osgeo4w\msys.bat" Grass65: !define DEMOLOCATION_PATH "c:\osgeo4w\usr\src\grass6_devel\demolocation" !define MSYS_BATCH "C:\OSGeo4W\usr\src\grass6_devel\mswindows\osgeo4w\msys.bat" Grass70: !define DEMOLOCATION_PATH "c:\osgeo4w\usr\src\grass_trunk\demolocation" !define MSYS_BATCH "C:\OSGeo4W\usr\src\grass_trunk\mswindows\osgeo4w\msys.bat" }}} 2. Define {{{INSTALLER_TYPE}}} * GRASS 6.4: valid options - {{{Release}}}, {{{Devel}}} (default: {{{Release}}}) * GRASS 6.5: valid options - {{{Release}}}, {{{Devel}}} (default: {{{Devel}}}) * GRASS 7.0: valid options - {{{Release}}}, {{{Devel}}} (default: {{{Devel}}}) 3. Update SVN revision number (see {{{svn info}}}), e.g. change {{{ !define DEV65_SVN_REVISION "36599" }}} to {{{ !define DEV65_SVN_REVISION "40505" }}} 4. Right click on the file {{{c:\temp\GRASS-Installer.nsi}}} and select Compile NSIS Script. 5. When finished, you should have the WinGRASS release installer in {{{c:\temp}}}. == Misc == === Ghostscript === [http://grass.osgeo.org/wiki/WxGUI_Cartographic_Composer wxGUI Cartographic Composer] requires [http://www.ghostscript.com/ Ghostscript]. Install [http://trac.osgeo.org/osgeo4w/wiki/pkg-gs gs package] from OSGeo4W. === LibreDWG === Required by GRASS Addons [source:grass-addons/grass7/vector/v.in.redwg v.in.redwg]. 1. Download http://www.gnu.org/software/libredwg/ TODO: Finish this part. == TODO == * Establish 64bit builds == winGRASS-64bit-notes == external notes for building windows 64bit-binaries: * [http://lists.osgeo.org/pipermail/osgeo4w-dev/2013-August/002362.html OSGeo4W-64bit inital notes] * [http://trac.osgeo.org/grass/ticket/2095 GRASS changes for OSGeo4W 64bit] * [http://cran.r-project.org/doc/manuals/R-admin.html#Building-R-for-64_002dbit-Windows Building R for 64-bit Windows] * [http://www.gaia-gis.it/gaia-sins/mingw64_how_to.html Building SpatiaLite for 64-bit Windows] * [http://gvsigce.sourceforge.net/wiki/index.php/Setting_up_the_GNU_Compiler_Collection#Windows gvSIG and MinGW-w64 (C/C++ compiler)] * [http://download.osgeo.org/osgeo4w/x86_64/release/grass/grass-6.4.3-5-src.tar.bz2 recipe used to build GRASS 6.4.3 on OSGeo4W in 64bit] tool chains for building windows 64bit-binaries: * [http://mingw-w64.sourceforge.net/ MinGW-w64 - GCC for both 64 & 32 bits Windows] * [http://tdm-gcc.tdragon.net/ TDM-GCC - A compiler suite for 32- and 64-bit Windows based on the GNU toolchain] * [http://www.drangon.org/mingw/ Native windows x64 software develop with Mingw-w64] packages to include in OSGeo4W-64bit for a build/compile environment: * update `mingw` package * [http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Automated%20Builds/mingw-w64-bin_i686-mingw_20111220.zip MinGW-w64] or [http://sourceforge.net/projects/mingwbuilds/ MinGW-builds] * [http://www.drangon.org/mirror.fcgi?num=3&fname=mingw_dgn_lib-w64-bin-x86_64-20140518.7z mingw devel library] or [http://sourceforge.net/projects/mingw-w64-dgn/ mingw-w64-dgn at sourceforge] missing packages in OSGeo4W-64bit * `libintl` * `tcltk` * `freetype-mingw` * `libcairo` == Hints == == Startup errors after installation == See here: http://grass.osgeo.org/wiki/WinGRASS_errors == See also == * [http://trac.osgeo.org/osgeo4w/wiki/pkg-grass GRASS package page in OSGeo4W] (including [http://trac.osgeo.org/osgeo4w/wiki/pkg-grass#PackagerNotes packaging notes]) * [wiki:BuildingOnWindows Develop your own GRASS modules on MS-Windows] * http://wiki.qgis.org/qgiswiki/BuildingFromSource by QGIS Team * http://www.webalice.it/marco.pasetti/grass/BuildFromSource.html by Marco Pasetti * http://www.webalice.it/marco.pasetti/qgis+grass/BuildFromSource.html by Marco Pasetti * Besides Cygwin and MinGW there is another along similar lines called "som" or "gow" or something? == Errata == * see also [http://trac.osgeo.org/osgeo4w/wiki/pkg-grass#Errata OSGeo4W pkg-grass buglist] * Some anti-virus software seem to think that the ''r.out.png.exe'' module (etc.) is a sneaky attempt to fool you into thinking it's an image instead of what it really is: a program which exports a PNG file. ''g.version'' is also reported to set them off. You'll have to bypass these over-zealous warnings as appropriate. * Large File support ("LFS", >2GiB) is currently not supported for 32bit versions of Windows. A 64bit build of GRASS (or more accurately a build of the support libraries needed to build 64bit GRASS) is still in development. === Open Tickets === '''winGRASS 6:''' [[TicketQuery(status=new|assigned|reopened&keywords~=wingrass&milestone=!7.0.0)]] '''winGRASS 7:''' [[TicketQuery(status=new|assigned|reopened&keywords~=wingrass&milestone=7.0.0)]] === Closed Tickets === [[TicketQuery(status=closed&keywords~=wingrass)]]