| #******************************************************************************* |
| # Copyright (c) 2011 Profactor GmbH and ACIN |
| # This program and the accompanying materials are made available under the |
| # terms of the Eclipse Public License 2.0 which is available at |
| # http://www.eclipse.org/legal/epl-2.0. |
| # |
| # SPDX-License-Identifier: EPL-2.0 |
| # |
| # Contributors: |
| # Gerhard Ebenhofer and Ingo Hegny - initial API and implementation and/or initial documentation |
| # *******************************************************************************/ |
| |
| MESSAGE("Generate Initfunction") |
| MESSAGE("Source Dir: ${FORTE_SOURCE_DIR}") |
| MESSAGE("Binary Dir: ${FORTE_BINARY_DIR}") |
| FILE(STRINGS ${CMAKE_BINARY_DIR}/../file_list.txt FILE_NAMES) |
| |
| ####################################################################################### |
| # Create Forte-Executeable with all Functionblocks |
| ####################################################################################### |
| |
| FOREACH(FILE_NAME ${FILE_NAMES}) |
| # Do not parse typelib, as it holds the definitions |
| STRING(REGEX MATCH ".*typelib\\.(cpp|h).*" REGEX_STRINGS ${FILE_NAME}) |
| IF(NOT REGEX_STRINGS) |
| STRING(REGEX MATCH ".*forteinit\\.(cpp|h).*" REGEX_STRINGS ${FILE_NAME}) |
| ENDIF(NOT REGEX_STRINGS) |
| IF(NOT REGEX_STRINGS) |
| STRING(REGEX MATCH ".*stringlist\\.(cpp|h).*" REGEX_STRINGS ${FILE_NAME}) |
| ENDIF(NOT REGEX_STRINGS) |
| IF(NOT REGEX_STRINGS) |
| STRING(REGEX MATCH ".*startuphook\\.(cpp|h).*" REGEX_STRINGS ${FILE_NAME}) |
| ENDIF(NOT REGEX_STRINGS) |
| |
| IF(NOT REGEX_STRINGS) |
| FILE(READ ${FILE_NAME} FILE_CONTENT) |
| STRING(REGEX MATCHALL "DEFINE_FIRMWARE_DATATYPE\\(([A-Za-z0-9_]*)" REGEX_STRINGS ${FILE_CONTENT}) |
| IF(REGEX_STRINGS) |
| string(LENGTH ${FILE_NAME} len) |
| math(EXPR len ${len}-4) |
| string(SUBSTRING ${FILE_NAME} 0 ${len} OUTSTR) |
| list(APPEND datatypeIncludeStringBuf ${OUTSTR}) |
| FOREACH(STR ${REGEX_STRINGS}) |
| string(LENGTH ${STR} len) |
| math(EXPR len ${len}-25) |
| string(SUBSTRING ${STR} 25 ${len} OUTSTR) |
| list(APPEND datatypeFunctionStringBuf ${OUTSTR}) |
| ENDFOREACH(STR) |
| ENDIF(REGEX_STRINGS) |
| STRING(REGEX MATCHALL "DEFINE_FIRMWARE_FB\\(([A-Za-z0-9_]*)" REGEX_STRINGS ${FILE_CONTENT}) |
| IF(REGEX_STRINGS) |
| string(LENGTH ${FILE_NAME} len) |
| math(EXPR len ${len}-4) |
| string(SUBSTRING ${FILE_NAME} 0 ${len} OUTSTR) |
| list(APPEND fbIncludeStringBuf ${OUTSTR}) |
| FOREACH(STR ${REGEX_STRINGS}) |
| string(LENGTH ${STR} len) |
| math(EXPR len ${len}-19) |
| string(SUBSTRING ${STR} 19 ${len} OUTSTR) |
| list(APPEND fbFunctionStringBuf ${OUTSTR}) |
| ENDFOREACH(STR) |
| ENDIF(REGEX_STRINGS) |
| STRING(REGEX MATCHALL "DEFINE_GENERIC_FIRMWARE_FB\\(([A-Za-z0-9_]*)" REGEX_STRINGS ${FILE_CONTENT}) |
| IF(REGEX_STRINGS) |
| string(LENGTH ${FILE_NAME} len) |
| math(EXPR len ${len}-4) |
| string(SUBSTRING ${FILE_NAME} 0 ${len} OUTSTR) |
| list(APPEND fbIncludeStringBuf ${OUTSTR}) |
| FOREACH(STR ${REGEX_STRINGS}) |
| string(LENGTH ${STR} len) |
| math(EXPR len ${len}-27) |
| string(SUBSTRING ${STR} 27 ${len} OUTSTR) |
| list(APPEND fbFunctionStringBuf ${OUTSTR}) |
| ENDFOREACH(STR) |
| ENDIF(REGEX_STRINGS) |
| STRING(REGEX MATCHALL "DEFINE_ADAPTER_TYPE\\(([A-Za-z0-9_]*)" REGEX_STRINGS ${FILE_CONTENT}) |
| IF(REGEX_STRINGS) |
| string(LENGTH ${FILE_NAME} len) |
| math(EXPR len ${len}-4) |
| string(SUBSTRING ${FILE_NAME} 0 ${len} OUTSTR) |
| list(APPEND fbIncludeStringBuf ${OUTSTR}) |
| FOREACH(STR ${REGEX_STRINGS}) |
| string(LENGTH ${STR} len) |
| math(EXPR len ${len}-20) |
| string(SUBSTRING ${STR} 20 ${len} OUTSTR) |
| list(APPEND fbFunctionStringBuf ${OUTSTR}) |
| ENDFOREACH(STR) |
| ENDIF(REGEX_STRINGS) |
| ENDIF(NOT REGEX_STRINGS) |
| ENDFOREACH(FILE_NAME) |
| |
| list(SORT datatypeFunctionStringBuf) |
| list(REMOVE_DUPLICATES datatypeFunctionStringBuf) |
| SET(DATATYPE_FUNCTION_STRING "") |
| FOREACH(STR ${datatypeFunctionStringBuf}) |
| SET(DATATYPE_FUNCTION_STRING "${DATATYPE_FUNCTION_STRING} CIEC_${STR}::dummyInit();\n") |
| ENDFOREACH(STR) |
| |
| list(SORT datatypeIncludeStringBuf) |
| list(REMOVE_DUPLICATES datatypeIncludeStringBuf) |
| SET(DATATYPE_INCLUDE_STRING "") |
| FOREACH(STR ${datatypeIncludeStringBuf}) |
| SET(DATATYPE_INCLUDE_STRING "${DATATYPE_INCLUDE_STRING}#include <${STR}.h>\n") |
| ENDFOREACH(STR) |
| |
| list(SORT fbFunctionStringBuf) |
| list(REMOVE_DUPLICATES fbFunctionStringBuf) |
| SET(FB_FUNCTION_STRING "") |
| FOREACH(STR ${fbFunctionStringBuf}) |
| SET(FB_FUNCTION_STRING "${FB_FUNCTION_STRING} ${STR}::dummyInit();\n") |
| ENDFOREACH(STR) |
| |
| list(SORT fbIncludeStringBuf) |
| list(REMOVE_DUPLICATES fbIncludeStringBuf) |
| SET(FB_INCLUDE_STRING "") |
| FOREACH(STR ${fbIncludeStringBuf}) |
| SET(FB_INCLUDE_STRING "${FB_INCLUDE_STRING}#include <${STR}.h>\n") |
| ENDFOREACH(STR) |
| |
| CONFIGURE_FILE(${FORTE_SOURCE_DIR}/src/forteinit.cpp.in ${FORTE_BINARY_DIR}/forteinit_new.cpp) |
| CONFIGURE_FILE(${FORTE_SOURCE_DIR}/src/forteinit.h.in ${FORTE_BINARY_DIR}/forteinit_new.h) |
| |
| # only copy files if different |
| execute_process( COMMAND ${CMAKE_COMMAND} -E compare_files ${FORTE_BINARY_DIR}/forteinit_new.cpp ${FORTE_BINARY_DIR}/forteinit.cpp RESULT_VARIABLE test_not_successful_cpp OUTPUT_QUIET ERROR_QUIET ) |
| execute_process( COMMAND ${CMAKE_COMMAND} -E compare_files ${FORTE_BINARY_DIR}/forteinit_new.h ${FORTE_BINARY_DIR}/forteinit.h RESULT_VARIABLE test_not_successful_h OUTPUT_QUIET ERROR_QUIET ) |
| |
| IF(test_not_successful_cpp) |
| file(REMOVE ${FORTE_BINARY_DIR}/forteinit.cpp) |
| file(RENAME ${FORTE_BINARY_DIR}/forteinit_new.cpp ${FORTE_BINARY_DIR}/forteinit.cpp) |
| ENDIF(test_not_successful_cpp) |
| |
| IF(test_not_successful_h) |
| file(REMOVE ${FORTE_BINARY_DIR}/forteinit.h) |
| file(RENAME ${FORTE_BINARY_DIR}/forteinit_new.h ${FORTE_BINARY_DIR}/forteinit.h) |
| ENDIF(test_not_successful_h) |
| |
| file(REMOVE ${FORTE_BINARY_DIR}/forteinit_new.cpp) |
| file(REMOVE ${FORTE_BINARY_DIR}/forteinit_new.h) |