This file is indexed.

/usr/share/dune/cmake/modules/Headercheck.cmake is in libdune-common-dev 2.5.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# .. cmake_variable:: ENABLE_HEADERCHECK
#
#    Set this variable to TRUE if you want to use the CMake
#    reimplementation of the old autotools feaure :code:`make headercheck`.
#    There has been a couple of issues with this implementation in
#    the past, so it was deactivated by default.
#

# sets up a global property with the names of all header files
# in the module and a global target depending on all checks
macro(setup_headercheck)
  #glob for headers
  file(GLOB_RECURSE all_headers "*.hh")
  # strip hidden files
  string(REGEX REPLACE "[^;]*/\\.[^;]*\\.hh;?" "" headers "${all_headers}")
  set_property(GLOBAL PROPERTY headercheck_list ${headers})

  #define headercheck target
  dune_module_path(MODULE dune-common RESULT scriptdir SCRIPT_DIR)
  add_custom_target(headercheck ${CMAKE_COMMAND} -P ${scriptdir}/FinalizeHeadercheck.cmake -DENABLE_HEADERCHECK=${ENABLE_HEADERCHECK}
                  WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
endmacro(setup_headercheck)

# these macros are used to exclude headers from make headercheck
# call this from a CMakeLists.txt file with a list of headers in that directory
macro(exclude_from_headercheck)
  #make this robust to argument being passed with or without ""
  string(REGEX REPLACE "[\ \n]+([^\ ])" ";\\1" list ${ARGV0})
  set(list "${list};${ARGV}")
  get_property(headerlist GLOBAL PROPERTY headercheck_list)
  foreach(item ${list})
    list(REMOVE_ITEM headerlist "${CMAKE_CURRENT_SOURCE_DIR}/${item}")
  endforeach()
  set_property(GLOBAL PROPERTY headercheck_list ${headerlist})
endmacro(exclude_from_headercheck)

macro(exclude_dir_from_headercheck)
  file(GLOB list RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.hh")
  exclude_from_headercheck(${list})
endmacro(exclude_dir_from_headercheck)

macro(exclude_all_but_from_headercheck)
  file(GLOB excllist RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.hh")
  #make this robust to argument being passed with or without ""
  string(REGEX REPLACE "[\ \n]+([^\ \n])" ";\\1" list ${ARGV0})
  set(list "${list};${ARGV}")
  foreach(item ${list})
    list(REMOVE_ITEM excllist ${item})
  endforeach()
  exclude_from_headercheck(${excllist})
endmacro(exclude_all_but_from_headercheck)

# configure all headerchecks
macro(finalize_headercheck)
  if(ENABLE_HEADERCHECK)
    get_property(headerlist GLOBAL PROPERTY headercheck_list)
    foreach(header ${headerlist})
      #do some name conversion
      string(REGEX REPLACE ".*/([^/]*)" "\\1" simple ${header})
      string(REPLACE ${PROJECT_SOURCE_DIR} "" rel ${header})
      string(REGEX REPLACE "(.*)/[^/]*" "\\1" relpath ${rel})
      string(REGEX REPLACE "/" "_" targname ${rel})

      #generate the headercheck .cc file
      file(WRITE ${CMAKE_BINARY_DIR}/headercheck/${rel}.cc "#ifdef HAVE_CONFIG_H\n#include<config.h>\n#endif\n#include<${simple}>\n#include<${simple}>\nint main(){return 0;}")

      # add target for the check of current header, this is implemented as a library
      # to prevent CMake from automatically trying to link the target, functionality
      # of macro try_compile() is unfortunately not availbale due to it not being scriptable.
      add_library(headercheck_${targname} STATIC EXCLUDE_FROM_ALL
        ${CMAKE_BINARY_DIR}/headercheck/${rel}.cc)
      add_dependencies(headercheck headercheck_${targname})

      #add PKG_ALL_FLAGS and the directory where the header is located
      set_property(TARGET headercheck_${targname}
        APPEND_STRING PROPERTY COMPILE_FLAGS "-DHEADERCHECK -I${PROJECT_SOURCE_DIR}${relpath} -I${CMAKE_BINARY_DIR}")
      set_property(TARGET headercheck_${targname} PROPERTY ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/headercheck/${relpath}")
      add_dune_all_flags(headercheck_${targname})
      unset(headercheck_${targname}_LIB_DEPENDS CACHE)
    endforeach(header ${headerlist})
  endif()
endmacro(finalize_headercheck)