Skip to content
Permalink
Browse files

osgeo4w: rely on GRASS' GISBASE environment variable instead of

detecting the path (ie. use the same version for processing as the
version that the grass plugin uses)

(cherry picked from commit 806ae86)
  • Loading branch information
jef-n committed Jan 29, 2019
1 parent e404656 commit f114ad897e3f4304682b2eaf38e7102b404d8edb
Showing with 26 additions and 12 deletions.
  1. +26 −12 python/plugins/processing/algs/grass7/Grass7Utils.py
@@ -133,9 +133,6 @@ def grassBin():
Find GRASS binary path on the operating system.
Sets global variable Grass7Utils.command
"""
cmdList = ["grass76", "grass74", "grass72", "grass70", "grass",
"grass76.sh", "grass74.sh", "grass72.sh", "grass70.sh", "grass.sh"]

def searchFolder(folder):
"""
Inline function to search for grass binaries into a folder
@@ -154,6 +151,24 @@ def searchFolder(folder):
path = Grass7Utils.grassPath()
command = None

vn = os.path.join(path, "etc", "VERSIONNUMBER")
if os.path.isfile(vn):
with open(vn, "r") as f:
major, minor, patch = f.readlines()[0].split(' ')[0].split('.')
if patch != 'svn':
patch = ''
cmdList = [
"grass{}{}{}".format(major, minor, patch),
"grass",
"grass{}{}{}.sh".format(major, minor, patch),
"grass.sh"
]
else:
cmdList = [
"grass76", "grass74", "grass72", "grass70", "grass",
"grass76.sh", "grass74.sh", "grass72.sh", "grass70.sh", "grass.sh"
]

# For MS-Windows there is a difference between GRASS Path and GRASS binary
if isWindows():
# If nothing found, use OSGEO4W or QgsPrefix:
@@ -167,7 +182,7 @@ def searchFolder(folder):
# Search in grassPath
command = searchFolder(path)

# Under GNU/Linux or if everything has failed, use shutil
# If everything has failed, use shutil
if not command:
for cmd in cmdList:
testBin = shutil.which(cmd)
@@ -204,15 +219,14 @@ def grassPath():
if folder is None:
# Under MS-Windows, we use OSGEO4W or QGIS Path for folder
if isWindows():
if "OSGEO4W_ROOT" in os.environ:
testfolder = os.path.join(str(os.environ['OSGEO4W_ROOT']), "apps")
if "GISBASE" in os.environ:
folder = os.environ["GISBASE"]
else:
testfolder = str(QgsApplication.prefixPath())
testfolder = os.path.join(testfolder, 'grass')
if os.path.isdir(testfolder):
grassfolders = sorted([f for f in os.listdir(testfolder) if f.startswith("grass-7.") and os.path.isdir(os.path.join(testfolder, f))], reverse=True, key=lambda x: [int(v) for v in x[len("grass-"):].split('.') if v != 'svn'])
if grassfolders:
folder = os.path.join(testfolder, grassfolders[0])
testfolder = os.path.join(str(QgsApplication.prefixPath()), 'grass')
if os.path.isdir(testfolder):
grassfolders = sorted([f for f in os.listdir(testfolder) if f.startswith("grass-7.") and os.path.isdir(os.path.join(testfolder, f))], reverse=True, key=lambda x: [int(v) for v in x[len("grass-"):].split('.') if v != 'svn'])
if grassfolders:
folder = os.path.join(testfolder, grassfolders[0])
elif isMac():
# For MacOSX, we scan some well-known directories
# Start with QGIS bundle

0 comments on commit f114ad8

Please sign in to comment.
You can’t perform that action at this time.