--
-- codelite_project.lua
-- Generate a CodeLite C/C++ project file.
-- Copyright (c) 2009 Jason Perkins and the Premake project
--
function premake.codelite_project(prj)
_p('')
_p('', premake.esc(prj.name))
premake.walksources(prj, premake.codelite_files)
local types = {
ConsoleApp = "Executable",
WindowedApp = "Executable",
StaticLib = "Static Library",
SharedLib = "Dynamic Library",
}
_p(' ', types[prj.kind])
-- build a list of supported target platforms; I don't support cross-compiling yet
local platforms = premake.filterplatforms(prj.solution, premake[_OPTIONS.cc].platforms, "Native")
for i = #platforms, 1, -1 do
if premake.platforms[platforms[i]].iscrosscompiler then
table.remove(platforms, i)
end
end
for _, platform in ipairs(platforms) do
for cfg in premake.eachconfig(prj, platform) do
local name = premake.esc(cfg.longname)
local compiler = iif(cfg.language == "C", "gcc", "g++")
_p(' ', name, compiler, types[cfg.kind])
local fname = premake.esc(cfg.buildtarget.fullpath)
local objdir = premake.esc(cfg.objectsdir)
local runcmd = cfg.buildtarget.name
local rundir = cfg.buildtarget.directory
local pause = iif(cfg.kind == "WindowedApp", "no", "yes")
_p(' ', fname, objdir, runcmd, rundir, pause)
-- begin compiler block --
local flags = premake.esc(table.join(premake.gcc.getcflags(cfg), premake.gcc.getcxxflags(cfg), cfg.buildoptions))
_p(' ', table.concat(flags, ";"))
for _,v in ipairs(cfg.includedirs) do
_p(' ', premake.esc(v))
end
for _,v in ipairs(cfg.defines) do
_p(' ', premake.esc(v))
end
_p(' ')
-- end compiler block --
-- begin linker block --
flags = premake.esc(table.join(premake.gcc.getldflags(cfg), cfg.linkoptions))
_p(' ', table.concat(flags, ";"))
for _,v in ipairs(premake.getlinks(cfg, "all", "directory")) do
_p(' ', premake.esc(v))
end
for _,v in ipairs(premake.getlinks(cfg, "all", "basename")) do
_p(' ', premake.esc(v))
end
_p(' ')
-- end linker block --
-- begin resource compiler block --
if premake.findfile(cfg, ".rc") then
local defines = table.implode(table.join(cfg.defines, cfg.resdefines), "-D", ";", "")
local options = table.concat(cfg.resoptions, ";")
_p(' ', defines, options)
for _,v in ipairs(table.join(cfg.includedirs, cfg.resincludedirs)) do
_p(' ', premake.esc(v))
end
_p(' ')
else
_p(' ')
end
-- end resource compiler block --
-- begin build steps --
if #cfg.prebuildcommands > 0 then
_p(' ')
for _,v in ipairs(cfg.prebuildcommands) do
_p(' %s', premake.esc(v))
end
_p(' ')
end
if #cfg.postbuildcommands > 0 then
_p(' ')
for _,v in ipairs(cfg.postbuildcommands) do
_p(' %s', premake.esc(v))
end
_p(' ')
end
-- end build steps --
_p(' ')
_p(' ')
_p(' ')
_p(' ')
_p(' ')
_p(' None')
_p(' ')
_p(' ')
_p(' ')
_p(' ')
_p(' ')
_p(' ')
_p(' ')
end
end
_p(' ')
for _, platform in ipairs(platforms) do
for cfg in premake.eachconfig(prj, platform) do
_p(' ', cfg.longname)
for _,dep in ipairs(premake.getdependencies(prj)) do
_p(' ', dep.name)
end
_p(' ')
end
end
_p('')
end
--
-- Write out entries for the files element; called from premake.walksources().
--
function premake.codelite_files(prj, fname, state, nestlevel)
local indent = string.rep(" ", nestlevel + 1)
if (state == "GroupStart") then
io.write(indent .. '\n')
elseif (state == "GroupEnd") then
io.write(indent .. '\n')
else
io.write(indent .. '\n')
end
end