From d6af6a4d75bd520510aaf2ef97b89024b427cac3 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Thu, 25 Jul 2019 19:22:31 -0700 Subject: [PATCH] gddrescue: Add uClibc-ng support It turns out, this breaks only when compiling with both uClibc-ng and uClibc++. If the libc or libc++ gets swapped out, it compiles fine. libstdcpp is fine because it already undefs these macros. The actual bug is probably in uClibc-ng but this is a fine workaround. Signed-off-by: Rosen Penev --- utils/gddrescue/Makefile | 4 +- .../gddrescue/patches/010-fix-uclibcxx.patch | 102 ++++++++++++++++++ 2 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 utils/gddrescue/patches/010-fix-uclibcxx.patch diff --git a/utils/gddrescue/Makefile b/utils/gddrescue/Makefile index 527fca23b..192c26500 100644 --- a/utils/gddrescue/Makefile +++ b/utils/gddrescue/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=gddrescue PKG_VERSION:=1.23 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.xz PKG_SOURCE_URL:=http://http.debian.net/debian/pool/main/g/$(PKG_NAME) @@ -27,7 +27,7 @@ define Package/gddrescue CATEGORY:=Utilities TITLE:=Data recovery tool URL:=https://www.gnu.org/software/ddrescue/ - DEPENDS:=$(CXX_DEPENDS) @!USE_UCLIBC + DEPENDS:=$(CXX_DEPENDS) endef define Package/gddrescue/description diff --git a/utils/gddrescue/patches/010-fix-uclibcxx.patch b/utils/gddrescue/patches/010-fix-uclibcxx.patch new file mode 100644 index 000000000..66e8e7671 --- /dev/null +++ b/utils/gddrescue/patches/010-fix-uclibcxx.patch @@ -0,0 +1,102 @@ +--- a/fillbook.cc ++++ b/fillbook.cc +@@ -31,6 +31,9 @@ + #include "block.h" + #include "mapbook.h" + ++#ifdef __UCLIBCXX_MAJOR__ ++#undef fputc ++#endif + + // Return values: 1 write error, 0 OK. + // +--- a/genbook.cc ++++ b/genbook.cc +@@ -31,6 +31,9 @@ + #include "block.h" + #include "mapbook.h" + ++#ifdef __UCLIBCXX_MAJOR__ ++#undef fputc ++#endif + + const char * format_time( const long t, const bool low_prec ) + { +--- a/loggers.cc ++++ b/loggers.cc +@@ -25,6 +25,9 @@ + #include "block.h" + #include "loggers.h" + ++#ifdef __UCLIBCXX_MAJOR__ ++#undef fputc ++#endif + + namespace { + +--- a/main.cc ++++ b/main.cc +@@ -46,6 +46,11 @@ + #include "non_posix.h" + #include "rescuebook.h" + ++#ifdef __UCLIBCXX_MAJOR__ ++#undef fgetc ++#undef fputc ++#endif ++ + #ifndef O_BINARY + #define O_BINARY 0 + #endif +--- a/main_common.cc ++++ b/main_common.cc +@@ -15,6 +15,10 @@ + along with this program. If not, see . + */ + ++#ifdef __UCLIBCXX_MAJOR__ ++#undef fputc ++#endif ++ + int verbosity = 0; + + namespace { +--- a/mapbook.cc ++++ b/mapbook.cc +@@ -32,6 +32,10 @@ + #include "block.h" + #include "mapbook.h" + ++#ifdef __UCLIBCXX_MAJOR__ ++#undef fgetc ++#undef fputc ++#endif + + namespace { + +--- a/mapfile.cc ++++ b/mapfile.cc +@@ -29,6 +29,11 @@ + + #include "block.h" + ++#ifdef __UCLIBCXX_MAJOR__ ++#undef fgetc ++#undef ferror ++#undef feof ++#endif + + namespace { + +--- a/rescuebook.cc ++++ b/rescuebook.cc +@@ -36,6 +36,9 @@ + #include "mapbook.h" + #include "rescuebook.h" + ++#ifdef __UCLIBCXX_MAJOR__ ++#undef fputc ++#endif + + namespace { +