summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--circle.yml4
-rw-r--r--src/Bindings/CMakeLists.txt12
-rw-r--r--src/Bindings/CheckBindingsDependencies.lua108
3 files changed, 122 insertions, 2 deletions
diff --git a/circle.yml b/circle.yml
index 341c87a1d..f13d02ce8 100644
--- a/circle.yml
+++ b/circle.yml
@@ -8,5 +8,5 @@ dependencies:
test:
override:
- - cd src && find . -name \*.cpp -or -name \*.h > AllFiles.lst
- - cd src && lua CheckBasicStyle.lua
+ - cd src && find . -name \*.cpp -or -name \*.h > AllFiles.lst && lua CheckBasicStyle.lua
+ - cd src/Bindings && lua CheckBindingsDependencies.lua
diff --git a/src/Bindings/CMakeLists.txt b/src/Bindings/CMakeLists.txt
index 4f25f2cf4..5c79225cc 100644
--- a/src/Bindings/CMakeLists.txt
+++ b/src/Bindings/CMakeLists.txt
@@ -69,22 +69,27 @@ set(BINDING_DEPENDENCIES
../BlockEntities/BeaconEntity.h
../BlockEntities/BlockEntity.h
../BlockEntities/BlockEntityWithItems.h
+ ../BlockEntities/BrewingstandEntity.h
../BlockEntities/ChestEntity.h
+ ../BlockEntities/CommandBlockEntity.h
../BlockEntities/DispenserEntity.h
../BlockEntities/DropSpenserEntity.h
../BlockEntities/DropperEntity.h
../BlockEntities/FurnaceEntity.h
../BlockEntities/HopperEntity.h
../BlockEntities/JukeboxEntity.h
+ ../BlockEntities/MobSpawnerEntity.h
../BlockEntities/NoteEntity.h
../BlockEntities/SignEntity.h
../BlockEntities/MobHeadEntity.h
../BlockEntities/FlowerPotEntity.h
../BlockID.h
+ ../BlockInfo.h
../BoundingBox.h
../ChatColor.h
../ChunkDef.h
../ClientHandle.h
+ ../CompositeChat.h
../CraftingRecipes.h
../Cuboid.h
../Defines.h
@@ -111,13 +116,20 @@ set(BINDING_DEPENDENCIES
../Entities/TNTEntity.h
../Entities/WitherSkullEntity.h
../Generating/ChunkDesc.h
+ ../IniFile.h
../Inventory.h
../Item.h
../ItemGrid.h
+ ../Map.h
+ ../MapManager.h
../Mobs/Monster.h
+ ../Mobs/MonsterTypes.h
../OSSupport/File.h
+ ../Protocol/MojangAPI.h
../Root.h
+ ../Scoreboard.h
../Server.h
+ ../Statistics.h
../StringUtils.h
../Tracer.h
../UI/Window.h
diff --git a/src/Bindings/CheckBindingsDependencies.lua b/src/Bindings/CheckBindingsDependencies.lua
new file mode 100644
index 000000000..c0565ead8
--- /dev/null
+++ b/src/Bindings/CheckBindingsDependencies.lua
@@ -0,0 +1,108 @@
+-- CheckBindingsDependencies.lua
+
+-- This script checks whether all files listed in AllToLua.pkg are also in the dependencies for bindings regeneration.
+-- This script is run as part of the CircleCI tests
+
+
+
+
+
+--- Filenames that should be ignored in the AllToLua.pkg file:
+-- Dictionary of "filename" -> true for each ignored filename
+local g_ShouldIgnorePkg =
+{
+ -- ["../IniFile.h"] = true,
+}
+
+--- Filenames that should be ignored in the CMakeLists.txt file:
+-- Dictionary of "filename" -> true for each ignored filename
+local g_ShouldIgnoreCMake =
+{
+ ["tolua"] = true,
+ ["../Bindings/AllToLua.pkg"] = true,
+ ["../Bindings/BindingsProcessor.lua"] = true,
+}
+
+
+
+
+
+--- Returns a sorted list of all files listed in AllToLua.pkg
+-- The returned table has both an array part (list of files) and a dictionary part ("filename" -> true)
+local function getAllToLuaPkgFiles()
+ local res = {}
+ for line in io.lines("AllToLua.pkg") do
+ line:gsub("$cfile \"(.+)\"", -- Parse each line with a $cfile directive
+ function (a_FileName)
+ if (g_ShouldIgnorePkg[a_FileName]) then
+ return
+ end
+ a_FileName = a_FileName:gsub("../Bindings/", "") -- Normalize the path
+ table.insert(res, a_FileName)
+ res[a_FileName] = true
+ end
+ )
+ end
+ table.sort(res)
+ return res
+end
+
+
+
+
+
+--- Returns a sorted list of all files listed as dependencies in CMakeLists.txt
+-- The returned table has both an array part (list of files) and a dictionary part ("filename" -> true)
+local function getCMakeListsFiles()
+ local f = assert(io.open("CMakeLists.txt", "r"))
+ local contents = f:read("*all")
+ f:close()
+ local res = {}
+ contents:gsub("set%s*(%b())", -- Process each CMake's "set" statement
+ function (a_SetStatement)
+ if not(a_SetStatement:find("%(BINDING_DEPENDENCIES")) then
+ return
+ end
+ -- This is the statement setting the dependencies, parse the files:
+ a_SetStatement:gsub("%s(%S+)%s",
+ function (a_FileName)
+ if (g_ShouldIgnoreCMake[a_FileName]) then
+ return
+ end
+ a_FileName = a_FileName:gsub("../Bindings/", "") -- Normalize the path
+ table.insert(res, a_FileName)
+ res[a_FileName] = true
+ end
+ )
+ end
+ )
+ table.sort(res)
+ return res
+end
+
+
+
+
+
+-- Check each set of files against the other:
+local pkgFiles = getAllToLuaPkgFiles()
+local cmakeFiles = getCMakeListsFiles()
+local numMissingFiles = 0
+for _, fnam in ipairs(pkgFiles) do
+ if not(cmakeFiles[fnam]) then
+ io.stderr:write("Bindings dependency file ", fnam, " is not listed in src/Bindings/CMakeLists.txt\n")
+ numMissingFiles = numMissingFiles + 1
+ end
+end
+for _, fnam in ipairs(cmakeFiles) do
+ if not(pkgFiles[fnam]) then
+ io.stderr:write("Bindings dependency file ", fnam, " is not listed in src/Bindings/AllToLua.pkg\n")
+ numMissingFiles = numMissingFiles + 1
+ end
+end
+
+-- If any mismatch was found, exit with an error code:
+if (numMissingFiles > 0) then
+ io.stderr:write("Bindings dependency mismatches found: ", numMissingFiles, "\n")
+ os.exit(1)
+end