CREATE_PROJECT: Add --include-dir and --library-dir
Additional include and library directories can now be added. This is most useful to Xcode Mac projects where a vanilla Homebrew setup requires manually adding five directories through the Xcode UI and then repeating that every time the project needs to be regenerated. Now create_project can be scripted to regenerate a working Mac project without any extra Xcode steps.
This commit is contained in:
parent
f08f2a52fc
commit
c67adbb301
7 changed files with 79 additions and 14 deletions
|
@ -121,8 +121,12 @@ void CMakeProvider::createWorkspace(const BuildSetup &setup) {
|
|||
workspace << "# Generate options for the engines\n";
|
||||
writeEngineOptions(workspace);
|
||||
|
||||
std::string includeDirsList;
|
||||
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
|
||||
includeDirsList += *i + ' ';
|
||||
|
||||
workspace << "include_directories(${" << setup.projectDescription << "_SOURCE_DIR}/" << setup.filePrefix << " ${" << setup.projectDescription << "_SOURCE_DIR}/" << setup.filePrefix << "/engines "
|
||||
"$ENV{"<<LIBS_DEFINE<<"}/include .)\n\n";
|
||||
<< includeDirsList << "$ENV{"<<LIBS_DEFINE<<"}/include .)\n\n";
|
||||
|
||||
workspace << "# Libraries and features\n\n";
|
||||
writeFeatureLibSearch(setup, workspace, "sdl");
|
||||
|
@ -281,7 +285,10 @@ void CMakeProvider::createProjectFile(const std::string &name, const std::string
|
|||
|
||||
project << "# Libraries\n";
|
||||
const Library *sdlLibrary = getLibraryFromFeature("sdl", setup.useSDL2);
|
||||
project << "target_link_libraries(" << name << " ${" << sdlLibrary->librariesVar << "} ${SCUMMVM_LIBS})\n";
|
||||
std::string libraryDirsList;
|
||||
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
|
||||
libraryDirsList += *i + ' ';
|
||||
project << "target_link_libraries(" << name << " " << libraryDirsList << "${" << sdlLibrary->librariesVar << "} ${SCUMMVM_LIBS})\n";
|
||||
|
||||
project << "if (WIN32)\n";
|
||||
project << "\ttarget_sources(" << name << " PUBLIC " << setup.filePrefix << "/dists/" << name << ".rc)\n";
|
||||
|
|
|
@ -135,6 +135,9 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s
|
|||
writeWarnings(name, project);
|
||||
writeDefines(setup.defines, project);
|
||||
|
||||
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
|
||||
project << "\t\t\t\t\t<Add directory=\"" << convertPathToWin(*i) << "\" />\n";
|
||||
|
||||
project << "\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")include\" />\n"
|
||||
"\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")include\\SDL\" />\n"
|
||||
"\t\t\t\t\t<Add directory=\"..\\..\\engines\" />\n"
|
||||
|
@ -154,6 +157,9 @@ void CodeBlocksProvider::createProjectFile(const std::string &name, const std::s
|
|||
project << "\t\t\t\t\t<Add library=\"" << setup.projectName << "\\engines\\" << i->first << "\\lib" << i->first << ".a\" />\n";
|
||||
}
|
||||
|
||||
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
|
||||
project << "\t\t\t\t\t<Add directory=\"" << convertPathToWin(*i) << "\" />\n";
|
||||
|
||||
project << "\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")lib\\mingw\" />\n"
|
||||
"\t\t\t\t\t<Add directory=\"$(" << LIBS_DEFINE << ")lib\" />\n"
|
||||
"\t\t\t\t</Linker>\n";
|
||||
|
|
|
@ -74,6 +74,13 @@ namespace {
|
|||
*/
|
||||
std::string unifyPath(const std::string &path);
|
||||
|
||||
/**
|
||||
* Removes trailing slash from path if it exists
|
||||
*
|
||||
* @param path Path string.
|
||||
*/
|
||||
void removeTrailingSlash(std::string& path);
|
||||
|
||||
/**
|
||||
* Display the help text for the program.
|
||||
*
|
||||
|
@ -114,9 +121,7 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
BuildSetup setup;
|
||||
setup.srcDir = unifyPath(srcDir);
|
||||
|
||||
if (setup.srcDir.at(setup.srcDir.size() - 1) == '/')
|
||||
setup.srcDir.erase(setup.srcDir.size() - 1);
|
||||
removeTrailingSlash(setup.srcDir);
|
||||
|
||||
setup.filePrefix = setup.srcDir;
|
||||
setup.outputDir = '.';
|
||||
|
@ -258,8 +263,7 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
setup.filePrefix = unifyPath(argv[++i]);
|
||||
if (setup.filePrefix.at(setup.filePrefix.size() - 1) == '/')
|
||||
setup.filePrefix.erase(setup.filePrefix.size() - 1);
|
||||
removeTrailingSlash(setup.filePrefix);
|
||||
} else if (!std::strcmp(argv[i], "--output-dir")) {
|
||||
if (i + 1 >= argc) {
|
||||
std::cerr << "ERROR: Missing \"path\" parameter for \"--output-dir\"!\n";
|
||||
|
@ -267,9 +271,23 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
setup.outputDir = unifyPath(argv[++i]);
|
||||
if (setup.outputDir.at(setup.outputDir.size() - 1) == '/')
|
||||
setup.outputDir.erase(setup.outputDir.size() - 1);
|
||||
|
||||
removeTrailingSlash(setup.outputDir);
|
||||
} else if (!std::strcmp(argv[i], "--include-dir")) {
|
||||
if (i + 1 >= argc) {
|
||||
std::cerr << "ERROR: Missing \"path\" parameter for \"--include-dir\"!\n";
|
||||
return -1;
|
||||
}
|
||||
std::string includeDir = unifyPath(argv[++i]);
|
||||
removeTrailingSlash(includeDir);
|
||||
setup.includeDirs.push_back(includeDir);
|
||||
} else if (!std::strcmp(argv[i], "--library-dir")) {
|
||||
if (i + 1 >= argc) {
|
||||
std::cerr << "ERROR: Missing \"path\" parameter for \"--library-dir\"!\n";
|
||||
return -1;
|
||||
}
|
||||
std::string libraryDir = unifyPath(argv[++i]);
|
||||
removeTrailingSlash(libraryDir);
|
||||
setup.libraryDirs.push_back(libraryDir);
|
||||
} else if (!std::strcmp(argv[i], "--build-events")) {
|
||||
setup.runBuildEvents = true;
|
||||
} else if (!std::strcmp(argv[i], "--installer")) {
|
||||
|
@ -678,6 +696,11 @@ std::string unifyPath(const std::string &path) {
|
|||
return result;
|
||||
}
|
||||
|
||||
void removeTrailingSlash(std::string& path) {
|
||||
if (path.size() > 0 && path.at(path.size() - 1) == '/')
|
||||
path.erase(path.size() - 1);
|
||||
}
|
||||
|
||||
void displayHelp(const char *exe) {
|
||||
using std::cout;
|
||||
|
||||
|
@ -702,6 +725,8 @@ void displayHelp(const char *exe) {
|
|||
" --output-dir path overwrite path, where the project files are placed\n"
|
||||
" By default this is \".\", i.e. the current working\n"
|
||||
" directory\n"
|
||||
" --include-dir path add a path to the include search path"
|
||||
" --library-dir path add a path to the library search path"
|
||||
"\n"
|
||||
"MSVC specific settings:\n"
|
||||
" --msvc-version version set the targeted MSVC version. Possible values:\n";
|
||||
|
|
|
@ -232,6 +232,9 @@ struct BuildSetup {
|
|||
std::string filePrefix; ///< Prefix for the relative path arguments in the project files.
|
||||
std::string outputDir; ///< Path where to put the MSVC project files.
|
||||
|
||||
StringList includeDirs; ///< List of additional include paths
|
||||
StringList libraryDirs; ///< List of additional library paths
|
||||
|
||||
EngineDescList engines; ///< Engine list for the build (this may contain engines, which are *not* enabled!).
|
||||
FeatureList features; ///< Feature list for the build (this may contain features, which are *not* enabled!).
|
||||
|
||||
|
|
|
@ -358,13 +358,21 @@ void MSBuildProvider::outputGlobalPropFile(const BuildSetup &setup, std::ofstrea
|
|||
if (runBuildEvents)
|
||||
definesList += REVISION_DEFINE ";";
|
||||
|
||||
std::string includeDirsList;
|
||||
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
|
||||
includeDirsList += convertPathToWin(*i) + ';';
|
||||
|
||||
std::string libraryDirsList;
|
||||
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
|
||||
libraryDirsList += convertPathToWin(*i) + ';';
|
||||
|
||||
properties << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
|
||||
<< "<Project DefaultTargets=\"Build\" ToolsVersion=\"" << _msvcVersion.project << "\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n"
|
||||
<< "\t<PropertyGroup>\n"
|
||||
<< "\t\t<_PropertySheetDisplayName>" << setup.projectDescription << "_Global</_PropertySheetDisplayName>\n"
|
||||
<< "\t\t<ExecutablePath>$(" << LIBS_DEFINE << ")\\bin;$(" << LIBS_DEFINE << ")\\bin\\" << getMSVCArchName(arch) << ";$(" << LIBS_DEFINE << ")\\$(Configuration)\\bin;$(ExecutablePath)</ExecutablePath>\n"
|
||||
<< "\t\t<LibraryPath>$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << ";$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << "\\$(Configuration);$(" << LIBS_DEFINE << ")\\lib;$(" << LIBS_DEFINE << ")\\$(Configuration)\\lib;$(LibraryPath)</LibraryPath>\n"
|
||||
<< "\t\t<IncludePath>$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\" << (setup.useSDL2 ? "SDL2" : "SDL") << ";$(IncludePath)</IncludePath>\n"
|
||||
<< "\t\t<LibraryPath>" << libraryDirsList << "$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << ";$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << "\\$(Configuration);$(" << LIBS_DEFINE << ")\\lib;$(" << LIBS_DEFINE << ")\\$(Configuration)\\lib;$(LibraryPath)</LibraryPath>\n"
|
||||
<< "\t\t<IncludePath>" << includeDirsList << "$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\" << (setup.useSDL2 ? "SDL2" : "SDL") << ";$(IncludePath)</IncludePath>\n"
|
||||
<< "\t\t<OutDir>$(Configuration)" << getMSVCArchName(arch) << "\\</OutDir>\n"
|
||||
<< "\t\t<IntDir>$(Configuration)" << getMSVCArchName(arch) << "\\$(ProjectName)\\</IntDir>\n"
|
||||
<< "\t</PropertyGroup>\n"
|
||||
|
|
|
@ -187,6 +187,10 @@ void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::of
|
|||
for (StringList::const_iterator i = _globalWarnings.begin(); i != _globalWarnings.end(); ++i)
|
||||
warnings += *i + ';';
|
||||
|
||||
std::string includeDirsList;
|
||||
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
|
||||
includeDirsList += convertPathToWin(*i) + ';';
|
||||
|
||||
std::string definesList;
|
||||
for (StringList::const_iterator i = defines.begin(); i != defines.end(); ++i) {
|
||||
if (i != defines.begin())
|
||||
|
@ -210,7 +214,7 @@ void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::of
|
|||
<< "\t\tName=\"VCCLCompilerTool\"\n"
|
||||
<< "\t\tDisableLanguageExtensions=\"" << (setup.devTools ? "false" : "true") << "\"\n"
|
||||
<< "\t\tDisableSpecificWarnings=\"" << warnings << "\"\n"
|
||||
<< "\t\tAdditionalIncludeDirectories=\".\\;" << prefix << ";" << prefix << "\\engines;$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\SDL;" << (setup.tests ? prefix + "\\test\\cxxtest;" : "") << "\"\n"
|
||||
<< "\t\tAdditionalIncludeDirectories=\".\\;" << prefix << ";" << prefix << "\\engines;" << includeDirsList << "$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\SDL;" << (setup.tests ? prefix + "\\test\\cxxtest;" : "") << "\"\n"
|
||||
<< "\t\tPreprocessorDefinitions=\"" << definesList << "\"\n"
|
||||
<< "\t\tExceptionHandling=\"" << ((setup.devTools || setup.tests || _version == 14) ? "1" : "0") << "\"\n";
|
||||
|
||||
|
@ -241,7 +245,11 @@ void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::of
|
|||
if (!setup.devTools && !setup.tests)
|
||||
properties << "\t\tEntryPointSymbol=\"WinMainCRTStartup\"\n";
|
||||
|
||||
properties << "\t\tAdditionalLibraryDirectories=\"$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << "\"\n"
|
||||
std::string libraryDirsList;
|
||||
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
|
||||
libraryDirsList += convertPathToWin(*i) + ';';
|
||||
|
||||
properties << "\t\tAdditionalLibraryDirectories=\"" << libraryDirsList << "$(" << LIBS_DEFINE << ")\\lib\\" << getMSVCArchName(arch) << "\"\n"
|
||||
<< "\t/>\n"
|
||||
<< "\t<Tool\n"
|
||||
<< "\t\tName=\"VCResourceCompilerTool\"\n"
|
||||
|
|
|
@ -1068,6 +1068,8 @@ void XcodeProvider::setupBuildConfiguration(const BuildSetup &setup) {
|
|||
ValueList iPhone_HeaderSearchPaths;
|
||||
iPhone_HeaderSearchPaths.push_back("$(SRCROOT)/engines/");
|
||||
iPhone_HeaderSearchPaths.push_back("$(SRCROOT)");
|
||||
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
|
||||
iPhone_HeaderSearchPaths.push_back("\"" + *i + "\"");
|
||||
iPhone_HeaderSearchPaths.push_back("\"" + projectOutputDirectory + "\"");
|
||||
iPhone_HeaderSearchPaths.push_back("\"" + projectOutputDirectory + "/include\"");
|
||||
if (CONTAINS_DEFINE(setup.defines, "USE_SDL_NET")) {
|
||||
|
@ -1079,6 +1081,8 @@ void XcodeProvider::setupBuildConfiguration(const BuildSetup &setup) {
|
|||
ADD_SETTING_LIST(iPhone_Debug, "HEADER_SEARCH_PATHS", iPhone_HeaderSearchPaths, kSettingsAsList | kSettingsQuoteVariable, 5);
|
||||
ADD_SETTING_QUOTE(iPhone_Debug, "INFOPLIST_FILE", "$(SRCROOT)/dists/ios7/Info.plist");
|
||||
ValueList iPhone_LibPaths;
|
||||
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
|
||||
iPhone_LibPaths.push_back("\"" + *i + "\"");
|
||||
iPhone_LibPaths.push_back("$(inherited)");
|
||||
iPhone_LibPaths.push_back("\"" + projectOutputDirectory + "/lib\"");
|
||||
ADD_SETTING_LIST(iPhone_Debug, "LIBRARY_SEARCH_PATHS", iPhone_LibPaths, kSettingsAsList, 5);
|
||||
|
@ -1148,6 +1152,8 @@ void XcodeProvider::setupBuildConfiguration(const BuildSetup &setup) {
|
|||
ADD_SETTING_LIST(scummvmOSX_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvmOSX_defines, kSettingsNoQuote | kSettingsAsList, 5);
|
||||
ADD_SETTING_QUOTE(scummvmOSX_Debug, "GCC_VERSION", "");
|
||||
ValueList scummvmOSX_HeaderPaths;
|
||||
for (StringList::const_iterator i = setup.includeDirs.begin(); i != setup.includeDirs.end(); ++i)
|
||||
scummvmOSX_HeaderPaths.push_back("\"" + *i + "\"");
|
||||
if (setup.useSDL2) {
|
||||
scummvmOSX_HeaderPaths.push_back("/usr/local/include/SDL2");
|
||||
scummvmOSX_HeaderPaths.push_back("/opt/local/include/SDL2");
|
||||
|
@ -1165,6 +1171,8 @@ void XcodeProvider::setupBuildConfiguration(const BuildSetup &setup) {
|
|||
ADD_SETTING_LIST(scummvmOSX_Debug, "HEADER_SEARCH_PATHS", scummvmOSX_HeaderPaths, kSettingsQuoteVariable | kSettingsAsList, 5);
|
||||
ADD_SETTING_QUOTE(scummvmOSX_Debug, "INFOPLIST_FILE", "$(SRCROOT)/dists/macosx/Info.plist");
|
||||
ValueList scummvmOSX_LibPaths;
|
||||
for (StringList::const_iterator i = setup.libraryDirs.begin(); i != setup.libraryDirs.end(); ++i)
|
||||
scummvmOSX_LibPaths.push_back("\"" + *i + "\"");
|
||||
scummvmOSX_LibPaths.push_back("/usr/local/lib");
|
||||
scummvmOSX_LibPaths.push_back("/opt/local/lib");
|
||||
scummvmOSX_LibPaths.push_back("\"$(inherited)\"");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue