1############################################################################# 2# $Id: CMake.NCBIptb.legacy.cmake 590468 2019-07-30 13:21:57Z gouriano $ 3############################################################################# 4############################################################################# 5## 6## NCBI CMake wrapper extension 7## Adds support of ASNTOOL code generation and "TARGET EXPORT" 8## Author: Andrei Gourianov, gouriano@ncbi 9## 10 11 12############################################################################## 13# asntool app 14if (NOT WIN32) 15 set(NCBI_ASNTOOL $ENV{NCBI}/bin/asntool) 16 set(NCBI_ASNDIR /am/ncbiapdata/asn) 17else() 18 set(NCBI_ASNTOOL //snowman/win-coremake/Lib/Ncbi/C_Toolkit/vs2017.64/c.current/bin/asntool.exe) 19endif() 20 21############################################################################## 22function(NCBI_generate_by_asntool) 23 cmake_parse_arguments(PARSE_ARGV 0 ASNTOOL "LOCAL" "DATASPEC;BASENAME;HEADER" "EXTERNAL;GENFLAGS") 24 25 file(RELATIVE_PATH _rel "${NCBI_SRC_ROOT}" "${NCBI_CURRENT_SOURCE_DIR}") 26 set(_inc_dir ${NCBI_INC_ROOT}/${_rel}) 27 if(IS_ABSOLUTE ${ASNTOOL_DATASPEC}) 28 set(_specpath ${ASNTOOL_DATASPEC}) 29 else() 30 set(_specpath ${NCBI_CURRENT_SOURCE_DIR}/${ASNTOOL_DATASPEC}) 31 endif() 32 get_filename_component(_specname ${_specpath} NAME_WE) 33 get_filename_component(_specext ${_specpath} EXT) 34 set(_dataspec ${_specname}${_specext}) 35 set(_basename ${ASNTOOL_BASENAME}) 36 if (DEFINED ASNTOOL_HEADER) 37 set(_header ${ASNTOOL_HEADER}) 38 else() 39 set(_header ${_specname}.h) 40 endif() 41 set(_externals "") 42 foreach(_module IN LISTS ASNTOOL_EXTERNAL) 43 if (NOT "${_externals}" STREQUAL "") 44 set(_externals "${_externals},") 45 endif() 46 if(EXISTS ${NCBI_CURRENT_SOURCE_DIR}/${_module} OR IS_ABSOLUTE ${_module}) 47 set(_externals "${_externals}${_module}") 48 else() 49 set(_externals "${_externals}${NCBI_ASNDIR}/${_module}") 50 endif() 51 endforeach() 52 if (NOT "${_externals}" STREQUAL "") 53 set(_externals -M ${_externals}) 54 endif() 55 if (ASNTOOL_LOCAL) 56 add_custom_command( 57 OUTPUT ${NCBI_CURRENT_SOURCE_DIR}/${_basename}.c ${NCBI_CURRENT_SOURCE_DIR}/${_basename}.h ${NCBI_CURRENT_SOURCE_DIR}/${_header} 58 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_specpath} ${NCBI_CURRENT_SOURCE_DIR} 59 COMMAND ${NCBI_ASNTOOL} -w 100 -m ${_dataspec} -o ${_header} 60 COMMAND ${NCBI_ASNTOOL} -w 100 -G -m ${_dataspec} -B ${_basename} ${_externals} -K ${_header} ${ASNTOOL_GENFLAGS} 61 WORKING_DIRECTORY ${NCBI_CURRENT_SOURCE_DIR} 62 COMMENT "Generate C object loader from ${_dataspec}" 63 DEPENDS ${_specpath} 64 ) 65 else() 66 add_custom_command( 67 OUTPUT ${NCBI_CURRENT_SOURCE_DIR}/${_basename}.c ${_inc_dir}/${_basename}.h ${_inc_dir}/${_header} 68 COMMAND ${CMAKE_COMMAND} -E make_directory ${_inc_dir} 69 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_specpath} ${NCBI_CURRENT_SOURCE_DIR} 70 COMMAND ${NCBI_ASNTOOL} -w 100 -m ${_dataspec} -o ${_inc_dir}/${_header} 71 COMMAND ${NCBI_ASNTOOL} -w 100 -G -m ${_dataspec} -B ${_basename} ${_externals} -K ${_header} ${ASNTOOL_GENFLAGS} 72 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_basename}.h ${_inc_dir} 73 COMMAND ${CMAKE_COMMAND} -E remove -f ${_basename}.h 74 WORKING_DIRECTORY ${NCBI_CURRENT_SOURCE_DIR} 75 COMMENT "Generate C object loader from ${_dataspec}" 76 DEPENDS ${_specpath} 77 ) 78 endif() 79endfunction() 80 81############################################################################## 82function(NCBI_target_export) 83 cmake_parse_arguments(PARSE_ARGV 0 EXPORT "" "TARGET;DESTINATION" "HEADERS") 84 if(WIN32 OR XCODE) 85 set(_dest ${NCBI_CFGINC_ROOT}/$<CONFIG>/${EXPORT_DESTINATION}) 86 else() 87 set(_dest ${NCBI_CFGINC_ROOT}/${EXPORT_DESTINATION}) 88 endif() 89 file(RELATIVE_PATH _rel "${NCBI_SRC_ROOT}" "${NCBI_CURRENT_SOURCE_DIR}") 90 set(_inc_dir ${NCBI_INC_ROOT}/${_rel}) 91if(OFF) 92 foreach(_header IN LISTS EXPORT_HEADERS) 93 if (EXISTS "${NCBI_CURRENT_SOURCE_DIR}/${_header}") 94 set(_headers ${_headers} ${_header}) 95 else() 96 set(_headers ${_headers} ${_inc_dir}/${_header}) 97 endif() 98 endforeach() 99else() 100 set(_headers ${_headers} ${EXPORT_HEADERS}) 101endif() 102 add_custom_command( 103 TARGET ${EXPORT_TARGET} POST_BUILD 104 COMMAND ${CMAKE_COMMAND} -E make_directory ${_dest} 105 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_headers} ${_dest} 106 WORKING_DIRECTORY ${NCBI_CURRENT_SOURCE_DIR} 107 COMMENT "Exporting ${EXPORT_TARGET} headers into ${NCBI_CFGINC_ROOT}" 108 ) 109endfunction() 110