This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, master has been updated via 1fb483922557003aedf59b01742928543977e013 (commit) via c299d10a2ee722c21cdcc554a17082b9c01435c7 (commit) via b4b6a3e7e54349cffafc5c81ecef72ee4596a0b4 (commit) via c37f4eff5e299212544089f692dc8b090992d7b8 (commit) via 449a29296dfc33ec6772199db2d91827abe5376f (commit) via ee366b02734210da76a05d2c856283744cd4d13e (commit) via f9193ca2ddfddd3fa9e642866ba3f614bbdbe996 (commit) via a575fbc3cb202632f551ac134ff183665abe4487 (commit) via 2086da1713f7c1626c45565c01bc6cd7967a7e25 (commit) via 66d969fcc490f09297714e98d7285512fd8d91e1 (commit) via 1d0e557aed926d4d11cc5cf579363bb7be058688 (commit) via c168e789dfeeb4e0bd5db96bb17e682a9fd92b1f (commit) via 3300070cc2e7cadcb0fe2a77d67d2099bf22e7ba (commit) from c5e22dfaea47b81ae2c354254bd696cd218297fb (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1fb483922557003aedf59b01742928543977e013 commit 1fb483922557003aedf59b01742928543977e013 Merge: c299d10a2e 2086da1713 Author: Brad King <brad.k...@kitware.com> AuthorDate: Tue Oct 29 15:17:46 2019 +0000 Commit: Kitware Robot <kwro...@kitware.com> CommitDate: Tue Oct 29 11:18:16 2019 -0400 Merge topic 'ccmake_progress_bar_and_log_display' 2086da1713 ccmake: Add output and progress bar release note 66d969fcc4 ccmake: Don't overwrite the last character of the title 1d0e557aed ccmake: Display output during configure and generate c168e789df ccmake: Use the error display for all the logs 3300070cc2 ccmake: Display an ASCII progress bar in the status bar Acked-by: Kitware Robot <kwro...@kitware.com> Merge-request: !3942 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c299d10a2ee722c21cdcc554a17082b9c01435c7 commit c299d10a2ee722c21cdcc554a17082b9c01435c7 Merge: b4b6a3e7e5 c37f4eff5e Author: Brad King <brad.k...@kitware.com> AuthorDate: Tue Oct 29 15:17:22 2019 +0000 Commit: Kitware Robot <kwro...@kitware.com> CommitDate: Tue Oct 29 11:17:31 2019 -0400 Merge topic 'FindPackageModeMakefileTest-isysroot' c37f4eff5e FindPackageModeMakefileTest: macOS needs isysroot flag Acked-by: Kitware Robot <kwro...@kitware.com> Merge-request: !3956 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b4b6a3e7e54349cffafc5c81ecef72ee4596a0b4 commit b4b6a3e7e54349cffafc5c81ecef72ee4596a0b4 Merge: c5e22dfaea 449a29296d Author: Brad King <brad.k...@kitware.com> AuthorDate: Tue Oct 29 11:15:57 2019 -0400 Commit: Brad King <brad.k...@kitware.com> CommitDate: Tue Oct 29 11:15:57 2019 -0400 Merge branch 'release-3.16' https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c37f4eff5e299212544089f692dc8b090992d7b8 commit c37f4eff5e299212544089f692dc8b090992d7b8 Author: Craig Scott <craig.sc...@crascit.com> AuthorDate: Mon Oct 28 08:25:18 2019 +1100 Commit: Craig Scott <craig.sc...@crascit.com> CommitDate: Tue Oct 29 07:14:08 2019 +1100 FindPackageModeMakefileTest: macOS needs isysroot flag macOS/Xcode no longer populate /usr/include. Building with the compiler directly instead of using /usr/bin/c++ can result in missing headers without the -isysroot flag. Relates: #19885 diff --git a/Tests/FindPackageModeMakefileTest/CMakeLists.txt b/Tests/FindPackageModeMakefileTest/CMakeLists.txt index 23832dacee..8a87a8c97d 100644 --- a/Tests/FindPackageModeMakefileTest/CMakeLists.txt +++ b/Tests/FindPackageModeMakefileTest/CMakeLists.txt @@ -19,6 +19,14 @@ if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Makefile" AND # configure a FindFoo.cmake so it knows where the library can be found configure_file(FindFoo.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FindFoo.cmake @ONLY) + # Need the -isysroot flag on recentish macOS after command line tools + # no longer provide headers in /usr/include + if(APPLE AND CMAKE_OSX_SYSROOT) + set(__EXTRA_OSX_SYSROOT_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") + else() + set(__EXTRA_OSX_SYSROOT_FLAGS "") + endif() + # now set up the test: file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/cmakeExecutable.mk" CONTENT "CMAKE = \"$<TARGET_FILE:cmake>\"\n" diff --git a/Tests/FindPackageModeMakefileTest/Makefile.in b/Tests/FindPackageModeMakefileTest/Makefile.in index 8e7ff72aa2..5ef67d031c 100644 --- a/Tests/FindPackageModeMakefileTest/Makefile.in +++ b/Tests/FindPackageModeMakefileTest/Makefile.in @@ -5,6 +5,7 @@ CMAKE_CURRENT_BINARY_DIR = "@CMAKE_CURRENT_BINARY_DIR@" CMAKE_CXX_COMPILER = "@CMAKE_CXX_COMPILER@" CMAKE_CXX_COMPILER_ID = "@CMAKE_CXX_COMPILER_ID@" CMAKE_CXX_FLAGS = @CMAKE_CXX_FLAGS@ +__EXTRA_OSX_SYSROOT_FLAGS = @__EXTRA_OSX_SYSROOT_FLAGS@ CMAKE_FOO = $(CMAKE) --find-package -DCMAKE_MODULE_PATH=$(CMAKE_CURRENT_BINARY_DIR) -DNAME=Foo -DLANGUAGE=CXX -DCOMPILER_ID=$(CMAKE_CXX_COMPILER_ID) @@ -15,7 +16,7 @@ all: pngtest main.o: clean main.cpp @$(CMAKE_FOO) -DMODE=COMPILE >$(tmp) @foo="`cat $(tmp)`"; \ - printf '"%s" %s %s -c main.cpp\n' $(CMAKE_CXX_COMPILER) "$(CMAKE_CXX_FLAGS)" "$$foo" >$(tmp) + printf '"%s" %s %s %s -c main.cpp\n' $(CMAKE_CXX_COMPILER) "$(CMAKE_CXX_FLAGS)" "$(__EXTRA_OSX_SYSROOT_FLAGS)" "$$foo" >$(tmp) @cat $(tmp) @sh $(tmp) @rm -f $(tmp) https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2086da1713f7c1626c45565c01bc6cd7967a7e25 commit 2086da1713f7c1626c45565c01bc6cd7967a7e25 Author: Sylvain Joubert <joubert...@gmail.com> AuthorDate: Fri Oct 25 15:16:04 2019 +0200 Commit: Brad King <brad.k...@kitware.com> CommitDate: Fri Oct 25 14:19:46 2019 -0400 ccmake: Add output and progress bar release note diff --git a/Help/release/dev/ccmake_progress_bar_and_log_display.rst b/Help/release/dev/ccmake_progress_bar_and_log_display.rst new file mode 100644 index 0000000000..5c67c7ddc1 --- /dev/null +++ b/Help/release/dev/ccmake_progress_bar_and_log_display.rst @@ -0,0 +1,6 @@ +ccmake_progress_bar_and_log_display +----------------------------------- + +* :manual:`ccmake(1)` now displays messages and a progress bar during + configure and generate. It will keep the output displayed if any + errors or warnings occurred. https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=66d969fcc490f09297714e98d7285512fd8d91e1 commit 66d969fcc490f09297714e98d7285512fd8d91e1 Author: Sylvain Joubert <joubert...@gmail.com> AuthorDate: Fri Oct 25 13:13:14 2019 +0200 Commit: Sylvain Joubert <joubert...@gmail.com> CommitDate: Fri Oct 25 14:58:23 2019 +0200 ccmake: Don't overwrite the last character of the title diff --git a/Source/CursesDialog/cmCursesLongMessageForm.cxx b/Source/CursesDialog/cmCursesLongMessageForm.cxx index d980d8182f..41fceee3c6 100644 --- a/Source/CursesDialog/cmCursesLongMessageForm.cxx +++ b/Source/CursesDialog/cmCursesLongMessageForm.cxx @@ -45,7 +45,7 @@ void cmCursesLongMessageForm::UpdateStatusBar() size = cmCursesMainForm::MAX_WIDTH - 1; } strncpy(bar, this->Title.c_str(), size); - for (size_t i = size - 1; i < cmCursesMainForm::MAX_WIDTH; i++) { + for (size_t i = size; i < cmCursesMainForm::MAX_WIDTH; i++) { bar[i] = ' '; } int width; diff --git a/Source/CursesDialog/cmCursesMainForm.cxx b/Source/CursesDialog/cmCursesMainForm.cxx index ba238ebc8f..972509f65f 100644 --- a/Source/CursesDialog/cmCursesMainForm.cxx +++ b/Source/CursesDialog/cmCursesMainForm.cxx @@ -533,9 +533,9 @@ int cmCursesMainForm::Configure(int noconfigure) int xx; int yy; getmaxyx(stdscr, yy, xx); - const char* title = "Configure produced the following output."; + const char* title = "Configure produced the following output"; if (cmSystemTools::GetErrorOccuredFlag()) { - title = "Configure failed with the following output."; + title = "Configure failed with the following output"; } cmCursesLongMessageForm* msgs = new cmCursesLongMessageForm(this->Outputs, title); @@ -590,9 +590,9 @@ int cmCursesMainForm::Generate() int xx; int yy; getmaxyx(stdscr, yy, xx); - const char* title = "Generate produced the following output."; + const char* title = "Generate produced the following output"; if (cmSystemTools::GetErrorOccuredFlag()) { - title = "Generate failed with the following output."; + title = "Generate failed with the following output"; } cmCursesLongMessageForm* msgs = new cmCursesLongMessageForm(this->Outputs, title); @@ -850,7 +850,7 @@ void cmCursesMainForm::HandleInput() } cmCursesLongMessageForm* msgs = - new cmCursesLongMessageForm(this->HelpMessage, "Help."); + new cmCursesLongMessageForm(this->HelpMessage, "Help"); CurrentForm = msgs; msgs->Render(1, 1, x, y); msgs->HandleInput(); @@ -862,7 +862,7 @@ void cmCursesMainForm::HandleInput() else if (key == 'l') { getmaxyx(stdscr, y, x); cmCursesLongMessageForm* msgs = new cmCursesLongMessageForm( - this->Outputs, "CMake produced the following output."); + this->Outputs, "CMake produced the following output"); CurrentForm = msgs; msgs->Render(1, 1, x, y); msgs->HandleInput(); https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1d0e557aed926d4d11cc5cf579363bb7be058688 commit 1d0e557aed926d4d11cc5cf579363bb7be058688 Author: Sylvain Joubert <joubert...@gmail.com> AuthorDate: Fri Oct 25 14:53:10 2019 +0200 Commit: Sylvain Joubert <joubert...@gmail.com> CommitDate: Fri Oct 25 14:58:23 2019 +0200 ccmake: Display output during configure and generate diff --git a/Source/CursesDialog/cmCursesLongMessageForm.cxx b/Source/CursesDialog/cmCursesLongMessageForm.cxx index 4ff3fe4902..d980d8182f 100644 --- a/Source/CursesDialog/cmCursesLongMessageForm.cxx +++ b/Source/CursesDialog/cmCursesLongMessageForm.cxx @@ -136,7 +136,6 @@ void cmCursesLongMessageForm::Render(int /*left*/, int /*top*/, int /*width*/, form_driver(this->Form, REQ_BEG_FIELD); this->UpdateStatusBar(); - this->PrintKeys(); touchwin(stdscr); refresh(); } @@ -150,6 +149,7 @@ void cmCursesLongMessageForm::HandleInput() char debugMessage[128]; for (;;) { + this->PrintKeys(); int key = getch(); sprintf(debugMessage, "Message widget handling input, key: %d", key); @@ -170,7 +170,16 @@ void cmCursesLongMessageForm::HandleInput() } this->UpdateStatusBar(); - this->PrintKeys(); + touchwin(stdscr); + wrefresh(stdscr); + } +} + +void cmCursesLongMessageForm::ScrollDown() +{ + if (this->Form) { + form_driver(this->Form, REQ_END_FIELD); + this->UpdateStatusBar(); touchwin(stdscr); wrefresh(stdscr); } diff --git a/Source/CursesDialog/cmCursesLongMessageForm.h b/Source/CursesDialog/cmCursesLongMessageForm.h index 42f9c710b7..dde5bfffaf 100644 --- a/Source/CursesDialog/cmCursesLongMessageForm.h +++ b/Source/CursesDialog/cmCursesLongMessageForm.h @@ -26,6 +26,10 @@ public: void HandleInput() override; // Description: + // Scroll down to the end of the content + void ScrollDown(); + + // Description: // Display form. Use a window of size width x height, starting // at top, left. void Render(int left, int top, int width, int height) override; diff --git a/Source/CursesDialog/cmCursesMainForm.cxx b/Source/CursesDialog/cmCursesMainForm.cxx index c76cc42ced..ba238ebc8f 100644 --- a/Source/CursesDialog/cmCursesMainForm.cxx +++ b/Source/CursesDialog/cmCursesMainForm.cxx @@ -474,20 +474,17 @@ void cmCursesMainForm::UpdateProgress(const std::string& msg, float prog) constexpr int progressBarWidth = 40; int progressBarCompleted = static_cast<int>(progressBarWidth * prog); int percentCompleted = static_cast<int>(100 * prog); - std::string status = (percentCompleted < 100 ? " " : ""); - status += (percentCompleted < 10 ? " " : ""); - status += std::to_string(percentCompleted) + "% ["; - status.append(progressBarCompleted, '#'); - status.append(progressBarWidth - progressBarCompleted, ' '); - status += "] " + msg + "..."; - this->UpdateStatusBar(status.c_str()); + this->LastProgress = (percentCompleted < 100 ? " " : ""); + this->LastProgress += (percentCompleted < 10 ? " " : ""); + this->LastProgress += std::to_string(percentCompleted) + "% ["; + this->LastProgress.append(progressBarCompleted, '#'); + this->LastProgress.append(progressBarWidth - progressBarCompleted, ' '); + this->LastProgress += "] " + msg + "..."; } else { this->Outputs.emplace_back(msg); } - this->PrintKeys(1); - curses_move(1, 1); - touchwin(stdscr); - refresh(); + + this->DisplayOutputs(); } int cmCursesMainForm::Configure(int noconfigure) @@ -496,11 +493,15 @@ int cmCursesMainForm::Configure(int noconfigure) int yi; getmaxyx(stdscr, yi, xi); - this->UpdateProgress("Configuring", 0); - this->CMakeInstance->SetProgressCallback( - [this](const std::string& msg, float prog) { - this->UpdateProgress(msg, prog); - }); + this->ResetOutputs(); + + if (noconfigure == 0) { + this->UpdateProgress("Configuring", 0); + this->CMakeInstance->SetProgressCallback( + [this](const std::string& msg, float prog) { + this->UpdateProgress(msg, prog); + }); + } // always save the current gui values to disk this->FillCacheManagerFromUI(); @@ -508,8 +509,6 @@ int cmCursesMainForm::Configure(int noconfigure) this->CMakeInstance->GetHomeOutputDirectory()); this->LoadCache(nullptr); - this->ResetOutputs(); - // run the generate process this->OkToGenerate = true; int retVal; @@ -544,6 +543,7 @@ int cmCursesMainForm::Configure(int noconfigure) cmSystemTools::ResetErrorOccuredFlag(); CurrentForm = msgs; msgs->Render(1, 1, xx, yy); + msgs->ScrollDown(); msgs->HandleInput(); // If they typed the wrong source directory, we report // an error and exit @@ -566,14 +566,14 @@ int cmCursesMainForm::Generate() int yi; getmaxyx(stdscr, yi, xi); + this->ResetOutputs(); + this->UpdateProgress("Generating", 0); this->CMakeInstance->SetProgressCallback( [this](const std::string& msg, float prog) { this->UpdateProgress(msg, prog); }); - this->ResetOutputs(); - // run the generate process int retVal = this->CMakeInstance->Generate(); @@ -598,6 +598,7 @@ int cmCursesMainForm::Generate() new cmCursesLongMessageForm(this->Outputs, title); CurrentForm = msgs; msgs->Render(1, 1, xx, yy); + msgs->ScrollDown(); msgs->HandleInput(); // If they typed the wrong source directory, we report // an error and exit @@ -619,6 +620,7 @@ void cmCursesMainForm::AddError(const std::string& message, { this->Outputs.emplace_back(message); this->HasNonStatusOutputs = true; + this->DisplayOutputs(); } void cmCursesMainForm::RemoveEntry(const char* value) @@ -1025,8 +1027,24 @@ void cmCursesMainForm::JumpToCacheEntry(const char* astr) void cmCursesMainForm::ResetOutputs() { + this->LogForm.reset(); this->Outputs.clear(); this->HasNonStatusOutputs = false; + this->LastProgress.clear(); +} + +void cmCursesMainForm::DisplayOutputs() +{ + int xi; + int yi; + getmaxyx(stdscr, yi, xi); + + auto newLogForm = + new cmCursesLongMessageForm(this->Outputs, this->LastProgress.c_str()); + CurrentForm = newLogForm; + this->LogForm.reset(newLogForm); + this->LogForm->Render(1, 1, xi, yi); + this->LogForm->ScrollDown(); } const char* cmCursesMainForm::s_ConstHelpMessage = diff --git a/Source/CursesDialog/cmCursesMainForm.h b/Source/CursesDialog/cmCursesMainForm.h index c6a02624ae..598fbdfba3 100644 --- a/Source/CursesDialog/cmCursesMainForm.h +++ b/Source/CursesDialog/cmCursesMainForm.h @@ -16,6 +16,7 @@ #include "cmStateTypes.h" class cmake; +class cmCursesLongMessageForm; /** \class cmCursesMainForm * \brief The main page of ccmake @@ -125,13 +126,20 @@ protected: // Clear and reset the output log and state void ResetOutputs(); + // Display the current progress and output + void DisplayOutputs(); + // Copies of cache entries stored in the user interface std::vector<cmCursesCacheEntryComposite> Entries; + // The form used to display logs during processing + std::unique_ptr<cmCursesLongMessageForm> LogForm; // Output produced by the last pass std::vector<std::string> Outputs; // Did the last pass produced outputs of interest (errors, warnings, ...) bool HasNonStatusOutputs; + // Last progress bar + std::string LastProgress; // Command line arguments to be passed to cmake each time // it is run https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c168e789dfeeb4e0bd5db96bb17e682a9fd92b1f commit c168e789dfeeb4e0bd5db96bb17e682a9fd92b1f Author: Sylvain Joubert <joubert...@gmail.com> AuthorDate: Wed Oct 23 17:07:15 2019 +0200 Commit: Sylvain Joubert <joubert...@gmail.com> CommitDate: Fri Oct 25 14:58:23 2019 +0200 ccmake: Use the error display for all the logs diff --git a/Source/CursesDialog/cmCursesLongMessageForm.cxx b/Source/CursesDialog/cmCursesLongMessageForm.cxx index e2d8d06b49..4ff3fe4902 100644 --- a/Source/CursesDialog/cmCursesLongMessageForm.cxx +++ b/Source/CursesDialog/cmCursesLongMessageForm.cxx @@ -8,6 +8,7 @@ #include "cmCursesForm.h" #include "cmCursesMainForm.h" #include "cmCursesStandardIncludes.h" +#include "cmStringAlgorithms.h" #include "cmVersion.h" inline int ctrl(int z) @@ -19,11 +20,7 @@ cmCursesLongMessageForm::cmCursesLongMessageForm( std::vector<std::string> const& messages, const char* title) { // Append all messages into on big string - for (std::string const& message : messages) { - this->Messages += message; - // Add one blank line after each message - this->Messages += "\n\n"; - } + this->Messages = cmJoin(messages, "\n"); this->Title = title; this->Fields[0] = nullptr; this->Fields[1] = nullptr; diff --git a/Source/CursesDialog/cmCursesMainForm.cxx b/Source/CursesDialog/cmCursesMainForm.cxx index 3f7ee89d54..c76cc42ced 100644 --- a/Source/CursesDialog/cmCursesMainForm.cxx +++ b/Source/CursesDialog/cmCursesMainForm.cxx @@ -34,6 +34,7 @@ cmCursesMainForm::cmCursesMainForm(std::vector<std::string> args, : Args(std::move(args)) , InitialWidth(initWidth) { + this->HasNonStatusOutputs = false; this->NumberOfPages = 0; this->AdvancedMode = false; this->NumberOfVisibleEntries = 0; @@ -480,6 +481,8 @@ void cmCursesMainForm::UpdateProgress(const std::string& msg, float prog) status.append(progressBarWidth - progressBarCompleted, ' '); status += "] " + msg + "..."; this->UpdateStatusBar(status.c_str()); + } else { + this->Outputs.emplace_back(msg); } this->PrintKeys(1); curses_move(1, 1); @@ -505,8 +508,7 @@ int cmCursesMainForm::Configure(int noconfigure) this->CMakeInstance->GetHomeOutputDirectory()); this->LoadCache(nullptr); - // Get rid of previous errors - this->Errors = std::vector<std::string>(); + this->ResetOutputs(); // run the generate process this->OkToGenerate = true; @@ -524,7 +526,7 @@ int cmCursesMainForm::Configure(int noconfigure) keypad(stdscr, true); /* Use key symbols as KEY_DOWN */ - if (retVal != 0 || !this->Errors.empty()) { + if (retVal != 0 || this->HasNonStatusOutputs) { // see if there was an error if (cmSystemTools::GetErrorOccuredFlag()) { this->OkToGenerate = false; @@ -532,11 +534,12 @@ int cmCursesMainForm::Configure(int noconfigure) int xx; int yy; getmaxyx(stdscr, yy, xx); + const char* title = "Configure produced the following output."; + if (cmSystemTools::GetErrorOccuredFlag()) { + title = "Configure failed with the following output."; + } cmCursesLongMessageForm* msgs = - new cmCursesLongMessageForm(this->Errors, - cmSystemTools::GetErrorOccuredFlag() - ? "Errors occurred during the last pass." - : "CMake produced the following output."); + new cmCursesLongMessageForm(this->Outputs, title); // reset error condition cmSystemTools::ResetErrorOccuredFlag(); CurrentForm = msgs; @@ -569,8 +572,7 @@ int cmCursesMainForm::Generate() this->UpdateProgress(msg, prog); }); - // Get rid of previous errors - this->Errors = std::vector<std::string>(); + this->ResetOutputs(); // run the generate process int retVal = this->CMakeInstance->Generate(); @@ -578,7 +580,7 @@ int cmCursesMainForm::Generate() this->CMakeInstance->SetProgressCallback(nullptr); keypad(stdscr, true); /* Use key symbols as KEY_DOWN */ - if (retVal != 0 || !this->Errors.empty()) { + if (retVal != 0 || this->HasNonStatusOutputs) { // see if there was an error if (cmSystemTools::GetErrorOccuredFlag()) { this->OkToGenerate = false; @@ -588,12 +590,12 @@ int cmCursesMainForm::Generate() int xx; int yy; getmaxyx(stdscr, yy, xx); - const char* title = "Messages during last pass."; + const char* title = "Generate produced the following output."; if (cmSystemTools::GetErrorOccuredFlag()) { - title = "Errors occurred during the last pass."; + title = "Generate failed with the following output."; } cmCursesLongMessageForm* msgs = - new cmCursesLongMessageForm(this->Errors, title); + new cmCursesLongMessageForm(this->Outputs, title); CurrentForm = msgs; msgs->Render(1, 1, xx, yy); msgs->HandleInput(); @@ -615,7 +617,8 @@ int cmCursesMainForm::Generate() void cmCursesMainForm::AddError(const std::string& message, const char* /*unused*/) { - this->Errors.emplace_back(message); + this->Outputs.emplace_back(message); + this->HasNonStatusOutputs = true; } void cmCursesMainForm::RemoveEntry(const char* value) @@ -857,7 +860,7 @@ void cmCursesMainForm::HandleInput() else if (key == 'l') { getmaxyx(stdscr, y, x); cmCursesLongMessageForm* msgs = new cmCursesLongMessageForm( - this->Errors, "Errors occurred during the last pass."); + this->Outputs, "CMake produced the following output."); CurrentForm = msgs; msgs->Render(1, 1, x, y); msgs->HandleInput(); @@ -1020,6 +1023,12 @@ void cmCursesMainForm::JumpToCacheEntry(const char* astr) } } +void cmCursesMainForm::ResetOutputs() +{ + this->Outputs.clear(); + this->HasNonStatusOutputs = false; +} + const char* cmCursesMainForm::s_ConstHelpMessage = "CMake is used to configure and generate build files for software projects. " "The basic steps for configuring a project with ccmake are as follows:\n\n" @@ -1076,7 +1085,7 @@ const char* cmCursesMainForm::s_ConstHelpMessage = " c : process the configuration files with the current options\n" " g : generate build files and exit, only available when there are no " "new options and no errors have been detected during last configuration.\n" - " l : shows last errors\n" + " l : shows cmake output\n" " d : delete an option\n" " t : toggles advanced mode. In normal mode, only the most important " "options are shown. In advanced mode, all options are shown. We recommend " diff --git a/Source/CursesDialog/cmCursesMainForm.h b/Source/CursesDialog/cmCursesMainForm.h index b8769b7cf4..c6a02624ae 100644 --- a/Source/CursesDialog/cmCursesMainForm.h +++ b/Source/CursesDialog/cmCursesMainForm.h @@ -122,10 +122,17 @@ protected: // Jump to the cache entry whose name matches the string. void JumpToCacheEntry(const char* str); + // Clear and reset the output log and state + void ResetOutputs(); + // Copies of cache entries stored in the user interface std::vector<cmCursesCacheEntryComposite> Entries; - // Errors produced during last run of cmake - std::vector<std::string> Errors; + + // Output produced by the last pass + std::vector<std::string> Outputs; + // Did the last pass produced outputs of interest (errors, warnings, ...) + bool HasNonStatusOutputs; + // Command line arguments to be passed to cmake each time // it is run std::vector<std::string> Args; https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3300070cc2e7cadcb0fe2a77d67d2099bf22e7ba commit 3300070cc2e7cadcb0fe2a77d67d2099bf22e7ba Author: Sylvain Joubert <joubert...@gmail.com> AuthorDate: Wed Oct 23 16:32:31 2019 +0200 Commit: Sylvain Joubert <joubert...@gmail.com> CommitDate: Fri Oct 25 14:58:23 2019 +0200 ccmake: Display an ASCII progress bar in the status bar The status bar is now only used to display the progress. The status log are not shown anymore since for the most cases they went by too quickly to be read. As for cases when a process is long enough to display and read a log, it would probably be a previous unrelated message. diff --git a/Source/CursesDialog/cmCursesMainForm.cxx b/Source/CursesDialog/cmCursesMainForm.cxx index 6b71e8a10a..3f7ee89d54 100644 --- a/Source/CursesDialog/cmCursesMainForm.cxx +++ b/Source/CursesDialog/cmCursesMainForm.cxx @@ -469,14 +469,18 @@ void cmCursesMainForm::UpdateStatusBar(const char* message) void cmCursesMainForm::UpdateProgress(const std::string& msg, float prog) { - char tmp[1024]; - const char* cmsg = tmp; if (prog >= 0) { - sprintf(tmp, "%s %i%%", msg.c_str(), static_cast<int>(100 * prog)); - } else { - cmsg = msg.c_str(); + constexpr int progressBarWidth = 40; + int progressBarCompleted = static_cast<int>(progressBarWidth * prog); + int percentCompleted = static_cast<int>(100 * prog); + std::string status = (percentCompleted < 100 ? " " : ""); + status += (percentCompleted < 10 ? " " : ""); + status += std::to_string(percentCompleted) + "% ["; + status.append(progressBarCompleted, '#'); + status.append(progressBarWidth - progressBarCompleted, ' '); + status += "] " + msg + "..."; + this->UpdateStatusBar(status.c_str()); } - this->UpdateStatusBar(cmsg); this->PrintKeys(1); curses_move(1, 1); touchwin(stdscr); @@ -489,11 +493,7 @@ int cmCursesMainForm::Configure(int noconfigure) int yi; getmaxyx(stdscr, yi, xi); - curses_move(1, 1); - this->UpdateStatusBar("Configuring, please wait..."); - this->PrintKeys(1); - touchwin(stdscr); - refresh(); + this->UpdateProgress("Configuring", 0); this->CMakeInstance->SetProgressCallback( [this](const std::string& msg, float prog) { this->UpdateProgress(msg, prog); @@ -563,11 +563,7 @@ int cmCursesMainForm::Generate() int yi; getmaxyx(stdscr, yi, xi); - curses_move(1, 1); - this->UpdateStatusBar("Generating, please wait..."); - this->PrintKeys(1); - touchwin(stdscr); - refresh(); + this->UpdateProgress("Generating", 0); this->CMakeInstance->SetProgressCallback( [this](const std::string& msg, float prog) { this->UpdateProgress(msg, prog); ----------------------------------------------------------------------- Summary of changes: .../dev/ccmake_progress_bar_and_log_display.rst | 6 ++ Source/CursesDialog/cmCursesLongMessageForm.cxx | 22 +++-- Source/CursesDialog/cmCursesLongMessageForm.h | 4 + Source/CursesDialog/cmCursesMainForm.cxx | 107 +++++++++++++-------- Source/CursesDialog/cmCursesMainForm.h | 19 +++- Tests/FindPackageModeMakefileTest/CMakeLists.txt | 8 ++ Tests/FindPackageModeMakefileTest/Makefile.in | 3 +- 7 files changed, 116 insertions(+), 53 deletions(-) create mode 100644 Help/release/dev/ccmake_progress_bar_and_log_display.rst hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org https://cmake.org/mailman/listinfo/cmake-commits