ultimatepp/uppbox/MakePosixInstall/Main.cpp
cxl 32b28882dd .uppbox
git-svn-id: svn://ultimatepp.org/upp/trunk@14386 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2020-04-26 06:42:07 +00:00

135 lines
3.3 KiB
C++

#include <Core/Core.h>
#include <plugin/bz2/bz2.h>
using namespace Upp;
void Error(const char *e)
{
RLOG(e);
abort();
}
String Syx(const char *s)
{
RLOG(s);
String r;
int q = Sys(s, r);
if(q)
Error(String().Cat() << "Failed: " << s << "\r\n" <<
"Exit code: " << q << "\r\n" <<
"Output: " << r);
return r;
}
void CopyFolder(const char *src, const char *dst, bool deep = true)
{
if(GetFileName(src) == ".svn")
return;
RLOG("Directory " << src);
RealizeDirectory(dst);
FindFile ff(String(src) + "/*.*");
while(ff) {
String s = AppendFileName(src, ff.GetName());
String d = AppendFileName(dst, ff.GetName());
if(ff.IsFile()) {
String q = LoadFile(s);
String ext = ToLower(GetFileExt(s));
if(ext != ".aux" && ext != ".$old")
SaveFile(d, q);
}
else
if(ff.IsFolder() && *ff.GetName() != '.') {
if(deep || *GetFileExt(s))
CopyFolder(s, d, deep);
}
ff.Next();
}
}
int CrLfSm(int c)
{
return c == ';' || c == '\r' || c == '\n';
}
void CopyFolders(const char *src, const char *dst, const char *folders, bool deep = true)
{
Vector<String> folder = Split(LoadFile(folders), CrLfSm);
for(int i = 0; i < folder.GetCount(); i++)
CopyFolder(AppendFileName(src, folder[i]), AppendFileName(dst, folder[i]), deep);
}
String release_dir = GetHomeDirFile("release");
String release = release_dir + "/upp";
String upp_src = GetHomeDirFile("upp.src");
extern const char *install_script;
extern const char *clean_script;
extern const char *readme;
String SaveText(const char *name, const char *text)
{
RLOG("File " << name);
String t = release + "/" + name;
SaveFile(t, Filter(text, [](int c) { return c == '\r' ? 0 : c; }));
return t;
}
void SaveScript(const char *name, const char *text)
{
Syx("chmod +x " + SaveText(name, text));
}
CONSOLE_APP_MAIN
{
StdLogSetup(LOG_COUT|LOG_FILE);
Syx("svn update " + upp_src);
Vector<String> s = Split(Syx("svnversion " + upp_src), [](int c) { return IsDigit(c) ? 0 : c; });
if(s.GetCount() == 0)
Error("Invalid version");
String version = s.Top();
RLOG("version: " + version);
DeleteFolderDeep(release);
RealizeDirectory(release);
String uppsrc = upp_src + "/uppsrc";
String dstsrc = release + "/uppsrc";
CopyFolders(uppsrc, dstsrc, uppsrc + "/packages");
CopyFolders(uppsrc, dstsrc, uppsrc + "/packages1", false);
CopyFolders(upp_src, release, uppsrc + "/assemblies");
SaveFile(dstsrc + "/guiplatform.h", "");
SaveFile(dstsrc + "/uppconfig.h", LoadFile(uppsrc + "/uppconfig.h"));
SaveFile(dstsrc + "/ide/version.h", "#define IDE_VERSION \"" + version + "\"\r\n");
RealizeDirectory(release + "/.config");
RealizeDirectory(release + "/.cache");
chdir(release);
SaveScript("install", install_script);
SaveScript("clean", clean_script);
SaveText("README", readme);
#ifdef _DEBUG
#define OPTS " -rvb "
#else
#define OPTS " -arvb "
#endif
Syx(GetHomeDirFile("bin/umk") + " ./uppsrc umk GCC32 " OPTS + release + "/umks32");
Syx(GetHomeDirFile("bin/umk") + " ./uppsrc umk GCC -rvsM");
SaveFile(release + "/uMakefile", LoadFile(release + "/Makefile"));
Syx(GetHomeDirFile("bin/umk") + " ./uppsrc ide GCC -rvsM theide");
SaveFile(release + "/license.chk", "1");
system("cp " + GetHomeDirFile("upp.bin") + "/" + "*.udc " + release);
chdir(release_dir);
Syx("tar cfJ " + GetHomeDirFile("upload") + "/upp-posix-" + version + ".tar.xz upp");
}