Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2010-11-29 07:35:56 +0300
committerCampbell Barton <ideasman42@gmail.com>2010-11-29 07:35:56 +0300
commite8397e6193452f6e93a19c5aa31d5effaff54f25 (patch)
treec4adb230624abb1c92b31482605e1927e819e6d2 /build_files
parent4c82be95fdaa4bef2f186b12ac28f58fa9a40564 (diff)
include headers in cmake source, added a script to check for consistency, reporting missing headers & C files.
this is important so IDE's using CMake integration always get blender headers. - QtCreator & MSVC for eg, probably others too.
Diffstat (limited to 'build_files')
-rw-r--r--build_files/cmake/cmake_consistency_check.py191
-rw-r--r--build_files/cmake/macros.cmake8
2 files changed, 193 insertions, 6 deletions
diff --git a/build_files/cmake/cmake_consistency_check.py b/build_files/cmake/cmake_consistency_check.py
new file mode 100644
index 00000000000..2fba84b07d6
--- /dev/null
+++ b/build_files/cmake/cmake_consistency_check.py
@@ -0,0 +1,191 @@
+# $Id:
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Contributor(s): Campbell Barton
+#
+# ***** END GPL LICENSE BLOCK *****
+
+IGNORE = \
+ "/test/",\
+ "/decimate_glut_test/",\
+ "/BSP_GhostTest/",\
+ "/release/",\
+ "/xembed/",\
+ "/decimation/intern/future/",\
+ "/TerraplayNetwork/",\
+ "/ik_glut_test/"
+
+import os
+from os.path import join, dirname, normpath
+
+base = join(os.getcwd(), "..", "..")
+base = normpath(base)
+
+global_h = set()
+global_c = set()
+
+import os
+from os.path import splitext
+def source_list(path, filename_check=None):
+ for dirpath, dirnames, filenames in os.walk(path):
+
+ # skip '.svn'
+ if dirpath.startswith("."):
+ continue
+
+ for filename in filenames:
+ if filename_check is None or filename_check(filename):
+ yield os.path.join(dirpath, filename)
+
+# extension checking
+def is_c_header(filename):
+ ext = splitext(filename)[1]
+ return (ext in (".h", ".hpp", ".hxx"))
+
+def is_cmake(filename):
+ ext = splitext(filename)[1]
+ return (ext == ".cmake") or (filename == "CMakeLists.txt")
+
+def is_c_header(filename):
+ ext = splitext(filename)[1]
+ return (ext in (".h", ".hpp", ".hxx"))
+
+def is_c(filename):
+ ext = splitext(filename)[1]
+ return (ext in (".c", ".cpp", ".cxx", ".m", ".mm", ".rc"))
+
+def is_c_any(filename):
+ return is_c(filename) or is_c_header(filename)
+
+def cmake_get_src(f):
+
+ sources_h = []
+ sources_c = []
+
+ filen = open(f, "r")
+ it = iter(filen)
+ found = False
+ i = 0
+ # print(f)
+ while it is not None:
+ while it is not None:
+ i += 1
+ try:
+ l = next(it)
+ except StopIteration:
+ it = None
+ break
+ l = l.strip()
+ if not l.startswith("#"):
+ if 'SET(SRC' in l or ('SET(' in l and l.endswith("SRC")):
+ if len(l.split()) > 1:
+ raise Exception("strict formatting not kept 'SET(SRC*' %s:%d" % (f, i))
+ found = True
+ break
+
+ if "LIST(APPEND SRC" in l:
+ if l.endswith(")"):
+ raise Exception("strict formatting not kept 'LIST(APPEND SRC...)' on 1 line %s:%d" % (f, i))
+ found = True
+ break
+
+ if found:
+ cmake_base = dirname(f)
+
+ while it is not None:
+ i += 1
+ try:
+ l = next(it)
+ except StopIteration:
+ it = None
+ break
+
+ l = l.strip()
+
+ if not l.startswith("#"):
+
+ if ")" in l:
+ if l.strip() != ")":
+ raise Exception("strict formatting not kept '*)' %s:%d" % (f, i))
+ break
+
+ if not l:
+ pass
+ elif l.startswith("$"):
+ print("Cant use var '%s' %s:%d" % (l, f, i))
+ elif len(l.split()) > 1:
+ raise Exception("Multi-line define '%s' %s:%d" % (l, f, i))
+ else:
+ new_file = normpath(join(cmake_base, l))
+
+ if is_c_header(new_file):
+ sources_h.append(new_file)
+ elif is_c(new_file):
+ sources_c.append(new_file)
+ else:
+ raise Exception("unknown file type - not c or h %s -> %s" % (f, new_file))
+
+ # print(new_file)
+
+ global_h.update(set(sources_h))
+ global_c.update(set(sources_c))
+ '''
+ if not sources_h and not sources_c:
+ raise Exception("No sources %s" % f)
+
+ sources_h_fs = list(source_list(cmake_base, is_c_header))
+ sources_c_fs = list(source_list(cmake_base, is_c))
+ '''
+ # find missing C files:
+ '''
+ for ff in sources_c_fs:
+ if ff not in sources_c:
+ print(" missing: " + ff)
+ '''
+
+ filen.close()
+
+
+for cmake in source_list(base, is_cmake):
+ cmake_get_src(cmake)
+
+def is_ignore(f):
+ for ig in IGNORE:
+ if ig in f:
+ return True
+ return False
+
+# First do stupid check, do these files exist?
+for f in (global_h | global_c):
+ if f.endswith("dna.c"):
+ continue
+
+ if not os.path.exists(f):
+ raise Exception("CMake referenced file missing: " + f)
+
+
+# now check on files not accounted for.
+print("\nC/C++ Files CMake doesnt know about...")
+for cf in sorted(source_list(base, is_c)):
+ if not is_ignore(cf):
+ if cf not in global_c:
+ print("missing_c: ", cf)
+print("\nC/C++ Headers CMake doesnt know about...")
+for hf in sorted(source_list(base, is_c_header)):
+ if not is_ignore(hf):
+ if hf not in global_h:
+ print("missing_h: ", hf)
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index c5a00c474f5..c35c73cbb46 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -7,16 +7,12 @@ MACRO(BLENDERLIB_NOLIST
MESSAGE(STATUS "Configuring library ${name}")
- # Gather all headers
- FILE(GLOB_RECURSE INC_ALL *.h)
-
INCLUDE_DIRECTORIES(${includes})
- ADD_LIBRARY(${name} ${INC_ALL} ${sources})
+ ADD_LIBRARY(${name} ${sources})
# Group by location on disk
SOURCE_GROUP("Source Files" FILES CMakeLists.txt)
- SET(ALL_FILES ${sources} ${INC_ALL})
- FOREACH(SRC ${ALL_FILES})
+ FOREACH(SRC ${sources})
GET_FILENAME_COMPONENT(SRC_EXT ${SRC} EXT)
IF(${SRC_EXT} MATCHES ".h" OR ${SRC_EXT} MATCHES ".hpp")
SOURCE_GROUP("Header Files" FILES ${SRC})