Build: Add CodeBlocks target to premake5
This commit is contained in:
parent
6ebe29ceb4
commit
5aeb9f8d59
|
|
@ -0,0 +1,6 @@
|
||||||
|
if (PremakeVersion >= 50) then
|
||||||
|
dofile("codeblocks/_codeblocks.lua")
|
||||||
|
dofile("codeblocks/codeblocks.lua")
|
||||||
|
end
|
||||||
|
|
||||||
|
ACTION.Manual = true
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
--
|
||||||
|
-- _codeblocks.lua
|
||||||
|
-- Define the Code::Blocks action(s).
|
||||||
|
-- Copyright (c) 2002-2011 Jason Perkins and the Premake project
|
||||||
|
--
|
||||||
|
local p = premake
|
||||||
|
|
||||||
|
p.modules.codeblocks = {}
|
||||||
|
p.modules.codeblocks._VERSION = p._VERSION
|
||||||
|
|
||||||
|
local codeblocks = p.modules.codeblocks
|
||||||
|
|
||||||
|
newaction {
|
||||||
|
trigger = "codeblocks",
|
||||||
|
shortname = "Code::Blocks",
|
||||||
|
description = "Generate Code::Blocks project files",
|
||||||
|
|
||||||
|
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib" },
|
||||||
|
|
||||||
|
valid_languages = { "C", "C++" },
|
||||||
|
|
||||||
|
valid_tools = {
|
||||||
|
cc = { "clang", "gcc", "ow" },
|
||||||
|
},
|
||||||
|
|
||||||
|
onWorkspace = function(wks)
|
||||||
|
p.modules.codeblocks.generateWorkspace(wks)
|
||||||
|
end,
|
||||||
|
|
||||||
|
onProject = function(prj)
|
||||||
|
p.modules.codeblocks.generateProject(prj)
|
||||||
|
end,
|
||||||
|
|
||||||
|
onCleanWorkspace = function(wks)
|
||||||
|
p.clean.file(wks, wks.name .. ".workspace")
|
||||||
|
p.clean.file(wks, wks.name .. ".workspace.layout")
|
||||||
|
end,
|
||||||
|
|
||||||
|
onCleanProject = function(prj)
|
||||||
|
p.clean.file(prj, prj.name .. ".workspace")
|
||||||
|
p.clean.file(prj, prj.name .. ".depend")
|
||||||
|
p.clean.file(prj, prj.name .. ".layout")
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
--
|
||||||
|
-- codeblocks_workspace.lua
|
||||||
|
-- Generate a Code::Blocks workspace.
|
||||||
|
-- Copyright (c) 2009 Jason Perkins and the Premake project
|
||||||
|
--
|
||||||
|
|
||||||
|
local p = premake
|
||||||
|
|
||||||
|
p.modules.codeblocks = {}
|
||||||
|
p.modules.codeblocks._VERSION = p._VERSION
|
||||||
|
|
||||||
|
local codeblocks = p.modules.codeblocks
|
||||||
|
local project = p.project
|
||||||
|
|
||||||
|
|
||||||
|
function codeblocks.cfgname(cfg)
|
||||||
|
local cfgname = cfg.buildcfg
|
||||||
|
if codeblocks.workspace.multiplePlatforms then
|
||||||
|
cfgname = string.format("%s|%s", cfg.platform, cfg.buildcfg)
|
||||||
|
end
|
||||||
|
return cfgname
|
||||||
|
end
|
||||||
|
|
||||||
|
function codeblocks.esc(value)
|
||||||
|
local result = value:gsub('"', '"')
|
||||||
|
result = result:gsub('<', '<')
|
||||||
|
result = result:gsub('>', '>')
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
function codeblocks.generateWorkspace(wks)
|
||||||
|
p.eol("\r\n")
|
||||||
|
p.indent("\t")
|
||||||
|
p.escaper(codeblocks.esc)
|
||||||
|
|
||||||
|
p.generate(wks, ".workspace", codeblocks.workspace.generate)
|
||||||
|
end
|
||||||
|
|
||||||
|
function codeblocks.generateProject(prj)
|
||||||
|
p.eol("\r\n")
|
||||||
|
p.indent("\t")
|
||||||
|
p.escaper(codeblocks.esc)
|
||||||
|
|
||||||
|
if project.iscpp(prj) then
|
||||||
|
p.generate(prj, ".cbp", codeblocks.project.generate)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function codeblocks.cleanWorkspace(wks)
|
||||||
|
p.clean.file(wks, wks.name .. ".workspace")
|
||||||
|
p.clean.file(wks, wks.name .. ".workspace.layout")
|
||||||
|
end
|
||||||
|
|
||||||
|
function codeblocks.cleanProject(prj)
|
||||||
|
p.clean.file(prj, prj.name .. ".workspace")
|
||||||
|
p.clean.file(prj, prj.name .. ".depend")
|
||||||
|
p.clean.file(prj, prj.name .. ".layout")
|
||||||
|
end
|
||||||
|
|
||||||
|
function codeblocks.cleanTarget(prj)
|
||||||
|
-- TODO..
|
||||||
|
end
|
||||||
|
|
||||||
|
include("codeblocks_workspace.lua")
|
||||||
|
include("codeblocks_project.lua")
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,243 @@
|
||||||
|
--
|
||||||
|
-- codeblocks_cbp.lua
|
||||||
|
-- Generate a Code::Blocks C/C++ project.
|
||||||
|
-- Copyright (c) 2009, 2011 Jason Perkins and the Premake project
|
||||||
|
--
|
||||||
|
|
||||||
|
local p = premake
|
||||||
|
local project = p.project
|
||||||
|
local config = p.config
|
||||||
|
local tree = p.tree
|
||||||
|
local codeblocks = p.modules.codeblocks
|
||||||
|
|
||||||
|
codeblocks.project = {}
|
||||||
|
local m = codeblocks.project
|
||||||
|
m.elements = {}
|
||||||
|
|
||||||
|
m.ctools = {
|
||||||
|
gcc = "gcc",
|
||||||
|
msc = "Visual C++",
|
||||||
|
}
|
||||||
|
|
||||||
|
function m.getcompilername(cfg)
|
||||||
|
local tool = _OPTIONS.cc or cfg.toolset or p.GCC
|
||||||
|
|
||||||
|
local toolset = p.tools[tool]
|
||||||
|
if not toolset then
|
||||||
|
error("Invalid toolset '" + (_OPTIONS.cc or cfg.toolset) + "'")
|
||||||
|
end
|
||||||
|
|
||||||
|
return m.ctools[tool]
|
||||||
|
end
|
||||||
|
|
||||||
|
function m.getcompiler(cfg)
|
||||||
|
local toolset = p.tools[_OPTIONS.cc or cfg.toolset or p.GCC]
|
||||||
|
if not toolset then
|
||||||
|
error("Invalid toolset '" + (_OPTIONS.cc or cfg.toolset) + "'")
|
||||||
|
end
|
||||||
|
return toolset
|
||||||
|
end
|
||||||
|
|
||||||
|
function m.header(prj)
|
||||||
|
_p('<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>')
|
||||||
|
_p('<CodeBlocks_project_file>')
|
||||||
|
_p(1,'<FileVersion major="1" minor="6" />')
|
||||||
|
|
||||||
|
-- write project block header
|
||||||
|
_p(1,'<Project>')
|
||||||
|
_p(2,'<Option title="%s" />', prj.name)
|
||||||
|
_p(2,'<Option pch_mode="2" />')
|
||||||
|
end
|
||||||
|
|
||||||
|
function m.footer(prj)
|
||||||
|
-- write project block footer
|
||||||
|
_p(1,'</Project>')
|
||||||
|
_p('</CodeBlocks_project_file>')
|
||||||
|
end
|
||||||
|
|
||||||
|
m.elements.project = function(prj)
|
||||||
|
return {
|
||||||
|
m.header,
|
||||||
|
m.configurations,
|
||||||
|
m.files,
|
||||||
|
m.extensions,
|
||||||
|
m.footer
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Project: Generate the CodeBlocks project file.
|
||||||
|
--
|
||||||
|
function m.generate(prj)
|
||||||
|
p.utf8()
|
||||||
|
|
||||||
|
p.callArray(m.elements.project, prj)
|
||||||
|
end
|
||||||
|
|
||||||
|
function m.configurations(prj)
|
||||||
|
-- write configuration blocks
|
||||||
|
_p(2,'<Build>')
|
||||||
|
local platforms = {}
|
||||||
|
for cfg in project.eachconfig(prj) do
|
||||||
|
local found = false
|
||||||
|
for k,v in pairs(platforms) do
|
||||||
|
if (v.platform == cfg.platform) then
|
||||||
|
table.insert(v.configs, cfg)
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if (not found) then
|
||||||
|
table.insert(platforms, {platform = cfg.platform, configs = {cfg}})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for k,platform in pairs(platforms) do
|
||||||
|
for k,cfg in pairs(platform.configs) do
|
||||||
|
local compiler = m.getcompiler(cfg)
|
||||||
|
|
||||||
|
_p(3,'<Target title="%s">', cfg.longname)
|
||||||
|
|
||||||
|
_p(4,'<Option output="%s" prefix_auto="0" extension_auto="0" />', p.esc(cfg.buildtarget.relpath))
|
||||||
|
|
||||||
|
if cfg.debugdir then
|
||||||
|
_p(4,'<Option working_dir="%s" />', p.esc(cfg.debugdir))
|
||||||
|
end
|
||||||
|
|
||||||
|
_p(4,'<Option object_output="%s" />', p.esc(cfg.objectsdir))
|
||||||
|
|
||||||
|
-- identify the type of binary
|
||||||
|
local types = { WindowedApp = 0, ConsoleApp = 1, StaticLib = 2, SharedLib = 3 }
|
||||||
|
_p(4,'<Option type="%d" />', types[cfg.kind])
|
||||||
|
|
||||||
|
_p(4,'<Option compiler="%s" />', m.getcompilername(cfg))
|
||||||
|
|
||||||
|
if (cfg.kind == "SharedLib") then
|
||||||
|
_p(4,'<Option createDefFile="0" />')
|
||||||
|
_p(4,'<Option createStaticLib="%s" />', iif(cfg.flags.NoImportLib, 0, 1))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- begin compiler block --
|
||||||
|
_p(4,'<Compiler>')
|
||||||
|
for _,flag in ipairs(table.join(compiler.getcflags(cfg), compiler.getcxxflags(cfg), compiler.getdefines(cfg.defines), cfg.buildoptions)) do
|
||||||
|
_p(5,'<Add option="%s" />', p.esc(flag))
|
||||||
|
end
|
||||||
|
if not cfg.flags.NoPCH and cfg.pchheader then
|
||||||
|
_p(5,'<Add option="-Winvalid-pch" />')
|
||||||
|
_p(5,'<Add option="-include "%s"" />', p.esc(cfg.pchheader))
|
||||||
|
end
|
||||||
|
for _,v in ipairs(cfg.includedirs) do
|
||||||
|
_p(5,'<Add directory="%s" />', p.esc(path.getrelative(prj.location, v)))
|
||||||
|
end
|
||||||
|
_p(4,'</Compiler>')
|
||||||
|
-- end compiler block --
|
||||||
|
|
||||||
|
-- begin linker block --
|
||||||
|
_p(4,'<Linker>')
|
||||||
|
for _,flag in ipairs(table.join(compiler.getldflags(cfg), cfg.linkoptions)) do
|
||||||
|
_p(5,'<Add option="%s" />', p.esc(flag))
|
||||||
|
end
|
||||||
|
for _,v in ipairs(config.getlinks(cfg, "all", "directory")) do
|
||||||
|
_p(5,'<Add directory="%s" />', p.esc(v))
|
||||||
|
end
|
||||||
|
for _,v in ipairs(config.getlinks(cfg, "all", "basename")) do
|
||||||
|
_p(5,'<Add library="%s" />', p.esc(v))
|
||||||
|
end
|
||||||
|
_p(4,'</Linker>')
|
||||||
|
-- end linker block --
|
||||||
|
|
||||||
|
-- begin resource compiler block --
|
||||||
|
if config.findfile(cfg, ".rc") then
|
||||||
|
_p(4,'<ResourceCompiler>')
|
||||||
|
for _,v in ipairs(cfg.includedirs) do
|
||||||
|
_p(5,'<Add directory="%s" />', p.esc(v))
|
||||||
|
end
|
||||||
|
for _,v in ipairs(cfg.resincludedirs) do
|
||||||
|
_p(5,'<Add directory="%s" />', p.esc(v))
|
||||||
|
end
|
||||||
|
_p(4,'</ResourceCompiler>')
|
||||||
|
end
|
||||||
|
-- end resource compiler block --
|
||||||
|
|
||||||
|
-- begin build steps --
|
||||||
|
if #cfg.prebuildcommands > 0 or #cfg.postbuildcommands > 0 then
|
||||||
|
_p(4,'<ExtraCommands>')
|
||||||
|
for _,v in ipairs(cfg.prebuildcommands) do
|
||||||
|
_p(5,'<Add before="%s" />', p.esc(v))
|
||||||
|
end
|
||||||
|
for _,v in ipairs(cfg.postbuildcommands) do
|
||||||
|
_p(5,'<Add after="%s" />', p.esc(v))
|
||||||
|
end
|
||||||
|
|
||||||
|
_p(4,'</ExtraCommands>')
|
||||||
|
end
|
||||||
|
-- end build steps --
|
||||||
|
|
||||||
|
_p(3,'</Target>')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
_p(2,'</Build>')
|
||||||
|
end
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Write out a list of the source code files in the project.
|
||||||
|
--
|
||||||
|
|
||||||
|
function m.files(prj)
|
||||||
|
local pchheader
|
||||||
|
if (prj.pchheader) then
|
||||||
|
pchheader = path.getrelative(prj.location, prj.pchheader)
|
||||||
|
end
|
||||||
|
|
||||||
|
local tr = project.getsourcetree(prj)
|
||||||
|
tree.traverse(tr, {
|
||||||
|
-- source files are handled at the leaves
|
||||||
|
onleaf = function(node, depth)
|
||||||
|
if node.relpath == node.vpath then
|
||||||
|
_p(2,'<Unit filename="%s">', node.relpath)
|
||||||
|
else
|
||||||
|
_p(2,'<Unit filename="%s">', node.name)
|
||||||
|
_p(3,'<Option virtualFolder="%s" />', path.getdirectory(node.vpath))
|
||||||
|
end
|
||||||
|
if path.isresourcefile(node.name) then
|
||||||
|
_p(3,'<Option compilerVar="WINDRES" />')
|
||||||
|
elseif path.iscfile(node.name) and prj.language == "C++" then
|
||||||
|
_p(3,'<Option compilerVar="CC" />')
|
||||||
|
end
|
||||||
|
if not prj.flags.NoPCH and node.name == pchheader then
|
||||||
|
_p(3,'<Option compilerVar="%s" />', iif(prj.language == "C", "CC", "CPP"))
|
||||||
|
_p(3,'<Option compile="1" />')
|
||||||
|
_p(3,'<Option weight="0" />')
|
||||||
|
_p(3,'<Add option="-x c++-header" />')
|
||||||
|
end
|
||||||
|
_p(2,'</Unit>')
|
||||||
|
|
||||||
|
end,
|
||||||
|
}, false, 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
function m.extensions(prj)
|
||||||
|
for cfg in project.eachconfig(prj) do
|
||||||
|
if cfg.debugenvs and #cfg.debugenvs > 0 then
|
||||||
|
--Assumption: if gcc is being used then so is gdb although this section will be ignored by
|
||||||
|
--other debuggers. If using gcc and not gdb it will silently not pass the
|
||||||
|
--environment arguments to the debugger
|
||||||
|
if m.getcompilername(cfg) == "gcc" then
|
||||||
|
_p(3,'<debugger>')
|
||||||
|
_p(4,'<remote_debugging target="%s">', p.esc(cfg.longname))
|
||||||
|
local args = ''
|
||||||
|
local sz = #cfg.debugenvs
|
||||||
|
for idx, v in ipairs(cfg.debugenvs) do
|
||||||
|
args = args .. 'set env ' .. v
|
||||||
|
if sz ~= idx then args = args .. '
' end
|
||||||
|
end
|
||||||
|
_p(5,'<options additional_cmds_before="%s" />',args)
|
||||||
|
_p(4,'</remote_debugging>')
|
||||||
|
_p(3,'</debugger>')
|
||||||
|
else
|
||||||
|
error('Sorry at this moment there is no support for debug environment variables with this debugger and codeblocks')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
--
|
||||||
|
-- Name: codelite/codelite_workspace.lua
|
||||||
|
-- Purpose: Generate a CodeLite workspace.
|
||||||
|
-- Author: Ryan Pusztai
|
||||||
|
-- Modified by: Andrea Zanellato
|
||||||
|
-- Manu Evans
|
||||||
|
-- Created: 2013/05/06
|
||||||
|
-- Copyright: (c) 2008-2015 Jason Perkins and the Premake project
|
||||||
|
--
|
||||||
|
|
||||||
|
local p = premake
|
||||||
|
local project = p.project
|
||||||
|
local workspace = p.workspace
|
||||||
|
local tree = p.tree
|
||||||
|
local codeblocks = p.modules.codeblocks
|
||||||
|
|
||||||
|
codeblocks.workspace = {}
|
||||||
|
local m = codeblocks.workspace
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Generate a CodeBlocks workspace
|
||||||
|
--
|
||||||
|
function m.generate(wks)
|
||||||
|
p.utf8()
|
||||||
|
|
||||||
|
_p('<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>')
|
||||||
|
_p('<CodeBlocks_workspace_file>')
|
||||||
|
_p(1,'<Workspace title="%s">', wks.name)
|
||||||
|
|
||||||
|
for prj in workspace.eachproject(wks) do
|
||||||
|
local fname = path.join(path.getrelative(wks.location, prj.location), prj.name)
|
||||||
|
local active = iif(prj.project == wks.projects[1], ' active="1"', '')
|
||||||
|
|
||||||
|
_p(2,'<Project filename="%s.cbp"%s>', fname, active)
|
||||||
|
for _,dep in ipairs(project.getdependencies(prj)) do
|
||||||
|
_p(3,'<Depends filename="%s.cbp" />', path.join(path.getrelative(wks.location, dep.location), dep.name))
|
||||||
|
end
|
||||||
|
|
||||||
|
_p(2,'</Project>')
|
||||||
|
end
|
||||||
|
|
||||||
|
_p(1,'</Workspace>')
|
||||||
|
_p('</CodeBlocks_workspace_file>')
|
||||||
|
end
|
||||||
|
|
@ -14,6 +14,12 @@ function NazaraBuild:Execute()
|
||||||
return -- Alors l'utilisateur voulait probablement savoir comment utiliser le programme, on ne fait rien
|
return -- Alors l'utilisateur voulait probablement savoir comment utiliser le programme, on ne fait rien
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if (PremakeVersion >= 50) then
|
||||||
|
filter { "kind:SharedLib", "action:codeblocks or codelite or gmake or xcode3 or xcode4" }
|
||||||
|
implibprefix "lib"
|
||||||
|
implibextension ".a"
|
||||||
|
end
|
||||||
|
|
||||||
local platformData
|
local platformData
|
||||||
if (os.is64bit()) then
|
if (os.is64bit()) then
|
||||||
platformData = {"x64", "x32"}
|
platformData = {"x64", "x32"}
|
||||||
|
|
@ -721,7 +727,7 @@ function NazaraBuild:MakeInstallCommands(infoTable)
|
||||||
|
|
||||||
for k,v in pairs(self.InstallDir) do
|
for k,v in pairs(self.InstallDir) do
|
||||||
local destPath = path.translate(path.isabsolute(k) and k or "../../" .. k)
|
local destPath = path.translate(path.isabsolute(k) and k or "../../" .. k)
|
||||||
postbuildcommands({[[xcopy "%{path.translate(cfg.linktarget.relpath):sub(1, -5) .. ".dll"}" "]] .. destPath .. [[\" /E /Y]]})
|
postbuildcommands({[[xcopy "%{path.translate(cfg.buildtarget.relpath)}" "]] .. destPath .. [[\" /E /Y]]})
|
||||||
end
|
end
|
||||||
|
|
||||||
for k,fileName in pairs(table.join(infoTable.Libraries, infoTable.DynLib)) do
|
for k,fileName in pairs(table.join(infoTable.Libraries, infoTable.DynLib)) do
|
||||||
|
|
@ -877,40 +883,38 @@ function NazaraBuild:Process(infoTable)
|
||||||
end
|
end
|
||||||
|
|
||||||
function NazaraBuild:RegisterAction(actionTable)
|
function NazaraBuild:RegisterAction(actionTable)
|
||||||
if (actionTable.Name == nil or type(actionTable.Name) ~= "string" or string.len(actionTable.Name) == 0) then
|
if (not actionTable.Manual) then
|
||||||
return false, "Invalid action name"
|
if (actionTable.Name == nil or type(actionTable.Name) ~= "string" or string.len(actionTable.Name) == 0) then
|
||||||
|
return false, "Invalid action name"
|
||||||
|
end
|
||||||
|
|
||||||
|
local lowerCaseName = string.lower(actionTable.Name)
|
||||||
|
if (self.Actions[lowerCaseName] ~= nil) then
|
||||||
|
return false, "This action name is already in use"
|
||||||
|
end
|
||||||
|
|
||||||
|
if (actionTable.Description == nil or type(actionTable.Description) ~= "string") then
|
||||||
|
return false, "Action description is invalid"
|
||||||
|
end
|
||||||
|
|
||||||
|
if (string.len(actionTable.Description) == 0) then
|
||||||
|
return false, "Action description is empty"
|
||||||
|
end
|
||||||
|
|
||||||
|
if (actionTable.Function == nil or type(actionTable.Function) ~= "function") then
|
||||||
|
return false, "Action function is invalid"
|
||||||
|
end
|
||||||
|
|
||||||
|
self.Actions[lowerCaseName] = actionTable
|
||||||
|
|
||||||
|
newaction
|
||||||
|
{
|
||||||
|
trigger = lowerCaseName,
|
||||||
|
description = actionTable.Description,
|
||||||
|
execute = function () actionTable:Function() end
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local lowerCaseName = string.lower(actionTable.Name)
|
|
||||||
if (self.Actions[lowerCaseName] ~= nil) then
|
|
||||||
return false, "This action name is already in use"
|
|
||||||
end
|
|
||||||
|
|
||||||
if (actionTable.Description == nil or type(actionTable.Description) ~= "string") then
|
|
||||||
return false, "Action description is invalid"
|
|
||||||
end
|
|
||||||
|
|
||||||
if (string.len(actionTable.Description) == 0) then
|
|
||||||
return false, "Action description is empty"
|
|
||||||
end
|
|
||||||
|
|
||||||
if (self.Actions[actionTable.name] ~= nil) then
|
|
||||||
return false, "Action name \"" .. actionTable.name .. " is already registred"
|
|
||||||
end
|
|
||||||
|
|
||||||
if (actionTable.Function == nil or type(actionTable.Function) ~= "function") then
|
|
||||||
return false, "Action function is invalid"
|
|
||||||
end
|
|
||||||
|
|
||||||
self.Actions[lowerCaseName] = actionTable
|
|
||||||
|
|
||||||
newaction
|
|
||||||
{
|
|
||||||
trigger = lowerCaseName,
|
|
||||||
description = actionTable.Description,
|
|
||||||
execute = function () actionTable:Function() end
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue