Merge topic 'cmake-gui-osx-install-command-line'
e462ef74
Help: Add notes for topic 'cmake-gui-osx-install-command-line'8ea2db26
cmake-gui: Replace command-line install dialog with information box438ce4a0
cmake-gui: Add --install option to add command-line tools on OS X41477d5c
cmake-gui: Drop undocumented and unused --mac-install option
This commit is contained in:
commit
2c54622ff5
|
@ -0,0 +1,10 @@
|
|||
cmake-gui-osx-install-command-line
|
||||
----------------------------------
|
||||
|
||||
* On OS X the :manual:`cmake-gui(1)` no longer has the
|
||||
``Install For Command Line Use`` menu item. Instead there
|
||||
is a ``How to Install For Command Line Use`` menu item
|
||||
that shows an informational dialog box explaining how to
|
||||
make the command line tools available. For example::
|
||||
|
||||
/Applications/CMake.app/Contents/bin/cmake-gui --install
|
|
@ -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,11 +15,11 @@
|
|||
#include <QTranslator>
|
||||
#include <QLocale>
|
||||
#include <QTextCodec>
|
||||
#include "QMacInstallDialog.h"
|
||||
#include "CMakeSetupDialog.h"
|
||||
#include "cmDocumentation.h"
|
||||
#include "cmake.h"
|
||||
#include "cmVersion.h"
|
||||
#include "cmAlgorithms.h"
|
||||
#include <cmsys/CommandLineArguments.hxx>
|
||||
#include <cmsys/SystemTools.hxx>
|
||||
#include <cmsys/Encoding.hxx>
|
||||
|
@ -48,6 +48,10 @@ static const char * cmDocumentationOptions[][2] =
|
|||
{0,0}
|
||||
};
|
||||
|
||||
#if defined(Q_OS_MAC)
|
||||
static int cmOSXInstall(std::string dir);
|
||||
#endif
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
cmsys::Encoding::CommandLineArguments encoding_args =
|
||||
|
@ -79,6 +83,17 @@ int main(int argc, char** argv)
|
|||
return (doc.PrintRequestedDocumentation(std::cout)? 0:1);
|
||||
}
|
||||
|
||||
#if defined(Q_OS_MAC)
|
||||
if (argc2 == 2 && strcmp(argv2[1], "--install") == 0)
|
||||
{
|
||||
return cmOSXInstall("/usr/bin");
|
||||
}
|
||||
if (argc2 == 2 && cmHasLiteralPrefix(argv2[1], "--install="))
|
||||
{
|
||||
return cmOSXInstall(argv2[1]+10);
|
||||
}
|
||||
#endif
|
||||
|
||||
QApplication app(argc, argv);
|
||||
|
||||
#if defined(CMAKE_ENCODING_UTF8)
|
||||
|
@ -93,16 +108,6 @@ int main(int argc, char** argv)
|
|||
QApplication::removeLibraryPath(p);
|
||||
}
|
||||
|
||||
// if arg for install
|
||||
for(int i =0; i < argc2; i++)
|
||||
{
|
||||
if(strcmp(argv2[i], "--mac-install") == 0)
|
||||
{
|
||||
QMacInstallDialog setupdialog(0);
|
||||
setupdialog.exec();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
// tell the cmake library where cmake is
|
||||
QDir cmExecDir(QApplication::applicationDirPath());
|
||||
#if defined(Q_OS_MAC)
|
||||
|
@ -189,3 +194,54 @@ int main(int argc, char** argv)
|
|||
return app.exec();
|
||||
}
|
||||
|
||||
#if defined(Q_OS_MAC)
|
||||
# include <errno.h>
|
||||
# include <string.h>
|
||||
# include <sys/stat.h>
|
||||
# include <unistd.h>
|
||||
static bool cmOSXInstall(std::string const& dir, std::string const& tool)
|
||||
{
|
||||
if (tool.empty())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
std::string link = dir + cmSystemTools::GetFilenameName(tool);
|
||||
struct stat st;
|
||||
if (lstat(link.c_str(), &st) == 0 && S_ISLNK(st.st_mode))
|
||||
{
|
||||
char buf[4096];
|
||||
ssize_t s = readlink(link.c_str(), buf, sizeof(buf)-1);
|
||||
if (s >= 0 && std::string(buf, s) == tool)
|
||||
{
|
||||
std::cerr << "Exists: '" << link << "' -> '" << tool << "'\n";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (symlink(tool.c_str(), link.c_str()) == 0)
|
||||
{
|
||||
std::cerr << "Linked: '" << link << "' -> '" << tool << "'\n";
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
int err = errno;
|
||||
std::cerr << "Failed: '" << link << "' -> '" << tool << "': "
|
||||
<< strerror(err) << "\n";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
static int cmOSXInstall(std::string dir)
|
||||
{
|
||||
if (!cmHasLiteralSuffix(dir, "/"))
|
||||
{
|
||||
dir += "/";
|
||||
}
|
||||
return (
|
||||
cmOSXInstall(dir, cmSystemTools::GetCMakeCommand()) &&
|
||||
cmOSXInstall(dir, cmSystemTools::GetCTestCommand()) &&
|
||||
cmOSXInstall(dir, cmSystemTools::GetCPackCommand()) &&
|
||||
cmOSXInstall(dir, cmSystemTools::GetCMakeGUICommand()) &&
|
||||
cmOSXInstall(dir, cmSystemTools::GetCMakeCursesCommand())
|
||||
) ? 0 : 1;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -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