52 lines
1.9 KiB
CMake
52 lines
1.9 KiB
CMake
#message("Adding dependencies")
|
|
|
|
#message("CMAKE_D_FLAGS: ${CMAKE_D_FLAGS} ")
|
|
#message("CMAKE_D_COMPILER: ${CMAKE_D_COMPILER} ")
|
|
#message("include_directories: ${include_directories} ")
|
|
#message("source file ${source_file}")
|
|
#message("dependency file ${dependency_file}")
|
|
|
|
separate_arguments(CMAKE_D_FLAGS)
|
|
|
|
# TODO
|
|
# need to pass all arguments that are used for building
|
|
# can't I use the build rule somehow
|
|
execute_process(COMMAND ${CMAKE_D_COMPILER} ${CMAKE_D_FLAGS} ${include_directories} -deps=${dependency_file}.tmp -o- ${source_file})
|
|
#message("executing: ${CMAKE_D_COMPILER} ${CMAKE_D_FLAGS} ${include_directories} -deps=${dependency_file}.tmp -o- ${source_file}")
|
|
|
|
if(NOT EXISTS ${dependency_file})
|
|
file(WRITE ${dependency_file} "# Generated by: ${CMAKE_CURRENT_LIST_FILE}\nSET(D_DMD_DEPEND\n)\n\n")
|
|
endif()
|
|
|
|
file(READ ${dependency_file}.tmp depend_text)
|
|
#message("DEPENDENCIES: ${depend_text}")
|
|
|
|
# extract dependencies
|
|
string(REGEX MATCHALL "\\([^)]*\\)" out ${depend_text})
|
|
string(REGEX MATCHALL "[^()]+" out ${out})
|
|
list(REMOVE_DUPLICATES out)
|
|
list(SORT out)
|
|
|
|
foreach(file ${out})
|
|
set(dependencies "${dependencies} \"${file}\"\n")
|
|
endforeach()
|
|
|
|
# write new dependencies to temporary file
|
|
file(WRITE ${dependency_file}.tmp "# Generated by: ${CMAKE_CURRENT_LIST_FILE}\nSET(D_DMD_DEPEND\n ${dependencies})\n\n")
|
|
|
|
# get old dependencies
|
|
include(${dependency_file})
|
|
set(old_dependencies ${D_DMD_DEPEND})
|
|
# and the new dependencies from temporary file
|
|
include(${dependency_file}.tmp)
|
|
|
|
# did the dependencies change?
|
|
if(NOT "${D_DMD_DEPEND}" STREQUAL "${old_dependencies}")
|
|
message("Dependencies changed. Need to build.")
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E touch ${source_file})
|
|
endif()
|
|
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${dependency_file}.tmp ${dependency_file})
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E remove ${dependency_file}.tmp)
|
|
|
|
#message("Finished dependencies")
|