Package: gddrescue
Version: 1.2-1.1
Tags: patch

Gddrescue has a number of problems, I fixed those in the appended patch:
  - It FTBFS at least on g++-4.3/mips because llabs, snprintf, and
    strtoll are not in the std:: namespace, they are gnu extensions
    in std::__gnu_gxx::, or global names in ::. (This appears to be a
    bug fix in latest GCC). I chose to simply use the global version.
  - The build system does not use GNU configure but a much less capable
    script which doesn't handle e.g. compiler flags. This means none
    of the flags in debian/rules was used (and the noopt was ineffective).
  - debian/rules defines CFLAGS, but no CXXFLAGS. Since only c++ is
    used, I changed the flag variable name so it gets used by the build.
    I also pass CXXFLAGS explicitely to the make invocation, that way it
    overrides the hardcoded options in the upstream Makefile{,.in}.


Thiemo


diff -uprN gddrescue-1.2.original/ddrescue.cc gddrescue-1.2/ddrescue.cc
--- gddrescue-1.2.original/ddrescue.cc  2006-03-16 18:14:05.000000000 +0000
+++ gddrescue-1.2/ddrescue.cc   2008-04-05 13:14:57.000000000 +0100
@@ -176,9 +176,9 @@ const char * format_num( long long num, 
   const char *p = "";
   max = std::max( 999LL, std::min( 999999LL, max ) );
 
-  for( int i = 0; i < 8 && std::llabs( num ) > std::llabs( max ); ++i )
+  for( int i = 0; i < 8 && ::llabs( num ) > ::llabs( max ); ++i )
     { num /= factor; p = prefix[i]; }
-  std::snprintf( buf, sizeof( buf ), "%lld %s", num, p );
+  ::snprintf( buf, sizeof( buf ), "%lld %s", num, p );
   return buf;
   }
 
diff -uprN gddrescue-1.2.original/debian/rules gddrescue-1.2/debian/rules
--- gddrescue-1.2.original/debian/rules 2005-10-29 11:27:35.000000000 +0100
+++ gddrescue-1.2/debian/rules  2008-04-05 14:08:44.000000000 +0100
@@ -16,18 +16,18 @@ DEB_HOST_GNU_TYPE   ?= $(shell dpkg-arch
 DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
 
 
-CFLAGS = -Wall -g
+CXXFLAGS = -Wall -g -Wl,-z,defs
 
 ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-       CFLAGS += -O0
+       CXXFLAGS += -O0
 else
-       CFLAGS += -O2
+       CXXFLAGS += -O2
 endif
 
 config.status: configure
        dh_testdir
        # Add here commands to configure the package.
-       CFLAGS="$(CFLAGS) -Wl,-z,defs" ./configure \
+       ./configure \
        --prefix=/usr \
        --mandir=\$${prefix}/share/man \
        --infodir=\$${prefix}/share/info
@@ -39,7 +39,7 @@ build-stamp:  config.status
        dh_testdir
 
        # Add here commands to compile the package.
-       $(MAKE)
+       $(MAKE) CXXFLAGS="$(CXXFLAGS)"
        #docbook-to-man debian/gddrescue.sgml > gddrescue.1
 
        touch build-stamp
diff -uprN gddrescue-1.2.original/logbook.cc gddrescue-1.2/logbook.cc
--- gddrescue-1.2.original/logbook.cc   2008-04-05 14:22:22.000000000 +0100
+++ gddrescue-1.2/logbook.cc    2008-04-05 13:17:07.000000000 +0100
@@ -168,8 +168,8 @@ void split_domain_border_sblocks( std::v
 void logfile_error( const char * filename, const int linenum ) throw()
   {
   char buf[80];
-  std::snprintf( buf, sizeof( buf ), "error in logfile %s, line %d\n",
-                 filename, linenum );
+  ::snprintf( buf, sizeof( buf ), "error in logfile %s, line %d\n",
+              filename, linenum );
   show_error( buf );
   }
 
@@ -194,7 +194,7 @@ bool update_logfile( const std::vector< 
   if( !f )
     {
     char buf[80];
-    std::snprintf( buf, sizeof( buf ), "error opening logfile %s for writing", 
filename );
+    ::snprintf( buf, sizeof( buf ), "error opening logfile %s for writing", 
filename );
     show_error( buf, errno );
     return false;
     }
@@ -212,7 +212,7 @@ bool update_logfile( const std::vector< 
   if( std::fclose( f ) )
     {
     char buf[80];
-    std::snprintf( buf, sizeof( buf ), "error writing logfile %s", filename );
+    ::snprintf( buf, sizeof( buf ), "error writing logfile %s", filename );
     show_error( buf, errno );
     return false;
     }
@@ -233,10 +233,10 @@ void Logbook::set_rescue_domain( const l
     if( _domain.pos() >= isize )
       {
       char buf[80];
-      std::snprintf( buf, sizeof( buf ), "can't start reading at pos %lld",
-                     _domain.pos() ); show_error( buf );
-      std::snprintf( buf, sizeof( buf ), "input file is only %lld bytes long",
-                     isize ); show_error( buf );
+      ::snprintf( buf, sizeof( buf ), "can't start reading at pos %lld",
+                  _domain.pos() ); show_error( buf );
+      ::snprintf( buf, sizeof( buf ), "input file is only %lld bytes long",
+                  isize ); show_error( buf );
       std::exit(1);
       }
     if( _domain.size() < 0  || _domain.pos() + _domain.size() > isize )
@@ -392,7 +392,7 @@ int Logbook::copy_errors() throw()
     const int msglen = std::strlen( msgbuf );
     for( int retry = 1; _max_retries < 0 || retry <= _max_retries; ++retry )
       {
-      std::snprintf( msgbuf + msglen, sizeof( msgbuf ) - msglen, "%d", retry );
+      ::snprintf( msgbuf + msglen, sizeof( msgbuf ) - msglen, "%d", retry );
       unsigned int index = 0;
       bool first_post = true, bad_block_found = false;
       split_domain_border_sblocks( sblock_vector, _domain );
diff -uprN gddrescue-1.2.original/main.cc gddrescue-1.2/main.cc
--- gddrescue-1.2.original/main.cc      2008-04-05 14:22:22.000000000 +0100
+++ gddrescue-1.2/main.cc       2008-04-05 14:19:57.000000000 +0100
@@ -95,7 +95,7 @@ long long getnum( const char * ptr, cons
   {
   errno = 0;
   char *tail;
-  long long result = std::strtoll( ptr, &tail, 0 );
+  long long result = ::strtoll( ptr, &tail, 0 );
   if( tail == ptr )
     { show_error( "bad or missing numerical argument", 0, true ); 
std::exit(1); }
 
@@ -128,7 +128,7 @@ long long getnum( const char * ptr, cons
       std::exit(1); }
     for( int i = 0; i < exponent; ++i )
       {
-      if( LONG_LONG_MAX / factor >= std::llabs( result ) ) result *= factor;
+      if( LONG_LONG_MAX / factor >= ::llabs( result ) ) result *= factor;
       else { errno = ERANGE; break; }
       }
     }
@@ -153,7 +153,7 @@ bool check_identical( const char * name1
 void internal_error( const char * msg ) throw()
   {
   char buf[80];
-  std::snprintf( buf, sizeof( buf ), "internal error: %s.\n", msg );
+  ::snprintf( buf, sizeof( buf ), "internal error: %s.\n", msg );
   show_error( buf );
   exit( 3 );
   }



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to