/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmCheckCustomOutputs.h" #include "cmExecutionStatus.h" #include "cmMakefile.h" #include "cmStringAlgorithms.h" #include "cmSystemTools.h" bool cmCheckCustomOutputs(const std::vector& outputs, cm::string_view keyword, cmExecutionStatus& status) { cmMakefile& mf = status.GetMakefile(); for (std::string const& o : outputs) { // Make sure the file will not be generated into the source // directory during an out of source build. if (!mf.CanIWriteThisFile(o)) { status.SetError( cmStrCat("attempted to have a file\n ", o, "\nin a source directory as an output of custom command.")); cmSystemTools::SetFatalErrorOccured(); return false; } // Make sure the output file name has no invalid characters. std::string::size_type pos = o.find_first_of("#<>"); if (pos != std::string::npos) { status.SetError(cmStrCat("called with ", keyword, " containing a \"", o[pos], "\". This character is not allowed.")); return false; } } return true; }