diff --git a/scripts/sweep_winapi_stubs_includes.py b/scripts/sweep_winapi_stubs_includes.py new file mode 100644 index 000000000..e1151e232 --- /dev/null +++ b/scripts/sweep_winapi_stubs_includes.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +"""Conservative sweep: remove dead app/linux/Stubs/winapi_stubs.h includes. + +winapi_stubs.h provides Windows API typedefs and constants for Linux +(LARGE_INTEGER, FILETIME, ERROR_*, etc.). Many minecraft/ files include +it as transitive leftovers and never actually reference any of those +symbols. + +Usage: + python3 scripts/sweep_winapi_stubs_includes.py [--apply] +""" + +from __future__ import annotations + +import argparse +import os +import re +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent +MINECRAFT_ROOT = REPO_ROOT / "targets" / "minecraft" + +INCLUDE_RE = re.compile( + r'^[ \t]*#[ \t]*include[ \t]*"app/linux/Stubs/winapi_stubs\.h"[ \t]*\n', + re.MULTILINE, +) + +# Symbols defined by winapi_stubs.h. If any appear in the consumer, the +# include is needed. +USAGE_PATTERNS = [ + re.compile(r'\bLARGE_INTEGER\b'), + re.compile(r'\bULARGE_INTEGER\b'), + re.compile(r'\bFILETIME\b'), + re.compile(r'\bSYSTEMTIME\b'), + re.compile(r'\bERROR_SUCCESS\b'), + re.compile(r'\bERROR_IO_PENDING\b'), + re.compile(r'\bERROR_CANCELLED\b'), + re.compile(r'\bMEM_COMMIT\b'), + re.compile(r'\bMEM_RESERVE\b'), + re.compile(r'\bMEM_DECOMMIT\b'), + re.compile(r'\bPAGE_READWRITE\b'), + re.compile(r'\bDWORD\b'), + re.compile(r'\bBYTE\b'), + re.compile(r'\bWORD\b'), + re.compile(r'\bHANDLE\b'), + re.compile(r'\bHRESULT\b'), + re.compile(r'\bGetLastError\b'), + re.compile(r'\bGetFileSize\b'), + re.compile(r'\bGetSystemTime\b'), + re.compile(r'\bSystemTimeToFileTime\b'), + re.compile(r'\bMakeAbsoluteSD\b'), + re.compile(r'\bSetFilePointer\b'), + re.compile(r'\bReadFile\b'), + re.compile(r'\bWriteFile\b'), + re.compile(r'\bCloseHandle\b'), + re.compile(r'\bCreateFile\b'), + re.compile(r'\bVirtualAlloc\b'), + re.compile(r'\bVirtualFree\b'), + re.compile(r'\bSleep\s*\('), + re.compile(r'\bWaitForSingleObject\b'), + re.compile(r'\bSetEvent\b'), + re.compile(r'\bResetEvent\b'), + re.compile(r'\bInterlocked'), + re.compile(r'\bOutputDebugString\b'), + re.compile(r'\bMessageBox\b'), +] + + +def needs_winapi(text: str) -> bool: + scan = INCLUDE_RE.sub("", text) + return any(p.search(scan) for p in USAGE_PATTERNS) + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--apply", action="store_true", + help="Actually remove the dead includes") + args = parser.parse_args() + + candidates: list[Path] = [] + for dirpath, _dirnames, filenames in os.walk(MINECRAFT_ROOT): + for name in filenames: + if not name.endswith((".cpp", ".c", ".h", ".hpp")): + continue + path = Path(dirpath) / name + try: + text = path.read_text(encoding="utf-8", errors="surrogateescape") + except OSError: + continue + if not INCLUDE_RE.search(text): + continue + if needs_winapi(text): + continue + candidates.append(path) + + candidates.sort() + for path in candidates: + print(path.relative_to(REPO_ROOT)) + + print(f"\n{len(candidates)} files have a dead winapi_stubs.h include") + + if args.apply: + for path in candidates: + text = path.read_text(encoding="utf-8", errors="surrogateescape") + new_text = INCLUDE_RE.sub("", text) + path.write_text(new_text, encoding="utf-8", errors="surrogateescape") + print(f"Removed from {len(candidates)} files") + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/targets/minecraft/client/particle/Particle.cpp b/targets/minecraft/client/particle/Particle.cpp index 2713ce19f..28a23095c 100644 --- a/targets/minecraft/client/particle/Particle.cpp +++ b/targets/minecraft/client/particle/Particle.cpp @@ -4,7 +4,6 @@ #include -#include "app/linux/Stubs/winapi_stubs.h" #include "java/JavaMath.h" #include "java/Random.h" #include "minecraft/SharedConstants.h" diff --git a/targets/minecraft/client/player/LocalPlayer.cpp b/targets/minecraft/client/player/LocalPlayer.cpp index ab5d556bf..a25fed902 100644 --- a/targets/minecraft/client/player/LocalPlayer.cpp +++ b/targets/minecraft/client/player/LocalPlayer.cpp @@ -38,7 +38,6 @@ #include "app/common/Tutorial/TutorialMode.h" #include "app/common/UI/All Platforms/UIEnums.h" #include "app/linux/Linux_UIController.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "PlatformTypes.h" #include "Pos.h" #include "minecraft/SharedConstants.h" diff --git a/targets/minecraft/client/renderer/Chunk.cpp b/targets/minecraft/client/renderer/Chunk.cpp index 454700b87..b3c305f62 100644 --- a/targets/minecraft/client/renderer/Chunk.cpp +++ b/targets/minecraft/client/renderer/Chunk.cpp @@ -11,7 +11,6 @@ #include "platform/renderer/renderer.h" #include "LevelRenderer.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "util/FrameProfiler.h" #include "TileRenderer.h" #include "minecraft/client/renderer/Tesselator.h" diff --git a/targets/minecraft/client/renderer/GameRenderer.cpp b/targets/minecraft/client/renderer/GameRenderer.cpp index 4b29b322b..0df0927e9 100644 --- a/targets/minecraft/client/renderer/GameRenderer.cpp +++ b/targets/minecraft/client/renderer/GameRenderer.cpp @@ -18,7 +18,6 @@ #include "minecraft/GameEnums.h" #include "platform/ShutdownManager.h" #include "app/common/Colours/ColourTable.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "minecraft/client/BufferedImage.h" #include "util/FrameProfiler.h" #include "platform/stubs.h" diff --git a/targets/minecraft/client/renderer/texture/PreStitchedTextureMap.cpp b/targets/minecraft/client/renderer/texture/PreStitchedTextureMap.cpp index 7be953540..e8706b262 100644 --- a/targets/minecraft/client/renderer/texture/PreStitchedTextureMap.cpp +++ b/targets/minecraft/client/renderer/texture/PreStitchedTextureMap.cpp @@ -4,7 +4,6 @@ #include #include -#include "app/linux/Stubs/winapi_stubs.h" #include "minecraft/client/BufferedImage.h" #include "SimpleIcon.h" #include "StitchedTexture.h" diff --git a/targets/minecraft/client/renderer/texture/Stitcher.cpp b/targets/minecraft/client/renderer/texture/Stitcher.cpp index b8f0d4a80..514c2273b 100644 --- a/targets/minecraft/client/renderer/texture/Stitcher.cpp +++ b/targets/minecraft/client/renderer/texture/Stitcher.cpp @@ -3,7 +3,6 @@ #include -#include "app/linux/Stubs/winapi_stubs.h" #include "StitchSlot.h" #include "Texture.h" #include "TextureHolder.h" diff --git a/targets/minecraft/client/renderer/texture/TextureMap.cpp b/targets/minecraft/client/renderer/texture/TextureMap.cpp index 67ee136bf..2856ca086 100644 --- a/targets/minecraft/client/renderer/texture/TextureMap.cpp +++ b/targets/minecraft/client/renderer/texture/TextureMap.cpp @@ -6,7 +6,6 @@ #include #include -#include "app/linux/Stubs/winapi_stubs.h" #include "minecraft/client/BufferedImage.h" #include "StitchSlot.h" #include "StitchedTexture.h" diff --git a/targets/minecraft/client/skins/AbstractTexturePack.cpp b/targets/minecraft/client/skins/AbstractTexturePack.cpp index cf6b240e3..92463a4ef 100644 --- a/targets/minecraft/client/skins/AbstractTexturePack.cpp +++ b/targets/minecraft/client/skins/AbstractTexturePack.cpp @@ -9,7 +9,6 @@ #include "app/common/Colours/ColourTable.h" #include "minecraft/IGameServices.h" #include "app/linux/Linux_UIController.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "minecraft/client/BufferedImage.h" #include "util/StringHelpers.h" #include "java/File.h" diff --git a/targets/minecraft/network/Connection.h b/targets/minecraft/network/Connection.h index cdac099b3..8fc94a926 100644 --- a/targets/minecraft/network/Connection.h +++ b/targets/minecraft/network/Connection.h @@ -8,7 +8,6 @@ #include #include "app/common/Network/Socket.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "platform/C4JThread.h" #include "java/InputOutputStream/DataInputStream.h" #include "java/InputOutputStream/DataOutputStream.h" diff --git a/targets/minecraft/network/packet/CustomPayloadPacket.cpp b/targets/minecraft/network/packet/CustomPayloadPacket.cpp index d0384eea4..78ff7c704 100644 --- a/targets/minecraft/network/packet/CustomPayloadPacket.cpp +++ b/targets/minecraft/network/packet/CustomPayloadPacket.cpp @@ -3,7 +3,6 @@ #include -#include "app/linux/Stubs/winapi_stubs.h" #include "PacketListener.h" #include "java/InputOutputStream/DataInputStream.h" #include "java/InputOutputStream/DataOutputStream.h" diff --git a/targets/minecraft/network/packet/GameCommandPacket.cpp b/targets/minecraft/network/packet/GameCommandPacket.cpp index 693decb7d..0f05da553 100644 --- a/targets/minecraft/network/packet/GameCommandPacket.cpp +++ b/targets/minecraft/network/packet/GameCommandPacket.cpp @@ -3,7 +3,6 @@ #include -#include "app/linux/Stubs/winapi_stubs.h" #include "PacketListener.h" #include "java/InputOutputStream/DataInputStream.h" #include "java/InputOutputStream/DataOutputStream.h" diff --git a/targets/minecraft/network/packet/MoveEntityPacket.cpp b/targets/minecraft/network/packet/MoveEntityPacket.cpp index 1f3bdadd4..91525d759 100644 --- a/targets/minecraft/network/packet/MoveEntityPacket.cpp +++ b/targets/minecraft/network/packet/MoveEntityPacket.cpp @@ -2,7 +2,6 @@ #include -#include "app/linux/Stubs/winapi_stubs.h" #include "PacketListener.h" #include "java/InputOutputStream/DataInputStream.h" #include "java/InputOutputStream/DataOutputStream.h" diff --git a/targets/minecraft/network/packet/MoveEntityPacketSmall.cpp b/targets/minecraft/network/packet/MoveEntityPacketSmall.cpp index 97410a0fe..3677770a1 100644 --- a/targets/minecraft/network/packet/MoveEntityPacketSmall.cpp +++ b/targets/minecraft/network/packet/MoveEntityPacketSmall.cpp @@ -2,7 +2,6 @@ #include -#include "app/linux/Stubs/winapi_stubs.h" #include "PacketListener.h" #include "java/InputOutputStream/DataInputStream.h" #include "java/InputOutputStream/DataOutputStream.h" diff --git a/targets/minecraft/network/packet/PreLoginPacket.cpp b/targets/minecraft/network/packet/PreLoginPacket.cpp index 4d4de72b9..7b8513093 100644 --- a/targets/minecraft/network/packet/PreLoginPacket.cpp +++ b/targets/minecraft/network/packet/PreLoginPacket.cpp @@ -7,7 +7,6 @@ #include "app/common/BuildVer/BuildVer.h" #include "platform/IPlatformNetwork.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "PacketListener.h" #include "java/InputOutputStream/DataInputStream.h" #include "java/InputOutputStream/DataOutputStream.h" diff --git a/targets/minecraft/network/packet/SetPlayerTeamPacket.cpp b/targets/minecraft/network/packet/SetPlayerTeamPacket.cpp index 14796f459..8befc915a 100644 --- a/targets/minecraft/network/packet/SetPlayerTeamPacket.cpp +++ b/targets/minecraft/network/packet/SetPlayerTeamPacket.cpp @@ -3,7 +3,6 @@ #include -#include "app/linux/Stubs/winapi_stubs.h" #include "PacketListener.h" #include "java/InputOutputStream/DataInputStream.h" #include "java/InputOutputStream/DataOutputStream.h" diff --git a/targets/minecraft/server/PlayerList.cpp b/targets/minecraft/server/PlayerList.cpp index 6b549d60f..20efba2eb 100644 --- a/targets/minecraft/server/PlayerList.cpp +++ b/targets/minecraft/server/PlayerList.cpp @@ -20,7 +20,6 @@ #include "app/common/Network/Socket.h" #include "app/common/Tutorial/Tutorial.h" #include "app/common/Tutorial/TutorialEnum.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "platform/NetTypes.h" #include "MinecraftServer.h" #include "Settings.h" diff --git a/targets/minecraft/server/level/EntityTracker.cpp b/targets/minecraft/server/level/EntityTracker.cpp index 0ee2a9d84..cfe112c3a 100644 --- a/targets/minecraft/server/level/EntityTracker.cpp +++ b/targets/minecraft/server/level/EntityTracker.cpp @@ -8,7 +8,6 @@ #include #include "app/common/Network/NetworkPlayerInterface.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "ServerLevel.h" #include "ServerPlayer.h" #include "TrackedEntity.h" diff --git a/targets/minecraft/server/network/PendingConnection.cpp b/targets/minecraft/server/network/PendingConnection.cpp index 0ca0b077e..0784be2d0 100644 --- a/targets/minecraft/server/network/PendingConnection.cpp +++ b/targets/minecraft/server/network/PendingConnection.cpp @@ -13,7 +13,6 @@ #include "app/common/BuildVer/BuildVer.h" #include "app/common/Network/NetworkPlayerInterface.h" #include "platform/IPlatformNetwork.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "platform/NetTypes.h" #include "PlayerConnection.h" #include "ServerConnection.h" diff --git a/targets/minecraft/util/WeighedRandom.cpp b/targets/minecraft/util/WeighedRandom.cpp index 07a99f54d..60c1a9bed 100644 --- a/targets/minecraft/util/WeighedRandom.cpp +++ b/targets/minecraft/util/WeighedRandom.cpp @@ -4,7 +4,6 @@ #include #include -#include "app/linux/Stubs/winapi_stubs.h" #include "java/Random.h" int WeighedRandom::getTotalWeight(std::vector* items) { diff --git a/targets/minecraft/world/entity/Entity.cpp b/targets/minecraft/world/entity/Entity.cpp index 5a1ba6fe1..42c04844b 100644 --- a/targets/minecraft/world/entity/Entity.cpp +++ b/targets/minecraft/world/entity/Entity.cpp @@ -18,7 +18,6 @@ #include "EntityPos.h" #include "SyncedEntityData.h" #include "minecraft/GameEnums.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "java/Class.h" #include "java/Random.h" #include "minecraft/Direction.h" diff --git a/targets/minecraft/world/item/ArmorItem.cpp b/targets/minecraft/world/item/ArmorItem.cpp index 0ef001e3e..5559d51ad 100644 --- a/targets/minecraft/world/item/ArmorItem.cpp +++ b/targets/minecraft/world/item/ArmorItem.cpp @@ -6,7 +6,6 @@ #include #include "app/common/Colours/ColourTable.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "java/Class.h" #include "minecraft/client/Minecraft.h" #include "minecraft/core/BehaviorRegistry.h" diff --git a/targets/minecraft/world/level/Level.cpp b/targets/minecraft/world/level/Level.cpp index 53298953f..dbf3d0c22 100644 --- a/targets/minecraft/world/level/Level.cpp +++ b/targets/minecraft/world/level/Level.cpp @@ -21,7 +21,6 @@ #include "app/common/Colours/ColourTable.h" #include "app/common/Console_Debug_enum.h" #include "app/common/Network/GameNetworkManager.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "util/FrameProfiler.h" #include "java/Random.h" #include "minecraft/Direction.h" diff --git a/targets/minecraft/world/level/biome/BiomeDecorator.cpp b/targets/minecraft/world/level/biome/BiomeDecorator.cpp index d84f7e423..a02a9a159 100644 --- a/targets/minecraft/world/level/biome/BiomeDecorator.cpp +++ b/targets/minecraft/world/level/biome/BiomeDecorator.cpp @@ -2,7 +2,6 @@ #include "minecraft/world/level/biome/BiomeDecorator.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "java/Random.h" #include "minecraft/world/level/Level.h" #include "minecraft/world/level/biome/Biome.h" diff --git a/targets/minecraft/world/level/levelgen/CustomLevelSource.cpp b/targets/minecraft/world/level/levelgen/CustomLevelSource.cpp index 8c8737b28..cc9d7aeb0 100644 --- a/targets/minecraft/world/level/levelgen/CustomLevelSource.cpp +++ b/targets/minecraft/world/level/levelgen/CustomLevelSource.cpp @@ -11,7 +11,6 @@ #include "minecraft/world/level/biome/Biome.h" #include "minecraft/world/level/chunk/ChunkSource.h" #if defined(__linux__) -#include "app/linux/Stubs/winapi_stubs.h" #endif #include "java/Random.h" #include "minecraft/world/entity/MobCategory.h" diff --git a/targets/minecraft/world/level/levelgen/structure/StrongholdFeature.cpp b/targets/minecraft/world/level/levelgen/structure/StrongholdFeature.cpp index 22db4633b..5bbeedf0d 100644 --- a/targets/minecraft/world/level/levelgen/structure/StrongholdFeature.cpp +++ b/targets/minecraft/world/level/levelgen/structure/StrongholdFeature.cpp @@ -12,7 +12,6 @@ #include "minecraft/GameEnums.h" #include "app/common/GameRules/LevelGeneration/LevelGenerationOptions.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "StrongholdPieces.h" #include "java/JavaMath.h" #include "java/Random.h" diff --git a/targets/minecraft/world/level/newbiome/layer/BiomeOverrideLayer.cpp b/targets/minecraft/world/level/newbiome/layer/BiomeOverrideLayer.cpp index 784dfccf6..ac5c7ba22 100644 --- a/targets/minecraft/world/level/newbiome/layer/BiomeOverrideLayer.cpp +++ b/targets/minecraft/world/level/newbiome/layer/BiomeOverrideLayer.cpp @@ -7,7 +7,6 @@ #include "platform/fs/fs.h" #include "minecraft/world/level/newbiome/layer/Layer.h" #if defined(__linux__) -#include "app/linux/Stubs/winapi_stubs.h" #endif #include "minecraft/world/level/biome/Biome.h" diff --git a/targets/minecraft/world/level/storage/DirectoryLevelStorage.cpp b/targets/minecraft/world/level/storage/DirectoryLevelStorage.cpp index ee4dfbcde..f4910edbd 100644 --- a/targets/minecraft/world/level/storage/DirectoryLevelStorage.cpp +++ b/targets/minecraft/world/level/storage/DirectoryLevelStorage.cpp @@ -16,7 +16,6 @@ #include "LevelData.h" #include "app/common/Console_Debug_enum.h" #include "app/common/GameRules/GameRuleManager.h" -#include "app/linux/Stubs/winapi_stubs.h" #include "util/StringHelpers.h" #include "java/File.h" #include "java/InputOutputStream/ByteArrayInputStream.h" diff --git a/targets/minecraft/world/level/storage/SavedDataStorage.cpp b/targets/minecraft/world/level/storage/SavedDataStorage.cpp index c39f5140b..eee2f488b 100644 --- a/targets/minecraft/world/level/storage/SavedDataStorage.cpp +++ b/targets/minecraft/world/level/storage/SavedDataStorage.cpp @@ -5,7 +5,6 @@ #include #include -#include "app/linux/Stubs/winapi_stubs.h" #include "java/InputOutputStream/DataInputStream.h" #include "java/InputOutputStream/DataOutputStream.h" #include "minecraft/world/entity/ai/village/Villages.h" diff --git a/targets/minecraft/world/level/tile/PressurePlateTile.cpp b/targets/minecraft/world/level/tile/PressurePlateTile.cpp index fc1b59016..f231bd67d 100644 --- a/targets/minecraft/world/level/tile/PressurePlateTile.cpp +++ b/targets/minecraft/world/level/tile/PressurePlateTile.cpp @@ -4,7 +4,6 @@ #include #include -#include "app/linux/Stubs/winapi_stubs.h" #include "minecraft/world/entity/Entity.h" #include "minecraft/world/entity/LivingEntity.h" #include "minecraft/world/entity/player/Player.h"