[Scummvm-git-logs] scummvm master -> 16bf767de3546733e24ddce1475c8e3f954a4c01
sluicebox
22204938+sluicebox at users.noreply.github.com
Sun Nov 7 00:08:32 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
16bf767de3 CREATE_PROJECT: Add --include-dir and --library-dir
Commit: 16bf767de3546733e24ddce1475c8e3f954a4c01
https://github.com/scummvm/scummvm/commit/16bf767de3546733e24ddce1475c8e3f954a4c01
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2021-11-06T19:08:06-05:00
Commit Message:
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.
Changed paths:
devtools/create_project/cmake.cpp
devtools/create_project/codeblocks.cpp
devtools/create_project/create_project.cpp
devtools/create_project/create_project.h
devtools/create_project/msbuild.cpp
devtools/create_project/visualstudio.cpp
devtools/create_project/xcode.cpp
diff --git a/devtools/create_project/cmake.cpp b/devtools/create_project/cmake.cpp
index b91232d0ef..8569df91e6 100644
--- a/devtools/create_project/cmake.cpp
+++ b/devtools/create_project/cmake.cpp
@@ -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";
diff --git a/devtools/create_project/codeblocks.cpp b/devtools/create_project/codeblocks.cpp
index a0d7d20156..31f29b64b0 100644
--- a/devtools/create_project/codeblocks.cpp
+++ b/devtools/create_project/codeblocks.cpp
@@ -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";
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp
index 7aa4e0f678..8f901e6829 100644
--- a/devtools/create_project/create_project.cpp
+++ b/devtools/create_project/create_project.cpp
@@ -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";
diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h
index 102c9ea9e5..9acace6d02 100644
--- a/devtools/create_project/create_project.h
+++ b/devtools/create_project/create_project.h
@@ -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!).
diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp
index 84126946c4..293ccca05f 100644
--- a/devtools/create_project/msbuild.cpp
+++ b/devtools/create_project/msbuild.cpp
@@ -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"
diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp
index f8196d65e4..459e0fdace 100644
--- a/devtools/create_project/visualstudio.cpp
+++ b/devtools/create_project/visualstudio.cpp
@@ -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"
diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp
index 2415fd871a..32c74cf140 100644
--- a/devtools/create_project/xcode.cpp
+++ b/devtools/create_project/xcode.cpp
@@ -1066,6 +1066,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")) {
@@ -1077,6 +1079,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);
@@ -1144,6 +1148,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");
@@ -1161,6 +1167,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)\"");
More information about the Scummvm-git-logs
mailing list