# Regex to match copyright/license notices. # We require the Kitware copyright on the first line, but this can # match any additional copyright holder notices. set(notice_regex " #============================================================================= # Copyright (20[0-9][0-9]-)?20[0-9][0-9] [^\n]+( # Copyright (20[0-9][0-9]-)?20[0-9][0-9] [^\n]+)* # # Distributed under the OSI-approved BSD License \\(the \"License\"\\); # see accompanying file Copyright\\.txt for details\\. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\\. # See the License for more information\\. #============================================================================= # \\(To distribute this file outside of CMake, substitute the full # License text for the above reference.\\) ") string(REPLACE "\n" "\r?\n" notice_regex "${notice_regex}") string(REPLACE "\r\r" "\r" notice_regex "${notice_regex}") # Modules that do not require our notice. set(notice_exceptions FindCUDA.cmake # MIT License, distributed here from upstream project ) # Load the list of modules to check. set(dir "@CMake_SOURCE_DIR@/Modules") file(GLOB all_modules RELATIVE "${dir}" "${dir}/*.cmake") list(REMOVE_ITEM all_modules ${notice_exceptions}) # Check each module. set(notice_missing) foreach(module ${all_modules}) message(STATUS "module: ${module}") file(READ "${dir}/${module}" module_content) if(NOT "${module_content}" MATCHES "${notice_regex}") set(notice_missing "${notice_missing} ${module}\n") endif() endforeach() # Report the list of bad modules. if(notice_missing) message(FATAL_ERROR "Some modules do not have a valid copyright notice:\n${notice_missing}") endif()