blob: 47a9da4b2ff8adbc47f582adde97d89b01fe25ca [file] [log] [blame]
# This function is a reimplementation of godeps.sh in cmake.
#
# TODO: remove this, it is no longer used. In practice this winds up
# creating a giant amount of output/clutter when using cmake --trace,
# and doesn't seem to really offer a lot of other advantages.
function(godeps_in_cmake pack)
set(deps)
foreach( src ${ARGV})
set(impblock 0)
file(STRINGS ${src} lines)
foreach( line ${lines})
# Within an import block:
if(impblock)
string(REGEX MATCH "^\\)" endblock ${line})
if(endblock)
set(impblock 0)
break()
endif()
string(REGEX MATCH "^[ \t]*[A-Za-z0-9_\.]*[ \t]*\"([^\"]+)\".*"
imp ${line})
if(imp)
list(APPEND deps "${CMAKE_MATCH_1}.gox")
endif()
continue()
endif()
# Single import outside of an import block.
string(REGEX MATCH "^import[ \t]*[A-Za-z0-9_\.]*[ \t]*\"([^\"]+)\"" imp ${line})
if(imp)
list(APPEND deps "${CMAKE_MATCH_1}.gox")
continue()
endif()
# Start of import block
string(REGEX MATCH "^import[ \t]+\\\(" beginblock ${line})
if(beginblock)
set(impblock 1)
continue()
endif()
endforeach()
if(deps)
list(SORT deps)
list(REMOVE_DUPLICATES deps)
endif()
endforeach()
# Prune out "unsafe"
list(FIND deps "unsafe.gox" hasun)
if( hasun GREATER -1)
list(REMOVE_ITEM deps "unsafe.gox")
endif()
# Done
set(packdeps ${deps} PARENT_SCOPE)
endfunction()
# This version runs the godeps.sh shell script and captures the
# resulting output. Return value is in the variable 'packdeps'
# in the parent scope.
# Unnamed parameters:
#
# * Package path, e.g. "bufio" or "container/heap".
# * Script root (where to find godeps.sh)
#
# Named parameters:
#
# SOURCES Full paths of go source files in this package.
function(godeps pack libgo_scriptroot)
CMAKE_PARSE_ARGUMENTS(ARG "" "" "SOURCES" ${ARGN})
set(godepsdotsh "${libgo_scriptroot}/godeps.sh")
set(capturesh "${CMAKE_CURRENT_SOURCE_DIR}/capturescript.sh")
string(REPLACE "/" "_" ptarget "${pack}")
set(depouttmp "${libgo_binroot}/${ptarget}.dep")
string(REPLACE ";" " " packfiles "${ARG_SOURCES}")
set(packfiles "unused ${packfiles}")
# Kick off the script.
execute_process(COMMAND "${shell}" ${capturesh} ${godepsdotsh} ${depouttmp} ${packfiles})
# Read the result.
file(STRINGS ${depouttmp} depoutput)
separate_arguments(depoutput)
# godeps.sh produces output of the form:
# <pack>.dep: file.go file2.go ... pack1.gox pack2.gox ...
# We're interested in the gox files.
set(packdepstmp)
foreach( item ${depoutput})
string(REGEX MATCH "^.+\.gox$" gox ${item})
if(gox)
list(APPEND packdepstmp ${item})
endif()
endforeach()
#message(STATUS "deps for ${pack}: ${packdepstmp}")
set(packdeps ${packdepstmp} PARENT_SCOPE)
endfunction()