@@ -144,29 +144,40 @@ endmacro()
144
144
# =============================================================================
145
145
# Run nocmodl to convert NMODL to C
146
146
# =============================================================================
147
- macro (nocmodl_mod_to_cpp modfile_basename)
147
+ macro (nocmodl_mod_to_cpp modfile_basename modfile_compat )
148
148
set (NOCMODL_SED_EXPR "s/_reg()/_reg_()/" )
149
149
if (NOT MSVC )
150
150
set (NOCMODL_SED_EXPR "'${NOCMODL_SED_EXPR} '" )
151
151
endif ()
152
- set (REMOVE_CMAKE_COMMAND "rm" )
153
- if (CMAKE_VERSION VERSION_LESS "3.17" )
154
- set (REMOVE_CMAKE_COMMAND "remove" )
152
+ set (MODFILE_INPUT_PATH "${PROJECT_SOURCE_DIR} /${modfile_basename} .mod" )
153
+ set (MODFILE_OUTPUT_PATH "${PROJECT_BINARY_DIR} /${modfile_basename} .mod" )
154
+
155
+ # for coreNEURON only
156
+ if (modfile_compat)
157
+ file (READ "${MODFILE_INPUT_PATH} " FILE_CONTENT)
158
+ string (REGEX REPLACE " GLOBAL minf" " RANGE minf" FILE_CONTENT "${FILE_CONTENT} " )
159
+ file (WRITE "${MODFILE_OUTPUT_PATH} " "${FILE_CONTENT} " )
160
+ else ()
161
+ configure_file ("${MODFILE_INPUT_PATH} " "${MODFILE_OUTPUT_PATH} " COPYONLY )
155
162
endif ()
156
- get_filename_component (modfile_output_dir ${PROJECT_SOURCE_DIR} /${modfile_basename} .mod DIRECTORY )
163
+
164
+ get_filename_component (modfile_output_dir "${MODFILE_OUTPUT_PATH} " DIRECTORY )
165
+ get_filename_component (modfile_name "${MODFILE_OUTPUT_PATH} " NAME_WE )
166
+ set (CPPFILE_OUTPUT_PATH "${modfile_output_dir} /${modfile_name} .cpp" )
167
+
157
168
add_custom_command (
158
- OUTPUT ${PROJECT_BINARY_DIR} / ${modfile_basename} .cpp
169
+ OUTPUT ${CPPFILE_OUTPUT_PATH}
159
170
COMMAND
160
171
${CMAKE_COMMAND} -E env "MODLUNIT=${PROJECT_BINARY_DIR} /share/nrn/lib/nrnunits.lib"
161
172
${NRN_NOCMODL_SANITIZER_ENVIRONMENT} $<TARGET_FILE:${NRN_CODEGENERATOR_TARGET} >
162
- ${PROJECT_SOURCE_DIR} /${modfile_basename} .mod ${NRN_NMODL_--neuron} -o ${modfile_output_dir}
163
- COMMAND sed ${NOCMODL_SED_EXPR} ${PROJECT_SOURCE_DIR} /${modfile_basename} .cpp >
164
- ${PROJECT_BINARY_DIR} /${modfile_basename} .cpp
165
- COMMAND ${CMAKE_COMMAND} -E ${REMOVE_CMAKE_COMMAND}
166
- ${PROJECT_SOURCE_DIR} /${modfile_basename} .cpp
167
- DEPENDS ${NRN_CODEGENERATOR_TARGET} ${PROJECT_SOURCE_DIR} /${modfile_basename} .mod
173
+ ${MODFILE_OUTPUT_PATH} ${NRN_NMODL_--neuron} -o ${modfile_output_dir}
174
+ COMMAND sed ${NOCMODL_SED_EXPR} ${CPPFILE_OUTPUT_PATH} > ${CPPFILE_OUTPUT_PATH} .tmp
175
+ COMMAND ${CMAKE_COMMAND} -E copy ${CPPFILE_OUTPUT_PATH} .tmp ${CPPFILE_OUTPUT_PATH}
176
+ COMMAND ${CMAKE_COMMAND} -E remove ${CPPFILE_OUTPUT_PATH} .tmp
177
+ DEPENDS ${NRN_CODEGENERATOR_TARGET} ${MODFILE_INPUT_PATH}
168
178
${PROJECT_BINARY_DIR} /share/nrn/lib/nrnunits.lib
169
179
WORKING_DIRECTORY ${PROJECT_BINARY_DIR} /src/nrniv)
180
+
170
181
endmacro ()
171
182
172
183
# =============================================================================
0 commit comments