diff options
author | Paul Eggleton <bluelightning@bluelightning.org> | 2010-03-17 23:33:27 +0000 |
---|---|---|
committer | Paul Eggleton <bluelightning@bluelightning.org> | 2010-03-17 23:33:27 +0000 |
commit | bad37557beda5e968cdaaa605e5dc5a7e82c51a3 (patch) | |
tree | 6a8006c4341ef58c8a992bf58d03458c24c6097f /recipes/opie-packagemanager | |
parent | c914d3308df4025d39d4fde4de198b8c392d6a41 (diff) |
opie-packagemanager: fix for recent opkg SRCREV bump
Diffstat (limited to 'recipes/opie-packagemanager')
-rw-r--r-- | recipes/opie-packagemanager/files/opkg_update.patch | 469 | ||||
-rw-r--r-- | recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb | 5 |
2 files changed, 472 insertions, 2 deletions
diff --git a/recipes/opie-packagemanager/files/opkg_update.patch b/recipes/opie-packagemanager/files/opkg_update.patch new file mode 100644 index 0000000000..8da0a847c9 --- /dev/null +++ b/recipes/opie-packagemanager/files/opkg_update.patch @@ -0,0 +1,469 @@ +--- packagemanager/oipkg.cpp 2010-03-17 21:43:48.000000000 +0000 ++++ packagemanager/oipkg.cpp 2010-03-17 22:48:03.000000000 +0000 +@@ -39,26 +39,45 @@ + #include <stdlib.h> + #include <unistd.h> + ++#ifdef USE_LIBOPKG ++ + const QString IPKG_CONF = "/etc/opkg.conf"; // Fully-qualified name of Ipkg primary configuration file + const QString IPKG_CONF_DIR = "/etc/opkg"; // Directory of secondary Ipkg configuration files + const QString IPKG_PKG_PATH = "/usr/lib/opkg/lists"; // Directory containing server package lists + const QString IPKG_STATUS_PATH = "usr/lib/opkg/status"; // Destination status file location + const QString IPKG_INFO_PATH = "usr/lib/opkg/info"; // Package file lists location ++#define OPKG_NO_ERROR 0 ++ ++#else ++ ++extern "C" { ++#include <libipkg.h> ++}; ++args_t m_ipkgArgs; // libipkg configuration arguments ++ ++const QString IPKG_CONF = "/etc/ipkg.conf"; // Fully-qualified name of Ipkg primary configuration file ++const QString IPKG_CONF_DIR = "/etc/ipkg"; // Directory of secondary Ipkg configuration files ++const QString IPKG_PKG_PATH = "/usr/lib/ipkg/lists"; // Directory containing server package lists ++const QString IPKG_STATUS_PATH = "usr/lib/ipkg/status"; // Destination status file location ++const QString IPKG_INFO_PATH = "usr/lib/ipkg/info"; // Package file lists location ++ ++#endif + + OIpkg *oipkg; + + // Ipkg callback functions + + +-void fsignalOpkgProgress (opkg_t *opkg, const opkg_progress_data_t *progress, void *user_data) ++#ifdef USE_LIBOPKG ++void fsignalOpkgProgress (const opkg_progress_data_t *progress, void *user_data) + { + QString msg; + + QString pkginfo; +- if( progress->package ) { +- pkginfo = progress->package->name; ++ if( progress->pkg ) { ++ pkginfo = progress->pkg->name; + pkginfo += " "; +- pkginfo += progress->package->version; ++ pkginfo += progress->pkg->version; + } + switch( progress->action ) { + case OPKG_INSTALL: +@@ -86,13 +105,21 @@ + oipkg->progress( (const char *)msg, progress->percentage ); + } + +-void fsignalOpkgPackage (opkg_t *opkg, opkg_package_t *package, void *user_data) ++void fsignalOpkgPackage (pkg_t *package, void *user_data) + { + + } + ++void fsignalOpkgMessage (int, const char *fmt, va_list ap) ++{ ++ QString msg; ++ msg.sprintf(fmt, ap); ++ oipkg->ipkgMessage( msg ); ++} ++#endif + +-/*X ++ ++#ifndef USE_LIBOPKG + int fsignalIpkgMessage( ipkg_conf_t *conf, message_level_t level, char *msg ) + { + // Display message only if it is below the message level threshold +@@ -103,7 +130,8 @@ + + return 0; + } +-*/ ++#endif ++ + + char *fIpkgResponse( char */*question*/ ) + { +@@ -116,40 +144,14 @@ + return 0; + } + +-QString opkg_error_message( int err ) ++#ifndef USE_LIBOPKG ++int fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/, ++ void */*userdata*/ ) + { +- switch(err) { +- case OPKG_NO_ERROR: +- return "Success"; +- case OPKG_UNKNOWN_ERROR: +- return "Unknown error"; +- case OPKG_DOWNLOAD_FAILED: +- return "Download failed"; +- case OPKG_DEPENDENCIES_FAILED: +- return "Unable to complete operation due to dependencies"; +- case OPKG_PACKAGE_ALREADY_INSTALLED: +- return "Specified package is already installed"; +- case OPKG_PACKAGE_NOT_AVAILABLE: +- return "Specified package is not available"; +- case OPKG_PACKAGE_NOT_FOUND: +- return "Specified package could not be found"; +- case OPKG_PACKAGE_NOT_INSTALLED: +- return "Specified package is not installed"; +- case OPKG_GPG_ERROR: +- return "GPG verification failed"; +- case OPKG_MD5_ERROR: +- return "MD5 verification failed"; +- default: +- return "Unrecognised error code"; +- } ++ oipkg->ipkgList( desc ); ++ return 0; + } +- +-//Xint fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/, +-//X void */*userdata*/ ) +-//X{ +-//X oipkg->ipkgList( desc ); +-//X return 0; +-//X} ++#endif + + OIpkg::OIpkg( Config *config, QObject *parent, const char *name ) + : QObject( parent, name ) +@@ -162,7 +164,17 @@ + oipkg = this; + + // Initialize libipkg +- m_opkg = opkg_new(); ++#ifdef USE_LIBOPKG ++ opkg_new(); ++ opkg_conf_init(); ++ conf->opkg_vmessage = fsignalOpkgMessage; ++#else ++ ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs ); ++ ++ // Default ipkg run-time arguments ++ m_ipkgArgs.noaction = false; ++ m_ipkgArgs.force_defaults = true; ++#endif + } + + OIpkg::~OIpkg() +@@ -172,7 +184,12 @@ + m_confInfo->setAutoDelete( true ); + + // Free up libipkg resources +- opkg_free( m_opkg ); ++#ifdef USE_LIBOPKG ++ opkg_conf_deinit(); ++ opkg_free(); ++#else ++ ipkg_deinit( &m_ipkgArgs ); ++#endif + } + + OConfItemList *OIpkg::configItems() +@@ -206,13 +223,13 @@ + switch ( item->type() ) + { + case OConfItem::Source : +- case OConfItem::Destination : ++ case OConfItem::Destination : + item->setFile( IPKG_CONF_DIR + "/" + item->name() + ".conf" ); + break; +- case OConfItem::Arch : ++ case OConfItem::Arch : + item->setFile( IPKG_CONF_DIR + "/arch.conf" ); + break; +- default : ++ default : + item->setFile( IPKG_CONF ); + break; + }; +@@ -253,7 +270,7 @@ + break; + } + lastFile = item->file(); +- ++ + confStream = new QTextStream( confFile ); + // (*confStream) << "# Generated by Opie Package Manager\n\n"; + } +@@ -301,7 +318,14 @@ + } + + // Reinitialize libipkg to pick up new configuration +- opkg_re_read_config_files( m_opkg ); ++#ifdef USE_LIBOPKG ++ opkg_re_read_config_files(); ++#else ++ ipkg_deinit( &m_ipkgArgs ); ++ ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs ); ++ m_ipkgArgs.noaction = false; ++ m_ipkgArgs.force_defaults = true; ++#endif + } + + void OIpkg::saveSettings() +@@ -497,23 +521,30 @@ + return false; + + // Set ipkg run-time options/arguments ++#ifdef USE_LIBOPKG + optvalue = ( m_ipkgExecOptions & FORCE_DEPENDS ) ? 1 : 0; +- opkg_set_option( m_opkg, "force_depends", &optvalue ); ++ opkg_set_option( "force_depends", &optvalue ); + + optvalue = ( m_ipkgExecOptions & FORCE_REINSTALL ) ? 1 : 0; +- opkg_set_option( m_opkg, "force_reinstall", &optvalue ); ++ opkg_set_option( "force_reinstall", &optvalue ); + + optvalue = ( m_ipkgExecOptions & FORCE_OVERWRITE ) ? 1 : 0; +- opkg_set_option( m_opkg, "force_overwrite", &optvalue ); ++ opkg_set_option( "force_overwrite", &optvalue ); + + optvalue = ( m_ipkgExecOptions & FORCE_RECURSIVE ) ? 1 : 0; +- opkg_set_option( m_opkg, "force_removal_of_dependent_packages", &optvalue ); ++ opkg_set_option( "force_removal_of_dependent_packages", &optvalue ); + ++ + optvalue = m_ipkgExecVerbosity; +- opkg_set_option( m_opkg, "verbosity", &optvalue ); +- +-/*X // TODO m_ipkgArgs.force_remove = ( m_ipkgExecOptions & FORCE_REMOVE ); ++ opkg_set_option( "verbosity", &optvalue ); ++#else ++ m_ipkgArgs.force_depends = ( m_ipkgExecOptions & FORCE_DEPENDS ); ++ m_ipkgArgs.force_reinstall = ( m_ipkgExecOptions & FORCE_REINSTALL ); ++ // TODO m_ipkgArgs.force_remove = ( m_ipkgExecOptions & FORCE_REMOVE ); ++ m_ipkgArgs.force_overwrite = ( m_ipkgExecOptions & FORCE_OVERWRITE ); ++ m_ipkgArgs.force_removal_of_dependent_packages = ( m_ipkgExecOptions & FORCE_RECURSIVE ); + m_ipkgArgs.verbose_wget = ( m_ipkgExecOptions & FORCE_VERBOSE_WGET ); ++ m_ipkgArgs.verbosity = m_ipkgExecVerbosity; + if ( m_ipkgArgs.dest ) + free( m_ipkgArgs.dest ); + if ( !destination.isNull() ) +@@ -525,7 +556,8 @@ + } + else + m_ipkgArgs.dest = 0l; +-*/ ++#endif ++ + // Connect output signal to widget + + if ( !rawOutput ) +@@ -539,23 +571,33 @@ + { + case OPackage::Update : { + connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); +- ret = opkg_update_package_lists( m_opkg, &fsignalOpkgProgress, NULL ); ++#ifdef USE_LIBOPKG ++ ret = opkg_update_package_lists( &fsignalOpkgProgress, NULL ); ++#else ++ ipkg_lists_update( &m_ipkgArgs ); ++#endif + disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 ); + ++#ifdef USE_LIBOPKG + if( ret != OPKG_NO_ERROR ) { +- emit signalIpkgMessage( tr("Update failed: ") + opkg_error_message( ret ) ); ++ emit signalIpkgMessage( tr("Update failed") ); + return false; + } ++#endif + }; + break; + case OPackage::Upgrade : { + connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); +- ret = opkg_upgrade_all( m_opkg, &fsignalOpkgProgress, NULL ); ++#ifdef USE_LIBOPKG ++ ret = opkg_upgrade_all( &fsignalOpkgProgress, NULL ); + if( ret != OPKG_NO_ERROR ) { +- emit signalIpkgMessage( tr("Upgrade failed: ") + opkg_error_message( ret ) ); ++ emit signalIpkgMessage( tr("Upgrade failed") ); + disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 ); + return false; + } ++#else ++ ipkg_packages_upgrade( &m_ipkgArgs ); ++#endif + + // Re-link non-root destinations to make sure everything is in sync + OConfItemList *destList = destinations(); +@@ -574,12 +616,16 @@ + connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); + for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it ) + { +- ret = opkg_install_package( m_opkg, (*it), &fsignalOpkgProgress, NULL ); ++#ifdef USE_LIBOPKG ++ ret = opkg_install_package( (*it), &fsignalOpkgProgress, NULL ); + if( ret != OPKG_NO_ERROR ) { +- emit signalIpkgMessage( tr("Install failed: ") + opkg_error_message( ret ) ); ++ emit signalIpkgMessage( tr("Install failed") ); + disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 ); + return false; + } ++#else ++ ipkg_packages_install( &m_ipkgArgs, (*it) ); ++#endif + } + if ( destination != "root" ) + linkPackageDir( destination ); +@@ -595,18 +641,17 @@ + for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it ) + { + unlinkPackage( (*it), destList ); +- ret = opkg_remove_package( m_opkg, (*it), &fsignalOpkgProgress, NULL ); ++#ifdef USE_LIBOPKG ++ ret = opkg_remove_package( (*it), &fsignalOpkgProgress, NULL ); + if( ret != OPKG_NO_ERROR ) { +- if ( ret == OPKG_DEPENDENCIES_FAILED || ret == OPKG_UNKNOWN_ERROR ) { +- emit signalIpkgMessage( tr("Remove failed: other package(s) depend on the specified package") ); +- } +- else { +- emit signalIpkgMessage( tr("Remove failed: ") + opkg_error_message( ret ) ); +- } ++ emit signalIpkgMessage( tr("Remove failed") ); + delete destList; + disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 ); + return false; + } ++#else ++ ipkg_packages_remove( &m_ipkgArgs, (*it), true ); ++#endif + } + + delete destList; +@@ -614,42 +659,74 @@ + }; + break; + case OPackage::Download : { ++#ifndef USE_LIBOPKG + connect( this, SIGNAL(signalIpkgMessage(const QString &)), receiver, slotOutput ); + for ( QStringList::ConstIterator it = parameters.begin(); it != parameters.end(); ++it ) + { +-//X ipkg_packages_download( &m_ipkgArgs, (*it) ); ++ ipkg_packages_download( &m_ipkgArgs, (*it) ); + } + disconnect( this, SIGNAL(signalIpkgMessage(const QString &)), 0, 0 ); ++#endif + }; + break; + case OPackage::Info : { + connect( this, SIGNAL(signalIpkgStatus(const QString &)), receiver, slotOutput ); +-//X ipkg_packages_info( &m_ipkgArgs, (*parameters.begin()), &fIpkgStatus, 0l ); +- opkg_package_t *pkginfo = opkg_find_package( m_opkg, (*parameters.begin()), NULL, NULL, NULL ); ++#ifdef USE_LIBOPKG ++ pkg_t *pkginfo = opkg_find_package( (*parameters.begin()), NULL, NULL, NULL ); + if(pkginfo) { + QString msg = tr("Package: %1\n").arg( pkginfo->name ); + msg += tr("Version: %1\n").arg( pkginfo->version ); + msg += tr("Architecture: %1\n").arg( pkginfo->architecture ); +- if( pkginfo->repository ) +- msg += tr("Repository: %1\n").arg( pkginfo->repository ); ++ if( pkginfo->source ) ++ msg += tr("Source: %1\n").arg( pkginfo->source ); + if( pkginfo->description ) + msg += tr("Description: %1\n\n").arg( pkginfo->description ); + if( pkginfo->tags ) + msg += tr("Tags: %1\n").arg( pkginfo->tags ); +- if( pkginfo->url ) +- msg += tr("URL: %1\n").arg( pkginfo->url ); + if( pkginfo->size > 0 ) + msg += tr("Size: %1\n").arg( pkginfo->size ); +- msg += tr("Status: %1").arg( pkginfo->installed ? tr("installed") : "" ); ++ QString status; ++ switch( pkginfo->state_status ) { ++ case SS_NOT_INSTALLED: ++ status = tr( "Not installed" ); ++ break; ++ case SS_UNPACKED: ++ status = tr( "Unpacked" ); ++ break; ++ case SS_HALF_CONFIGURED: ++ status = tr( "Partially configured" ); ++ break; ++ case SS_INSTALLED: ++ status = tr( "Installed" ); ++ break; ++ case SS_HALF_INSTALLED: ++ status = tr( "Partially installed" ); ++ break; ++// case SS_CONFIG_FILES: ++ case SS_POST_INST_FAILED: ++ status = tr( "Postinst failed" ); ++ break; ++ case SS_REMOVAL_FAILED: ++ status = tr( "Removal failed" ); ++ break; ++ default: ++ status = tr( "Unknown" ); ++ } ++ msg += tr("Status: %1").arg( status ); + emit signalIpkgStatus( msg ); + } ++#else ++ ipkg_packages_info( &m_ipkgArgs, (*parameters.begin()), &fIpkgStatus, 0l ); ++#endif + disconnect( this, SIGNAL(signalIpkgStatus(const QString &)), 0, 0 ); + }; + break; + case OPackage::Files : { ++#ifndef USE_LIBOPKG + connect( this, SIGNAL(signalIpkgList(const QString &)), receiver, slotOutput ); +-//X ipkg_package_files( &m_ipkgArgs, (*parameters.begin()), &fIpkgFiles, 0l ); ++ ipkg_package_files( &m_ipkgArgs, (*parameters.begin()), &fIpkgFiles, 0l ); + disconnect( this, SIGNAL(signalIpkgList(const QString &)), 0, 0 ); ++#endif + }; + break; + default : break; +--- packagemanager/oipkg.h 2010-03-17 21:43:48.000000000 +0000 ++++ packagemanager/oipkg.h 2010-03-17 22:50:24.000000000 +0000 +@@ -31,6 +31,8 @@ + #ifndef OIPKG_H + #define OIPKG_H + ++#include <cstdio> ++ + #include "oconfitem.h" + #include "opackage.h" + +@@ -38,10 +40,27 @@ + + #include <qobject.h> + ++// Hack for 1.2.4 patch ++#define USE_LIBOPKG ++ ++#ifdef USE_LIBOPKG ++// Some hacks are required due to poor naming in opkg headers ++#ifdef DEBUG ++ #define DEBUG_FIX ++ #undef DEBUG ++#endif ++ + extern "C" { + #include <opkg.h> + }; + ++#ifdef DEBUG_FIX ++ #define DEBUG ++ #undef DEBUG_FIX ++#endif ++ ++#endif ++ + // Ipkg execution options (m_ipkgExecOptions) + #define FORCE_DEPENDS 0x0001 + #define FORCE_REMOVE 0x0002 +@@ -102,7 +121,6 @@ + int m_ipkgExecOptions; // Bit-mapped flags for Ipkg execution options + int m_ipkgExecVerbosity; // Ipkg execution verbosity level + QString m_rootPath; // Directory path where the 'root' destination is located +- opkg_t *m_opkg; + + void loadConfiguration(); + OConfItemList *filterConfItems( OConfItem::Type typefilter = OConfItem::NotDefined ); diff --git a/recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb b/recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb index 57c6ab5cfa..28fc5b873b 100644 --- a/recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb +++ b/recipes/opie-packagemanager/opie-packagemanager_1.2.4.bb @@ -1,6 +1,6 @@ require ${PN}.inc -PR = "r1" +PR = "r2" DEPENDS = "opkg" @@ -10,4 +10,5 @@ SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/${APPNAME};c ${HANDHELDS_CVS};tag=${TAG};module=opie/pics;cvsdate=${SRCDATE} \ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \ file://split-config.patch;patch=1 \ - file://opkg.patch;patch=1" + file://opkg.patch;patch=1 \ + file://opkg_update.patch;patch=1" |