mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 21:31:08 -06:00
cmake-gui: Handle relative paths in the build directory text input
Interpret a relative path with respect to the previously configured directory.
This commit is contained in:
committed by
Brad King
parent
a67bb7f488
commit
a872844908
@@ -350,8 +350,24 @@ void CMakeSetupDialog::initialize()
|
|||||||
if (!this->SourceDirectory->text().isEmpty() &&
|
if (!this->SourceDirectory->text().isEmpty() &&
|
||||||
!this->DeferredPreset.isNull()) {
|
!this->DeferredPreset.isNull()) {
|
||||||
this->onSourceDirectoryChanged(this->SourceDirectory->text());
|
this->onSourceDirectoryChanged(this->SourceDirectory->text());
|
||||||
|
if (!this->BinaryDirectory->lineEdit()->text().isEmpty()) {
|
||||||
|
this->onBinaryDirectoryChanged(
|
||||||
|
this->BinaryDirectory->lineEdit()->text());
|
||||||
|
}
|
||||||
} else if (!this->SourceDirectory->text().isEmpty() ||
|
} else if (!this->SourceDirectory->text().isEmpty() ||
|
||||||
!this->BinaryDirectory->lineEdit()->text().isEmpty()) {
|
!this->BinaryDirectory->lineEdit()->text().isEmpty()) {
|
||||||
|
if (this->SourceDirectory->text().isEmpty() &&
|
||||||
|
!cmSystemTools::FileIsFullPath(
|
||||||
|
this->BinaryDirectory->lineEdit()->text().toStdString())) {
|
||||||
|
// If the binary directory is relative, load the previous source path
|
||||||
|
// from the config
|
||||||
|
QSettings settings;
|
||||||
|
settings.beginGroup("Settings/StartPath");
|
||||||
|
QString srcDir = settings.value(QString("WhereSource")).toString();
|
||||||
|
this->SourceDirectory->blockSignals(true);
|
||||||
|
this->SourceDirectory->setText(srcDir);
|
||||||
|
this->SourceDirectory->blockSignals(false);
|
||||||
|
}
|
||||||
this->onSourceDirectoryChanged(this->SourceDirectory->text());
|
this->onSourceDirectoryChanged(this->SourceDirectory->text());
|
||||||
this->onBinaryDirectoryChanged(this->BinaryDirectory->lineEdit()->text());
|
this->onBinaryDirectoryChanged(this->BinaryDirectory->lineEdit()->text());
|
||||||
} else {
|
} else {
|
||||||
@@ -411,8 +427,13 @@ bool CMakeSetupDialog::prepareConfigure()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// remember path
|
// remember paths
|
||||||
this->addBinaryPath(dir.absolutePath());
|
this->addBinaryPath(
|
||||||
|
this->CMakeThread->cmakeInstance()->relativeBinaryDirectory());
|
||||||
|
QSettings settings;
|
||||||
|
settings.beginGroup("Settings/StartPath");
|
||||||
|
settings.setValue("WhereSource",
|
||||||
|
this->CMakeThread->cmakeInstance()->sourceDirectory());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -742,8 +763,15 @@ void CMakeSetupDialog::showPresetLoadError(const QString& dir,
|
|||||||
|
|
||||||
void CMakeSetupDialog::doBinaryBrowse()
|
void CMakeSetupDialog::doBinaryBrowse()
|
||||||
{
|
{
|
||||||
|
QString abs_path = this->BinaryDirectory->currentText();
|
||||||
|
if (!cmSystemTools::FileIsFullPath(abs_path.toStdString())) {
|
||||||
|
if (!this->SourceDirectory->text().endsWith("/")) {
|
||||||
|
abs_path = "/" + abs_path;
|
||||||
|
}
|
||||||
|
abs_path = this->SourceDirectory->text() + abs_path;
|
||||||
|
}
|
||||||
QString dir = QFileDialog::getExistingDirectory(
|
QString dir = QFileDialog::getExistingDirectory(
|
||||||
this, tr("Enter Path to Build"), this->BinaryDirectory->currentText(),
|
this, tr("Enter Path to Build"), abs_path,
|
||||||
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
|
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
|
||||||
if (!dir.isEmpty() && dir != this->BinaryDirectory->currentText()) {
|
if (!dir.isEmpty() && dir != this->BinaryDirectory->currentText()) {
|
||||||
this->setBinaryDirectory(dir);
|
this->setBinaryDirectory(dir);
|
||||||
|
|||||||
@@ -94,6 +94,10 @@ void QCMake::setSourceDirectory(const QString& _dir)
|
|||||||
emit this->sourceDirChanged(this->SourceDirectory);
|
emit this->sourceDirChanged(this->SourceDirectory);
|
||||||
this->loadPresets();
|
this->loadPresets();
|
||||||
this->setPreset(QString{});
|
this->setPreset(QString{});
|
||||||
|
if (!cmSystemTools::FileIsFullPath(
|
||||||
|
this->MaybeRelativeBinaryDirectory.toStdString())) {
|
||||||
|
this->setBinaryDirectory(this->MaybeRelativeBinaryDirectory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,9 +105,23 @@ void QCMake::setBinaryDirectory(const QString& _dir)
|
|||||||
{
|
{
|
||||||
QString dir = QString::fromStdString(
|
QString dir = QString::fromStdString(
|
||||||
cmSystemTools::GetActualCaseForPath(_dir.toStdString()));
|
cmSystemTools::GetActualCaseForPath(_dir.toStdString()));
|
||||||
if (this->BinaryDirectory != dir) {
|
|
||||||
this->BinaryDirectory = QDir::fromNativeSeparators(dir);
|
QString absDir = dir;
|
||||||
emit this->binaryDirChanged(this->BinaryDirectory);
|
|
||||||
|
if (!cmSystemTools::FileIsFullPath(absDir.toStdString())) {
|
||||||
|
if (!this->SourceDirectory.isEmpty()) {
|
||||||
|
if (!this->SourceDirectory.endsWith("/")) {
|
||||||
|
absDir = "/" + absDir;
|
||||||
|
}
|
||||||
|
absDir = this->SourceDirectory + absDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->BinaryDirectory != absDir ||
|
||||||
|
this->MaybeRelativeBinaryDirectory != dir) {
|
||||||
|
this->MaybeRelativeBinaryDirectory = QDir::fromNativeSeparators(dir);
|
||||||
|
this->BinaryDirectory = QDir::fromNativeSeparators(absDir);
|
||||||
|
emit this->binaryDirChanged(this->MaybeRelativeBinaryDirectory);
|
||||||
cmState* state = this->CMakeInstance->GetState();
|
cmState* state = this->CMakeInstance->GetState();
|
||||||
this->setGenerator(QString());
|
this->setGenerator(QString());
|
||||||
this->setToolset(QString());
|
this->setToolset(QString());
|
||||||
@@ -600,6 +618,11 @@ QString QCMake::binaryDirectory() const
|
|||||||
return this->BinaryDirectory;
|
return this->BinaryDirectory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString QCMake::relativeBinaryDirectory() const
|
||||||
|
{
|
||||||
|
return this->MaybeRelativeBinaryDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
QString QCMake::sourceDirectory() const
|
QString QCMake::sourceDirectory() const
|
||||||
{
|
{
|
||||||
return this->SourceDirectory;
|
return this->SourceDirectory;
|
||||||
|
|||||||
@@ -130,6 +130,8 @@ public:
|
|||||||
QCMakePropertyList properties() const;
|
QCMakePropertyList properties() const;
|
||||||
/// get the current binary directory
|
/// get the current binary directory
|
||||||
QString binaryDirectory() const;
|
QString binaryDirectory() const;
|
||||||
|
/// get the current binary directory, possibly a relative path
|
||||||
|
QString relativeBinaryDirectory() const;
|
||||||
/// get the current source directory
|
/// get the current source directory
|
||||||
QString sourceDirectory() const;
|
QString sourceDirectory() const;
|
||||||
/// get the current generator
|
/// get the current generator
|
||||||
@@ -196,6 +198,7 @@ protected:
|
|||||||
bool WarnUninitializedMode;
|
bool WarnUninitializedMode;
|
||||||
QString SourceDirectory;
|
QString SourceDirectory;
|
||||||
QString BinaryDirectory;
|
QString BinaryDirectory;
|
||||||
|
QString MaybeRelativeBinaryDirectory;
|
||||||
QString Generator;
|
QString Generator;
|
||||||
QString Platform;
|
QString Platform;
|
||||||
QString Toolset;
|
QString Toolset;
|
||||||
|
|||||||
Reference in New Issue
Block a user