@@ -10,6 +10,7 @@ INCLUDE_DIRECTORIES(
10
10
${GDAL_INCLUDE_DIR}
11
11
${PROJ_INCLUDE_DIR}
12
12
${GEOS_INCLUDE_DIR}
13
+ ${CMAKE_CURRENT_BINARY_DIR}
13
14
)
14
15
15
16
#
@@ -53,9 +54,9 @@ ENDIF (APPLE)
53
54
# Fake GRASS gis library
54
55
#
55
56
56
- # Generate functions mapping for funcions used in original version
57
+ # Generate function mapping for functions used in original version
57
58
# Create list of functions to be mapped
58
- SET ( FUNCTIONS
59
+ SET ( FUNCTIONS
59
60
"G_add_color_rule"
60
61
"G_adjust_Cell_head"
61
62
"G_align_window"
@@ -120,27 +121,37 @@ FILE(READ "${GRASS_INCLUDE_DIR}/grass/gisdefs.h" HEADER_FILE)
120
121
# Function definitions in gisdefs.h may spread over more lines -> remove comments
121
122
# and split by ';'
122
123
# Remove comments and directives (some macros are lost)
123
- STRING (REGEX REPLACE "(/\\ *([^*]|[\r\n ]|(\\ *+([^*/]|[\r\n ])))*\\ *+/)" "" HEADER_FILE "${HEADER_FILE} " )
124
+ STRING (REGEX REPLACE "(/\\ *([^*]|[\r\n ]|(\\ *+([^*/]|[\r\n ])))*\\ *+/)" "" HEADER_FILE "${HEADER_FILE} " )
124
125
STRING (REGEX REPLACE "#[^\r\n ]*" "" HEADER_FILE "${HEADER_FILE} " )
125
126
127
+ SET ( PROTOTYPES "// Auto generated by cmake, do not edit\n " )
128
+ LIST ( APPEND PROTOTYPES "#define GRASS_GISDEFS_H\n " )
129
+ LIST ( APPEND PROTOTYPES "extern \" C\"\n " )
130
+ LIST ( APPEND PROTOTYPES "{\n " )
131
+ LIST ( APPEND PROTOTYPES "#include <grass/gis.h>\n " )
132
+ LIST ( APPEND PROTOTYPES "}\n " )
133
+ LIST ( APPEND PROTOTYPES "int GRASS_LIB_EXPORT G_set_error_routine(int (*)(const char *, int))\;\n " )
134
+
126
135
SET ( FUNCTIONS_MAP "// Auto generated by cmake, do not edit\n " )
136
+ LIST ( APPEND FUNCTIONS_MAP "#include \" qgsgrassgislibfunctions.h\"\n " )
127
137
LIST ( APPEND FUNCTIONS_MAP "#include \" qgsgrassgislib.h\"\n " )
128
138
LIST ( APPEND FUNCTIONS_MAP "#include \" qgslogger.h\"\n " )
129
139
LIST ( APPEND FUNCTIONS_MAP "#include \" qgis.h\"\n " )
140
+
130
141
FOREACH ( ROW ${HEADER_FILE} )
131
142
STRING (REGEX REPLACE "\n " " " ROW "${ROW} " )
132
143
STRING (REGEX REPLACE "__attribute__.*" "" ROW "${ROW} " )
133
- #MESSAGE (STATUS, "ROW: ${ROW}")
144
+ #MESSAGE (STATUS, "ROW: ${ROW}")
134
145
# Parse function declaration
135
146
STRING ( REGEX REPLACE ".*(G_[^\\ (]*)\\ (.*" "\\ 1" FUNCTION_NAME "${ROW} " )
136
- FOREACH ( FN ${FUNCTIONS} )
137
- IF ( "${FN} " STREQUAL "${FUNCTION_NAME} " )
147
+ FOREACH ( FN ${FUNCTIONS} )
148
+ IF ( "${FN} " STREQUAL "${FUNCTION_NAME} " )
138
149
LIST ( APPEND FUNCTIONS_MAP "// ${ROW} \n " )
139
150
# \\*? and \\** patterns do not work, why?
140
- STRING ( REGEX REPLACE "(.*)G_.*" "\\ 1" FUNCTION_TYPE "${ROW} " )
151
+ STRING ( REGEX REPLACE "^[ \t ]* (.*)G_.*" "\\ 1" FUNCTION_TYPE "${ROW} " )
141
152
STRING ( REGEX REPLACE "\\ *" "" FUNCTION_TYPE "${FUNCTION_TYPE} " )
142
153
STRING ( REGEX REPLACE ".*(\\ *+) *G_.*" "\\ 1" POINTER "${ROW} " )
143
- IF ( NOT "${POINTER} " STREQUAL "*" )
154
+ IF ( NOT "${POINTER} " STREQUAL "*" )
144
155
SET ( POINTER "" )
145
156
ENDIF ( NOT "${POINTER} " STREQUAL "*" )
146
157
STRING ( REGEX REPLACE ".*G_[^\\ (]*\\ ((.*)\\ ).*" "\\ 1" PARAM_TYPES "${ROW} " )
@@ -162,16 +173,18 @@ FOREACH( ROW ${HEADER_FILE} )
162
173
# Declare function type
163
174
LIST ( APPEND FUNCTIONS_MAP "typedef ${FUNCTION_TYPE} ${POINTER} ${FUNCTION_NAME} _type(${PARAM_TYPES} )\;\n\n " )
164
175
LIST ( APPEND FUNCTIONS_MAP "${FUNCTION_TYPE} GRASS_LIB_EXPORT ${POINTER} ${FUNCTION_NAME} ( ${PARAMS} ) {\n " )
176
+ LIST ( APPEND PROTOTYPES "${FUNCTION_TYPE} GRASS_LIB_EXPORT ${POINTER} ${FUNCTION_NAME} ( ${PARAM_TYPES} )\;\n " )
165
177
#LIST ( APPEND FUNCTIONS_MAP " QgsDebugMsg( \"Entered\" )\;\n" )
166
-
178
+
167
179
LIST ( APPEND FUNCTIONS_MAP " ${FUNCTION_NAME} _type* fn = (${FUNCTION_NAME} _type*) cast_to_fptr (QgsGrassGisLib::instance()->resolve( \" ${FUNCTION_NAME} \" ))\;\n " )
168
180
LIST ( APPEND FUNCTIONS_MAP " return fn( ${PARAM_NAMES} )\;\n " )
169
181
LIST ( APPEND FUNCTIONS_MAP "}\n\n " )
170
- ENDIF ( "${FN} " STREQUAL "${FUNCTION_NAME} " )
182
+ ENDIF ( "${FN} " STREQUAL "${FUNCTION_NAME} " )
171
183
ENDFOREACH ( FN )
172
184
ENDFOREACH ( ROW )
173
185
174
186
FILE (WRITE "${CMAKE_CURRENT_BINARY_DIR} /qgsgrassgislibfunctions.cpp" ${FUNCTIONS_MAP} )
187
+ FILE (WRITE "${CMAKE_CURRENT_BINARY_DIR} /qgsgrassgislibfunctions.h" ${PROTOTYPES} )
175
188
176
189
177
190
# Build fake library
@@ -258,7 +271,7 @@ INSTALL(TARGETS qgisgrass
258
271
INSTALL (TARGETS ${FAKE_LIB_GRASS_GIS}
259
272
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
260
273
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR} )
261
-
274
+
262
275
INSTALL (TARGETS grassprovider
263
276
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
264
277
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR} )
@@ -268,6 +281,7 @@ INSTALL(TARGETS grassrasterprovider
268
281
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR} )
269
282
270
283
INSTALL (TARGETS qgis.d.rast qgis.g.info
271
- RUNTIME DESTINATION ${QGIS_LIBEXEC_DIR} /grass/modules
272
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
284
+ RUNTIME DESTINATION ${QGIS_LIBEXEC_DIR} /grass/modules
285
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
273
286
)
287
+
0 commit comments