XMake: Add create-class
This commit is contained in:
parent
6b1187b87c
commit
fb9aed2800
|
|
@ -103,6 +103,8 @@ local modules = {
|
|||
}
|
||||
}
|
||||
|
||||
NazaraModules = modules
|
||||
|
||||
includes("xmake/**.lua")
|
||||
|
||||
set_xmakever("2.6.3")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,135 @@
|
|||
|
||||
local modules = NazaraModules
|
||||
|
||||
-- defined at the end of the file
|
||||
local headerTemplate, inlineTemplate, sourceTemplate
|
||||
|
||||
task("create-class")
|
||||
|
||||
set_menu({
|
||||
-- Settings menu usage
|
||||
usage = "xmake create-class [options] name",
|
||||
description = "Check every file for consistency (can fix some errors)",
|
||||
options =
|
||||
{
|
||||
-- Set k mode as key-only bool parameter
|
||||
{nil, "nocpp", "k", nil, "Set this if you don't want a .cpp to be created (header-only classes)" },
|
||||
{'m', "module", "v", nil, "Module where the class should be created" },
|
||||
{nil, "name", "v", nil, "Class name" }
|
||||
}
|
||||
})
|
||||
|
||||
on_run(function ()
|
||||
import("core.base.option")
|
||||
|
||||
local moduleName = option.get("module")
|
||||
if not moduleName then
|
||||
os.raise("missing module name")
|
||||
end
|
||||
|
||||
local classPath = option.get("name")
|
||||
if not classPath then
|
||||
os.raise("missing class name")
|
||||
end
|
||||
|
||||
local module = modules[moduleName]
|
||||
if not module then
|
||||
os.raise("unknown module " .. moduleName)
|
||||
end
|
||||
|
||||
local className = path.basename(classPath)
|
||||
|
||||
local files = {
|
||||
{ TargetPath = path.join("include", "Nazara", moduleName, classPath) .. ".hpp", Template = headerTemplate },
|
||||
{ TargetPath = path.join("include", "Nazara", moduleName, classPath) .. ".inl", Template = inlineTemplate }
|
||||
}
|
||||
|
||||
if not option.get("nocpp") then
|
||||
table.insert(files, { TargetPath = path.join("src", "Nazara", moduleName, classPath) .. ".cpp", Template = sourceTemplate })
|
||||
end
|
||||
|
||||
local replacements = {
|
||||
CLASS_NAME = className,
|
||||
CLASS_PATH = classPath,
|
||||
COPYRIGHT = os.date("%Y") .. [[ Jérôme "Lynix" Leclercq (lynix680@gmail.com)]],
|
||||
HEADER_GUARD = "NAZARA_" .. moduleName:upper() .. "_" .. classPath:gsub("[/\\]", "_"):upper() .. "_HPP",
|
||||
MODULE_API = "NAZARA_" .. moduleName:upper() .. "_API",
|
||||
MODULE_NAME = moduleName,
|
||||
}
|
||||
|
||||
for _, file in pairs(files) do
|
||||
local content = file.Template:gsub("%%([%u_]+)%%", function (kw)
|
||||
local r = replacements[kw]
|
||||
if not r then
|
||||
os.raise("missing replacement for " .. kw)
|
||||
end
|
||||
|
||||
return r
|
||||
end)
|
||||
|
||||
io.writefile(file.TargetPath, content)
|
||||
end
|
||||
end)
|
||||
|
||||
headerTemplate = [[
|
||||
// Copyright (C) %COPYRIGHT%
|
||||
// This file is part of the "Nazara Engine - %MODULE_NAME% module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef %HEADER_GUARD%
|
||||
#define %HEADER_GUARD%
|
||||
|
||||
#include <Nazara/Prerequisites.hpp>
|
||||
#include <Nazara/%MODULE_NAME%/Config.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
class %MODULE_API% %CLASS_NAME%
|
||||
{
|
||||
public:
|
||||
%CLASS_NAME%() = default;
|
||||
%CLASS_NAME%(const %CLASS_NAME%&) = delete;
|
||||
%CLASS_NAME%(%CLASS_NAME%&&) = delete;
|
||||
~%CLASS_NAME%() = default;
|
||||
|
||||
%CLASS_NAME%& operator=(const %CLASS_NAME%&) = delete;
|
||||
%CLASS_NAME%& operator=(%CLASS_NAME%&&) = delete;
|
||||
|
||||
private:
|
||||
};
|
||||
}
|
||||
|
||||
#include <Nazara/%MODULE_NAME%/%CLASS_PATH%.inl>
|
||||
|
||||
#endif // %HEADER_GUARD%
|
||||
]]
|
||||
|
||||
inlineTemplate = [[
|
||||
// Copyright (C) %COPYRIGHT%
|
||||
// This file is part of the "Nazara Engine - %MODULE_NAME% module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/%MODULE_NAME%/%CLASS_PATH%.hpp>
|
||||
#include <Nazara/%MODULE_NAME%/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
}
|
||||
|
||||
#include <Nazara/%MODULE_NAME%/DebugOff.hpp>
|
||||
]]
|
||||
|
||||
sourceTemplate = [[
|
||||
// Copyright (C) %COPYRIGHT%
|
||||
// This file is part of the "Nazara Engine - %MODULE_NAME% module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/%MODULE_NAME%/%CLASS_PATH%.hpp>
|
||||
#include <Nazara/%MODULE_NAME%/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
}
|
||||
]]
|
||||
Loading…
Reference in New Issue