set(PROJECT_REVIEW_LIST "${PROJECT_SOURCE_DIR}/codereview.txt") set(PROJECT_REVIEW_DIR "${PROJECT_BINARY_DIR}/codereview") set(PROJECT_REVIEW_INFILE "${CMAKE_CURRENT_LIST_DIR}/templates/CodeReview/review.tex.in") set(PROJECT_REVIEW_OUTFILENAME "${PROJECT_NAME}-${APPLICATION_VERSION}_codereview.tex") set(PROJECT_REVIEW_OUTNAME "${PROJECT_NAME}-${APPLICATION_VERSION}_codereview") set(PROJECT_REVIEW_OUTFILE "${PROJECT_REVIEW_DIR}/${PROJECT_REVIEW_OUTFILENAME}") string (REPLACE "_" "\\\_" PROJECT_BRIEF_LATEX "${PROJECT_BRIEF}") # Search h/c/cpp files if(EXISTS "${PROJECT_REVIEW_LIST}") message("-- Codereview read filelist from ${PROJECT_REVIEW_LIST}") file(STRINGS "${PROJECT_REVIEW_LIST}" list) foreach(line ${list}) string(STRIP "${line}" line) file(GLOB files "${CMAKE_SOURCE_DIR}/${line}") if ("${files}" STREQUAL "") message(FATAL_ERROR "File ${line} from ${PROJECT_REVIEW_LIST} does not exist") endif() set(PROJECT_REVIEW_FILES "${PROJECT_REVIEW_FILES};${files}") endforeach() else() file(GLOB_RECURSE PROJECT_REVIEW_C_FILES ${CMAKE_SOURCE_DIR}/src/*.c) file(GLOB_RECURSE PROJECT_REVIEW_CPP_FILES ${CMAKE_SOURCE_DIR}/src/*.cpp) # When folder include/di exists it is assumed we only interessted in this if(EXISTS "${CMAKE_SOURCE_DIR}/include/di") file(GLOB_RECURSE PROJECT_REVIEW_H_FILES ${CMAKE_SOURCE_DIR}/include/di/*.h) else() file(GLOB_RECURSE PROJECT_REVIEW_H_FILES ${CMAKE_SOURCE_DIR}/include/*.h) endif() set(PROJECT_REVIEW_FILES "${PROJECT_REVIEW_H_FILES};${PROJECT_REVIEW_C_FILES};${PROJECT_REVIEW_CPP_FILES}") endif() # Read per-file LaTeX template file(READ "${CMAKE_CURRENT_LIST_DIR}/templates/CodeReview/file.tex.in" TEX_LINE) set(PROJECT_REVIEW_TEX "") foreach(f ${PROJECT_REVIEW_FILES}) get_filename_component(f_type ${f} EXT) string(REPLACE "." "" f_type "${f_type}") if (${f_type} MATCHES "h") if (${PRIMARY_LANGUAGE} MATCHES "C") set(f_type "c") else() set(f_type "cpp") endif() elseif (${f_type} MATCHES "c") set (f_type "c") elseif (${f_type} MATCHES "cpp") set (f_type "cpp") else () set(f_type "text") endif() set(PROJECT_REVIEW_FILE_TEX ${TEX_LINE}) string(REPLACE "${PROJECT_SOURCE_DIR}/" "" f_caption "${f}") string(REPLACE "FILENAME_CAPTION" "${f_caption}" PROJECT_REVIEW_FILE_TEX "${PROJECT_REVIEW_FILE_TEX}") string(REPLACE "FILENAME" "${f}" PROJECT_REVIEW_FILE_TEX "${PROJECT_REVIEW_FILE_TEX}") string(REPLACE "FILETYPE" "${f_type}" PROJECT_REVIEW_FILE_TEX "${PROJECT_REVIEW_FILE_TEX}") set(PROJECT_REVIEW_TEX "${PROJECT_REVIEW_TEX}${PROJECT_REVIEW_FILE_TEX}") endforeach() # Write all generated LaTeX to the file at variable # - PROJECT_REVIEW_TEX configure_file ( "${PROJECT_REVIEW_INFILE}" "${PROJECT_REVIEW_OUTFILE}" ) # TODO: now we need texlive 2015 installed because of package minted 2.0 # http://cmake.org/Wiki/CMake_FAQ#How_do_I_use_CMake_to_build_LaTeX_documents.3F set(LATEX_COMPILER "/usr/local/texlive/2016/bin/x86_64-linux/pdflatex") set(LATEX_COMPILER_ARGS "-shell-escape") ADD_CUSTOM_COMMAND( OUTPUT "${PROJECT_REVIEW_DIR}/${PROJECT_REVIEW_OUTNAME}.aux" COMMAND ${LATEX_COMPILER} ARGS -interaction=batchmode ${LATEX_COMPILER_ARGS} ${PROJECT_REVIEW_OUTFILENAME} 1>/dev/null COMMENT "Latex (first pass)" WORKING_DIRECTORY ${PROJECT_REVIEW_DIR} ) ADD_CUSTOM_COMMAND( OUTPUT "${PROJECT_REVIEW_DIR}/${PROJECT_REVIEW_OUTNAME}.out" DEPENDS "${PROJECT_REVIEW_DIR}/${PROJECT_REVIEW_OUTNAME}.aux" COMMAND ${LATEX_COMPILER} ARGS -interaction=batchmode ${LATEX_COMPILER_ARGS} ${PROJECT_REVIEW_OUTFILENAME} 1>/dev/null COMMENT "Latex (second pass)" WORKING_DIRECTORY ${PROJECT_REVIEW_DIR} ) ADD_CUSTOM_COMMAND( OUTPUT "${PROJECT_REVIEW_DIR}/${PROJECT_REVIEW_OUTNAME}.log" DEPENDS "${PROJECT_REVIEW_DIR}/${PROJECT_REVIEW_OUTNAME}.aux" "${PROJECT_REVIEW_DIR}/${PROJECT_REVIEW_OUTNAME}.out" COMMAND ${LATEX_COMPILER} ARGS -interaction=batchmode ${LATEX_COMPILER_ARGS} ${PROJECT_REVIEW_OUTFILENAME} 1>/dev/null COMMENT "Latex (third pass)" WORKING_DIRECTORY ${PROJECT_REVIEW_DIR} ) ADD_CUSTOM_TARGET(di-review DEPENDS ${PROJECT_REVIEW_DIR}/${PROJECT_REVIEW_OUTNAME}.log COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "Your review is located here: ${PROJECT_REVIEW_DIR}/${PROJECT_REVIEW_OUTNAME}.pdf" )