Skip to content

Commit 60efb82

Browse files
committed
[GRASS] get off_t size
1 parent 8c5f3f8 commit 60efb82

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

cmake/FindGRASS.cmake

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,25 @@ MACRO (CHECK_GRASS G_PREFIX)
6262

6363
# LIB_PATH is only temporary variable, so hide it (is it possible to delete a variable?)
6464
UNSET(LIB_PATH CACHE)
65+
66+
# Find off_t size
67+
IF( (GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} EQUAL 7) AND (GRASS_MINOR_VERSION${GRASS_FIND_VERSION} GREATER 0) )
68+
SET(GRASS_TEST_MAPSET ${CMAKE_BINARY_DIR}/grass-location/PERMANENT)
69+
FILE(MAKE_DIRECTORY ${GRASS_TEST_MAPSET})
70+
FILE(WRITE ${GRASS_TEST_MAPSET}/DEFAULT_WIND "")
71+
FILE(WRITE ${GRASS_TEST_MAPSET}/WIND "")
72+
# grass command is not in G_PREFIX but in some bin dir, so it must be in PATH
73+
SET(GRASS_EXE grass7${GRASS_MINOR_VERSION${GRASS_FIND_VERSION}})
74+
#MESSAGE(STATUS "GRASS_EXE = ${GRASS_EXE}")
75+
EXECUTE_PROCESS(COMMAND ${GRASS_EXE} ${GRASS_TEST_MAPSET} --exec g.version -g
76+
COMMAND grep build_off_t_size
77+
COMMAND sed "s/.*\\([0-9]\\).*/\\1/"
78+
ERROR_VARIABLE GRASS_TMP_ERROR
79+
OUTPUT_VARIABLE GRASS_OFF_T_SIZE${GRASS_FIND_VERSION}
80+
)
81+
STRING(STRIP ${GRASS_OFF_T_SIZE${GRASS_FIND_VERSION}} GRASS_OFF_T_SIZE${GRASS_FIND_VERSION})
82+
#MESSAGE(STATUS "GRASS_OFF_T_SIZE${GRASS_FIND_VERSION} = ${GRASS_OFF_T_SIZE${GRASS_FIND_VERSION}}")
83+
ENDIF( (GRASS_MAJOR_VERSION${GRASS_FIND_VERSION} EQUAL 7) AND (GRASS_MINOR_VERSION${GRASS_FIND_VERSION} GREATER 0) )
6584

6685
IF(GRASS_LIBRARIES_FOUND${GRASS_FIND_VERSION})
6786
SET(GRASS_FOUND${GRASS_FIND_VERSION} TRUE)
@@ -127,7 +146,7 @@ ENDIF (WITH_GRASS${GRASS_CACHE_VERSION})
127146

128147
IF (GRASS_FOUND${GRASS_FIND_VERSION})
129148
IF (NOT GRASS_FIND_QUIETLY)
130-
MESSAGE(STATUS "Found GRASS ${GRASS_FIND_VERSION}: ${GRASS_PREFIX${GRASS_CACHE_VERSION}} (${GRASS_VERSION${GRASS_FIND_VERSION}})")
149+
MESSAGE(STATUS "Found GRASS ${GRASS_FIND_VERSION}: ${GRASS_PREFIX${GRASS_CACHE_VERSION}} (${GRASS_VERSION${GRASS_FIND_VERSION}}, off_t size = ${GRASS_OFF_T_SIZE${GRASS_FIND_VERSION}})")
131150
ENDIF (NOT GRASS_FIND_QUIETLY)
132151

133152
ELSE (GRASS_FOUND${GRASS_FIND_VERSION})

src/providers/grass/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ MACRO(ADD_GRASSLIB GRASS_BUILD_VERSION)
2121
SET(GRASS_PREFIX ${GRASS_PREFIX${GRASS_BUILD_VERSION}})
2222
SET(GRASS_MAJOR_VERSION ${GRASS_MAJOR_VERSION${GRASS_BUILD_VERSION}})
2323
SET(GRASS_MINOR_VERSION ${GRASS_MINOR_VERSION${GRASS_BUILD_VERSION}})
24+
SET(GRASS_OFF_T_SIZE ${GRASS_OFF_T_SIZE${GRASS_BUILD_VERSION}})
2425

2526
QT4_WRAP_CPP(GRASS_LIBRARY_MOC_SRCS
2627
../qgsgrass.h
@@ -64,7 +65,7 @@ MACRO(ADD_GRASSLIB GRASS_BUILD_VERSION)
6465
MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/framework.info.plist.in"
6566
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${COMPLETE_VERSION}
6667
MACOSX_FRAMEWORK_IDENTIFIER org.qgis.qgis2_grass
67-
COMPILE_FLAGS "-DGRASS_BASE=\\\"${GRASS_PREFIX}\\\" \"-DGRASS_LIB_EXPORT=${DLLEXPORT}\" \"-DGRASS_EXPORT=${DLLIMPORT}\""
68+
COMPILE_FLAGS "-DGRASS_BASE=\\\"${GRASS_PREFIX}\\\" \"-DGRASS_LIB_EXPORT=${DLLEXPORT}\" \"-DGRASS_EXPORT=${DLLIMPORT}\" \"-DGRASS_OFF_T_SIZE=${GRASS_OFF_T_SIZE}\""
6869
)
6970

7071
IF (APPLE)

src/providers/grass/qgsgrassprovider.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,13 @@ typedef int Vect_delete_line_function_type( struct Map_info *, int );
8686
#ifdef Q_OS_WIN
8787
typedef qint64 grass_off_t;
8888
#else
89-
typedef off_t grass_off_t;
89+
#if GRASS_OFF_T_SIZE == 4
90+
typedef qint32 grass_off_t;
91+
#elif GRASS_OFF_T_SIZE == 8
92+
typedef qint64 grass_off_t;
93+
#else
94+
typedef off_t grass_off_t; // GRASS_OFF_T_SIZE undefined, default to off_t
95+
#endif
9096
#endif
9197
typedef grass_off_t Vect_rewrite_line_function_type( struct Map_info *, grass_off_t, int, const struct line_pnts *, const struct line_cats * );
9298
typedef int Vect_delete_line_function_type( struct Map_info *, grass_off_t );

0 commit comments

Comments
 (0)