On Sun, 2007-03-18 at 11:28 +0000, Sam Morris wrote: <snip> > Has anyone managed to backport aptitude to sarge? I just tried it now but > cannot get it to compile. g++ dies on line 72 of > src/generic/apt/matchers.cc, right after some weird GCC-specific attribute > is used... perhaps GCC 3.3 does not understand it? g++ 3.3 does support it but does not seem to be able to parse __attribute__ labels on function definitions; only on non-defining declarations. Since the attribute is only there to produce warnings for callers that don't use a matching format string and argument types, it can safely be removed. There was another case like this, and a few cases where g++ 3.3 instantiates functions early and requires full class definitions that haven't been included. The following changes allowed me to compile aptitude-0.4.4 in sarge plus backported apt: --- aptitude-0.4.4.orig/src/load_grouppolicy.cc +++ aptitude-0.4.4/src/load_grouppolicy.cc @@ -51,7 +51,7 @@ public: GroupParseException(const char *format, ...) -#ifdef __GNUG__ +#if (__GNUC__ + 0) * 100 + (__GNUC_MINOR__ + 0) >= 304 __attribute__ ((format (printf, 2, 3))) #endif { --- aptitude-0.4.4.orig/src/pkg_view.h +++ aptitude-0.4.4/src/pkg_view.h @@ -30,6 +30,7 @@ #include "vscreen/ref_ptr.h" #include "vscreen/config/column_definition.h" #include "vscreen/config/style.h" +#include "vscreen/vscreen_widget.h" #include "pkg_grouppolicy.h" #include <list> @@ -38,7 +39,6 @@ class menu_redirect; class package_view_item; class pkg_grouppolicy_factory; -class vscreen_widget; typedef ref_ptr<vscreen_widget> vs_widget_ref; // The available types of items are: --- aptitude-0.4.4.orig/src/generic/apt/matchers.cc +++ aptitude-0.4.4/src/generic/apt/matchers.cc @@ -66,7 +66,7 @@ public: CompilationException(const char *format, ...) -#ifdef __GNUG__ +#if (__GNUC__ + 0) * 100 + (__GNUC_MINOR__ + 0) >= 304 __attribute__ ((format (printf, 2, 3))) #endif { --- aptitude-0.4.4.orig/src/vscreen/vs_radiogroup.h +++ aptitude-0.4.4/src/vscreen/vs_radiogroup.h @@ -24,14 +24,13 @@ #define VS_RADIOGROUP_H #include "ref_ptr.h" +#include "vs_togglebutton.h" #include <vector> #include <sigc++/connection.h> #include <sigc++/trackable.h> -class vs_togglebutton; - class vs_radiogroup:public sigc::trackable { struct item --- aptitude-0.4.4.orig/src/vscreen/vs_menubar.h +++ aptitude-0.4.4/src/vscreen/vs_menubar.h @@ -25,13 +25,12 @@ #include "vscreen_widget.h" #include "vs_container.h" +#include "vs_menu.h" #include "config/keybindings.h" #include <string> #include <vector> -class vs_menu; - typedef ref_ptr<vs_menu> vs_menu_ref; class vs_menubar:public vs_container -- END -- These changes should be compatible with later versions of g++, though I haven't tested that. I'll leave it to someone else to test and upload. Oh, there's also some kind of documentation format error that I can't interpret: po4a-translate -M utf-8 -f docbook -m ./../en/aptitude.xml -p ./../po4a/po/fr.po -l aptitude.xml Use of uninitialized value in regexp compilation at /usr/share/perl5/Locale/Po4a/Xml.pm line 402. ./../en/aptitude.xml:7976: (po4a::xml) Bad attribute syntax Ben. -- Ben Hutchings Teamwork is essential - it allows you to blame someone else.
Attachment:
signature.asc
Description: This is a digitally signed message part