QtDialog: Clean up and document -S and -B options

This commit is contained in:
Kyle Edwards 2019-01-25 10:53:18 -05:00
parent 40628b2519
commit ad0853b3d4
3 changed files with 57 additions and 12 deletions

View File

@ -10,6 +10,7 @@ Synopsis
cmake-gui [<options>]
cmake-gui [<options>] {<path-to-source> | <path-to-existing-build>}
cmake-gui [<options>] -S <path-to-source> -B <path-to-build>
Description
===========
@ -27,6 +28,14 @@ native tool on their platform.
Options
=======
``-S <path-to-source>``
Path to root directory of the CMake project to build.
``-B <path-to-build>``
Path to directory which CMake will use as the root of build directory.
If the directory doesn't already exist CMake will make it.
.. include:: OPTIONS_HELP.txt
See Also

View File

@ -0,0 +1,5 @@
cmake-gui-s-b
-------------
* The :manual:`cmake-gui(1)` dialog gained new ``-S`` and ``-B`` arguments to
explicitly specify source and build directories.

View File

@ -30,7 +30,8 @@ static const char* cmDocumentationUsage[][2] = {
{ nullptr,
" cmake-gui [options]\n"
" cmake-gui [options] <path-to-source>\n"
" cmake-gui [options] <path-to-existing-build>" },
" cmake-gui [options] <path-to-existing-build>\n"
" cmake-gui [options] -S <path-to-source> -B <path-to-build>\n" },
{ nullptr, nullptr }
};
@ -142,23 +143,53 @@ int main(int argc, char** argv)
CMakeSetupDialog dialog;
dialog.show();
cmsys::CommandLineArguments arg;
arg.Initialize(argc2, argv2);
QStringList args = QApplication::arguments();
std::string binaryDirectory;
std::string sourceDirectory;
typedef cmsys::CommandLineArguments argT;
arg.AddArgument("-B", argT::CONCAT_ARGUMENT, &binaryDirectory,
"Binary Directory");
arg.AddArgument("-S", argT::CONCAT_ARGUMENT, &sourceDirectory,
"Source Directory");
// do not complain about unknown options
arg.StoreUnusedArguments(true);
arg.Parse();
for (int i = 1; i < args.size(); ++i) {
const QString& arg = args[i];
if (arg.startsWith("-S")) {
QString path = arg.mid(2);
if (path.isEmpty()) {
++i;
if (i >= args.size()) {
std::cerr << "No source directory specified for -S" << std::endl;
return 1;
}
path = args[i];
if (path[0] == '-') {
std::cerr << "No source directory specified for -S" << std::endl;
return 1;
}
}
sourceDirectory =
cmSystemTools::CollapseFullPath(path.toLocal8Bit().data());
cmSystemTools::ConvertToUnixSlashes(sourceDirectory);
} else if (arg.startsWith("-B")) {
QString path = arg.mid(2);
if (path.isEmpty()) {
++i;
if (i >= args.size()) {
std::cerr << "No build directory specified for -B" << std::endl;
return 1;
}
path = args[i];
if (path[0] == '-') {
std::cerr << "No build directory specified for -B" << std::endl;
return 1;
}
}
binaryDirectory =
cmSystemTools::CollapseFullPath(path.toLocal8Bit().data());
cmSystemTools::ConvertToUnixSlashes(binaryDirectory);
}
}
if (!sourceDirectory.empty() && !binaryDirectory.empty()) {
dialog.setSourceDirectory(QString::fromLocal8Bit(sourceDirectory.c_str()));
dialog.setBinaryDirectory(QString::fromLocal8Bit(binaryDirectory.c_str()));
} else {
QStringList args = QApplication::arguments();
if (args.count() == 2) {
std::string filePath =
cmSystemTools::CollapseFullPath(args[1].toLocal8Bit().data());