File: header_guard.cmake

package info (click to toggle)
k3d 0.8.0.2-6
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 40,692 kB
  • ctags: 39,695
  • sloc: cpp: 171,303; ansic: 24,129; xml: 6,995; python: 5,796; makefile: 726; sh: 22
file content (67 lines) | stat: -rw-r--r-- 1,826 bytes parent folder | download | duplicates (5)
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
# Ensure that header-files have unique preprocessor guards

SET(ERROR_COUNT 0)
SET(SKIP_FILES
	"^k3dsdk/Half/.*$"
	"^k3dsdk/expression/fparser.h$"
	"^k3dsdk/expression/fpconfig.h$"
	"^k3dsdk/expression/fptypes.h$"
	"^k3dsdk/ftgl/.*$"
	"^k3dsdk/glew/.*$"
	"^k3dsdk/sgi_tesselator/.*$"
	"^modules/pdiff/CompareArgs.h$"
	"^modules/pdiff/LPyramid.h$"
	"^modules/pdiff/Metric.h$"
	"^modules/pdiff/RGBAImage.h$"
	"^modules/qslim/Mx.*$"
	"^modules/solar/solpos/solpos.h$"
	"^share/.*$"
	)

FILE(GLOB_RECURSE SOURCE_FILES *.h)
LIST(SORT SOURCE_FILES)

FOREACH(SOURCE_FILE ${SOURCE_FILES})
	FILE(RELATIVE_PATH RELATIVE_SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR} ${SOURCE_FILE})

	SET(TEST_FILE 1)
	FOREACH(SKIP_FILE ${SKIP_FILES})
		IF(RELATIVE_SOURCE_FILE MATCHES "${SKIP_FILE}")
			SET(TEST_FILE 0)
		ENDIF()
	ENDFOREACH()

	IF(TEST_FILE)
		STRING(TOUPPER "${RELATIVE_SOURCE_FILE}" GUARD_SYMBOL)
		STRING(REPLACE "/" "_" GUARD_SYMBOL "${GUARD_SYMBOL}")
		STRING(REPLACE "." "_" GUARD_SYMBOL "${GUARD_SYMBOL}")
		STRING(REPLACE "-" "_" GUARD_SYMBOL "${GUARD_SYMBOL}")

		SET(OPEN_GUARD "#ifndef ${GUARD_SYMBOL}")
		SET(DEFINE_GUARD "#define ${GUARD_SYMBOL}")
		SET(CLOSE_GUARD "#endif // !${GUARD_SYMBOL}")

		FILE(READ ${SOURCE_FILE} SOURCE)

		IF(NOT SOURCE MATCHES "${OPEN_GUARD}")
			MATH(EXPR ERROR_COUNT "${ERROR_COUNT} + 1")
			MESSAGE("${SOURCE_FILE} missing ${OPEN_GUARD}")
		ENDIF()

		IF(NOT SOURCE MATCHES "${DEFINE_GUARD}")
			MATH(EXPR ERROR_COUNT "${ERROR_COUNT} + 1")
			MESSAGE("${SOURCE_FILE} missing ${DEFINE_GUARD}")
		ENDIF()

		IF(NOT SOURCE MATCHES "${CLOSE_GUARD}")
			MATH(EXPR ERROR_COUNT "${ERROR_COUNT} + 1")
			MESSAGE("${SOURCE_FILE} missing ${CLOSE_GUARD}")
		ENDIF()
	ENDIF()

ENDFOREACH(SOURCE_FILE)

IF(ERROR_COUNT)
	MESSAGE(SEND_ERROR "Found ${ERROR_COUNT} problems with header file guards")	
ENDIF()