diff --git a/build/premake/premake.exe b/build/premake/premake.exe index 7e58da837d..a24cbce9df 100755 Binary files a/build/premake/premake.exe and b/build/premake/premake.exe differ diff --git a/build/premake/premake.lua b/build/premake/premake.lua index 9aeaa54a93..d3acfd360a 100755 --- a/build/premake/premake.lua +++ b/build/premake/premake.lua @@ -15,11 +15,12 @@ function setuppackage (projectname) if (projectname == "sced") then package.name = "sced" exename = "sced" - objdirprefix = "ScEd_" + objdirprefix = "obj/ScEd_" + package.build = 0 -- Don't build Sced by default else package.name = "pyrogenesis" exename = "ps" - objdirprefix = "" + objdirprefix = "obj/" end -- Windowed executable on windows, "exe" on all other platforms @@ -32,7 +33,6 @@ function setuppackage (projectname) package.config["Release"].target = exename package.config["Testing"].target = exename.."_test" - -- TODO: Implement objdir in Premake package.config["Debug"].objdir = objdirprefix.."Debug" package.config["Release"].objdir = objdirprefix.."Release" package.config["Testing"].objdir = objdirprefix.."Testing" @@ -225,4 +225,4 @@ function setuppackage (projectname) end setuppackage("pyrogenesis") --- setuppackage("sced") \ No newline at end of file +setuppackage("sced") \ No newline at end of file diff --git a/build/premake/src/Src/project.c b/build/premake/src/Src/project.c index 6a4b4080b2..1447dfbccb 100644 --- a/build/premake/src/Src/project.c +++ b/build/premake/src/Src/project.c @@ -35,6 +35,7 @@ static int getDeepArraySize(int ref); static int getObjectFromArray(int ref, int i); static const char* getString(int ref, char* name); static const char* getStringFromArray(int ref, int index); +static double getNumber(int ref, char* name); static int addoption(lua_State* L); static int copyfile(lua_State* L); @@ -337,6 +338,7 @@ static int finishProject() for (j = 0; j < package->numConfigs; ++j) { int cfg; + const char* objdir; Config* config = (Config*)malloc(sizeof(Config)); package->config[j] = config; @@ -349,6 +351,17 @@ static int finishProject() if (config->target == NULL) config->target = getString(pkg, "target"); if (config->target == NULL) config->target = package->name; + objdir = getString(cfg, "objdir"); + if (objdir == NULL) + { + config->objdir = (char*)malloc(4+strlen(config->name)+1); + sprintf(config->objdir, "obj\\%s", config->name); + } + else + { + config->objdir = strdup(translatePath(objdir, NATIVE)); + } + config->pchHeader = getString(cfg, "pchHeader"); if (!config->pchHeader) config->pchHeader = getString(pkg, "pchHeader"); @@ -357,6 +370,13 @@ static int finishProject() if (!config->pchSource) config->pchSource = getString(pkg, "pchSource"); + if (getString(cfg, "build")) + config->build = (getNumber(cfg, "build") != 0.0); + else if (getString(pkg, "build")) + config->build = (getNumber(pkg, "build") != 0.0); + else + config->build = 1; + getConfigList(pkg, cfg, "buildflags", &config->buildFlags, &config->numBuildFlags); getConfigList(pkg, cfg, "buildoptions", &config->buildOptions, &config->numBuildOptions); getConfigList(pkg, cfg, "defines", &config->defines, &config->numDefines); @@ -392,6 +412,7 @@ void closeProject() free((char**)config->linkFlags); free((char**)config->linkOptions); free((char**)config->links); + free((char*)config->objdir); free(package->config[j]); } free(package->config); @@ -487,6 +508,20 @@ static const char* getString(int ref, char* name) //----------------------------------------------------------------------------- +static double getNumber(int ref, char* name) +{ + double num; + lua_getref(L, ref); + lua_pushstring(L, name); + lua_gettable(L, -2); + num = lua_tonumber(L, -1); + lua_pop(L, 2); + + return num; +} + +//----------------------------------------------------------------------------- + static const char* goDeep(int ref, int* index) { int i; diff --git a/build/premake/src/Src/project.h b/build/premake/src/Src/project.h index f9034e94b5..03dd898cc4 100644 --- a/build/premake/src/Src/project.h +++ b/build/premake/src/Src/project.h @@ -23,6 +23,8 @@ typedef struct _Config const char** links; const char* pchHeader; const char* pchSource; + char* objdir; + int build; // 0 or 1, to indicate whether to include it in the default build int numBuildFlags; int numBuildOptions; int numDefines; diff --git a/build/premake/src/Src/vs6.c b/build/premake/src/Src/vs6.c index e5112025cb..87aae62962 100644 --- a/build/premake/src/Src/vs6.c +++ b/build/premake/src/Src/vs6.c @@ -292,7 +292,7 @@ static int writeVcProject(Package* package) fprintf(file, reversePath(package->path, outdir, WIN32)); insertPath(file, getDirectory(config->target), WIN32); fprintf(file, "\"\n"); - fprintf(file, "# PROP Intermediate_Dir \"obj\\%s\\\"\n", config->name); + fprintf(file, "# PROP Intermediate_Dir \"%s\\\"\n", config->objdir); if (strcmp(package->kind, "lib") != 0) fprintf(file, "# PROP Ignore_Export_Lib %d\n", importlib ? 0 : 1); fprintf(file, "# PROP Target_Dir \"\"\n"); @@ -470,7 +470,7 @@ static int writeCsProject(Package* package) fprintf(file, reversePath(package->path, project->binaries, WIN32)); insertPath(file, getDirectory(config->target), WIN32); fprintf(file, "\"\n"); - fprintf(file, "# PROP Intermediate_Dir \"obj\\%s\"\n", config->name); + fprintf(file, "# PROP Intermediate_Dir \"%s\"\n", config->objdir); fprintf(file, "# PROP Target_Dir \"\"\n"); fprintf(file, "# Begin Special Build Tool\n"); fprintf(file, "SOURCE=\"$(InputPath)\"\n"); @@ -484,7 +484,7 @@ static int writeCsProject(Package* package) if (unsafe) fprintf(file, " /unsafe"); fprintf(file, " /lib:\"%s\"", reversePath(package->path, project->binaries, WIN32)); writeList(file, config->links, " /r:", ".dll", "", checkRef, &i); - fprintf(file, " obj\\%s\\*.cs\n", config->name); + fprintf(file, " %s\\*.cs\n", config->objdir); fprintf(file, "# End Special Build Tool\n"); fprintf(file, "\n"); @@ -512,7 +512,7 @@ static int writeCsProject(Package* package) fprintf(file, "!%s \"$(CFG)\" == \"%s - Win32 %s\"", (i == 0 ? "IF" : "ELSEIF"), replaceChars(package->name,"-"), config->name); fprintf(file, "\n"); fprintf(file, "# Begin Custom Build - %s\n", source); - fprintf(file, "IntDir=.\\obj\\%s\n", config->name); + fprintf(file, "IntDir=.\\%s\n", config->objdir); fprintf(file, "InputPath=.\\%s\n", translatePath(source, WIN32)); fprintf(file, "\n"); fprintf(file, "\"$(INTDIR)\\%s\" : $(SOURCE) \"$(INTDIR)\" \"$(OUTDIR)\"\n", translatePath(source, WIN32)); diff --git a/build/premake/src/Src/vs7.c b/build/premake/src/Src/vs7.c index ded6ea25f8..5e06d41ed1 100644 --- a/build/premake/src/Src/vs7.c +++ b/build/premake/src/Src/vs7.c @@ -205,7 +205,8 @@ static int writeSolution(int version) Config* config = package->config[j]; PkgData* data = (PkgData*)package->data; fprintf(file, "\t\t{%s}.%s.ActiveCfg = %s|%s\n", data->projGuid, config->name, config->name, data->projType); - fprintf(file, "\t\t{%s}.%s.Build.0 = %s|%s\n", data->projGuid, config->name, config->name, data->projType); + if (config->build) + fprintf(file, "\t\t{%s}.%s.Build.0 = %s|%s\n", data->projGuid, config->name, config->name, data->projType); } } fprintf(file, "\tEndGlobalSection\n"); @@ -411,7 +412,7 @@ static int writeVcProject(int version, Package* package) fprintf(file, reversePath(path, (configType != 4 ? project->binaries : project->libraries), WIN32)); insertPath(file, getDirectory(config->target), WIN32); fprintf(file, "\"\n"); - fprintf(file, " IntermediateDirectory=\"obj\\%s\\\"\n", config->name); + fprintf(file, " IntermediateDirectory=\"%s\\\"\n", config->objdir); fprintf(file, " ConfigurationType=\"%d\"\n", configType); fprintf(file, " CharacterSet=\"2\""); if (managed) fprintf(file, "\n ManagedExtensions=\"TRUE\""); @@ -490,7 +491,7 @@ static int writeVcProject(int version, Package* package) } else { - fprintf(file, " ProgramDatabaseFile=\"obj\\%s\\%s.pdb\"\n", config->name, getFilename(config->target, 0)); + fprintf(file, " ProgramDatabaseFile=\"%s\\%s.pdb\"\n", config->objdir, getFilename(config->target, 0)); } } fprintf(file, " SubSystem=\"%d\"\n", subsystem);