mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-08-11 22:03:09 -06:00
ide: Makefiles (more standard, added LDFLAGS support)
git-svn-id: svn://ultimatepp.org/upp/trunk@2061 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
167eaf5522
commit
a987957ddd
3 changed files with 1346 additions and 1343 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -1,236 +1,235 @@
|
|||
#include "Builders.h"
|
||||
|
||||
static String MakeIdent(const char *name)
|
||||
{
|
||||
String out;
|
||||
for(; *name; name++)
|
||||
out << (iscid(*name) ? *name : '_');
|
||||
return out;
|
||||
}
|
||||
|
||||
static String MakeSourcePath(const Vector<String>& dirs, String fn, bool raw, bool exporting)
|
||||
{
|
||||
fn = UnixPath(fn);
|
||||
for(int i = 0; i < dirs.GetCount(); i++)
|
||||
{
|
||||
int dl = dirs[i].GetLength();
|
||||
if(fn.GetLength() >= dl + 2 && !memcmp(fn, dirs[i], dl) && fn[dl] == '/') {
|
||||
String s;
|
||||
if(!exporting)
|
||||
s << "$(UPPDIR" << (i + 1) << ")";
|
||||
s << AdjustMakePath(fn.GetIter(dl + 1));
|
||||
return s;
|
||||
}
|
||||
}
|
||||
return raw ? String() : AdjustMakePath(fn);
|
||||
}
|
||||
|
||||
String CppBuilder::GetMakePath(String fn) const
|
||||
{
|
||||
return ::GetMakePath(fn, HasFlag("WIN32"));
|
||||
}
|
||||
|
||||
void CppBuilder::AddMakeFile(MakeFile& makefile, String package,
|
||||
const Vector<String>& all_uses, const Vector<String>& all_libraries,
|
||||
const Index<String>& common_config, bool exporting)
|
||||
{
|
||||
String packagepath = PackagePath(package);
|
||||
Package pkg;
|
||||
pkg.Load(packagepath);
|
||||
String packagedir = GetFileFolder(packagepath);
|
||||
Vector<String> src = GetUppDirs();
|
||||
for(int i = 0; i < src.GetCount(); i++)
|
||||
src[i] = UnixPath(src[i]);
|
||||
|
||||
bool main = HasFlag("MAIN");
|
||||
bool is_shared = HasFlag("SO");
|
||||
bool libout = !main && !HasFlag("NOLIB");
|
||||
bool win32 = HasFlag("WIN32");
|
||||
|
||||
String pack_ident = MakeIdent(package);
|
||||
String outdir = "OutDir_" + pack_ident;
|
||||
String macros = "Macro_" + pack_ident;
|
||||
String macdef = "$(Macro)";
|
||||
String objext = (HasFlag("MSC") || HasFlag("EVC") ? ".obj" : ".o");
|
||||
|
||||
Vector<String> x(config.GetKeys(), 1);
|
||||
Sort(x);
|
||||
for(int i = 0; i < x.GetCount(); i++) {
|
||||
if(common_config.Find(x[i]) < 0)
|
||||
macdef << " -Dflag" << x[i];
|
||||
x[i] = InitCaps(x[i]);
|
||||
}
|
||||
|
||||
makefile.outdir << "$(" << outdir << ")";
|
||||
makefile.outfile << AdjustMakePath(GetFileTitle(NativePath(package)));
|
||||
if(main)
|
||||
makefile.outfile << GetTargetExt();
|
||||
else if(is_shared)
|
||||
makefile.outfile << (win32 ? ".dll" : ".so");
|
||||
else
|
||||
makefile.outfile << (win32 && HasFlag("MSC") ? ".lib" : ".a");
|
||||
makefile.output << (main ? String("$(OutDir)") : makefile.outdir) << makefile.outfile;
|
||||
|
||||
if(main) {
|
||||
String cc = "c++ -c";
|
||||
if(HasFlag("DEBUG"))
|
||||
cc << " -D_DEBUG " << debug_options;
|
||||
else
|
||||
cc << ' ' << release_options;
|
||||
if(HasFlag("DEBUG_MINIMAL"))
|
||||
cc << " -ggdb -g1";
|
||||
if(HasFlag("DEBUG_FULL"))
|
||||
cc << " -ggdb -g2";
|
||||
if(is_shared && !win32)
|
||||
cc << " -fPIC ";
|
||||
cc << ' ' << Gather(pkg.option, config.GetKeys());
|
||||
makefile.config << "CC = " << cc << "\n"
|
||||
"CFLAGS = $(CC) -x c\n"
|
||||
"CPPFLAGS = $(CC) -x c++ \n"
|
||||
"LIBPATH = ";
|
||||
for(int i = 0; i < libpath.GetCount(); i++)
|
||||
makefile.config << " -L" << GetMakePath(AdjustMakePath(GetHostPathQ(libpath[i])));
|
||||
makefile.config << "\n"
|
||||
"AR = ar -sr\n";
|
||||
|
||||
makefile.install << "\t-mkdir -p $(OutDir)\n";
|
||||
|
||||
Vector<String> lib;
|
||||
String lnk;
|
||||
lnk << "c++";
|
||||
if(!HasFlag("SHARED"))
|
||||
lnk << " -static";
|
||||
if(HasFlag("WIN32")) {
|
||||
lnk << " -mwindows";
|
||||
if(!HasFlag("GUI"))
|
||||
makefile.linkfiles << " -mconsole";
|
||||
}
|
||||
lnk << " -o $(OutFile)";
|
||||
if(HasFlag("DEBUG") || HasFlag("DEBUG_MINIMAL") || HasFlag("DEBUG_FULL"))
|
||||
lnk << " -ggdb";
|
||||
else
|
||||
lnk << (!HasFlag("OSX11") ? " -Wl,-s" : "");
|
||||
|
||||
lnk << " $(LIBPATH)";
|
||||
if (!HasFlag("OSX11"))
|
||||
lnk << " -Wl,-O,2";
|
||||
lnk << " $(LINKOPTIONS)";
|
||||
|
||||
makefile.linkfiles = lnk;
|
||||
}
|
||||
|
||||
makefile.config << outdir << " = $(UPPOUT)"
|
||||
<< GetMakePath(AdjustMakePath(String().Cat() << package << '/' << method << '-' << Join(x, "-") << '/')) << "\n"
|
||||
<< macros << " = " << macdef << "\n";
|
||||
|
||||
makefile.install << "\t-mkdir -p $(" << outdir << ")\n";
|
||||
|
||||
String libdep, libfiles;
|
||||
|
||||
libdep << makefile.output << ":";
|
||||
if(is_shared)
|
||||
{
|
||||
libfiles = "c++ -shared -fPIC"; // -v";
|
||||
Point p = ExtractVersion();
|
||||
if(!IsNull(p.x)) {
|
||||
libfiles << " -Xlinker --major-image-version -Xlinker " << p.x;
|
||||
if(!IsNull(p.y))
|
||||
libfiles << " -Xlinker --minor-image-version -Xlinker " << p.y;
|
||||
}
|
||||
libfiles << " -o ";
|
||||
}
|
||||
else
|
||||
libfiles = "$(AR) ";
|
||||
libfiles << makefile.output;
|
||||
|
||||
for(int i = 0; i < pkg.GetCount(); i++)
|
||||
if(!pkg[i].separator) {
|
||||
String gop = Gather(pkg[i].option, config.GetKeys());
|
||||
String fn = SourcePath(package, pkg[i]);
|
||||
String ext = ToLower(GetFileExt(fn));
|
||||
bool isc = ext == ".c";
|
||||
bool isrc = (ext == ".rc" && HasFlag("WIN32"));
|
||||
bool iscpp = (ext == ".cpp" || ext == ".cc" || ext == ".cxx");
|
||||
bool isicpp = (ext == ".icpp");
|
||||
if(isc || isrc || iscpp || isicpp) {
|
||||
String outfile;
|
||||
outfile << makefile.outdir << AdjustMakePath(GetFileTitle(fn)) << (isrc ? "_rc" : "") << objext;
|
||||
String srcfile = GetMakePath(MakeSourcePath(src, fn, false, exporting));
|
||||
makefile.rules << outfile << ": " << srcfile;
|
||||
Vector<String> dep = HdependGetDependencies(fn);
|
||||
Sort(dep, GetLanguageInfo());
|
||||
for(int d = 0; d < dep.GetCount(); d++) {
|
||||
String dfn = MakeSourcePath(src, dep[d], true, exporting);
|
||||
if(!IsNull(dfn))
|
||||
makefile.rules << " \\\n\t" << GetMakePath(dfn);
|
||||
}
|
||||
makefile.rules << "\n"
|
||||
"\t" << (isc ? "$(CFLAGS)" : "$(CPPFLAGS)") << " $(CINC) $(" << macros << ") "
|
||||
<< gop << " " << srcfile << " -o " << outfile << "\n\n";
|
||||
if(!libout || isicpp) {
|
||||
makefile.linkdep << " \\\n\t" << outfile;
|
||||
makefile.linkfiles << " \\\n\t\t" << outfile;
|
||||
}
|
||||
else {
|
||||
libdep << " \\\n\t" << outfile;
|
||||
libfiles << " \\\n\t\t" << outfile;
|
||||
}
|
||||
}
|
||||
else
|
||||
if(ext == ".o" || ext == ".obj" || ext == ".a" || ext == ".so" || ext == ".lib" || ext == ".dll") {
|
||||
makefile.linkdep << " \\\n\t" << fn;
|
||||
makefile.linkfiles << ' ' << fn;
|
||||
}
|
||||
}
|
||||
|
||||
if(libout) {
|
||||
makefile.rules << libdep << "\n\t" << libfiles << "\n\n";
|
||||
makefile.linkdep << " \\\n\t" << makefile.output;
|
||||
makefile.linkfiles << " \\\n\t\t\t" << makefile.output;
|
||||
}
|
||||
|
||||
if(main) {
|
||||
if(!HasFlag("SOLARIS")&&!HasFlag("OSX11"))
|
||||
makefile.linkfiles << " \\\n\t\t-Wl,--start-group ";
|
||||
for(int i = 0; i < all_libraries.GetCount(); i++) {
|
||||
String ln = all_libraries[i];
|
||||
String ext = ToLower(GetFileExt(ln));
|
||||
if(ext == ".a" || ext == ".so" || ext == ".dll")
|
||||
makefile.linkfileend << " \\\n\t\t\t" << GetHostPathQ(FindInDirs(libpath, ln));
|
||||
else
|
||||
makefile.linkfileend << " \\\n\t\t\t-l" << ln;
|
||||
}
|
||||
if(!HasFlag("SOLARIS")&&!HasFlag("OSX11"))
|
||||
makefile.linkfileend << " \\\n\t\t-Wl,--end-group\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
Point CppBuilder::ExtractVersion()
|
||||
{
|
||||
Point v = Point(Null, Null);
|
||||
CParser p(version);
|
||||
while(!p.IsEof()) {
|
||||
if(p.IsNumber()) {
|
||||
v.x = p.ReadNumber();
|
||||
break;
|
||||
}
|
||||
p.GetChar();
|
||||
p.Spaces();
|
||||
}
|
||||
while(!p.IsEof()) {
|
||||
if(p.IsNumber()) {
|
||||
v.y = p.ReadNumber();
|
||||
break;
|
||||
}
|
||||
p.GetChar();
|
||||
p.Spaces();
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
void CppBuilder::ShowTime(int count, int start_time)
|
||||
{
|
||||
if(count)
|
||||
PutConsole(NFormat("%d file(s) compiled in %s %d msec/file",
|
||||
count, GetPrintTime(start_time), msecs(start_time) / count));
|
||||
}
|
||||
#include "Builders.h"
|
||||
|
||||
static String MakeIdent(const char *name)
|
||||
{
|
||||
String out;
|
||||
for(; *name; name++)
|
||||
out << (iscid(*name) ? *name : '_');
|
||||
return out;
|
||||
}
|
||||
|
||||
static String MakeSourcePath(const Vector<String>& dirs, String fn, bool raw, bool exporting)
|
||||
{
|
||||
fn = UnixPath(fn);
|
||||
for(int i = 0; i < dirs.GetCount(); i++)
|
||||
{
|
||||
int dl = dirs[i].GetLength();
|
||||
if(fn.GetLength() >= dl + 2 && !memcmp(fn, dirs[i], dl) && fn[dl] == '/') {
|
||||
String s;
|
||||
if(!exporting)
|
||||
s << "$(UPPDIR" << (i + 1) << ")";
|
||||
s << AdjustMakePath(fn.GetIter(dl + 1));
|
||||
return s;
|
||||
}
|
||||
}
|
||||
return raw ? String() : AdjustMakePath(fn);
|
||||
}
|
||||
|
||||
String CppBuilder::GetMakePath(String fn) const
|
||||
{
|
||||
return ::GetMakePath(fn, HasFlag("WIN32"));
|
||||
}
|
||||
|
||||
void CppBuilder::AddMakeFile(MakeFile& makefile, String package,
|
||||
const Vector<String>& all_uses, const Vector<String>& all_libraries,
|
||||
const Index<String>& common_config, bool exporting)
|
||||
{
|
||||
String packagepath = PackagePath(package);
|
||||
Package pkg;
|
||||
pkg.Load(packagepath);
|
||||
String packagedir = GetFileFolder(packagepath);
|
||||
Vector<String> src = GetUppDirs();
|
||||
for(int i = 0; i < src.GetCount(); i++)
|
||||
src[i] = UnixPath(src[i]);
|
||||
|
||||
bool main = HasFlag("MAIN");
|
||||
bool is_shared = HasFlag("SO");
|
||||
bool libout = !main && !HasFlag("NOLIB");
|
||||
bool win32 = HasFlag("WIN32");
|
||||
|
||||
String pack_ident = MakeIdent(package);
|
||||
String outdir = "OutDir_" + pack_ident;
|
||||
String macros = "Macro_" + pack_ident;
|
||||
String macdef = "$(Macro)";
|
||||
String objext = (HasFlag("MSC") || HasFlag("EVC") ? ".obj" : ".o");
|
||||
|
||||
Vector<String> x(config.GetKeys(), 1);
|
||||
Sort(x);
|
||||
for(int i = 0; i < x.GetCount(); i++) {
|
||||
if(common_config.Find(x[i]) < 0)
|
||||
macdef << " -Dflag" << x[i];
|
||||
x[i] = InitCaps(x[i]);
|
||||
}
|
||||
|
||||
makefile.outdir << "$(" << outdir << ")";
|
||||
makefile.outfile << AdjustMakePath(GetFileTitle(NativePath(package)));
|
||||
if(main)
|
||||
makefile.outfile << GetTargetExt();
|
||||
else if(is_shared)
|
||||
makefile.outfile << (win32 ? ".dll" : ".so");
|
||||
else
|
||||
makefile.outfile << (win32 && HasFlag("MSC") ? ".lib" : ".a");
|
||||
makefile.output << (main ? String("$(OutDir)") : makefile.outdir) << makefile.outfile;
|
||||
|
||||
if(main) {
|
||||
makefile.config << "CC = c++\n";
|
||||
String flags;
|
||||
if(HasFlag("DEBUG"))
|
||||
flags << " -D_DEBUG " << debug_options;
|
||||
else
|
||||
flags << ' ' << release_options;
|
||||
if(HasFlag("DEBUG_MINIMAL"))
|
||||
flags << " -ggdb -g1";
|
||||
if(HasFlag("DEBUG_FULL"))
|
||||
flags << " -ggdb -g2";
|
||||
if(is_shared && !win32)
|
||||
flags << " -fPIC ";
|
||||
flags << ' ' << Gather(pkg.option, config.GetKeys());
|
||||
makefile.config << "CFLAGS =" << flags << "\n"
|
||||
"CXXFLAGS =" << flags << "\n"
|
||||
"LDFLAGS = " << (HasFlag("DEBUG") ? debug_link : release_link) << " $(LINKOPTIONS)\n"
|
||||
"LIBPATH =";
|
||||
for(int i = 0; i < libpath.GetCount(); i++)
|
||||
makefile.config << " -L" << GetMakePath(AdjustMakePath(GetHostPathQ(libpath[i])));
|
||||
makefile.config << "\n"
|
||||
"AR = ar -sr\n\n";
|
||||
makefile.install << "\t-mkdir -p $(OutDir)\n";
|
||||
Vector<String> lib;
|
||||
String lnk;
|
||||
lnk << "c++";
|
||||
if(!HasFlag("SHARED"))
|
||||
lnk << " -static";
|
||||
if(HasFlag("WIN32")) {
|
||||
lnk << " -mwindows";
|
||||
if(!HasFlag("GUI"))
|
||||
makefile.linkfiles << " -mconsole";
|
||||
}
|
||||
lnk << " -o $(OutFile)";
|
||||
if(HasFlag("DEBUG") || HasFlag("DEBUG_MINIMAL") || HasFlag("DEBUG_FULL"))
|
||||
lnk << " -ggdb";
|
||||
else
|
||||
lnk << (!HasFlag("OSX11") ? " -Wl,-s" : "");
|
||||
|
||||
lnk << " $(LIBPATH)";
|
||||
if (!HasFlag("OSX11"))
|
||||
lnk << " -Wl,-O,2";
|
||||
lnk << " $(LDFLAGS)";
|
||||
|
||||
makefile.linkfiles = lnk;
|
||||
}
|
||||
|
||||
makefile.config << outdir << " = $(UPPOUT)"
|
||||
<< GetMakePath(AdjustMakePath(String().Cat() << package << '/' << method << '-' << Join(x, "-") << '/')) << "\n"
|
||||
<< macros << " = " << macdef << "\n";
|
||||
|
||||
makefile.install << "\t-mkdir -p $(" << outdir << ")\n";
|
||||
|
||||
String libdep, libfiles;
|
||||
|
||||
libdep << makefile.output << ":";
|
||||
if(is_shared)
|
||||
{
|
||||
libfiles = "c++ -shared -fPIC"; // -v";
|
||||
Point p = ExtractVersion();
|
||||
if(!IsNull(p.x)) {
|
||||
libfiles << " -Xlinker --major-image-version -Xlinker " << p.x;
|
||||
if(!IsNull(p.y))
|
||||
libfiles << " -Xlinker --minor-image-version -Xlinker " << p.y;
|
||||
}
|
||||
libfiles << " -o ";
|
||||
}
|
||||
else
|
||||
libfiles = "$(AR) ";
|
||||
libfiles << makefile.output;
|
||||
|
||||
for(int i = 0; i < pkg.GetCount(); i++)
|
||||
if(!pkg[i].separator) {
|
||||
String gop = Gather(pkg[i].option, config.GetKeys());
|
||||
String fn = SourcePath(package, pkg[i]);
|
||||
String ext = ToLower(GetFileExt(fn));
|
||||
bool isc = ext == ".c";
|
||||
bool isrc = (ext == ".rc" && HasFlag("WIN32"));
|
||||
bool iscpp = (ext == ".cpp" || ext == ".cc" || ext == ".cxx");
|
||||
bool isicpp = (ext == ".icpp");
|
||||
if(isc || isrc || iscpp || isicpp) {
|
||||
String outfile;
|
||||
outfile << makefile.outdir << AdjustMakePath(GetFileTitle(fn)) << (isrc ? "_rc" : "") << objext;
|
||||
String srcfile = GetMakePath(MakeSourcePath(src, fn, false, exporting));
|
||||
makefile.rules << outfile << ": " << srcfile;
|
||||
Vector<String> dep = HdependGetDependencies(fn);
|
||||
Sort(dep, GetLanguageInfo());
|
||||
for(int d = 0; d < dep.GetCount(); d++) {
|
||||
String dfn = MakeSourcePath(src, dep[d], true, exporting);
|
||||
if(!IsNull(dfn))
|
||||
makefile.rules << " \\\n\t" << GetMakePath(dfn);
|
||||
}
|
||||
makefile.rules << "\n"
|
||||
"\t$(CC) -c " << (isc ? "-x c $(CFLAGS)" : "-x c++ $(CXXFLAGS)") << " $(CINC) $(" << macros << ") "
|
||||
<< gop << " " << srcfile << " -o " << outfile << "\n\n";
|
||||
if(!libout || isicpp) {
|
||||
makefile.linkdep << " \\\n\t" << outfile;
|
||||
makefile.linkfiles << " \\\n\t\t" << outfile;
|
||||
}
|
||||
else {
|
||||
libdep << " \\\n\t" << outfile;
|
||||
libfiles << " \\\n\t\t" << outfile;
|
||||
}
|
||||
}
|
||||
else
|
||||
if(ext == ".o" || ext == ".obj" || ext == ".a" || ext == ".so" || ext == ".lib" || ext == ".dll") {
|
||||
makefile.linkdep << " \\\n\t" << fn;
|
||||
makefile.linkfiles << ' ' << fn;
|
||||
}
|
||||
}
|
||||
|
||||
if(libout) {
|
||||
makefile.rules << libdep << "\n\t" << libfiles << "\n\n";
|
||||
makefile.linkdep << " \\\n\t" << makefile.output;
|
||||
makefile.linkfiles << " \\\n\t\t\t" << makefile.output;
|
||||
}
|
||||
|
||||
if(main) {
|
||||
if(!HasFlag("SOLARIS")&&!HasFlag("OSX11"))
|
||||
makefile.linkfiles << " \\\n\t\t-Wl,--start-group ";
|
||||
for(int i = 0; i < all_libraries.GetCount(); i++) {
|
||||
String ln = all_libraries[i];
|
||||
String ext = ToLower(GetFileExt(ln));
|
||||
if(ext == ".a" || ext == ".so" || ext == ".dll")
|
||||
makefile.linkfileend << " \\\n\t\t\t" << GetHostPathQ(FindInDirs(libpath, ln));
|
||||
else
|
||||
makefile.linkfileend << " \\\n\t\t\t-l" << ln;
|
||||
}
|
||||
if(!HasFlag("SOLARIS")&&!HasFlag("OSX11"))
|
||||
makefile.linkfileend << " \\\n\t\t-Wl,--end-group\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
Point CppBuilder::ExtractVersion()
|
||||
{
|
||||
Point v = Point(Null, Null);
|
||||
CParser p(version);
|
||||
while(!p.IsEof()) {
|
||||
if(p.IsNumber()) {
|
||||
v.x = p.ReadNumber();
|
||||
break;
|
||||
}
|
||||
p.GetChar();
|
||||
p.Spaces();
|
||||
}
|
||||
while(!p.IsEof()) {
|
||||
if(p.IsNumber()) {
|
||||
v.y = p.ReadNumber();
|
||||
break;
|
||||
}
|
||||
p.GetChar();
|
||||
p.Spaces();
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
void CppBuilder::ShowTime(int count, int start_time)
|
||||
{
|
||||
if(count)
|
||||
PutConsole(NFormat("%d file(s) compiled in %s %d msec/file",
|
||||
count, GetPrintTime(start_time), msecs(start_time) / count));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,398 +1,400 @@
|
|||
#ifndef COMMON_H
|
||||
#define COMMON_H
|
||||
|
||||
#include <Esc/Esc.h>
|
||||
#include <Web/Web.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
int CharFilterCid(int c);
|
||||
|
||||
int ReadLNG(CParser& p);
|
||||
String MakeLNG(int lang);
|
||||
|
||||
bool OldLang();
|
||||
|
||||
String PrintTime(int msecs);
|
||||
inline String GetPrintTime(dword time0) { return PrintTime(msecs(time0)); }
|
||||
|
||||
bool SaveChangedFile(const char *path, String data, bool delete_empty = false);
|
||||
|
||||
class Workspace;
|
||||
|
||||
struct Ide;
|
||||
|
||||
namespace Upp {
|
||||
class Ctrl;
|
||||
class Image;
|
||||
};
|
||||
|
||||
class IdeContext
|
||||
{
|
||||
public:
|
||||
virtual void PutConsole(const char *s) = 0;
|
||||
virtual void PutVerbose(const char *s) = 0;
|
||||
|
||||
virtual const Workspace& IdeWorkspace() const = 0;
|
||||
virtual bool IdeIsBuilding() const = 0;
|
||||
virtual String IdeGetOneFile() const = 0;
|
||||
virtual int IdeConsoleExecute(const char *cmdline, Stream *out = NULL, const char *envptr = NULL, bool quiet = false) = 0;
|
||||
virtual int IdeConsoleExecuteWithInput(const char *cmdline, Stream *out, const char *envptr, bool quiet) = 0;
|
||||
virtual int IdeConsoleExecute(One<SlaveProcess> process, const char *cmdline, Stream *out = NULL, bool quiet = false) = 0;
|
||||
virtual int IdeConsoleAllocSlot() = 0;
|
||||
virtual bool IdeConsoleRun(const char *cmdline, Stream *out = NULL, const char *envptr = NULL, bool quiet = false, int slot = 0, String key = Null, int blitz_count = 1) = 0;
|
||||
virtual bool IdeConsoleRun(One<SlaveProcess> process, const char *cmdline, Stream *out = NULL, bool quiet = false, int slot = 0, String key = Null, int blitz_count = 1) = 0;
|
||||
virtual void IdeConsoleFlush() = 0;
|
||||
virtual void IdeConsoleBeginGroup(String group) = 0;
|
||||
virtual void IdeConsoleEndGroup() = 0;
|
||||
virtual bool IdeConsoleWait() = 0;
|
||||
|
||||
virtual bool IdeIsDebug() const = 0;
|
||||
virtual void IdeEndDebug() = 0;
|
||||
virtual void IdeSetBottom(Ctrl& ctrl) = 0;
|
||||
virtual void IdeActivateBottom() = 0;
|
||||
virtual void IdeRemoveBottom(Ctrl& ctrl) = 0;
|
||||
virtual void IdeSetRight(Ctrl& ctrl) = 0;
|
||||
virtual void IdeRemoveRight(Ctrl& ctrl) = 0;
|
||||
|
||||
virtual String IdeGetFileName() const = 0;
|
||||
virtual int IdeGetFileLine() = 0;
|
||||
virtual String IdeGetLine(int i) const = 0;
|
||||
|
||||
virtual void IdeSetDebugPos(const String& fn, int line, const Image& img, int i) = 0;
|
||||
virtual void IdeHidePtr() = 0;
|
||||
virtual bool IdeDebugLock() = 0;
|
||||
virtual bool IdeDebugUnLock() = 0;
|
||||
virtual bool IdeIsDebugLock() const = 0;
|
||||
virtual void IdeSetBar() = 0;
|
||||
virtual void IdeGotoCodeRef(String link) = 0;
|
||||
virtual void IdeOpenTopicFile(const String& file) = 0;
|
||||
virtual void IdeFlushFile() = 0;
|
||||
virtual String IdeGetFileName() = 0;
|
||||
virtual String IdeGetNestFolder() = 0;
|
||||
|
||||
virtual ~IdeContext() {}
|
||||
};
|
||||
|
||||
IdeContext *TheIde();
|
||||
void TheIde(IdeContext *context);
|
||||
|
||||
void PutConsole(const char *s);
|
||||
void PutVerbose(const char *s);
|
||||
|
||||
const Workspace& GetIdeWorkspace();
|
||||
bool IdeIsBuilding();
|
||||
String IdeGetOneFile();
|
||||
int IdeConsoleExecute(const char *cmdline, Stream *out = NULL, const char *envptr = NULL, bool quiet = false);
|
||||
int IdeConsoleExecuteWithInput(const char *cmdline, Stream *out, const char *envptr, bool quiet);
|
||||
int IdeConsoleExecute(One<SlaveProcess> process, const char *cmdline, Stream *out = NULL, bool quiet = false);
|
||||
int IdeConsoleAllocSlot();
|
||||
bool IdeConsoleRun(const char *cmdline, Stream *out = NULL, const char *envptr = NULL, bool quiet = false, int slot = 0, String key = Null, int blitz_count = 1);
|
||||
bool IdeConsoleRun(One<SlaveProcess> process, const char *cmdline, Stream *out = NULL, bool quiet = false, int slot = 0, String key = Null, int blitz_count = 1);
|
||||
void IdeConsoleFlush();
|
||||
void IdeConsoleBeginGroup(String group);
|
||||
void IdeConsoleEndGroup();
|
||||
bool IdeConsoleWait();
|
||||
void IdeGotoCodeRef(String s);
|
||||
|
||||
bool IdeIsDebug();
|
||||
void IdeEndDebug();
|
||||
void IdeSetBottom(Ctrl& ctrl);
|
||||
void IdeActivateBottom();
|
||||
void IdeRemoveBottom(Ctrl& ctrl);
|
||||
void IdeSetRight(Ctrl& ctrl);
|
||||
void IdeRemoveRight(Ctrl& ctrl);
|
||||
|
||||
String IdeGetFileName();
|
||||
int IdeGetFileLine();
|
||||
String IdeGetLine(int i);
|
||||
|
||||
void IdeSetDebugPos(const String& fn, int line, const Image& img, int i);
|
||||
void IdeHidePtr();
|
||||
bool IdeDebugLock();
|
||||
bool IdeDebugUnLock();
|
||||
bool IdeIsDebugLock();
|
||||
|
||||
void IdeSetBar();
|
||||
|
||||
#include "Host.h"
|
||||
|
||||
struct IdeMacro {
|
||||
IdeMacro();
|
||||
|
||||
int hotkey;
|
||||
String menu;
|
||||
String submenu;
|
||||
EscValue code;
|
||||
};
|
||||
|
||||
ArrayMap<String, EscValue>& UscGlobal();
|
||||
Array<IdeMacro>& UscMacros();
|
||||
|
||||
void UscSetCleanModules(void (*CleanModules)());
|
||||
void SetIdeModuleUsc(bool (*IdeModuleUsc)(CParser& p));
|
||||
void UscSetReadMacro(void (*ReadMacro)(CParser& p));
|
||||
|
||||
void CleanUsc();
|
||||
void ParseUscFile(const char *filename) throw(CParser::Error);
|
||||
|
||||
Point ReadNums(CParser& p);
|
||||
Point ReadPoint(CParser& p);
|
||||
|
||||
struct SemiTextTest : public TextTest {
|
||||
virtual const char *Accept(const char *s) const;
|
||||
};
|
||||
|
||||
Vector<String> SplitDirs(const char *s);
|
||||
|
||||
class Nest {
|
||||
VectorMap<String, String> var;
|
||||
VectorMap<String, String> package_cache;
|
||||
|
||||
String PackagePath0(const String& name);
|
||||
|
||||
public:
|
||||
bool Save(const char *path);
|
||||
bool Load(const char *path);
|
||||
String Get(const String& id);
|
||||
void Set(const String& id, const String& val);
|
||||
|
||||
void InvalidatePackageCache();
|
||||
String PackagePath(const String& name);
|
||||
};
|
||||
|
||||
String VarFilePath();
|
||||
String VarFilePath(String name);
|
||||
|
||||
bool SaveVarFile(const char *filename, const VectorMap<String, String>& var);
|
||||
bool LoadVarFile(const char *name, VectorMap<String, String>& var);
|
||||
bool SaveVars(const char *name);
|
||||
bool LoadVars(const char *name);
|
||||
String GetVar(const String& var);
|
||||
String GetVarsName();
|
||||
String VarFilePath();
|
||||
Vector<String> GetUppDirs();
|
||||
String GetUppDir();
|
||||
void SetVar(const String& var, const String& value);
|
||||
|
||||
String GetAnyFileName(const char *path);
|
||||
String GetAnyFileTitle(const char *path);
|
||||
String CatAnyPath(String path, const char *more);
|
||||
|
||||
void InvalidatePackageCache();
|
||||
String PackagePath(const String& name);
|
||||
String SourcePath(const String& package, const String& name);
|
||||
inline
|
||||
String PackageDirectory(const String& name) { return GetFileDirectory(PackagePath(name)); }
|
||||
bool IsNestReadOnly(const String& path);
|
||||
|
||||
String GetLocalDir();
|
||||
String LocalPath(const String& filename);
|
||||
|
||||
Vector<String> IgnoreList();
|
||||
|
||||
bool IsFullDirectory(const String& d);
|
||||
bool IsFolder(const String& path);
|
||||
|
||||
bool IsCSourceFile(const char *path);
|
||||
bool IsCHeaderFile(const char *path);
|
||||
|
||||
String FollowCygwinSymlink(const String& filename);
|
||||
|
||||
void SplitPathMap(const char *path_map, Vector<String>& local, Vector<String>& remote);
|
||||
String JoinPathMap(const Vector<String>& local, const Vector<String>& remote);
|
||||
void SplitHostName(const char *hostname, String& host, int& port);
|
||||
|
||||
Vector<String> SplitFlags0(const char *flags);
|
||||
Vector<String> SplitFlags(const char *flags, bool main = false);
|
||||
Vector<String> SplitFlags(const char *flags, bool main, const Vector<String>& accepts);
|
||||
|
||||
bool MatchWhen(const String& when, const Vector<String>& flag);
|
||||
String ReadWhen(CParser& p);
|
||||
String AsStringWhen(const String& when);
|
||||
|
||||
struct OptItem {
|
||||
String when;
|
||||
String text;
|
||||
};
|
||||
|
||||
struct CustomStep {
|
||||
String when;
|
||||
String ext;
|
||||
String command;
|
||||
String output;
|
||||
|
||||
void Load(CParser& p) throw(CParser::Error);
|
||||
String AsString() const;
|
||||
|
||||
String GetExt() const;
|
||||
bool MatchExt(const char *fn) const;
|
||||
};
|
||||
|
||||
Vector<String> Combine(const Vector<String>& conf, const char *flags);
|
||||
String Gather(const Array<OptItem>& set, const Vector<String>& conf, bool nospace = false);
|
||||
|
||||
bool HasFlag(const Vector<String>& conf, const char *flag);
|
||||
|
||||
enum {
|
||||
FLAG_MISMATCH = -2,
|
||||
FLAG_UNDEFINED = -1,
|
||||
};
|
||||
|
||||
int GetType(const Vector<String>& conf, const char *flags);
|
||||
int GetType(const Vector<String>& conf, const char *flags, int def);
|
||||
bool GetFlag(const Vector<String>& conf, const char *flag);
|
||||
String RemoveType(Vector<String>& conf, const char *flags);
|
||||
|
||||
class Package {
|
||||
void Reset();
|
||||
|
||||
public:
|
||||
struct File : public String {
|
||||
Array<OptItem> option;
|
||||
Array<OptItem> depends;
|
||||
bool readonly;
|
||||
bool separator;
|
||||
int tabsize;
|
||||
byte charset;
|
||||
int font;
|
||||
String highlight;
|
||||
int optimize_speed;
|
||||
|
||||
void operator=(const String& s) { String::operator=(s); readonly = separator = false; }
|
||||
void Init() { readonly = separator = false; tabsize = Null; charset = 0; font = 0;
|
||||
optimize_speed = false; }
|
||||
|
||||
File() { Init(); }
|
||||
File(const String& s) : String(s) { Init(); }
|
||||
};
|
||||
struct Config {
|
||||
String name;
|
||||
String param;
|
||||
};
|
||||
byte charset;
|
||||
bool optimize_speed;
|
||||
bool noblitz;
|
||||
String description;
|
||||
Vector<String> accepts;
|
||||
Array<OptItem> flag;
|
||||
Array<OptItem> uses;
|
||||
Array<OptItem> target;
|
||||
Array<OptItem> library;
|
||||
Array<OptItem> link;
|
||||
Array<OptItem> option;
|
||||
Array<OptItem> include;
|
||||
Array<File> file;
|
||||
Array<Config> config;
|
||||
Array<CustomStep> custom;
|
||||
Time time;
|
||||
bool bold, italic;
|
||||
Color ink;
|
||||
|
||||
int GetCount() const { return file.GetCount(); }
|
||||
File& operator[](int i) { return file[i]; }
|
||||
const File& operator[](int i) const { return file[i]; }
|
||||
|
||||
void Load(const char *path);
|
||||
bool Save(const char *file) const;
|
||||
|
||||
static void SetPackageResolver(bool (*Resolve)(const String& error, const String& path, int line));
|
||||
|
||||
Package();
|
||||
};
|
||||
|
||||
class Workspace {
|
||||
void AddUses(Package& p, bool match, const Vector<String>& flag);
|
||||
void AddLoad(const String& name, bool match, const Vector<String>& flag);
|
||||
|
||||
public:
|
||||
ArrayMap<String, Package> package;
|
||||
|
||||
void Clear() { package.Clear(); }
|
||||
String operator[](int i) const { return package.GetKey(i); }
|
||||
Package& GetPackage(int i) { return package[i]; }
|
||||
const Package& GetPackage(int i) const { return package[i]; }
|
||||
int GetCount() const { return package.GetCount(); }
|
||||
|
||||
void Scan(const char *prjname);
|
||||
void Scan(const char *prjname, const Vector<String>& flag);
|
||||
|
||||
Vector<String> GetAllAccepts(int pk) const;
|
||||
|
||||
void Dump();
|
||||
};
|
||||
|
||||
struct Ide;
|
||||
|
||||
String FindInDirs(const Vector<String>& dir, const String& file);
|
||||
String FindCommand(const Vector<String>& exedir, const String& cmdline);
|
||||
|
||||
struct MakeFile {
|
||||
String outdir;
|
||||
String outfile;
|
||||
String output;
|
||||
String config;
|
||||
String install;
|
||||
String rules;
|
||||
String linkdep;
|
||||
String linkfiles;
|
||||
String linkfileend;
|
||||
};
|
||||
|
||||
String GetMakePath(String fn, bool win32);
|
||||
String AdjustMakePath(const char *fn);
|
||||
|
||||
enum {
|
||||
R_OPTIMAL,
|
||||
R_SPEED,
|
||||
R_SIZE
|
||||
};
|
||||
|
||||
struct Builder {
|
||||
Host *host;
|
||||
Index<String> config;
|
||||
String compiler;
|
||||
String method;
|
||||
String outdir;
|
||||
Vector<String> include;
|
||||
Vector<String> libpath;
|
||||
String target;
|
||||
String debug_options;
|
||||
String release_options;
|
||||
String release_size_options;
|
||||
String version;
|
||||
String script;
|
||||
bool doall;
|
||||
|
||||
virtual bool BuildPackage(const String& package, Vector<String>& linkfile, String& linkoptions,
|
||||
const Vector<String>& all_uses, const Vector<String>& all_libraries, int optimize)
|
||||
{ return false; }
|
||||
virtual bool Link(const Vector<String>& linkfile, const String& linkoptions, bool createmap)
|
||||
{ return false; }
|
||||
virtual bool Preprocess(const String& package, const String& file, const String& result, bool asmout)
|
||||
{ return false; }
|
||||
virtual void AddFlags(Index<String>& cfg) {}
|
||||
virtual void AddMakeFile(MakeFile& mfinfo, String package,
|
||||
const Vector<String>& all_uses, const Vector<String>& all_libraries,
|
||||
const Index<String>& common_config, bool exporting) {}
|
||||
virtual String GetTargetExt() const = 0;
|
||||
|
||||
Builder() { doall = false; }
|
||||
virtual ~Builder() {}
|
||||
};
|
||||
|
||||
VectorMap<String, Builder *(*)()>& BuilderMap();
|
||||
void RegisterBuilder(const char *name, Builder *(*create)());
|
||||
|
||||
void HdependSetDirs(pick_ Vector<String>& id);
|
||||
void HdependTimeDirty();
|
||||
void HdependClearDependencies();
|
||||
void HdependAddDependency(const String& file, const String& depends);
|
||||
Time HdependFileTime(const String& path);
|
||||
Vector<String> HdependGetDependencies(const String& path);
|
||||
String FindIncludeFile(const char *s, const String& filedir);
|
||||
bool HdependBlitzApproved(const String& path);
|
||||
const Vector<String>& HdependGetDefines(const String& path);
|
||||
const Vector<String>& HdependGetAllFiles();
|
||||
|
||||
#endif
|
||||
#ifndef COMMON_H
|
||||
#define COMMON_H
|
||||
|
||||
#include <Esc/Esc.h>
|
||||
#include <Web/Web.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
int CharFilterCid(int c);
|
||||
|
||||
int ReadLNG(CParser& p);
|
||||
String MakeLNG(int lang);
|
||||
|
||||
bool OldLang();
|
||||
|
||||
String PrintTime(int msecs);
|
||||
inline String GetPrintTime(dword time0) { return PrintTime(msecs(time0)); }
|
||||
|
||||
bool SaveChangedFile(const char *path, String data, bool delete_empty = false);
|
||||
|
||||
class Workspace;
|
||||
|
||||
struct Ide;
|
||||
|
||||
namespace Upp {
|
||||
class Ctrl;
|
||||
class Image;
|
||||
};
|
||||
|
||||
class IdeContext
|
||||
{
|
||||
public:
|
||||
virtual void PutConsole(const char *s) = 0;
|
||||
virtual void PutVerbose(const char *s) = 0;
|
||||
|
||||
virtual const Workspace& IdeWorkspace() const = 0;
|
||||
virtual bool IdeIsBuilding() const = 0;
|
||||
virtual String IdeGetOneFile() const = 0;
|
||||
virtual int IdeConsoleExecute(const char *cmdline, Stream *out = NULL, const char *envptr = NULL, bool quiet = false) = 0;
|
||||
virtual int IdeConsoleExecuteWithInput(const char *cmdline, Stream *out, const char *envptr, bool quiet) = 0;
|
||||
virtual int IdeConsoleExecute(One<SlaveProcess> process, const char *cmdline, Stream *out = NULL, bool quiet = false) = 0;
|
||||
virtual int IdeConsoleAllocSlot() = 0;
|
||||
virtual bool IdeConsoleRun(const char *cmdline, Stream *out = NULL, const char *envptr = NULL, bool quiet = false, int slot = 0, String key = Null, int blitz_count = 1) = 0;
|
||||
virtual bool IdeConsoleRun(One<SlaveProcess> process, const char *cmdline, Stream *out = NULL, bool quiet = false, int slot = 0, String key = Null, int blitz_count = 1) = 0;
|
||||
virtual void IdeConsoleFlush() = 0;
|
||||
virtual void IdeConsoleBeginGroup(String group) = 0;
|
||||
virtual void IdeConsoleEndGroup() = 0;
|
||||
virtual bool IdeConsoleWait() = 0;
|
||||
|
||||
virtual bool IdeIsDebug() const = 0;
|
||||
virtual void IdeEndDebug() = 0;
|
||||
virtual void IdeSetBottom(Ctrl& ctrl) = 0;
|
||||
virtual void IdeActivateBottom() = 0;
|
||||
virtual void IdeRemoveBottom(Ctrl& ctrl) = 0;
|
||||
virtual void IdeSetRight(Ctrl& ctrl) = 0;
|
||||
virtual void IdeRemoveRight(Ctrl& ctrl) = 0;
|
||||
|
||||
virtual String IdeGetFileName() const = 0;
|
||||
virtual int IdeGetFileLine() = 0;
|
||||
virtual String IdeGetLine(int i) const = 0;
|
||||
|
||||
virtual void IdeSetDebugPos(const String& fn, int line, const Image& img, int i) = 0;
|
||||
virtual void IdeHidePtr() = 0;
|
||||
virtual bool IdeDebugLock() = 0;
|
||||
virtual bool IdeDebugUnLock() = 0;
|
||||
virtual bool IdeIsDebugLock() const = 0;
|
||||
virtual void IdeSetBar() = 0;
|
||||
virtual void IdeGotoCodeRef(String link) = 0;
|
||||
virtual void IdeOpenTopicFile(const String& file) = 0;
|
||||
virtual void IdeFlushFile() = 0;
|
||||
virtual String IdeGetFileName() = 0;
|
||||
virtual String IdeGetNestFolder() = 0;
|
||||
|
||||
virtual ~IdeContext() {}
|
||||
};
|
||||
|
||||
IdeContext *TheIde();
|
||||
void TheIde(IdeContext *context);
|
||||
|
||||
void PutConsole(const char *s);
|
||||
void PutVerbose(const char *s);
|
||||
|
||||
const Workspace& GetIdeWorkspace();
|
||||
bool IdeIsBuilding();
|
||||
String IdeGetOneFile();
|
||||
int IdeConsoleExecute(const char *cmdline, Stream *out = NULL, const char *envptr = NULL, bool quiet = false);
|
||||
int IdeConsoleExecuteWithInput(const char *cmdline, Stream *out, const char *envptr, bool quiet);
|
||||
int IdeConsoleExecute(One<SlaveProcess> process, const char *cmdline, Stream *out = NULL, bool quiet = false);
|
||||
int IdeConsoleAllocSlot();
|
||||
bool IdeConsoleRun(const char *cmdline, Stream *out = NULL, const char *envptr = NULL, bool quiet = false, int slot = 0, String key = Null, int blitz_count = 1);
|
||||
bool IdeConsoleRun(One<SlaveProcess> process, const char *cmdline, Stream *out = NULL, bool quiet = false, int slot = 0, String key = Null, int blitz_count = 1);
|
||||
void IdeConsoleFlush();
|
||||
void IdeConsoleBeginGroup(String group);
|
||||
void IdeConsoleEndGroup();
|
||||
bool IdeConsoleWait();
|
||||
void IdeGotoCodeRef(String s);
|
||||
|
||||
bool IdeIsDebug();
|
||||
void IdeEndDebug();
|
||||
void IdeSetBottom(Ctrl& ctrl);
|
||||
void IdeActivateBottom();
|
||||
void IdeRemoveBottom(Ctrl& ctrl);
|
||||
void IdeSetRight(Ctrl& ctrl);
|
||||
void IdeRemoveRight(Ctrl& ctrl);
|
||||
|
||||
String IdeGetFileName();
|
||||
int IdeGetFileLine();
|
||||
String IdeGetLine(int i);
|
||||
|
||||
void IdeSetDebugPos(const String& fn, int line, const Image& img, int i);
|
||||
void IdeHidePtr();
|
||||
bool IdeDebugLock();
|
||||
bool IdeDebugUnLock();
|
||||
bool IdeIsDebugLock();
|
||||
|
||||
void IdeSetBar();
|
||||
|
||||
#include "Host.h"
|
||||
|
||||
struct IdeMacro {
|
||||
IdeMacro();
|
||||
|
||||
int hotkey;
|
||||
String menu;
|
||||
String submenu;
|
||||
EscValue code;
|
||||
};
|
||||
|
||||
ArrayMap<String, EscValue>& UscGlobal();
|
||||
Array<IdeMacro>& UscMacros();
|
||||
|
||||
void UscSetCleanModules(void (*CleanModules)());
|
||||
void SetIdeModuleUsc(bool (*IdeModuleUsc)(CParser& p));
|
||||
void UscSetReadMacro(void (*ReadMacro)(CParser& p));
|
||||
|
||||
void CleanUsc();
|
||||
void ParseUscFile(const char *filename) throw(CParser::Error);
|
||||
|
||||
Point ReadNums(CParser& p);
|
||||
Point ReadPoint(CParser& p);
|
||||
|
||||
struct SemiTextTest : public TextTest {
|
||||
virtual const char *Accept(const char *s) const;
|
||||
};
|
||||
|
||||
Vector<String> SplitDirs(const char *s);
|
||||
|
||||
class Nest {
|
||||
VectorMap<String, String> var;
|
||||
VectorMap<String, String> package_cache;
|
||||
|
||||
String PackagePath0(const String& name);
|
||||
|
||||
public:
|
||||
bool Save(const char *path);
|
||||
bool Load(const char *path);
|
||||
String Get(const String& id);
|
||||
void Set(const String& id, const String& val);
|
||||
|
||||
void InvalidatePackageCache();
|
||||
String PackagePath(const String& name);
|
||||
};
|
||||
|
||||
String VarFilePath();
|
||||
String VarFilePath(String name);
|
||||
|
||||
bool SaveVarFile(const char *filename, const VectorMap<String, String>& var);
|
||||
bool LoadVarFile(const char *name, VectorMap<String, String>& var);
|
||||
bool SaveVars(const char *name);
|
||||
bool LoadVars(const char *name);
|
||||
String GetVar(const String& var);
|
||||
String GetVarsName();
|
||||
String VarFilePath();
|
||||
Vector<String> GetUppDirs();
|
||||
String GetUppDir();
|
||||
void SetVar(const String& var, const String& value);
|
||||
|
||||
String GetAnyFileName(const char *path);
|
||||
String GetAnyFileTitle(const char *path);
|
||||
String CatAnyPath(String path, const char *more);
|
||||
|
||||
void InvalidatePackageCache();
|
||||
String PackagePath(const String& name);
|
||||
String SourcePath(const String& package, const String& name);
|
||||
inline
|
||||
String PackageDirectory(const String& name) { return GetFileDirectory(PackagePath(name)); }
|
||||
bool IsNestReadOnly(const String& path);
|
||||
|
||||
String GetLocalDir();
|
||||
String LocalPath(const String& filename);
|
||||
|
||||
Vector<String> IgnoreList();
|
||||
|
||||
bool IsFullDirectory(const String& d);
|
||||
bool IsFolder(const String& path);
|
||||
|
||||
bool IsCSourceFile(const char *path);
|
||||
bool IsCHeaderFile(const char *path);
|
||||
|
||||
String FollowCygwinSymlink(const String& filename);
|
||||
|
||||
void SplitPathMap(const char *path_map, Vector<String>& local, Vector<String>& remote);
|
||||
String JoinPathMap(const Vector<String>& local, const Vector<String>& remote);
|
||||
void SplitHostName(const char *hostname, String& host, int& port);
|
||||
|
||||
Vector<String> SplitFlags0(const char *flags);
|
||||
Vector<String> SplitFlags(const char *flags, bool main = false);
|
||||
Vector<String> SplitFlags(const char *flags, bool main, const Vector<String>& accepts);
|
||||
|
||||
bool MatchWhen(const String& when, const Vector<String>& flag);
|
||||
String ReadWhen(CParser& p);
|
||||
String AsStringWhen(const String& when);
|
||||
|
||||
struct OptItem {
|
||||
String when;
|
||||
String text;
|
||||
};
|
||||
|
||||
struct CustomStep {
|
||||
String when;
|
||||
String ext;
|
||||
String command;
|
||||
String output;
|
||||
|
||||
void Load(CParser& p) throw(CParser::Error);
|
||||
String AsString() const;
|
||||
|
||||
String GetExt() const;
|
||||
bool MatchExt(const char *fn) const;
|
||||
};
|
||||
|
||||
Vector<String> Combine(const Vector<String>& conf, const char *flags);
|
||||
String Gather(const Array<OptItem>& set, const Vector<String>& conf, bool nospace = false);
|
||||
|
||||
bool HasFlag(const Vector<String>& conf, const char *flag);
|
||||
|
||||
enum {
|
||||
FLAG_MISMATCH = -2,
|
||||
FLAG_UNDEFINED = -1,
|
||||
};
|
||||
|
||||
int GetType(const Vector<String>& conf, const char *flags);
|
||||
int GetType(const Vector<String>& conf, const char *flags, int def);
|
||||
bool GetFlag(const Vector<String>& conf, const char *flag);
|
||||
String RemoveType(Vector<String>& conf, const char *flags);
|
||||
|
||||
class Package {
|
||||
void Reset();
|
||||
|
||||
public:
|
||||
struct File : public String {
|
||||
Array<OptItem> option;
|
||||
Array<OptItem> depends;
|
||||
bool readonly;
|
||||
bool separator;
|
||||
int tabsize;
|
||||
byte charset;
|
||||
int font;
|
||||
String highlight;
|
||||
int optimize_speed;
|
||||
|
||||
void operator=(const String& s) { String::operator=(s); readonly = separator = false; }
|
||||
void Init() { readonly = separator = false; tabsize = Null; charset = 0; font = 0;
|
||||
optimize_speed = false; }
|
||||
|
||||
File() { Init(); }
|
||||
File(const String& s) : String(s) { Init(); }
|
||||
};
|
||||
struct Config {
|
||||
String name;
|
||||
String param;
|
||||
};
|
||||
byte charset;
|
||||
bool optimize_speed;
|
||||
bool noblitz;
|
||||
String description;
|
||||
Vector<String> accepts;
|
||||
Array<OptItem> flag;
|
||||
Array<OptItem> uses;
|
||||
Array<OptItem> target;
|
||||
Array<OptItem> library;
|
||||
Array<OptItem> link;
|
||||
Array<OptItem> option;
|
||||
Array<OptItem> include;
|
||||
Array<File> file;
|
||||
Array<Config> config;
|
||||
Array<CustomStep> custom;
|
||||
Time time;
|
||||
bool bold, italic;
|
||||
Color ink;
|
||||
|
||||
int GetCount() const { return file.GetCount(); }
|
||||
File& operator[](int i) { return file[i]; }
|
||||
const File& operator[](int i) const { return file[i]; }
|
||||
|
||||
void Load(const char *path);
|
||||
bool Save(const char *file) const;
|
||||
|
||||
static void SetPackageResolver(bool (*Resolve)(const String& error, const String& path, int line));
|
||||
|
||||
Package();
|
||||
};
|
||||
|
||||
class Workspace {
|
||||
void AddUses(Package& p, bool match, const Vector<String>& flag);
|
||||
void AddLoad(const String& name, bool match, const Vector<String>& flag);
|
||||
|
||||
public:
|
||||
ArrayMap<String, Package> package;
|
||||
|
||||
void Clear() { package.Clear(); }
|
||||
String operator[](int i) const { return package.GetKey(i); }
|
||||
Package& GetPackage(int i) { return package[i]; }
|
||||
const Package& GetPackage(int i) const { return package[i]; }
|
||||
int GetCount() const { return package.GetCount(); }
|
||||
|
||||
void Scan(const char *prjname);
|
||||
void Scan(const char *prjname, const Vector<String>& flag);
|
||||
|
||||
Vector<String> GetAllAccepts(int pk) const;
|
||||
|
||||
void Dump();
|
||||
};
|
||||
|
||||
struct Ide;
|
||||
|
||||
String FindInDirs(const Vector<String>& dir, const String& file);
|
||||
String FindCommand(const Vector<String>& exedir, const String& cmdline);
|
||||
|
||||
struct MakeFile {
|
||||
String outdir;
|
||||
String outfile;
|
||||
String output;
|
||||
String config;
|
||||
String install;
|
||||
String rules;
|
||||
String linkdep;
|
||||
String linkfiles;
|
||||
String linkfileend;
|
||||
};
|
||||
|
||||
String GetMakePath(String fn, bool win32);
|
||||
String AdjustMakePath(const char *fn);
|
||||
|
||||
enum {
|
||||
R_OPTIMAL,
|
||||
R_SPEED,
|
||||
R_SIZE
|
||||
};
|
||||
|
||||
struct Builder {
|
||||
Host *host;
|
||||
Index<String> config;
|
||||
String compiler;
|
||||
String method;
|
||||
String outdir;
|
||||
Vector<String> include;
|
||||
Vector<String> libpath;
|
||||
String target;
|
||||
String debug_options;
|
||||
String release_options;
|
||||
String release_size_options;
|
||||
String debug_link;
|
||||
String release_link;
|
||||
String version;
|
||||
String script;
|
||||
bool doall;
|
||||
|
||||
virtual bool BuildPackage(const String& package, Vector<String>& linkfile, String& linkoptions,
|
||||
const Vector<String>& all_uses, const Vector<String>& all_libraries, int optimize)
|
||||
{ return false; }
|
||||
virtual bool Link(const Vector<String>& linkfile, const String& linkoptions, bool createmap)
|
||||
{ return false; }
|
||||
virtual bool Preprocess(const String& package, const String& file, const String& result, bool asmout)
|
||||
{ return false; }
|
||||
virtual void AddFlags(Index<String>& cfg) {}
|
||||
virtual void AddMakeFile(MakeFile& mfinfo, String package,
|
||||
const Vector<String>& all_uses, const Vector<String>& all_libraries,
|
||||
const Index<String>& common_config, bool exporting) {}
|
||||
virtual String GetTargetExt() const = 0;
|
||||
|
||||
Builder() { doall = false; }
|
||||
virtual ~Builder() {}
|
||||
};
|
||||
|
||||
VectorMap<String, Builder *(*)()>& BuilderMap();
|
||||
void RegisterBuilder(const char *name, Builder *(*create)());
|
||||
|
||||
void HdependSetDirs(pick_ Vector<String>& id);
|
||||
void HdependTimeDirty();
|
||||
void HdependClearDependencies();
|
||||
void HdependAddDependency(const String& file, const String& depends);
|
||||
Time HdependFileTime(const String& path);
|
||||
Vector<String> HdependGetDependencies(const String& path);
|
||||
String FindIncludeFile(const char *s, const String& filedir);
|
||||
bool HdependBlitzApproved(const String& path);
|
||||
const Vector<String>& HdependGetDefines(const String& path);
|
||||
const Vector<String>& HdependGetAllFiles();
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue