Skip to content

Commit 7d4eb8b

Browse files
committed
[GRASS] multi version build
1 parent 892f142 commit 7d4eb8b

15 files changed

+451
-369
lines changed

CMakeLists.txt

+18-5
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,24 @@ SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
3535
#SET (CMAKE_USE_RELATIVE_PATHS ON)
3636

3737
# try to configure and build GRASS plugin by default
38-
SET (WITH_GRASS TRUE CACHE BOOL "Determines whether GRASS plugin should be built")
39-
IF (WITH_GRASS)
40-
FIND_PACKAGE(GRASS)
41-
SET (GRASS_PREFIX ${GRASS_PREFIX} CACHE PATH "Path to GRASS base directory")
42-
ENDIF (WITH_GRASS)
38+
FOREACH (GRASS_SEARCH_VERSION 6 7)
39+
# For GRASS 6 are used cached variables without version suffix so that existing caches don't have to be reconfigured.
40+
# Cached variables: WITH_GRASS, WITH_GRASS7, GRASS_PREFIX, GRASS_PREFIX7, GRASS_INCLUDE_DIR, GRASS_INCLUDE_DIR7
41+
# Everywhere else each variable has version major appended.
42+
# Normal variables: GRASS_FOUND6, GRASS_FOUND7, GRASS_MAJOR_VERSION6, GRASS_MAJOR_VERSION7, etc.
43+
# In addition there is also GRASS_FOUND, which is TRUE if at least one version of GRASS was found
44+
IF (GRASS_SEARCH_VERSION EQUAL 6)
45+
SET (GRASS_CACHE_VERSION "")
46+
ELSE (GRASS_SEARCH_VERSION EQUAL 6)
47+
SET (GRASS_CACHE_VERSION ${GRASS_SEARCH_VERSION})
48+
ENDIF (GRASS_SEARCH_VERSION EQUAL 6)
49+
50+
SET (WITH_GRASS${GRASS_CACHE_VERSION} TRUE CACHE BOOL "Determines whether GRASS ${GRASS_SEARCH_VERSION} plugin should be built")
51+
IF (WITH_GRASS${GRASS_CACHE_VERSION})
52+
FIND_PACKAGE(GRASS ${GRASS_SEARCH_VERSION})
53+
SET (GRASS_PREFIX${GRASS_CACHE_VERSION} ${GRASS_PREFIX${GRASS_SEARCH_VERSION}} CACHE PATH "Path to GRASS ${GRASS_SEARCH_VERSION} base directory")
54+
ENDIF (WITH_GRASS${GRASS_CACHE_VERSION})
55+
ENDFOREACH (GRASS_SEARCH_VERSION)
4356

4457
SET (WITH_DESKTOP TRUE CACHE BOOL "Determines whether QGIS desktop should be built")
4558

cmake/FindGRASS.cmake

+95-64
Original file line numberDiff line numberDiff line change
@@ -7,99 +7,130 @@
77
# macro that checks for grass installation in specified directory
88

99
MACRO (CHECK_GRASS G_PREFIX)
10+
#MESSAGE(STATUS "Find GRASS ${GRASS_FIND_VERSION} in ${G_PREFIX}")
1011

11-
FIND_PATH (GRASS_INCLUDE_DIR grass/version.h ${G_PREFIX}/include)
12+
FIND_PATH(GRASS_INCLUDE_DIR${GRASS_CACHE_VERSION} grass/version.h ${G_PREFIX}/include DOC "Path to GRASS ${GRASS_FIND_VERSION} include directory")
1213

13-
IF(GRASS_INCLUDE_DIR)
14-
FILE(READ ${GRASS_INCLUDE_DIR}/grass/version.h VERSIONFILE)
14+
#MESSAGE(STATUS "GRASS_INCLUDE_DIR${GRASS_CACHE_VERSION} = ${GRASS_INCLUDE_DIR${GRASS_CACHE_VERSION}}")
15+
16+
IF(GRASS_INCLUDE_DIR${GRASS_CACHE_VERSION})
17+
FILE(READ ${GRASS_INCLUDE_DIR${GRASS_CACHE_VERSION}}/grass/version.h VERSIONFILE)
1518
# We can avoid the following block using version_less version_equal and
1619
# version_greater. Are there compatibility problems?
17-
STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[^ ]+" GRASS_VERSION ${VERSIONFILE})
18-
STRING(REGEX REPLACE "^([0-9]*)\\.[0-9]*\\..*$" "\\1" GRASS_MAJOR_VERSION ${GRASS_VERSION})
19-
STRING(REGEX REPLACE "^[0-9]*\\.([0-9]*)\\..*$" "\\1" GRASS_MINOR_VERSION ${GRASS_VERSION})
20-
STRING(REGEX REPLACE "^[0-9]*\\.[0-9]*\\.(.*)$" "\\1" GRASS_MICRO_VERSION ${GRASS_VERSION})
20+
STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[^ ]+" GRASS_VERSION${GRASS_FIND_VERSION} ${VERSIONFILE})
21+
STRING(REGEX REPLACE "^([0-9]*)\\.[0-9]*\\..*$" "\\1" GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} ${GRASS_VERSION${GRASS_FIND_VERSION}})
22+
STRING(REGEX REPLACE "^[0-9]*\\.([0-9]*)\\..*$" "\\1" GRASS_MINOR_VERSION${GRASS_FIND_VERSION} ${GRASS_VERSION${GRASS_FIND_VERSION}})
23+
STRING(REGEX REPLACE "^[0-9]*\\.[0-9]*\\.(.*)$" "\\1" GRASS_MICRO_VERSION${GRASS_FIND_VERSION} ${GRASS_VERSION${GRASS_FIND_VERSION}})
2124
# Add micro version too?
2225
# How to numerize RC versions?
23-
MATH( EXPR GRASS_NUM_VERSION "${GRASS_MAJOR_VERSION}*10000 + ${GRASS_MINOR_VERSION}*100")
24-
25-
SET (GRASS_LIBRARIES_FOUND TRUE)
26-
SET (GRASS_LIB_NAMES gis dig2 dbmiclient dbmibase shape dgl rtree datetime linkm gproj)
27-
IF (GRASS_MAJOR_VERSION LESS 7 )
28-
LIST(APPEND GRASS_LIB_NAMES vect)
29-
LIST(APPEND GRASS_LIB_NAMES form)
30-
ELSE (GRASS_MAJOR_VERSION LESS 7 )
31-
LIST(APPEND GRASS_LIB_NAMES vector)
32-
LIST(APPEND GRASS_LIB_NAMES raster)
33-
ENDIF (GRASS_MAJOR_VERSION LESS 7 )
34-
35-
FOREACH (LIB ${GRASS_LIB_NAMES})
36-
MARK_AS_ADVANCED ( GRASS_LIBRARY_${LIB} )
37-
38-
SET(LIB_PATH NOTFOUND)
39-
FIND_LIBRARY(LIB_PATH NAMES grass_${LIB} PATHS ${G_PREFIX}/lib NO_DEFAULT_PATH)
40-
41-
IF (LIB_PATH)
42-
SET (GRASS_LIBRARY_${LIB} ${LIB_PATH})
43-
ELSE (LIB_PATH)
44-
SET (GRASS_LIBRARY_${LIB} NOTFOUND)
45-
SET (GRASS_LIBRARIES_FOUND FALSE)
46-
ENDIF (LIB_PATH)
47-
ENDFOREACH (LIB)
48-
49-
# LIB_PATH is only temporary variable, so hide it (is it possible to delete a variable?)
50-
UNSET(LIB_PATH CACHE)
51-
52-
IF (GRASS_LIBRARIES_FOUND)
53-
SET (GRASS_FOUND TRUE)
54-
SET (GRASS_PREFIX ${G_PREFIX})
55-
ENDIF (GRASS_LIBRARIES_FOUND)
56-
ENDIF( GRASS_INCLUDE_DIR )
57-
58-
MARK_AS_ADVANCED ( GRASS_INCLUDE_DIR )
26+
MATH( EXPR GRASS_NUM_VERSION${GRASS_FIND_VERSION} "${GRASS_MAJOR_VERSION${GRASS_FIND_VERSION}}*10000 + ${GRASS_MINOR_VERSION${GRASS_FIND_VERSION}}*100")
27+
28+
#MESSAGE(STATUS "GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} = ${GRASS_MAJOR_VERSION${GRASS_FIND_VERSION}}")
29+
IF(GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} EQUAL GRASS_FIND_VERSION)
30+
SET(GRASS_LIBRARIES_FOUND${GRASS_FIND_VERSION} TRUE)
31+
SET(GRASS_LIB_NAMES${GRASS_FIND_VERSION} gis dig2 dbmiclient dbmibase shape dgl rtree datetime linkm gproj)
32+
IF(GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} LESS 7 )
33+
LIST(APPEND GRASS_LIB_NAMES${GRASS_FIND_VERSION} vect)
34+
LIST(APPEND GRASS_LIB_NAMES${GRASS_FIND_VERSION} form)
35+
ELSE(GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} LESS 7 )
36+
LIST(APPEND GRASS_LIB_NAMES${GRASS_FIND_VERSION} vector)
37+
LIST(APPEND GRASS_LIB_NAMES${GRASS_FIND_VERSION} raster)
38+
ENDIF(GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} LESS 7 )
39+
40+
FOREACH(LIB ${GRASS_LIB_NAMES${GRASS_FIND_VERSION}})
41+
MARK_AS_ADVANCED ( GRASS_LIBRARY${GRASS_FIND_VERSION}_${LIB} )
42+
43+
SET(LIB_PATH NOTFOUND)
44+
FIND_LIBRARY(LIB_PATH NAMES grass_${LIB} PATHS ${G_PREFIX}/lib NO_DEFAULT_PATH)
45+
46+
IF(LIB_PATH)
47+
SET(GRASS_LIBRARY${GRASS_FIND_VERSION}_${LIB} ${LIB_PATH})
48+
ELSE(LIB_PATH)
49+
SET(GRASS_LIBRARY${GRASS_FIND_VERSION}_${LIB} NOTFOUND)
50+
SET(GRASS_LIBRARIES_FOUND${GRASS_FIND_VERSION} FALSE)
51+
ENDIF (LIB_PATH)
52+
ENDFOREACH(LIB)
53+
54+
# LIB_PATH is only temporary variable, so hide it (is it possible to delete a variable?)
55+
UNSET(LIB_PATH CACHE)
56+
57+
IF(GRASS_LIBRARIES_FOUND${GRASS_FIND_VERSION})
58+
SET(GRASS_FOUND${GRASS_FIND_VERSION} TRUE)
59+
SET(GRASS_FOUND TRUE) # GRASS_FOUND is true if at least one version was found
60+
SET(GRASS_PREFIX${GRASS_CACHE_VERSION} ${G_PREFIX})
61+
IF(GRASS_FIND_VERSION EQUAL 6)
62+
# Set also normal variable with number
63+
SET(GRASS_INCLUDE_DIR${GRASS_FIND_VERSION} ${GRASS_INCLUDE_DIR${GRASS_CACHE_VERSION}})
64+
SET(GRASS_PREFIX${GRASS_FIND_VERSION} ${G_PREFIX})
65+
ENDIF(GRASS_FIND_VERSION EQUAL 6)
66+
ENDIF(GRASS_LIBRARIES_FOUND${GRASS_FIND_VERSION})
67+
ENDIF(GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} EQUAL GRASS_FIND_VERSION)
68+
ENDIF(GRASS_INCLUDE_DIR${GRASS_CACHE_VERSION})
69+
70+
MARK_AS_ADVANCED ( GRASS_INCLUDE_DIR${GRASS_CACHE_VERSION} )
5971
ENDMACRO (CHECK_GRASS)
6072

6173
###################################
6274
# search for grass installations
6375

76+
#MESSAGE(STATUS "GRASS_FIND_VERSION = ${GRASS_FIND_VERSION}")
77+
6478
# list of paths which to search - user's choice as first
65-
SET (GRASS_PATHS ${GRASS_PREFIX} /usr/lib/grass /usr/lib64/grass64 /usr/lib/grass64 c:/msys/local /opt/grass $ENV{GRASS_PREFIX})
79+
SET (GRASS_PATHS ${GRASS_PREFIX${GRASS_CACHE_VERSION}} /usr/lib/grass /opt/grass $ENV{GRASS_PREFIX${GRASS_CACHE_VERSION}})
80+
81+
# os specific paths
82+
IF (WIN32)
83+
LIST(APPEND GRASS_PATHS c:/msys/local)
84+
ENDIF (WIN32)
85+
86+
IF (UNIX)
87+
IF (GRASS_FIND_VERSION EQUAL 6)
88+
LIST(APPEND GRASS_PATHS /usr/lib64/grass64 /usr/lib/grass64)
89+
ELSEIF (GRASS_FIND_VERSION EQUAL 7)
90+
LIST(APPEND GRASS_PATHS /usr/lib64/grass70 /usr/lib/grass70 /usr/lib64/grass71 /usr/lib/grass71)
91+
ENDIF ()
92+
ENDIF (UNIX)
6693

67-
# mac-specific path
6894
IF (APPLE)
69-
SET (GRASS_PATHS ${GRASS_PATHS}
70-
/Applications/GRASS-6.3.app/Contents/MacOS
71-
/Applications/GRASS-6.4.app/Contents/MacOS
72-
/Applications/GRASS.app/Contents/Resources
73-
)
95+
IF (GRASS_FIND_VERSION EQUAL 6)
96+
LIST(APPEND GRASS_PATHS
97+
/Applications/GRASS-6.3.app/Contents/MacOS
98+
/Applications/GRASS-6.4.app/Contents/MacOS
99+
)
100+
ELSEIF (GRASS_FIND_VERSION EQUAL 7)
101+
LIST(APPEND GRASS_PATHS
102+
/Applications/GRASS-7.0.app/Contents/MacOS
103+
/Applications/GRASS-7.1.app/Contents/MacOS
104+
)
105+
ENDIF ()
106+
LIST(APPEND GRASS_PATHS /Applications/GRASS.app/Contents/Resources)
74107
ENDIF (APPLE)
75108

76-
IF (WITH_GRASS)
77-
109+
IF (WITH_GRASS${GRASS_CACHE_VERSION})
78110
FOREACH (G_PREFIX ${GRASS_PATHS})
79-
IF (NOT GRASS_FOUND)
111+
IF (NOT GRASS_FOUND${GRASS_FIND_VERSION})
80112
CHECK_GRASS(${G_PREFIX})
81-
ENDIF (NOT GRASS_FOUND)
113+
ENDIF (NOT GRASS_FOUND${GRASS_FIND_VERSION})
82114
ENDFOREACH (G_PREFIX)
83-
84-
ENDIF (WITH_GRASS)
115+
ENDIF (WITH_GRASS${GRASS_CACHE_VERSION})
85116

86117
###################################
87118

88-
IF (GRASS_FOUND)
119+
IF (GRASS_FOUND${GRASS_FIND_VERSION})
89120
IF (NOT GRASS_FIND_QUIETLY)
90-
MESSAGE(STATUS "Found GRASS: ${GRASS_PREFIX} (${GRASS_VERSION})")
121+
MESSAGE(STATUS "Found GRASS ${GRASS_FIND_VERSION}: ${GRASS_PREFIX${GRASS_CACHE_VERSION}} (${GRASS_VERSION${GRASS_FIND_VERSION}})")
91122
ENDIF (NOT GRASS_FIND_QUIETLY)
92123

93-
ELSE (GRASS_FOUND)
124+
ELSE (GRASS_FOUND${GRASS_FIND_VERSION})
94125

95-
IF (WITH_GRASS)
126+
IF (WITH_GRASS${GRASS_CACHE_VERSION})
96127

97128
IF (GRASS_FIND_REQUIRED)
98-
MESSAGE(FATAL_ERROR "Could not find GRASS")
129+
MESSAGE(FATAL_ERROR "Could not find GRASS ${GRASS_FIND_VERSION}")
99130
ELSE (GRASS_FIND_REQUIRED)
100-
MESSAGE(STATUS "Could not find GRASS")
131+
MESSAGE(STATUS "Could not find GRASS ${GRASS_FIND_VERSION}")
101132
ENDIF (GRASS_FIND_REQUIRED)
102133

103-
ENDIF (WITH_GRASS)
134+
ENDIF (WITH_GRASS${GRASS_CACHE_VERSION})
104135

105-
ENDIF (GRASS_FOUND)
136+
ENDIF (GRASS_FOUND${GRASS_FIND_VERSION})

src/plugins/CMakeLists.txt

+1-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ IF (POSTGRES_FOUND)
2222
ENDIF (POSTGRES_FOUND)
2323

2424
IF (GRASS_FOUND)
25-
IF (GRASS_MAJOR_VERSION LESS 7 )
26-
ADD_SUBDIRECTORY(grass)
27-
ENDIF (GRASS_MAJOR_VERSION LESS 7 )
25+
ADD_SUBDIRECTORY(grass)
2826
ENDIF (GRASS_FOUND)
2927

3028
IF (WITH_GLOBE)

0 commit comments

Comments
 (0)