BASIS  version 1.2.3 (revision 2104)
CheckPublicHeaders.cmake
Go to the documentation of this file.
00001 ##############################################################################
00002 # @file  CheckPublicHeaders.cmake
00003 # @brief CMake script used to check whether public headers were added/removed.
00004 #
00005 # This script removes the deprecated public headers from the build tree and
00006 # then throws a fatal error if public header files were added or removed to
00007 # the project.
00008 #
00009 # Copyright (c) 2011, 2012 University of Pennsylvania. All rights reserved.<br />
00010 # See https://www.cbica.upenn.edu/sbia/software/license.html or COPYING file.
00011 #
00012 # Contact: SBIA Group <sbia-software at uphs.upenn.edu>
00013 #
00014 # @ingroup CMakeUtilities
00015 ##############################################################################
00016 
00017 # ----------------------------------------------------------------------------
00018 # check arguments
00019 if (NOT OUTPUT_FILE)
00020   message (FATAL_ERROR "Missing argument OUTPUT_FILE!")
00021 endif ()
00022 
00023 if (NOT REFERENCE_FILE)
00024   message (FATAL_ERROR "Missing argument REFERENCE_FILE!")
00025 endif ()
00026 
00027 if (NOT BINARY_INCLUDE_DIR)
00028   message (FATAL_ERROR "Missing argument BINARY_INCLUDE_DIR!")
00029 endif ()
00030 
00031 if (NOT PROJECT_INCLUDE_DIRS)
00032   message (FATAL_ERROR "Missing argument PROJECT_INCLUDE_DIRS!")
00033 endif ()
00034 
00035 if (NOT VARIABLE_NAME)
00036   set (VARIABLE_NAME "PUBLIC_HEADERS")
00037 endif ()
00038 
00039 # ----------------------------------------------------------------------------
00040 # compare files
00041 execute_process (
00042   COMMAND ${CMAKE_COMMAND} -E compare_files "${OUTPUT_FILE}" "${REFERENCE_FILE}"
00043   RESULT_VARIABLE EXIT_CODE
00044   OUTPUT_QUIET
00045   ERROR_QUIET
00046 )
00047 
00048 if (EXIT_CODE EQUAL 0)
00049   set (OUTPUT_FILE_DIFFERS FALSE)
00050 else ()
00051   set (OUTPUT_FILE_DIFFERS TRUE)
00052 endif ()
00053 
00054 # ----------------------------------------------------------------------------
00055 # remove obsolete public headers
00056 if (OUTPUT_FILE_DIFFERS)
00057   set (${VARIABLE_NAME})
00058   include ("${OUTPUT_FILE}")
00059   set (CURRENT_HEADERS "${${VARIABLE_NAME}}")
00060   set (${VARIABLE_NAME})
00061   include ("${REFERENCE_FILE}")
00062   foreach (H IN LISTS CURRENT_HEADERS)
00063     list (FIND ${VARIABLE_NAME} "${H}" IDX)
00064     if (IDX EQUAL -1)
00065       string (REGEX REPLACE "^.*/include/" "" H "${H}")
00066       string (REGEX REPLACE "\\.in$"       "" H "${H}")
00067       if (AUTO_PREFIX_INCLUDES)
00068         file (REMOVE "${BINARY_INCLUDE_DIR}/${INCLUDE_PREFIX}${H}")
00069       else ()
00070         file (REMOVE "${BINARY_INCLUDE_DIR}/${H}")
00071       endif ()
00072     endif ()
00073   endforeach ()
00074 endif ()
00075 
00076 # ----------------------------------------------------------------------------
00077 # remove files if different
00078 if (OUTPUT_FILE_DIFFERS)
00079   file (REMOVE "${OUTPUT_FILE}")
00080   file (REMOVE "${REFERENCE_FILE}")
00081   file (REMOVE "${REFERENCE_FILE}.update")
00082 endif ()
00083 
00084 # ----------------------------------------------------------------------------
00085 # fatal error if files added/removed
00086 if (OUTPUT_FILE_DIFFERS AND ERRORMSG)
00087   message (FATAL_ERROR "${ERRORMSG}")
00088 endif ()