diff options
Diffstat (limited to 'freefilesync')
21 files changed, 817 insertions, 240 deletions
diff --git a/freefilesync/debian/changelog b/freefilesync/debian/changelog index edce1ad..0b9f910 100644 --- a/freefilesync/debian/changelog +++ b/freefilesync/debian/changelog @@ -1,3 +1,27 @@ +freefilesync (10.24-2+devuan) albion; urgency=medium + + * gtk2 build (stable) + + -- Ben Stack <bgstack15@gmail.com> Mon, 18 May 2020 08:14:57 -0400 + +freefilesync (10.24-1+devuan) obs; urgency=medium + + * gtk3 build (unstable) + * Increased SFTP buffer sizes for faster upload/download + * New %WeekDay%, %WeekDayName", and %MonthName% macros + * Support Linux systems without lsb_release + * Don't exclude desktop.ini by default + * Merge error messages of failed error handling + * Added ".DocumentRevisions-V100" to default exclude filter (macOS) + * Fixed deletion error not reported during versioning + * RealTimeSync: don't block when command fails with exit code > 0 + * Visualize error status in macOS Dock and Windows Superbar + * Show error code constants on Windows Shell errors + * Suppport ProFTPD with "MultilineRFC2228 on" + * SFTP option to enable/disable zlib compression + + -- Ben Stack <bgstack15@gmail.com> Sun, 17 May 2020 19:12:44 -0400 + freefilesync (10.23-2+devuan) albion; urgency=medium * gtk2 build diff --git a/freefilesync/debian/control b/freefilesync/debian/control index 7e4df83..00da1a0 100644 --- a/freefilesync/debian/control +++ b/freefilesync/debian/control @@ -5,8 +5,6 @@ Maintainer: B Stack <bgstack15@gmail.com> Build-Depends: debhelper (>=12~), imagemagick, libcurl4-openssl-dev (>=7.68.0), - libfontconfig-dev, -# libfontconfig-dev only added for Debian OBS which is choking as of 2020-04 on libfontconfig-dev | libfontconfig1-dev for deps: libgtk-3-dev, libpango1.0-dev, libcairo2-dev, libxft-dev libssh2-1-dev, libssl-dev, wx3.0-headers, diff --git a/freefilesync/debian/freefilesync+devuan.dsc b/freefilesync/debian/freefilesync+devuan.dsc index d7a0985..eb4e5b1 100644 --- a/freefilesync/debian/freefilesync+devuan.dsc +++ b/freefilesync/debian/freefilesync+devuan.dsc @@ -2,7 +2,7 @@ Format: 3.0 (quilt) Source: freefilesync Binary: freefilesync Architecture: any -Version: 10.23-1+devuan +Version: 10.24-1+devuan Maintainer: B Stack <bgstack15@gmail.com> Homepage: https://freefilesync.org/ Standards-Version: 4.1.4 @@ -10,5 +10,5 @@ Build-Depends: debhelper (>= 12~), imagemagick, libcurl4-openssl-dev, libssh2-1- Package-List: freefilesync deb utils optional arch=any Files: - 00000000000000000000000000000000 1 freefilesync0.orig.tar.gz + 00000000000000000000000000000000 1 freefilesync.orig.tar.gz 00000000000000000000000000000000 1 freefilesync+devuan.debian.tar.xz diff --git a/freefilesync/debian/patches/ffs_devuan.patch b/freefilesync/debian/patches/ffs_devuan.patch index 9bd4a2a..67846e1 100644 --- a/freefilesync/debian/patches/ffs_devuan.patch +++ b/freefilesync/debian/patches/ffs_devuan.patch @@ -15,23 +15,23 @@ diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/FreeFileSync/Sou } -diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/FreeFileSync/Source/Makefile 10.18-1/FreeFileSync/Source/Makefile ---- 10.21-0/FreeFileSync/Source/Makefile 2020-03-18 08:56:08.576066001 -0400 -+++ 10.21-1/FreeFileSync/Source/Makefile 2020-03-18 13:08:06.841403687 -0400 +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/Makefile 10.24-1/FreeFileSync/Source/Makefile +--- 10.24-0/FreeFileSync/Source/Makefile 2020-05-17 11:01:12.813889858 -0400 ++++ 10.24-1/FreeFileSync/Source/Makefile 2020-05-17 11:29:01.456713486 -0400 @@ -1,10 +1,10 @@ --EXENAME = FreeFileSync_$(shell arch) -+EXENAME = FreeFileSync - --CXXFLAGS = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -+CXXFLAGS += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ +-exeName = FreeFileSync_$(shell arch) ++exeName = FreeFileSync + +-cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ ++cxxFlags += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread - --LINKFLAGS = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread -+LINKFLAGS += -s `wx-config --libs std, aui --debug=no` -lz -pthread - - - CXXFLAGS += `pkg-config --cflags openssl` + +-linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread ++linkFlags += -s `wx-config --libs std, aui --debug=no` -lz -pthread + + + cxxFlags += `pkg-config --cflags openssl` diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Source/ui/small_dlgs.cpp 10.19-1/FreeFileSync/Source/ui/small_dlgs.cpp --- 10.11-0/FreeFileSync/Source/ui/small_dlgs.cpp 2019-12-27 07:56:06.714625467 -0500 +++ 10.21-1/FreeFileSync/Source/ui/small_dlgs.cpp 2020-03-18 09:03:57.753183052 -0400 @@ -44,20 +44,20 @@ diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Sou build += SPACED_BULLET; build += utfTo<wxString>(formatTime(formatDateTag, getCompileTime())); -diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/FreeFileSync/Source/RealTimeSync/Makefile 10.18-1/FreeFileSync/Source/RealTimeSync/Makefile ---- 10.21-0/FreeFileSync/Source/RealTimeSync/Makefile 2020-03-18 08:56:08.624066524 -0400 -+++ 10.21-1/FreeFileSync/Source/RealTimeSync/Makefile 2020-03-18 13:08:24.409600169 -0400 +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/RealTimeSync/Makefile 10.24-1/FreeFileSync/Source/RealTimeSync/Makefile +--- 10.24-0/FreeFileSync/Source/RealTimeSync/Makefile 2020-05-17 11:01:12.853890213 -0400 ++++ 10.24-1/FreeFileSync/Source/RealTimeSync/Makefile 2020-05-17 11:29:17.540857423 -0400 @@ -1,10 +1,10 @@ --EXENAME = RealTimeSync_$(shell arch) -+EXENAME = RealTimeSync - --CXXFLAGS = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -+CXXFLAGS += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ +-exeName = RealTimeSync_$(shell arch) ++exeName = RealTimeSync + +-cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ ++cxxFlags += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread - --LINKFLAGS = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread -+LINKFLAGS += -s `wx-config --libs std, aui --debug=no` -lz -pthread - + +-linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread ++linkFlags += -s `wx-config --libs std, aui --debug=no` -lz -pthread + #Gtk - support "no button border" - CXXFLAGS += `pkg-config --cflags gtk+-2.0` + cxxFlags += `pkg-config --cflags gtk+-2.0` diff --git a/freefilesync/debian/patches/ffs_devuan_gtk2.patch b/freefilesync/debian/patches/ffs_devuan_gtk2.patch index f3242b3..49a7c24 100644 --- a/freefilesync/debian/patches/ffs_devuan_gtk2.patch +++ b/freefilesync/debian/patches/ffs_devuan_gtk2.patch @@ -6,15 +6,15 @@ diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/FreeFileSync/Sou --- 10.11-0/FreeFileSync/Source/Makefile 2019-04-12 08:05:57.000000000 -0400 +++ 10.18-2/FreeFileSync/Source/Makefile 2019-11-21 09:42:57.408243242 -0500 @@ -16,9 +16,10 @@ - CXXFLAGS += `pkg-config --cflags libssh2` - LINKFLAGS += `pkg-config --libs libssh2` + cxxFlags += `pkg-config --cflags libssh2` + linkFlags += `pkg-config --libs libssh2` --CXXFLAGS += `pkg-config --cflags gtk+-2.0` -+CXXFLAGS += `pkg-config --cflags gtk+-2.0` -+LINKFLAGS += `pkg-config --libs gtk+-2.0` +-cxxFlags += `pkg-config --cflags gtk+-2.0` ++cxxFlags += `pkg-config --cflags gtk+-2.0` ++linkFlags += `pkg-config --libs gtk+-2.0` #treat as system headers so that warnings are hidden: --CXXFLAGS += -isystem/usr/include/gtk-2.0 -+CXXFLAGS += -isystem/usr/include/gtk-2.0 +-cxxFlags += -isystem/usr/include/gtk-2.0 ++cxxFlags += -isystem/usr/include/gtk-2.0 #support for SELinux (optional) SELINUX_EXISTING=$(shell pkg-config --exists libselinux && echo YES) @@ -24,8 +24,8 @@ diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/FreeFileSync/Sou @@ -8,6 +8,7 @@ #Gtk - support "no button border" - CXXFLAGS += `pkg-config --cflags gtk+-2.0` -+LINKFLAGS += `pkg-config --libs gtk+-2.0` + cxxFlags += `pkg-config --cflags gtk+-2.0` ++linkFlags += `pkg-config --libs gtk+-2.0` #treat as system headers so that warnings are hidden: - CXXFLAGS += -isystem/usr/include/gtk-2.0 + cxxFlags += -isystem/usr/include/gtk-2.0 diff --git a/freefilesync/debian/patches/ffs_devuan_gtk3.patch b/freefilesync/debian/patches/ffs_devuan_gtk3.patch index 4f41d7a..3559261 100644 --- a/freefilesync/debian/patches/ffs_devuan_gtk3.patch +++ b/freefilesync/debian/patches/ffs_devuan_gtk3.patch @@ -7,34 +7,34 @@ diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/FreeFileSync/Sou --- 10.11-0/FreeFileSync/Source/Makefile 2019-04-12 08:05:57.000000000 -0400 +++ 10.18-1/FreeFileSync/Source/Makefile 2019-11-21 09:42:57.408243242 -0500 @@ -16,9 +16,10 @@ - CXXFLAGS += `pkg-config --cflags libssh2` - LINKFLAGS += `pkg-config --libs libssh2` + cxxFlags += `pkg-config --cflags libssh2` + linkFlags += `pkg-config --libs libssh2` --CXXFLAGS += `pkg-config --cflags gtk+-2.0` -+CXXFLAGS += `pkg-config --cflags gtk+-3.0` -+LINKFLAGS += `pkg-config --libs gtk+-3.0` +-cxxFlags += `pkg-config --cflags gtk+-2.0` ++cxxFlags += `pkg-config --cflags gtk+-3.0` ++linkFlags += `pkg-config --libs gtk+-3.0` #treat as system headers so that warnings are hidden: --CXXFLAGS += -isystem/usr/include/gtk-2.0 -+CXXFLAGS += -isystem/usr/include/gtk-3.0 +-cxxFlags += -isystem/usr/include/gtk-2.0 ++cxxFlags += -isystem/usr/include/gtk-3.0 #support for SELinux (optional) SELINUX_EXISTING=$(shell pkg-config --exists libselinux && echo YES) -diff -x '*.rej' -x '*.swp' -x '*.orig' -Naur 10.21-1/FreeFileSync/Source/RealTimeSync/Makefile 10.21-2/FreeFileSync/Source/RealTimeSync/Makefile ---- 10.21-1/FreeFileSync/Source/RealTimeSync/Makefile 2020-03-18 13:12:18.404217783 -0400 -+++ 10.21-2/FreeFileSync/Source/RealTimeSync/Makefile 2020-03-18 13:12:46.528533268 -0400 +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/RealTimeSync/Makefile 10.24-1/FreeFileSync/Source/RealTimeSync/Makefile +--- 10.24-0/FreeFileSync/Source/RealTimeSync/Makefile 2020-05-17 18:30:59.289498093 -0400 ++++ 10.24-1/FreeFileSync/Source/RealTimeSync/Makefile 2020-05-17 19:32:59.791394275 -0400 @@ -7,9 +7,10 @@ - LINKFLAGS += -s `wx-config --libs std, aui --debug=no` -lz -pthread + linkFlags += -s `wx-config --libs std, aui --debug=no` -lz -pthread #Gtk - support "no button border" --CXXFLAGS += `pkg-config --cflags gtk+-2.0` -+CXXFLAGS += `pkg-config --cflags gtk+-3.0` -+LINKFLAGS += `pkg-config --libs gtk+-3.0` +-cxxFlags += `pkg-config --cflags gtk+-2.0` ++cxxFlags += `pkg-config --cflags gtk+-3.0` ++linkFlags += `pkg-config --libs gtk+-3.0` #treat as system headers so that warnings are hidden: --CXXFLAGS += -isystem/usr/include/gtk-2.0 -+CXXFLAGS += -isystem/usr/include/gtk-3.0 +-cxxFlags += -isystem/usr/include/gtk-2.0 ++cxxFlags += -isystem/usr/include/gtk-3.0 - CPP_FILES= - CPP_FILES+=application.cpp + cppFiles= + cppFiles+=application.cpp diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/wx+/dc.h 10.18-1/wx+/dc.h --- 10.18-0/wx+/dc.h 2019-11-21 08:24:23.967769384 -0500 +++ 10.18-1/wx+/dc.h 2019-11-21 09:42:12.779786504 -0500 diff --git a/freefilesync/debian/patches/ffs_no_check_updates.patch b/freefilesync/debian/patches/ffs_no_check_updates.patch index bb54677..1ef4148 100644 --- a/freefilesync/debian/patches/ffs_no_check_updates.patch +++ b/freefilesync/debian/patches/ffs_no_check_updates.patch @@ -78,7 +78,7 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/version_check.cpp 1 + // showUpdateAvailableDialog(parent, onlineVersion); + //else showNotificationDialog(parent, DialogInfoType::info, PopupDialogCfg(). - setIcon(getResourceImage(L"update_check")). + setIcon(getResourceImage("update_check")). setTitle(_("Check for Program Updates")). - setMainInstructions(_("FreeFileSync is up to date."))); + setMainInstructions(_("Use your package manager for any updates to FreeFileSync."))); diff --git a/freefilesync/debian/patches/ffs_no_wx311.patch b/freefilesync/debian/patches/ffs_no_wx311.patch index f3afae0..932800d 100644 --- a/freefilesync/debian/patches/ffs_no_wx311.patch +++ b/freefilesync/debian/patches/ffs_no_wx311.patch @@ -1,11 +1,11 @@ 2019-08-15 just compile. -diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Source/ui/small_dlgs.cpp 10.19-1/FreeFileSync/Source/ui/small_dlgs.cpp +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/ui/small_dlgs.cpp 10.24-1/FreeFileSync/Source/ui/small_dlgs.cpp --- 10.3-0/FreeFileSync/Source/ui/small_dlgs.cpp 2019-12-27 07:56:06.714625467 -0500 +++ 10.19-1/FreeFileSync/Source/ui/small_dlgs.cpp 2019-12-27 08:41:43.498308243 -0500 -@@ -1546,7 +1546,7 @@ +@@ -1594,7 +1594,7 @@ //setMainInstructionFont(*m_staticTextMain); - m_bitmapActivation->SetBitmap(getResourceImage(L"internet")); + m_bitmapActivation->SetBitmap(getResourceImage("internet")); - m_textCtrlOfflineActivationKey->ForceUpper(); + //m_textCtrlOfflineActivationKey->ForceUpper(); @@ -39,32 +39,29 @@ diff -Naur 10.13-0/FreeFileSync/Source/ffs_paths.cpp 10.13-1/FreeFileSync/Source try //create the config folder if not existing + create "Logs" subfolder while we're at it { -diff --git a/FreeFileSync/Source/ui/command_box.cpp b/FreeFileSync/Source/ui/command_box.cpp -index 6e769bb..ce6110b 100644 ---- a/FreeFileSync/Source/ui/command_box.cpp -+++ b/FreeFileSync/Source/ui/command_box.cpp -@@ -130,7 +130,9 @@ void CommandBox::setValueAndUpdateList(const wxString& value) - +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/ui/command_box.cpp 10.24-1/FreeFileSync/Source/ui/command_box.cpp +--- 10.24-0/FreeFileSync/Source/ui/command_box.cpp 2020-05-17 11:01:12.893890567 -0400 ++++ 10.24-1/FreeFileSync/Source/ui/command_box.cpp 2020-05-17 11:22:18.069114993 -0400 +@@ -120,7 +120,8 @@ + //this->Clear(); -> NO! emits yet another wxEVT_COMMAND_TEXT_UPDATED!!! wxItemContainer::Clear(); //suffices to clear the selection items only! -- this->Append(items); -+ for (const wxString& item : items) +- this->Append(items); //expensive as fuck! => only call when absolutely needed! ++ for (const wxString& item : items) // reverted to pre-wx 3.1.1 logic + this->Append(item); -+ - + //this->SetSelection(wxNOT_FOUND); //don't select anything ChangeValue(value); //preserve main text! -diff --git a/FreeFileSync/Source/ui/folder_history_box.cpp b/FreeFileSync/Source/ui/folder_history_box.cpp -index 2b824b1..a17ea2f 100644 ---- a/FreeFileSync/Source/ui/folder_history_box.cpp -+++ b/FreeFileSync/Source/ui/folder_history_box.cpp -@@ -90,7 +90,8 @@ void FolderHistoryBox::setValueAndUpdateList(const wxString& folderPathPhrase) - +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/ui/folder_history_box.cpp 10.24-1/FreeFileSync/Source/ui/folder_history_box.cpp +--- 10.24-0/FreeFileSync/Source/ui/folder_history_box.cpp 2020-05-17 11:01:12.909890709 -0400 ++++ 10.24-1/FreeFileSync/Source/ui/folder_history_box.cpp 2020-05-17 11:21:18.460583251 -0400 +@@ -90,7 +90,8 @@ + //this->Clear(); -> NO! emits yet another wxEVT_COMMAND_TEXT_UPDATED!!! wxItemContainer::Clear(); //suffices to clear the selection items only! -- this->Append(dirList); -+ for (const wxString& dir : dirList) -+ this->Append(dir); - +- this->Append(items); //expensive as fuck! => only call when absolutely needed! ++ for (const wxString& itemk : items) // reverted to pre-wx 3.1.1 logic ++ this->Append(itemk); + //this->SetSelection(wxNOT_FOUND); //don't select anything ChangeValue(folderPathPhrase); //preserve main text! diff --git a/freefilesync/debian/patches/ffs_sftp.patch b/freefilesync/debian/patches/ffs_sftp.patch index c30b09c..09e6655 100644 --- a/freefilesync/debian/patches/ffs_sftp.patch +++ b/freefilesync/debian/patches/ffs_sftp.patch @@ -3,20 +3,21 @@ Author: B Stack Message: The upstream author observed that some of the values he uses are not in the libssh2 public headers. I don't know where he uses them from, but I had to replace them here to get this to compile. Date: 2019-02-11T12:15:59Z https://github.com/libssh2/libssh2/issues/90 -diff -x '*.orig' -x '*.swp' -x '*.rej' -Naur 10.9-0/FreeFileSync/Source/afs/sftp.cpp 10.9-1/FreeFileSync/Source/afs/sftp.cpp ---- 10.9-0/FreeFileSync/Source/afs/sftp.cpp 2019-02-10 16:42:29.139040980 -0500 -+++ 10.9-1/FreeFileSync/Source/afs/sftp.cpp 2019-02-10 21:28:00.030732089 -0500 -@@ -56,9 +56,10 @@ - +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/afs/sftp.cpp 10.24-1/FreeFileSync/Source/afs/sftp.cpp +--- 10.24-0/FreeFileSync/Source/afs/sftp.cpp 2020-05-17 11:01:12.821889929 -0400 ++++ 10.24-1/FreeFileSync/Source/afs/sftp.cpp 2020-05-17 11:37:50.229446467 -0400 +@@ -63,10 +63,10 @@ + LIBSSH2_SFTP_S_IROTH | LIBSSH2_SFTP_S_IXOTH; + //attention: if operation fails due to time out, e.g. file copy, the cleanup code may hang, too => total delay = 2 x time out interval - --const size_t SFTP_OPTIMAL_BLOCK_SIZE_READ = 4 * MAX_SFTP_READ_SIZE; //https://github.com/libssh2/libssh2/issues/90 --const size_t SFTP_OPTIMAL_BLOCK_SIZE_WRITE = 4 * MAX_SFTP_OUTGOING_SIZE; // +- +-const size_t SFTP_OPTIMAL_BLOCK_SIZE_READ = 8 * MAX_SFTP_READ_SIZE; //https://github.com/libssh2/libssh2/issues/90 +-const size_t SFTP_OPTIMAL_BLOCK_SIZE_WRITE = 8 * MAX_SFTP_OUTGOING_SIZE; // -static_assert(MAX_SFTP_READ_SIZE == 30000 && MAX_SFTP_OUTGOING_SIZE == 30000, "reevaluate optimal block sizes if these constants change!"); +// these values are all manually derived from https://github.com/libssh2/libssh2/blob/master/src/sftp.h which for some weak reason are not included in the libssh2-devel headers. -+const size_t SFTP_OPTIMAL_BLOCK_SIZE_READ = 4 * 30000; //https://github.com/libssh2/libssh2/issues/90 -+const size_t SFTP_OPTIMAL_BLOCK_SIZE_WRITE = 4 * 30000; // ++const size_t SFTP_OPTIMAL_BLOCK_SIZE_READ = 8 * 30000; //https://github.com/libssh2/libssh2/issues/90 ++const size_t SFTP_OPTIMAL_BLOCK_SIZE_WRITE = 8 * 30000; // +//static_assert(MAX_SFTP_READ_SIZE == 30000 && MAX_SFTP_OUTGOING_SIZE == 30000, "reevaluate optimal block sizes if these constants change!"); - /* - Perf Test, Sourceforge frs, SFTP upload, compressed 25 MB test file: - + + /* Perf Test, Sourceforge frs, SFTP upload, compressed 25 MB test file: + diff --git a/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch b/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch new file mode 100644 index 0000000..0da4e06 --- /dev/null +++ b/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch @@ -0,0 +1,275 @@ +Author: Ben Stack <bgstack15@gmail.com> +Date: 2020-05-17 14:11 -0400 +Message: Use the following command to get this old contents. Zenju must be using some newer definition of -std=c++2a than what Devuan Ceres provides as of 2020-05-17, and probably wxwidgets. This is the 10.23 code for these files. + + git checkout b4ecf755 zen/legacy_compiler.h zen/string_base.h wx+/choice_enum.h + +Unfortunately with the removal of the wxWidgets-gtk2 code from Debian, we are stuck using all available at approximately November 1, 2019 snapshot of Debian: https://snapshot.debian.org/archive/debian/20191101T211023Z/pool/main/w/wxwidgets3.0/ +libwxbase3.0-0v5_3.0.4+dfsg-14_amd64.deb +libwxbase3.0-0v5_3.0.4+dfsg-14_i386.deb +libwxbase3.0-dev_3.0.4+dfsg-14_amd64.deb +libwxbase3.0-dev_3.0.4+dfsg-14_i386.deb +libwxgtk3.0-0v5_3.0.4+dfsg-14_amd64.deb +libwxgtk3.0-0v5_3.0.4+dfsg-14_i386.deb +libwxgtk3.0-dev_3.0.4+dfsg-14_amd64.deb +libwxgtk3.0-dev_3.0.4+dfsg-14_i386.deb +wx3.0-headers_3.0.4+dfsg-14_all.deb +wx-common_3.0.4+dfsg-14_amd64.deb +wx-common_3.0.4+dfsg-14_i386.deb +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/zen/legacy_compiler.h 10.24-1/zen/legacy_compiler.h +--- 10.24-0/zen/legacy_compiler.h 2020-05-17 13:44:27.542140458 -0400 ++++ 10.24-1/zen/legacy_compiler.h 2020-05-17 14:07:49.115166339 -0400 +@@ -7,9 +7,6 @@ + #ifndef LEGACY_COMPILER_H_839567308565656789 + #define LEGACY_COMPILER_H_839567308565656789 + +- #include <numbers> //C++20 +- +- #include <span> //requires C++20 + + + +@@ -21,8 +18,53 @@ + + //--------------------------------------------------------------------------------- + ++#if __cpp_lib_span ++ #error get rid of workaround: ++#endif ++ ++template <class T> ++class span ++{ ++public: ++ template <class Iterator> ++ span(Iterator first, Iterator last) : size_(last - first), data_(first != last ? &*first : nullptr) {} ++ ++ template <class Container> ++ span(Container& cont) : span(cont.begin(), cont.end()) {} ++ ++ using iterator = T*; ++ using const_iterator = const T*; ++ ++ iterator begin() { return data_; } ++ iterator end () { return data_ + size_; } ++ ++ const_iterator begin() const { return data_; } ++ const_iterator end () const { return data_ + size_; } + ++ const_iterator cbegin() const { return begin(); } ++ const_iterator cend () const { return end (); } + ++ T* data() const { return data_; } ++ size_t size() const { return size_; } ++ bool empty() const { return size_ == 0; } ++ ++private: ++ const size_t size_; ++ T* const data_; ++}; ++ ++ ++#if __cpp_lib_math_constants ++ #error get rid of workaround: ++#endif ++ ++namespace numbers ++{ ++const double pi = 3.14159265358979323846; ++const double e = 2.71828182845904523536; ++const double sqrt2 = 1.41421356237309504880; ++const double ln2 = 0.693147180559945309417; ++} + } + + +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/zen/string_base.h 10.24-1/zen/string_base.h +--- 10.24-0/zen/string_base.h 2020-05-17 13:44:27.554140569 -0400 ++++ 10.24-1/zen/string_base.h 2020-05-17 14:09:44.164244361 -0400 +@@ -12,7 +12,9 @@ + #include <cstdint> + #include <atomic> + #include "string_tools.h" ++#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison + #include <compare> ++#endif + + + //Zbase - a policy based string class optimizing performance and flexibility +@@ -293,15 +295,29 @@ + }; + + ++#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison ++ #error implement! ++#endif ++ + + template <class Char, template <class> class SP> bool operator==(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs); + template <class Char, template <class> class SP> bool operator==(const Zbase<Char, SP>& lhs, const Char* rhs); + template <class Char, template <class> class SP> inline bool operator==(const Char* lhs, const Zbase<Char, SP>& rhs) { return operator==(rhs, lhs); } + ++#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison + template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs); + template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Char* rhs); + template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Char* lhs, const Zbase<Char, SP>& rhs); + ++#else ++template <class Char, template <class> class SP> inline bool operator!=(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) { return !operator==(lhs, rhs); } ++template <class Char, template <class> class SP> inline bool operator!=(const Zbase<Char, SP>& lhs, const Char* rhs) { return !operator==(lhs, rhs); } ++template <class Char, template <class> class SP> inline bool operator!=(const Char* lhs, const Zbase<Char, SP>& rhs) { return !operator==(lhs, rhs); } ++ ++template <class Char, template <class> class SP> bool operator<(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs); ++template <class Char, template <class> class SP> bool operator<(const Zbase<Char, SP>& lhs, const Char* rhs); ++template <class Char, template <class> class SP> bool operator<(const Char* lhs, const Zbase<Char, SP>& rhs); ++#endif + + template <class Char, template <class> class SP> inline Zbase<Char, SP> operator+(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) { return Zbase<Char, SP>(lhs) += rhs; } + template <class Char, template <class> class SP> inline Zbase<Char, SP> operator+(const Zbase<Char, SP>& lhs, const Char* rhs) { return Zbase<Char, SP>(lhs) += rhs; } +@@ -482,11 +498,12 @@ + } + + ++#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison + template <class Char, template <class> class SP> inline + std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) + { +- return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), //respect embedded 0 +- rhs.begin(), rhs.end()); // ++ return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), //respect embedded 0 ++ rhs.begin(), rhs.end()); + } + + +@@ -501,11 +518,35 @@ + template <class Char, template <class> class SP> inline + std::strong_ordering operator<=>(const Char* lhs, const Zbase<Char, SP>& rhs) + { +- return std::lexicographical_compare_three_way(lhs, lhs + strLength(lhs), +- rhs.begin(), rhs.end()); //respect embedded 0 ++ return std::lexicographical_compare_three_way(lhs, lhs + strLength(lhs), //respect embedded 0 ++ rhs.begin(), rhs.end()); ++} ++ ++#else ++template <class Char, template <class> class SP> inline ++bool operator<(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) ++{ ++ return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0 ++ rhs.begin(), rhs.end()); + } + + ++template <class Char, template <class> class SP> inline ++bool operator<(const Zbase<Char, SP>& lhs, const Char* rhs) ++{ ++ return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0 ++ rhs, rhs + strLength(rhs)); ++} ++ ++ ++template <class Char, template <class> class SP> inline ++bool operator<(const Char* lhs, const Zbase<Char, SP>& rhs) ++{ ++ return std::lexicographical_compare(lhs, lhs + strLength(lhs), //respect embedded 0 ++ rhs.begin(), rhs.end()); ++} ++#endif ++ + + template <class Char, template <class> class SP> inline + size_t Zbase<Char, SP>::length() const +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/wx+/choice_enum.h +--- 10.24-0/wx+/choice_enum.h 2020-05-17 18:30:59.441499418 -0400 ++++ 10.24-1/wx+/choice_enum.h 2020-05-17 18:53:59.893685507 -0400 +@@ -7,7 +7,6 @@ + #ifndef CHOICE_ENUM_H_132413545345687 + #define CHOICE_ENUM_H_132413545345687 + +-#include <unordered_map> + #include <vector> + #include <wx/choice.h> + +@@ -44,11 +43,8 @@ + descrList.push_back({ value, { text, tooltip } }); + return *this; + } +- + using DescrList = std::vector<std::pair<Enum, std::pair<wxString, wxString>>>; + DescrList descrList; +- +- std::unordered_map<const wxChoice*, std::vector<wxString>> itemsSetLast; + }; + template <class Enum> void setEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value); + template <class Enum> Enum getEnumVal(const EnumDescrList<Enum>& mapping, const wxChoice& ctrl); +@@ -69,34 +65,26 @@ + + //--------------- impelementation ------------------------------------------- + template <class Enum> +-void setEnumVal(EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value) ++void setEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value) + { +- auto& itemsSetLast = mapping.itemsSetLast[&ctrl]; ++ ctrl.Clear(); + +- std::vector<wxString> items; ++ int selectedPos = 0; + for (auto it = mapping.descrList.begin(); it != mapping.descrList.end(); ++it) +- items.push_back(it->second.first); +- +- if (items != itemsSetLast) + { +- ctrl.Set(items); //expensive as fuck! => only call when absolutely needed! +- itemsSetLast = std::move(items); ++ ctrl.Append(it->second.first); ++ if (it->first == value) ++ { ++ selectedPos = it - mapping.descrList.begin(); ++ ++ if (it->second.second.empty()) ++ ctrl.UnsetToolTip(); ++ else ++ ctrl.SetToolTip(it->second.second); ++ } + } +- //----------------------------------------------------------------- +- +- const auto it = std::find_if(mapping.descrList.begin(), mapping.descrList.end(), [&](const auto& mapItem) { return mapItem.first == value; }); +- if (it != mapping.descrList.end()) +- { +- if (const wxString& tooltip = it->second.second; +- !tooltip.empty()) +- ctrl.SetToolTip(tooltip); +- else +- ctrl.UnsetToolTip(); + +- const int selectedPos = it - mapping.descrList.begin(); +- ctrl.SetSelection(selectedPos); +- } +- else assert(false); ++ ctrl.SetSelection(selectedPos); + } + + template <class Enum> +@@ -115,17 +103,11 @@ + + template <class Enum> void updateTooltipEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl) + { +- const int selectedPos = ctrl.GetSelection(); ++ const Enum currentValue = getEnumVal(mapping, ctrl); + +- if (0 <= selectedPos && selectedPos < static_cast<int>(mapping.descrList.size())) +- { +- if (const auto& [text, tooltip] = mapping.descrList[selectedPos].second; +- !tooltip.empty()) +- ctrl.SetToolTip(tooltip); +- else +- ctrl.UnsetToolTip(); +- } +- else assert(false); ++ for (const auto& [enumValue, textAndTooltip] : mapping.descrList) ++ if (currentValue == enumValue) ++ ctrl.SetToolTip(textAndTooltip.second); + } + } + diff --git a/freefilesync/debian/patches/series b/freefilesync/debian/patches/series index 2d91735..bd039a4 100644 --- a/freefilesync/debian/patches/series +++ b/freefilesync/debian/patches/series @@ -7,3 +7,4 @@ ffs_no_wx311.patch ffs_sftp.patch ffs_libssh2.patch ffs_curl.patch +revert_zenju_aggressive_upstreamisms.patch diff --git a/freefilesync/debian/rules b/freefilesync/debian/rules index 6f439e4..405ffd3 100755 --- a/freefilesync/debian/rules +++ b/freefilesync/debian/rules @@ -4,7 +4,7 @@ #export DEB_BUILD_MAINT_OPTIONS = hardening=+all #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic #export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed -export LINKFLAGS="${LDFLAGS} -pie" +export linkFlags="${LDFLAGS} -pie" export appname=freefilesync export pkgname=FreeFileSync diff --git a/freefilesync/ffs_curl.patch b/freefilesync/ffs_curl.patch index fee8b13..ec038d7 100644 --- a/freefilesync/ffs_curl.patch +++ b/freefilesync/ffs_curl.patch @@ -22,8 +22,8 @@ diff -r -u 10.17-0/FreeFileSync/Source/afs/ftp.cpp 10.17-1/FreeFileSync/Source/a Message: For Fedora <= 30 that has curl < 7.66.0 you need this patch. diff -Naur 10.20-0/libcurl/curl_wrap.h 10.20-1/libcurl/curl_wrap.h -[bgirton@fc31x-01a|/usr/src/freefilesync]$ diff -x '*.swp' -x '*.rej' -x '*.orig' -Naur 10.22-[01]/libcurl/curl_wrap.h--- 10.22-0/libcurl/curl_wrap.h 2020-03-18 15:49:57.839901161 -0400 -+++ 10.22-1/libcurl/curl_wrap.h 2020-03-18 15:56:21.034499900 -0400 +--- 10.22-0/libcurl/curl_wrap.h 2020-03-18 15:49:57.839901161 -0400 ++++ 10.22-1/libcurl/curl_wrap.h 2020-03-18 15:56:21.034499900 -0400 @@ -134,12 +134,7 @@ ZEN_CHECK_CASE_FOR_CONSTANT(CURLE_SSL_INVALIDCERTSTATUS); ZEN_CHECK_CASE_FOR_CONSTANT(CURLE_HTTP2_STREAM); diff --git a/freefilesync/ffs_el.patch b/freefilesync/ffs_el.patch index 2df678e..4611e5e 100644 --- a/freefilesync/ffs_el.patch +++ b/freefilesync/ffs_el.patch @@ -19,27 +19,27 @@ diff -Naur -x '*.orig' -x '*.rej' -x '*.swp' 10.11-0/FreeFileSync/Source/Makefil --- 10.11-0/FreeFileSync/Source/Makefile 2019-04-12 07:59:45.042147902 -0400 +++ 10.18-1/FreeFileSync/Source/Makefile 2019-11-21 20:59:25.548277619 -0500 @@ -1,10 +1,10 @@ --EXENAME = FreeFileSync_$(shell arch) -+EXENAME = FreeFileSync +-exeName = FreeFileSync_$(shell arch) ++exeName = FreeFileSync --CXXFLAGS = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -+CXXFLAGS = -std=c++17 -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ +-cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ ++cxxFlags = -std=c++17 -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ - -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread + -O3 -DNDEBUG -fPIC `wx-config --version=3.0 --cxxflags --debug=no` -pthread --LINKFLAGS = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread -+LINKFLAGS = -s -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-z,relro -no-pie `wx-config --version=3.0 --libs std, aui --debug=no | sed -r -e 's/-[^[:space:]]+web[^[:space:]]+//;'` -lz -pthread +-linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread ++linkFlags = -s -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-z,relro -no-pie `wx-config --version=3.0 --libs std, aui --debug=no | sed -r -e 's/-[^[:space:]]+web[^[:space:]]+//;'` -lz -pthread - CXXFLAGS += `pkg-config --cflags openssl` + cxxFlags += `pkg-config --cflags openssl` @@ -17,6 +17,7 @@ - LINKFLAGS += `pkg-config --libs libssh2` + linkFlags += `pkg-config --libs libssh2` - CXXFLAGS += `pkg-config --cflags gtk+-2.0` -+LINKFLAGS += `pkg-config --libs gtk+-2.0` + cxxFlags += `pkg-config --cflags gtk+-2.0` ++linkFlags += `pkg-config --libs gtk+-2.0` #treat as system headers so that warnings are hidden: - CXXFLAGS += -isystem/usr/include/gtk-2.0 + cxxFlags += -isystem/usr/include/gtk-2.0 diff -Naur -x '*.orig' -x '*.rej' -x '*.swp' 10.11-0/FreeFileSync/Source/RealTimeSync/application.h 10.11-1/FreeFileSync/Source/RealTimeSync/application.h --- 10.11-0/FreeFileSync/Source/RealTimeSync/application.h 2019-04-12 07:59:45.035147580 -0400 @@ -57,23 +57,23 @@ diff -Naur -x '*.orig' -x '*.rej' -x '*.swp' 10.11-0/FreeFileSync/Source/RealTim --- 10.11-0/FreeFileSync/Source/RealTimeSync/Makefile 2019-04-12 07:59:45.008146336 -0400 +++ 10.18-1/FreeFileSync/Source/RealTimeSync/Makefile 2019-11-22 10:14:04.326175203 -0500 @@ -1,13 +1,14 @@ --EXENAME = RealTimeSync_$(shell arch) -+EXENAME = RealTimeSync +-exeName = RealTimeSync_$(shell arch) ++exeName = RealTimeSync --CXXFLAGS = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -+CXXFLAGS = -std=c++17 -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ +-cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ ++cxxFlags = -std=c++17 -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ - -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread + -O3 -DNDEBUG -fPIC `wx-config --version=3.0 --cxxflags --debug=no` -pthread --LINKFLAGS = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread -+LINKFLAGS = -s -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -no-pie `wx-config --version=3.0 --cxxflags --libs std, aui --debug=no | sed -r -e 's/-[^[:space:]]+web[^[:space:]]+//;'` -lz -pthread +-linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread ++linkFlags = -s -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -no-pie `wx-config --version=3.0 --cxxflags --libs std, aui --debug=no | sed -r -e 's/-[^[:space:]]+web[^[:space:]]+//;'` -lz -pthread #Gtk - support "no button border" - CXXFLAGS += `pkg-config --cflags gtk+-2.0` -+LINKFLAGS += `pkg-config --libs gtk+-2.0` + cxxFlags += `pkg-config --cflags gtk+-2.0` ++linkFlags += `pkg-config --libs gtk+-2.0` #treat as system headers so that warnings are hidden: - CXXFLAGS += -isystem/usr/include/gtk-2.0 + cxxFlags += -isystem/usr/include/gtk-2.0 diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Source/ui/small_dlgs.cpp 10.19-1/FreeFileSync/Source/ui/small_dlgs.cpp --- 10.22-0/FreeFileSync/Source/ui/small_dlgs.cpp 2020-03-18 15:49:57.837901137 -0400 @@ -82,7 +82,7 @@ diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Sou build += L"64 Bit"; #endif -+ build += L" for CentOS 7/Fedora 29"; ++ build += L" for CentOS"; + build += SPACED_BULLET; build += utfTo<wxString>(formatTime(formatDateTag, getCompileTime())); diff --git a/freefilesync/ffs_fedora.patch b/freefilesync/ffs_fedora.patch index a82ccad..82787ea 100644 --- a/freefilesync/ffs_fedora.patch +++ b/freefilesync/ffs_fedora.patch @@ -15,45 +15,45 @@ diff -Naur 10.11-0/FreeFileSync/Source/Makefile 10.11-1/FreeFileSync/Source/Make --- 10.11-0/FreeFileSync/Source/Makefile 2019-04-12 07:59:45.042147902 -0400 +++ 10.11-1/FreeFileSync/Source/Makefile 2019-04-12 08:27:42.062542410 -0400 @@ -1,10 +1,10 @@ --EXENAME = FreeFileSync_$(shell arch) -+EXENAME = FreeFileSync +-exeName = FreeFileSync_$(shell arch) ++exeName = FreeFileSync - CXXFLAGS = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ + cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread --LINKFLAGS = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread -+LINKFLAGS = -s -no-pie `wx-config --libs std, aui --debug=no` -lz -pthread +-linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread ++linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -lz -pthread - CXXFLAGS += `pkg-config --cflags openssl` -@@ -17,6 +17,7 @@ CXXFLAGS += `pkg-config --cflags libssh2` - LINKFLAGS += `pkg-config --libs libssh2` + cxxFlags += `pkg-config --cflags openssl` +@@ -17,6 +17,7 @@ cxxFlags += `pkg-config --cflags libssh2` + linkFlags += `pkg-config --libs libssh2` - CXXFLAGS += `pkg-config --cflags gtk+-2.0` -+LINKFLAGS += `pkg-config --libs gtk+-2.0` + cxxFlags += `pkg-config --cflags gtk+-2.0` ++linkFlags += `pkg-config --libs gtk+-2.0` #treat as system headers so that warnings are hidden: - CXXFLAGS += -isystem/usr/include/gtk-2.0 + cxxFlags += -isystem/usr/include/gtk-2.0 diff -Naur 10.11-0/FreeFileSync/Source/RealTimeSync/Makefile 10.11-1/FreeFileSync/Source/RealTimeSync/Makefile --- 10.11-0/FreeFileSync/Source/RealTimeSync/Makefile 2019-04-12 07:59:45.008146336 -0400 +++ 10.15-1/FreeFileSync/Source/RealTimeSync/Makefile 2019-08-15 13:59:53.934551753 -0400 @@ -1,13 +1,14 @@ --EXENAME = RealTimeSync_$(shell arch) -+EXENAME = RealTimeSync +-exeName = RealTimeSync_$(shell arch) ++exeName = RealTimeSync - CXXFLAGS = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ + cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread --LINKFLAGS = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread -+LINKFLAGS = -s -no-pie `wx-config --libs std, aui --debug=no` -lz -pthread +-linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread ++linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -lz -pthread #Gtk - support "no button border" - CXXFLAGS += `pkg-config --cflags gtk+-2.0` -+LINKFLAGS += `pkg-config --libs gtk+-2.0` + cxxFlags += `pkg-config --cflags gtk+-2.0` ++linkFlags += `pkg-config --libs gtk+-2.0` #treat as system headers so that warnings are hidden: - CXXFLAGS += -isystem/usr/include/gtk-2.0 + cxxFlags += -isystem/usr/include/gtk-2.0 diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Source/ui/small_dlgs.cpp 10.19-1/FreeFileSync/Source/ui/small_dlgs.cpp --- 10.22-0/FreeFileSync/Source/ui/small_dlgs.cpp 2020-03-18 15:49:57.837901137 -0400 @@ -62,7 +62,7 @@ diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Sou build += L"64 Bit"; #endif -+ build += L" for Devuan"; ++ build += L" for Fedora"; + build += SPACED_BULLET; build += utfTo<wxString>(formatTime(formatDateTag, getCompileTime())); diff --git a/freefilesync/ffs_no_check_updates.patch b/freefilesync/ffs_no_check_updates.patch index bb54677..1ef4148 100644 --- a/freefilesync/ffs_no_check_updates.patch +++ b/freefilesync/ffs_no_check_updates.patch @@ -78,7 +78,7 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/version_check.cpp 1 + // showUpdateAvailableDialog(parent, onlineVersion); + //else showNotificationDialog(parent, DialogInfoType::info, PopupDialogCfg(). - setIcon(getResourceImage(L"update_check")). + setIcon(getResourceImage("update_check")). setTitle(_("Check for Program Updates")). - setMainInstructions(_("FreeFileSync is up to date."))); + setMainInstructions(_("Use your package manager for any updates to FreeFileSync."))); diff --git a/freefilesync/ffs_no_eraseif.patch b/freefilesync/ffs_no_eraseif.patch index d20fd81..f4a7b46 100644 --- a/freefilesync/ffs_no_eraseif.patch +++ b/freefilesync/ffs_no_eraseif.patch @@ -11,73 +11,73 @@ diff -x '*.swp' -x .git -x '*.orig' -x '*.rej' -Naur 10.18-1/FreeFileSync/Source //get or create mutex std::weak_ptr<std::mutex>& weakPtr = pathLocks[nativePath]; -diff -x '*.swp' -x .git -x '*.orig' -x '*.rej' -Naur 10.18-0/FreeFileSync/Source/afs/gdrive.cpp 10.19-1/FreeFileSync/Source/afs/gdrive.cpp +diff -x '*.swp' -x '*.git*' -x '*.orig' -x '*.rej' -Naur 10.24-0/FreeFileSync/Source/afs/gdrive.cpp 10.24-1/FreeFileSync/Source/afs/gdrive.cpp --- 10.18-0/FreeFileSync/Source/afs/gdrive.cpp 2019-11-20 16:15:55.828668123 -0500 -+++ 10.19-1/FreeFileSync/Source/afs/gdrive.cpp 2019-12-27 11:17:35.793612360 -0500 -@@ -1788,7 +1788,7 @@ - if (auto it = itemDetails_.find(itemId); it != itemDetails_.end()) - { - GoogleItemDetails detailsNew = it->second; -- std::erase_if(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdOld; }); -+ eraseIf(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdOld; }); - notifyItemUpdate(stateDelta, itemId, detailsNew); - } - else //conflict!!! -@@ -1802,7 +1802,7 @@ - GoogleItemDetails detailsNew = it->second; - detailsNew.itemName = utfTo<std::string>(newName); - -- std::erase_if(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdFrom || id == parentIdTo; }); // -+ eraseIf(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdFrom || id == parentIdTo; }); // - detailsNew.parentIds.push_back(parentIdTo); //not a duplicate - - notifyItemUpdate(stateDelta, itemId, detailsNew); -@@ -1911,7 +1911,7 @@ - return; //=> avoid misleading changeLog_ entries after Google Drive sync!!! - - //update change logs (and clean up obsolete entries) -- std::erase_if(changeLog_, [&](std::weak_ptr<ItemIdDelta>& weakPtr) -+ eraseIf(changeLog_, [&](std::weak_ptr<ItemIdDelta>& weakPtr) - { - if (std::shared_ptr<ItemIdDelta> iid = weakPtr.lock()) ++++ 10.24-1/FreeFileSync/Source/afs/gdrive.cpp 2020-05-18 10:30:32.420537123 -0400 +@@ -1578,7 +1578,7 @@ + if (auto it = itemDetails_.find(itemId); it != itemDetails_.end()) { -@@ -1932,15 +1932,15 @@ - - std::vector<std::string> parentIdsNew = details->parentIds; - std::vector<std::string> parentIdsRemoved = it->second.parentIds; -- std::erase_if(parentIdsNew, [&](const std::string& id) { return std::find(it->second.parentIds.begin(), it->second.parentIds.end(), id) != it->second.parentIds.end(); }); -- std::erase_if(parentIdsRemoved, [&](const std::string& id) { return std::find(details->parentIds.begin(), details->parentIds.end(), id) != details->parentIds.end(); }); -+ eraseIf(parentIdsNew, [&](const std::string& id) { return std::find(it->second.parentIds.begin(), it->second.parentIds.end(), id) != it->second.parentIds.end(); }); -+ eraseIf(parentIdsRemoved, [&](const std::string& id) { return std::find(details->parentIds.begin(), details->parentIds.end(), id) != details->parentIds.end(); }); - - for (const std::string& parentId : parentIdsNew) - folderContents_[parentId].childItems.push_back(it); //new insert => no need for duplicate check - - for (const std::string& parentId : parentIdsRemoved) - if (auto itP = folderContents_.find(parentId); itP != folderContents_.end()) -- std::erase_if(itP->second.childItems, [&](auto itChild) { return itChild == it; }); -+ eraseIf(itP->second.childItems, [&](auto itChild) { return itChild == it; }); - //if all parents are removed, Google Drive will (recursively) delete the item => don't prematurely do this now: wait for change notifications! - - it->second = *details; -@@ -1959,7 +1959,7 @@ - { - for (const std::string& parentId : it->second.parentIds) //1. delete from parent folders - if (auto itP = folderContents_.find(parentId); itP != folderContents_.end()) -- std::erase_if(itP->second.childItems, [&](auto itChild) { return itChild == it; }); -+ eraseIf(itP->second.childItems, [&](auto itChild) { return itChild == it; }); - - itemDetails_.erase(it); + GoogleItemDetails detailsNew = it->second; +- std::erase_if(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdOld; }); ++ eraseIf(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdOld; }); + notifyItemUpdate(stateDelta, itemId, detailsNew); } -@@ -1967,7 +1967,7 @@ - if (auto itP = folderContents_.find(itemId); itP != folderContents_.end()) + else //conflict!!! +@@ -1592,7 +1592,7 @@ + GoogleItemDetails detailsNew = it->second; + detailsNew.itemName = utfTo<std::string>(newName); + +- std::erase_if(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdFrom || id == parentIdTo; }); // ++ eraseIf(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdFrom || id == parentIdTo; }); // + detailsNew.parentIds.push_back(parentIdTo); //not a duplicate + + notifyItemUpdate(stateDelta, itemId, detailsNew); +@@ -1701,7 +1701,7 @@ + return; //=> avoid misleading changeLog_ entries after Google Drive sync!!! + + //update change logs (and clean up obsolete entries) +- std::erase_if(changeLog_, [&](std::weak_ptr<ItemIdDelta>& weakPtr) ++ eraseIf(changeLog_, [&](std::weak_ptr<ItemIdDelta>& weakPtr) { - for (auto itChild : itP->second.childItems) //2. delete as parent from child items (don't wait for change notifications of children) -- std::erase_if(itChild->second.parentIds, [&](const std::string& id) { return id == itemId; }); -+ eraseIf(itChild->second.parentIds, [&](const std::string& id) { return id == itemId; }); - folderContents_.erase(itP); + if (std::shared_ptr<ItemIdDelta> iid = weakPtr.lock()) + { +@@ -1722,15 +1722,15 @@ + + std::vector<std::string> parentIdsNew = details->parentIds; + std::vector<std::string> parentIdsRemoved = it->second.parentIds; +- std::erase_if(parentIdsNew, [&](const std::string& id) { return std::find(it->second.parentIds.begin(), it->second.parentIds.end(), id) != it->second.parentIds.end(); }); +- std::erase_if(parentIdsRemoved, [&](const std::string& id) { return std::find(details->parentIds.begin(), details->parentIds.end(), id) != details->parentIds.end(); }); ++ eraseIf(parentIdsNew, [&](const std::string& id) { return std::find(it->second.parentIds.begin(), it->second.parentIds.end(), id) != it->second.parentIds.end(); }); ++ eraseIf(parentIdsRemoved, [&](const std::string& id) { return std::find(details->parentIds.begin(), details->parentIds.end(), id) != details->parentIds.end(); }); + + for (const std::string& parentId : parentIdsNew) + folderContents_[parentId].childItems.push_back(it); //new insert => no need for duplicate check + + for (const std::string& parentId : parentIdsRemoved) + if (auto itP = folderContents_.find(parentId); itP != folderContents_.end()) +- std::erase_if(itP->second.childItems, [&](auto itChild) { return itChild == it; }); ++ eraseIf(itP->second.childItems, [&](auto itChild) { return itChild == it; }); + //if all parents are removed, Google Drive will (recursively) delete the item => don't prematurely do this now: wait for change notifications! + + it->second = *details; +@@ -1749,7 +1749,7 @@ + { + for (const std::string& parentId : it->second.parentIds) //1. delete from parent folders + if (auto itP = folderContents_.find(parentId); itP != folderContents_.end()) +- std::erase_if(itP->second.childItems, [&](auto itChild) { return itChild == it; }); ++ eraseIf(itP->second.childItems, [&](auto itChild) { return itChild == it; }); + + itemDetails_.erase(it); + } +@@ -1757,7 +1757,7 @@ + if (auto itP = folderContents_.find(itemId); itP != folderContents_.end()) + { + for (auto itChild : itP->second.childItems) //2. delete as parent from child items (don't wait for change notifications of children) +- std::erase_if(itChild->second.parentIds, [&](const std::string& id) { return id == itemId; }); ++ eraseIf(itChild->second.parentIds, [&](const std::string& id) { return id == itemId; }); + folderContents_.erase(itP); + } } - } diff -x '*.swp' -x .git -x '*.orig' -x '*.rej' -Naur 10.18-1/FreeFileSync/Source/afs/sftp.cpp 10.18-2/FreeFileSync/Source/afs/sftp.cpp --- 10.18-1/FreeFileSync/Source/afs/sftp.cpp 2019-11-20 17:54:23.078438037 -0500 +++ 10.18-2/FreeFileSync/Source/afs/sftp.cpp 2019-11-20 17:57:30.557558372 -0500 diff --git a/freefilesync/ffs_no_wx311.patch b/freefilesync/ffs_no_wx311.patch index f3afae0..f617122 100644 --- a/freefilesync/ffs_no_wx311.patch +++ b/freefilesync/ffs_no_wx311.patch @@ -5,7 +5,7 @@ diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Sou @@ -1546,7 +1546,7 @@ //setMainInstructionFont(*m_staticTextMain); - m_bitmapActivation->SetBitmap(getResourceImage(L"internet")); + m_bitmapActivation->SetBitmap(getResourceImage("internet")); - m_textCtrlOfflineActivationKey->ForceUpper(); + //m_textCtrlOfflineActivationKey->ForceUpper(); @@ -39,32 +39,29 @@ diff -Naur 10.13-0/FreeFileSync/Source/ffs_paths.cpp 10.13-1/FreeFileSync/Source try //create the config folder if not existing + create "Logs" subfolder while we're at it { -diff --git a/FreeFileSync/Source/ui/command_box.cpp b/FreeFileSync/Source/ui/command_box.cpp -index 6e769bb..ce6110b 100644 ---- a/FreeFileSync/Source/ui/command_box.cpp -+++ b/FreeFileSync/Source/ui/command_box.cpp -@@ -130,7 +130,9 @@ void CommandBox::setValueAndUpdateList(const wxString& value) - +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/ui/command_box.cpp 10.24-1/FreeFileSync/Source/ui/command_box.cpp +--- 10.24-0/FreeFileSync/Source/ui/command_box.cpp 2020-05-17 11:01:12.893890567 -0400 ++++ 10.24-1/FreeFileSync/Source/ui/command_box.cpp 2020-05-17 11:22:18.069114993 -0400 +@@ -120,7 +120,8 @@ + //this->Clear(); -> NO! emits yet another wxEVT_COMMAND_TEXT_UPDATED!!! wxItemContainer::Clear(); //suffices to clear the selection items only! -- this->Append(items); -+ for (const wxString& item : items) +- this->Append(items); //expensive as fuck! => only call when absolutely needed! ++ for (const wxString& item : items) // reverted to pre-wx 3.1.1 logic + this->Append(item); -+ - + //this->SetSelection(wxNOT_FOUND); //don't select anything ChangeValue(value); //preserve main text! -diff --git a/FreeFileSync/Source/ui/folder_history_box.cpp b/FreeFileSync/Source/ui/folder_history_box.cpp -index 2b824b1..a17ea2f 100644 ---- a/FreeFileSync/Source/ui/folder_history_box.cpp -+++ b/FreeFileSync/Source/ui/folder_history_box.cpp -@@ -90,7 +90,8 @@ void FolderHistoryBox::setValueAndUpdateList(const wxString& folderPathPhrase) - +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/ui/folder_history_box.cpp 10.24-1/FreeFileSync/Source/ui/folder_history_box.cpp +--- 10.24-0/FreeFileSync/Source/ui/folder_history_box.cpp 2020-05-17 11:01:12.909890709 -0400 ++++ 10.24-1/FreeFileSync/Source/ui/folder_history_box.cpp 2020-05-17 11:21:18.460583251 -0400 +@@ -90,7 +90,8 @@ + //this->Clear(); -> NO! emits yet another wxEVT_COMMAND_TEXT_UPDATED!!! wxItemContainer::Clear(); //suffices to clear the selection items only! -- this->Append(dirList); -+ for (const wxString& dir : dirList) -+ this->Append(dir); - +- this->Append(items); //expensive as fuck! => only call when absolutely needed! ++ for (const wxString& itemk : items) // reverted to pre-wx 3.1.1 logic ++ this->Append(itemk); + //this->SetSelection(wxNOT_FOUND); //don't select anything ChangeValue(folderPathPhrase); //preserve main text! diff --git a/freefilesync/ffs_sftp.patch b/freefilesync/ffs_sftp.patch index c30b09c..09e6655 100644 --- a/freefilesync/ffs_sftp.patch +++ b/freefilesync/ffs_sftp.patch @@ -3,20 +3,21 @@ Author: B Stack Message: The upstream author observed that some of the values he uses are not in the libssh2 public headers. I don't know where he uses them from, but I had to replace them here to get this to compile. Date: 2019-02-11T12:15:59Z https://github.com/libssh2/libssh2/issues/90 -diff -x '*.orig' -x '*.swp' -x '*.rej' -Naur 10.9-0/FreeFileSync/Source/afs/sftp.cpp 10.9-1/FreeFileSync/Source/afs/sftp.cpp ---- 10.9-0/FreeFileSync/Source/afs/sftp.cpp 2019-02-10 16:42:29.139040980 -0500 -+++ 10.9-1/FreeFileSync/Source/afs/sftp.cpp 2019-02-10 21:28:00.030732089 -0500 -@@ -56,9 +56,10 @@ - +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/afs/sftp.cpp 10.24-1/FreeFileSync/Source/afs/sftp.cpp +--- 10.24-0/FreeFileSync/Source/afs/sftp.cpp 2020-05-17 11:01:12.821889929 -0400 ++++ 10.24-1/FreeFileSync/Source/afs/sftp.cpp 2020-05-17 11:37:50.229446467 -0400 +@@ -63,10 +63,10 @@ + LIBSSH2_SFTP_S_IROTH | LIBSSH2_SFTP_S_IXOTH; + //attention: if operation fails due to time out, e.g. file copy, the cleanup code may hang, too => total delay = 2 x time out interval - --const size_t SFTP_OPTIMAL_BLOCK_SIZE_READ = 4 * MAX_SFTP_READ_SIZE; //https://github.com/libssh2/libssh2/issues/90 --const size_t SFTP_OPTIMAL_BLOCK_SIZE_WRITE = 4 * MAX_SFTP_OUTGOING_SIZE; // +- +-const size_t SFTP_OPTIMAL_BLOCK_SIZE_READ = 8 * MAX_SFTP_READ_SIZE; //https://github.com/libssh2/libssh2/issues/90 +-const size_t SFTP_OPTIMAL_BLOCK_SIZE_WRITE = 8 * MAX_SFTP_OUTGOING_SIZE; // -static_assert(MAX_SFTP_READ_SIZE == 30000 && MAX_SFTP_OUTGOING_SIZE == 30000, "reevaluate optimal block sizes if these constants change!"); +// these values are all manually derived from https://github.com/libssh2/libssh2/blob/master/src/sftp.h which for some weak reason are not included in the libssh2-devel headers. -+const size_t SFTP_OPTIMAL_BLOCK_SIZE_READ = 4 * 30000; //https://github.com/libssh2/libssh2/issues/90 -+const size_t SFTP_OPTIMAL_BLOCK_SIZE_WRITE = 4 * 30000; // ++const size_t SFTP_OPTIMAL_BLOCK_SIZE_READ = 8 * 30000; //https://github.com/libssh2/libssh2/issues/90 ++const size_t SFTP_OPTIMAL_BLOCK_SIZE_WRITE = 8 * 30000; // +//static_assert(MAX_SFTP_READ_SIZE == 30000 && MAX_SFTP_OUTGOING_SIZE == 30000, "reevaluate optimal block sizes if these constants change!"); - /* - Perf Test, Sourceforge frs, SFTP upload, compressed 25 MB test file: - + + /* Perf Test, Sourceforge frs, SFTP upload, compressed 25 MB test file: + diff --git a/freefilesync/freefilesync.spec b/freefilesync/freefilesync.spec index 6b28b26..914c333 100644 --- a/freefilesync/freefilesync.spec +++ b/freefilesync/freefilesync.spec @@ -1,6 +1,7 @@ %global pkgname FreeFileSync %global prog2name RealTimeSync %global dummy_package 0 +%define debug_package %{nil} %define min_libcurl %{nil} %define min_libssh2 %{nil} %define min_openssl %{nil} @@ -18,7 +19,7 @@ %define libssh2_name libssh2-%{name} %endif Name: freefilesync -Version: 10.23 +Version: 10.24 Release: 1%{?dist} Summary: A file synchronization utility @@ -41,6 +42,7 @@ Patch6: ffs_libssh2.patch Patch7: ffs_curl.patch Patch8: ffs_bit.patch Patch9: ffs_no_eraseif.patch +Patch10: revert_zenju_aggressive_upstreamisms.patch Packager: B Stack <bgstack15@gmail.com> # WARNING: the build will FAIL if you have wxGTK3-devel installed. Only wxGTK2-devel should be on the build system. @@ -91,7 +93,7 @@ find . ! -type d \( -name '*.c' -o -name '*.cpp' -o -name '*.h' \) \ # use the el patch %patch5 -p1 %else -# use the fedora patch +# use the fedora patch, even for el8 %patch4 -p1 %endif %patch6 -p1 @@ -100,12 +102,13 @@ find . ! -type d \( -name '*.c' -o -name '*.cpp' -o -name '*.h' \) \ %patch8 -p1 %patch9 -p1 %endif +%patch10 -p1 # custom build parameters for packaging application in rpm # fedora provides build_cxxflags, which is really just optflags %{__sed} \ -e 's|-O3 -DNDEBUG|-DNDEBUG -D"warn_static(arg)= " -DZEN_LINUX %{?build_cxxflags:%{build_cxxflags}}%{!?build_cxxflags:%{optflags}}|g' \ - -e '/LINKFLAGS/s|-s|%{__global_ldflags}|;' \ + -e '/linkFlags/s|-s|%{__global_ldflags}|;' \ -i %{pkgname}/Source/Makefile %{pkgname}/Source/%{prog2name}/Makefile %build @@ -202,6 +205,11 @@ update-mime-database -n ${_datadir}/mime 1>/dev/null 2>&1 & : %ghost %config %attr(666, -, -) %{_datadir}/%{name}/GlobalSettings.xml %changelog +* Mon May 18 2020 B Stack <bgstack15@gmail.com> - 10.24-1 +- version bump +- add revert_zenju_aggressive_upstreamisms.patch +- disable debug package + * Tue Apr 21 2020 B Stack <bgstack15@gmail.com> - 10.23-1 - version bump - remove ffs_libssl.patch diff --git a/freefilesync/revert_zenju_aggressive_upstreamisms.patch b/freefilesync/revert_zenju_aggressive_upstreamisms.patch new file mode 100644 index 0000000..0da4e06 --- /dev/null +++ b/freefilesync/revert_zenju_aggressive_upstreamisms.patch @@ -0,0 +1,275 @@ +Author: Ben Stack <bgstack15@gmail.com> +Date: 2020-05-17 14:11 -0400 +Message: Use the following command to get this old contents. Zenju must be using some newer definition of -std=c++2a than what Devuan Ceres provides as of 2020-05-17, and probably wxwidgets. This is the 10.23 code for these files. + + git checkout b4ecf755 zen/legacy_compiler.h zen/string_base.h wx+/choice_enum.h + +Unfortunately with the removal of the wxWidgets-gtk2 code from Debian, we are stuck using all available at approximately November 1, 2019 snapshot of Debian: https://snapshot.debian.org/archive/debian/20191101T211023Z/pool/main/w/wxwidgets3.0/ +libwxbase3.0-0v5_3.0.4+dfsg-14_amd64.deb +libwxbase3.0-0v5_3.0.4+dfsg-14_i386.deb +libwxbase3.0-dev_3.0.4+dfsg-14_amd64.deb +libwxbase3.0-dev_3.0.4+dfsg-14_i386.deb +libwxgtk3.0-0v5_3.0.4+dfsg-14_amd64.deb +libwxgtk3.0-0v5_3.0.4+dfsg-14_i386.deb +libwxgtk3.0-dev_3.0.4+dfsg-14_amd64.deb +libwxgtk3.0-dev_3.0.4+dfsg-14_i386.deb +wx3.0-headers_3.0.4+dfsg-14_all.deb +wx-common_3.0.4+dfsg-14_amd64.deb +wx-common_3.0.4+dfsg-14_i386.deb +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/zen/legacy_compiler.h 10.24-1/zen/legacy_compiler.h +--- 10.24-0/zen/legacy_compiler.h 2020-05-17 13:44:27.542140458 -0400 ++++ 10.24-1/zen/legacy_compiler.h 2020-05-17 14:07:49.115166339 -0400 +@@ -7,9 +7,6 @@ + #ifndef LEGACY_COMPILER_H_839567308565656789 + #define LEGACY_COMPILER_H_839567308565656789 + +- #include <numbers> //C++20 +- +- #include <span> //requires C++20 + + + +@@ -21,8 +18,53 @@ + + //--------------------------------------------------------------------------------- + ++#if __cpp_lib_span ++ #error get rid of workaround: ++#endif ++ ++template <class T> ++class span ++{ ++public: ++ template <class Iterator> ++ span(Iterator first, Iterator last) : size_(last - first), data_(first != last ? &*first : nullptr) {} ++ ++ template <class Container> ++ span(Container& cont) : span(cont.begin(), cont.end()) {} ++ ++ using iterator = T*; ++ using const_iterator = const T*; ++ ++ iterator begin() { return data_; } ++ iterator end () { return data_ + size_; } ++ ++ const_iterator begin() const { return data_; } ++ const_iterator end () const { return data_ + size_; } + ++ const_iterator cbegin() const { return begin(); } ++ const_iterator cend () const { return end (); } + ++ T* data() const { return data_; } ++ size_t size() const { return size_; } ++ bool empty() const { return size_ == 0; } ++ ++private: ++ const size_t size_; ++ T* const data_; ++}; ++ ++ ++#if __cpp_lib_math_constants ++ #error get rid of workaround: ++#endif ++ ++namespace numbers ++{ ++const double pi = 3.14159265358979323846; ++const double e = 2.71828182845904523536; ++const double sqrt2 = 1.41421356237309504880; ++const double ln2 = 0.693147180559945309417; ++} + } + + +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/zen/string_base.h 10.24-1/zen/string_base.h +--- 10.24-0/zen/string_base.h 2020-05-17 13:44:27.554140569 -0400 ++++ 10.24-1/zen/string_base.h 2020-05-17 14:09:44.164244361 -0400 +@@ -12,7 +12,9 @@ + #include <cstdint> + #include <atomic> + #include "string_tools.h" ++#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison + #include <compare> ++#endif + + + //Zbase - a policy based string class optimizing performance and flexibility +@@ -293,15 +295,29 @@ + }; + + ++#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison ++ #error implement! ++#endif ++ + + template <class Char, template <class> class SP> bool operator==(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs); + template <class Char, template <class> class SP> bool operator==(const Zbase<Char, SP>& lhs, const Char* rhs); + template <class Char, template <class> class SP> inline bool operator==(const Char* lhs, const Zbase<Char, SP>& rhs) { return operator==(rhs, lhs); } + ++#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison + template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs); + template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Char* rhs); + template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Char* lhs, const Zbase<Char, SP>& rhs); + ++#else ++template <class Char, template <class> class SP> inline bool operator!=(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) { return !operator==(lhs, rhs); } ++template <class Char, template <class> class SP> inline bool operator!=(const Zbase<Char, SP>& lhs, const Char* rhs) { return !operator==(lhs, rhs); } ++template <class Char, template <class> class SP> inline bool operator!=(const Char* lhs, const Zbase<Char, SP>& rhs) { return !operator==(lhs, rhs); } ++ ++template <class Char, template <class> class SP> bool operator<(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs); ++template <class Char, template <class> class SP> bool operator<(const Zbase<Char, SP>& lhs, const Char* rhs); ++template <class Char, template <class> class SP> bool operator<(const Char* lhs, const Zbase<Char, SP>& rhs); ++#endif + + template <class Char, template <class> class SP> inline Zbase<Char, SP> operator+(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) { return Zbase<Char, SP>(lhs) += rhs; } + template <class Char, template <class> class SP> inline Zbase<Char, SP> operator+(const Zbase<Char, SP>& lhs, const Char* rhs) { return Zbase<Char, SP>(lhs) += rhs; } +@@ -482,11 +498,12 @@ + } + + ++#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison + template <class Char, template <class> class SP> inline + std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) + { +- return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), //respect embedded 0 +- rhs.begin(), rhs.end()); // ++ return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), //respect embedded 0 ++ rhs.begin(), rhs.end()); + } + + +@@ -501,11 +518,35 @@ + template <class Char, template <class> class SP> inline + std::strong_ordering operator<=>(const Char* lhs, const Zbase<Char, SP>& rhs) + { +- return std::lexicographical_compare_three_way(lhs, lhs + strLength(lhs), +- rhs.begin(), rhs.end()); //respect embedded 0 ++ return std::lexicographical_compare_three_way(lhs, lhs + strLength(lhs), //respect embedded 0 ++ rhs.begin(), rhs.end()); ++} ++ ++#else ++template <class Char, template <class> class SP> inline ++bool operator<(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) ++{ ++ return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0 ++ rhs.begin(), rhs.end()); + } + + ++template <class Char, template <class> class SP> inline ++bool operator<(const Zbase<Char, SP>& lhs, const Char* rhs) ++{ ++ return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0 ++ rhs, rhs + strLength(rhs)); ++} ++ ++ ++template <class Char, template <class> class SP> inline ++bool operator<(const Char* lhs, const Zbase<Char, SP>& rhs) ++{ ++ return std::lexicographical_compare(lhs, lhs + strLength(lhs), //respect embedded 0 ++ rhs.begin(), rhs.end()); ++} ++#endif ++ + + template <class Char, template <class> class SP> inline + size_t Zbase<Char, SP>::length() const +diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/wx+/choice_enum.h +--- 10.24-0/wx+/choice_enum.h 2020-05-17 18:30:59.441499418 -0400 ++++ 10.24-1/wx+/choice_enum.h 2020-05-17 18:53:59.893685507 -0400 +@@ -7,7 +7,6 @@ + #ifndef CHOICE_ENUM_H_132413545345687 + #define CHOICE_ENUM_H_132413545345687 + +-#include <unordered_map> + #include <vector> + #include <wx/choice.h> + +@@ -44,11 +43,8 @@ + descrList.push_back({ value, { text, tooltip } }); + return *this; + } +- + using DescrList = std::vector<std::pair<Enum, std::pair<wxString, wxString>>>; + DescrList descrList; +- +- std::unordered_map<const wxChoice*, std::vector<wxString>> itemsSetLast; + }; + template <class Enum> void setEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value); + template <class Enum> Enum getEnumVal(const EnumDescrList<Enum>& mapping, const wxChoice& ctrl); +@@ -69,34 +65,26 @@ + + //--------------- impelementation ------------------------------------------- + template <class Enum> +-void setEnumVal(EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value) ++void setEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl, Enum value) + { +- auto& itemsSetLast = mapping.itemsSetLast[&ctrl]; ++ ctrl.Clear(); + +- std::vector<wxString> items; ++ int selectedPos = 0; + for (auto it = mapping.descrList.begin(); it != mapping.descrList.end(); ++it) +- items.push_back(it->second.first); +- +- if (items != itemsSetLast) + { +- ctrl.Set(items); //expensive as fuck! => only call when absolutely needed! +- itemsSetLast = std::move(items); ++ ctrl.Append(it->second.first); ++ if (it->first == value) ++ { ++ selectedPos = it - mapping.descrList.begin(); ++ ++ if (it->second.second.empty()) ++ ctrl.UnsetToolTip(); ++ else ++ ctrl.SetToolTip(it->second.second); ++ } + } +- //----------------------------------------------------------------- +- +- const auto it = std::find_if(mapping.descrList.begin(), mapping.descrList.end(), [&](const auto& mapItem) { return mapItem.first == value; }); +- if (it != mapping.descrList.end()) +- { +- if (const wxString& tooltip = it->second.second; +- !tooltip.empty()) +- ctrl.SetToolTip(tooltip); +- else +- ctrl.UnsetToolTip(); + +- const int selectedPos = it - mapping.descrList.begin(); +- ctrl.SetSelection(selectedPos); +- } +- else assert(false); ++ ctrl.SetSelection(selectedPos); + } + + template <class Enum> +@@ -115,17 +103,11 @@ + + template <class Enum> void updateTooltipEnumVal(const EnumDescrList<Enum>& mapping, wxChoice& ctrl) + { +- const int selectedPos = ctrl.GetSelection(); ++ const Enum currentValue = getEnumVal(mapping, ctrl); + +- if (0 <= selectedPos && selectedPos < static_cast<int>(mapping.descrList.size())) +- { +- if (const auto& [text, tooltip] = mapping.descrList[selectedPos].second; +- !tooltip.empty()) +- ctrl.SetToolTip(tooltip); +- else +- ctrl.UnsetToolTip(); +- } +- else assert(false); ++ for (const auto& [enumValue, textAndTooltip] : mapping.descrList) ++ if (currentValue == enumValue) ++ ctrl.SetToolTip(textAndTooltip.second); + } + } + |