cmake-gui: Replace command-line install dialog with information box
The QMacInstallDialog infrastructure no longer works on modern OS X versions. Drop it and replace the dialog with a simple info box that explains to the user how to run 'cmake-gui --install' to add symlinks. Also suggest simply modifying the PATH. This approach is similar to the Xcode 'xcode-select --install' method of installing Xcode Command Line Tools.
This commit is contained in:
parent
438ce4a0fb
commit
8ea2db2639
|
@ -99,15 +99,12 @@ set(SRCS
|
|||
QCMakeCacheView.h
|
||||
QCMakeWidgets.cxx
|
||||
QCMakeWidgets.h
|
||||
QMacInstallDialog.cxx
|
||||
QMacInstallDialog.h
|
||||
)
|
||||
QT4_WRAP_UI(UI_SRCS
|
||||
CMakeSetupDialog.ui
|
||||
Compilers.ui
|
||||
CrossCompiler.ui
|
||||
AddCacheEntry.ui
|
||||
MacInstallDialog.ui
|
||||
)
|
||||
QT4_WRAP_CPP(MOC_SRCS
|
||||
AddCacheEntry.h
|
||||
|
@ -117,7 +114,6 @@ QT4_WRAP_CPP(MOC_SRCS
|
|||
QCMake.h
|
||||
QCMakeCacheView.h
|
||||
QCMakeWidgets.h
|
||||
QMacInstallDialog.h
|
||||
)
|
||||
QT4_ADD_RESOURCES(RC_SRCS CMakeSetup.qrc)
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
#include <QTranslator>
|
||||
#include <QLocale>
|
||||
#include <QTextCodec>
|
||||
#include "QMacInstallDialog.h"
|
||||
#include "CMakeSetupDialog.h"
|
||||
#include "cmDocumentation.h"
|
||||
#include "cmake.h"
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include <QUrl>
|
||||
#include <QShortcut>
|
||||
#include <QKeySequence>
|
||||
#include <QMacInstallDialog.h>
|
||||
#include <QInputDialog>
|
||||
|
||||
#include "QCMake.h"
|
||||
|
@ -121,7 +120,7 @@ CMakeSetupDialog::CMakeSetupDialog()
|
|||
this, SLOT(showUserChanges()));
|
||||
#if defined(Q_WS_MAC) || defined(Q_OS_MAC)
|
||||
this->InstallForCommandLineAction
|
||||
= ToolsMenu->addAction(tr("&Install For Command Line Use"));
|
||||
= ToolsMenu->addAction(tr("&How to Install For Command Line Use"));
|
||||
QObject::connect(this->InstallForCommandLineAction, SIGNAL(triggered(bool)),
|
||||
this, SLOT(doInstallForCommandLine()));
|
||||
#endif
|
||||
|
@ -420,8 +419,37 @@ bool CMakeSetupDialog::doConfigureInternal()
|
|||
|
||||
void CMakeSetupDialog::doInstallForCommandLine()
|
||||
{
|
||||
QMacInstallDialog setupdialog(0);
|
||||
setupdialog.exec();
|
||||
QString title = tr("How to Install For Command Line Use");
|
||||
QString msg = tr(
|
||||
"One may add CMake to the PATH:\n"
|
||||
"\n"
|
||||
" PATH=\"%1\":\"$PATH\"\n"
|
||||
"\n"
|
||||
"Or, to install symlinks to '/usr/bin', run:\n"
|
||||
"\n"
|
||||
" sudo \"%2\" --install\n"
|
||||
"\n"
|
||||
"Or, to install symlinks to another directory, run:\n"
|
||||
"\n"
|
||||
" sudo \"%3\" --install=/path/to/bin\n"
|
||||
);
|
||||
msg = msg.arg(cmSystemTools::GetFilenamePath(
|
||||
cmSystemTools::GetCMakeCommand()).c_str());
|
||||
msg = msg.arg(cmSystemTools::GetCMakeGUICommand().c_str());
|
||||
msg = msg.arg(cmSystemTools::GetCMakeGUICommand().c_str());
|
||||
|
||||
QDialog dialog;
|
||||
dialog.setWindowTitle(title);
|
||||
QVBoxLayout* l = new QVBoxLayout(&dialog);
|
||||
QLabel* lab = new QLabel(&dialog);
|
||||
l->addWidget(lab);
|
||||
lab->setText(msg);
|
||||
lab->setWordWrap(false);
|
||||
QDialogButtonBox* btns = new QDialogButtonBox(QDialogButtonBox::Ok,
|
||||
Qt::Horizontal, &dialog);
|
||||
QObject::connect(btns, SIGNAL(accepted()), &dialog, SLOT(accept()));
|
||||
l->addWidget(btns);
|
||||
dialog.exec();
|
||||
}
|
||||
|
||||
bool CMakeSetupDialog::doGenerateInternal()
|
||||
|
|
|
@ -1,103 +0,0 @@
|
|||
<ui version="4.0" >
|
||||
<class>Dialog</class>
|
||||
<widget class="QDialog" name="Dialog" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>470</width>
|
||||
<height>159</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle" >
|
||||
<string>Install Command Line Tools</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" >
|
||||
<property name="margin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="3" column="1" >
|
||||
<spacer>
|
||||
<property name="orientation" >
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" >
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="3" >
|
||||
<layout class="QHBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item>
|
||||
<spacer>
|
||||
<property name="orientation" >
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" >
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="skipInstallButton" >
|
||||
<property name="text" >
|
||||
<string>Skip Install Command Line </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="doInstallButton" >
|
||||
<property name="text" >
|
||||
<string>Install Command Line Links</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="2" >
|
||||
<widget class="QPushButton" name="choosePathButton" >
|
||||
<property name="text" >
|
||||
<string>Choose...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" >
|
||||
<widget class="QLabel" name="label" >
|
||||
<property name="text" >
|
||||
<string>Install Folder:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" >
|
||||
<widget class="QLineEdit" name="InstallPrefix" />
|
||||
</item>
|
||||
<item row="1" column="0" colspan="3" >
|
||||
<widget class="QLabel" name="label_2" >
|
||||
<property name="text" >
|
||||
<string>This will create symbolic links to the command line tools of cmake into the specified install folder.</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -1,121 +0,0 @@
|
|||
#include "QMacInstallDialog.h"
|
||||
#include <QMessageBox>
|
||||
#include "cmSystemTools.h"
|
||||
#include <iostream>
|
||||
#include <QFileDialog>
|
||||
#include "ui_MacInstallDialog.h"
|
||||
|
||||
class QMacInstallDialog::QMacInstallDialogInternals : public Ui::Dialog
|
||||
{
|
||||
public:
|
||||
};
|
||||
|
||||
QMacInstallDialog::QMacInstallDialog(QWidget*w)
|
||||
:QDialog(w)
|
||||
{
|
||||
this->Internals = new QMacInstallDialogInternals;
|
||||
this->Internals->setupUi(this);
|
||||
QObject::connect(this->Internals->choosePathButton, SIGNAL(clicked(bool)),
|
||||
this, SLOT(ShowBrowser()));
|
||||
QObject::connect(this->Internals->skipInstallButton, SIGNAL(clicked(bool)),
|
||||
this, SLOT(SkipInstall()));
|
||||
QObject::connect(this->Internals->doInstallButton, SIGNAL(clicked(bool)),
|
||||
this, SLOT(DoInstall()));
|
||||
this->Internals->InstallPrefix->setText("/usr/bin/");
|
||||
|
||||
}
|
||||
|
||||
QMacInstallDialog::~QMacInstallDialog()
|
||||
{
|
||||
delete this->Internals;
|
||||
}
|
||||
|
||||
void QMacInstallDialog::DoInstall()
|
||||
{
|
||||
QDir installDir(this->Internals->InstallPrefix->text());
|
||||
QString installTo = installDir.path();
|
||||
if(!cmSystemTools::FileExists(installTo.toLocal8Bit().data()))
|
||||
{
|
||||
QString message = tr("Build install does not exist, "
|
||||
"should I create it?\n\n"
|
||||
"Directory: ");
|
||||
message += installDir.path();
|
||||
QString title = tr("Create Directory");
|
||||
QMessageBox::StandardButton btn;
|
||||
btn = QMessageBox::information(this, title, message,
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
if(btn == QMessageBox::Yes)
|
||||
{
|
||||
cmSystemTools::MakeDirectory(installTo.toLocal8Bit().data());
|
||||
}
|
||||
}
|
||||
QDir cmExecDir(QApplication::applicationDirPath());
|
||||
cmExecDir.cd("../bin");
|
||||
QFileInfoList list = cmExecDir.entryInfoList();
|
||||
for (int i = 0; i < list.size(); ++i)
|
||||
{
|
||||
QFileInfo fileInfo = list.at(i);
|
||||
QString filename = fileInfo.fileName();
|
||||
if(filename.size() && filename[0] == '.')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
QString file = fileInfo.absoluteFilePath();
|
||||
QString newName = installTo;
|
||||
newName += "/";
|
||||
newName += filename;
|
||||
// Remove the old files
|
||||
if(cmSystemTools::FileExists(newName.toLocal8Bit().data()))
|
||||
{
|
||||
std::cout << "rm [" << newName.toLocal8Bit().data() << "]\n";
|
||||
if(!cmSystemTools::RemoveFile(newName.toLocal8Bit().data()))
|
||||
{
|
||||
QString message = tr("Failed to remove file "
|
||||
"installation may be incomplete: ");
|
||||
message += newName;
|
||||
QString title = tr("Error Removing file");
|
||||
QMessageBox::StandardButton btn =
|
||||
QMessageBox::critical(this, title, message,
|
||||
QMessageBox::Ok|QMessageBox::Abort);
|
||||
if(btn == QMessageBox::Abort)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
std::cout << "ln -s [" << file.toLocal8Bit().data() << "] [";
|
||||
std::cout << newName.toLocal8Bit().data() << "]\n";
|
||||
if(!cmSystemTools::CreateSymlink(file.toLocal8Bit().data(),
|
||||
newName.toLocal8Bit().data()))
|
||||
{
|
||||
QString message = tr("Failed create symlink "
|
||||
"installation may be incomplete: ");
|
||||
message += newName;
|
||||
QString title = tr("Error Creating Symlink");
|
||||
QMessageBox::StandardButton btn =
|
||||
QMessageBox::critical(this, title, message,
|
||||
QMessageBox::Ok|QMessageBox::Abort);
|
||||
if(btn == QMessageBox::Abort)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
this->done(0);
|
||||
}
|
||||
|
||||
void QMacInstallDialog::SkipInstall()
|
||||
{
|
||||
this->done(0);
|
||||
}
|
||||
|
||||
|
||||
void QMacInstallDialog::ShowBrowser()
|
||||
{
|
||||
QString dir = QFileDialog::getExistingDirectory(this,
|
||||
tr("Enter Install Prefix"), this->Internals->InstallPrefix->text());
|
||||
if(!dir.isEmpty())
|
||||
{
|
||||
this->Internals->InstallPrefix->setText(dir);
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#ifndef QMacInstallDialog_h
|
||||
#define QMacInstallDialog_h
|
||||
#include <QDialog>
|
||||
|
||||
class QMacInstallDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT;
|
||||
public:
|
||||
QMacInstallDialog(QWidget*w);
|
||||
~QMacInstallDialog();
|
||||
private slots:
|
||||
void ShowBrowser();
|
||||
void SkipInstall();
|
||||
void DoInstall();
|
||||
private:
|
||||
class QMacInstallDialogInternals;
|
||||
QMacInstallDialogInternals* Internals;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue