Files
Nuake-custom/Nuake/Source/Nuake/Modules/Modules.lua
2025-02-01 10:37:47 -05:00

74 lines
2.5 KiB
Lua

-- Function to scan the "Modules" directory and load all module definitions
function loadModules(modulesDir)
local modules = {}
-- Get all folders in the Modules directory
local dirs = os.matchdirs(path.join(modulesDir, "*"))
for _, dir in ipairs(dirs) do
local moduleName = path.getname(dir)
local moduleFile = path.join(dir, "Module.lua")
if os.isfile(moduleFile) then
-- Load the module data
local moduleData = dofile(moduleFile)
-- Set the module name from the directory
moduleData._name = moduleName
print("Found module \"".. moduleData.name .."\" (".. moduleData._name ..")")
table.insert(modules, moduleData)
end
end
return modules
end
-- Function to generate the final C++ file with startup and shutdown functions
function generateModulesFile(modules, outputFilePath, sourceDir)
local outputFile = io.open(outputFilePath, "w")
if not outputFile then
print("Error: Could not write to file ".. outputFilePath)
return
end
outputFile:write("// Auto-generated modules management file\n")
outputFile:write("#include \"Modules.h\"\n\n")
-- Include module header files
for _, module in ipairs(modules) do
outputFile:write("#include \"".. module._name .."/".. module.module_header .."\"\n")
end
outputFile:write("\n")
outputFile:write("#include \"Nuake/Core/Logger.h\"\n\n")
-- Generate StartupModules function
outputFile:write("void Nuake::Modules::StartupModules()\n{\n")
for _, module in ipairs(modules) do
outputFile:write(" Logger::Log(\"Starting ".. module._name .."\", \"modules\");\n")
outputFile:write(" ".. module._name .."_Startup();\n")
end
outputFile:write("}\n\n")
-- Generate ShutdownModules function
outputFile:write("void Nuake::Modules::ShutdownModules()\n{\n")
for _, module in ipairs(modules) do
outputFile:write(" Logger::Log(\"Shutting down ".. module._name .."\", \"modules\");\n")
outputFile:write(" ".. module._name .."_Shutdown();\n")
end
outputFile:write("}\n")
outputFile:close()
local sources = {}
for _, module in ipairs(modules) do
table.insert(sources, sourceDir .. "/" .. module._name .. "/" .. module.module_header)
for _, v in ipairs(module.sources) do
table.insert(sources, sourceDir .. "/" .. module._name .. "/" .. v)
end
end
return sources
end