summaryrefslogtreecommitdiff
path: root/noncore/settings/packagemanager
Unidiff
Diffstat (limited to 'noncore/settings/packagemanager') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/packagemanager/oconfitem.h7
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp7
-rw-r--r--noncore/settings/packagemanager/opie-packagemanager.control4
3 files changed, 13 insertions, 5 deletions
diff --git a/noncore/settings/packagemanager/oconfitem.h b/noncore/settings/packagemanager/oconfitem.h
index 9972c00..7b52ce4 100644
--- a/noncore/settings/packagemanager/oconfitem.h
+++ b/noncore/settings/packagemanager/oconfitem.h
@@ -1,89 +1,94 @@
1/* 1/*
2 This file is part of the Opie Project 2 This file is part of the Opie Project
3 3
4 Copyright (c) 2003 Dan Williams <drw@handhelds.org> 4 Copyright (c) 2003 Dan Williams <drw@handhelds.org>
5 =. 5 =.
6 .=l. 6 .=l.
7 .>+-= 7 .>+-=
8_;:, .> :=|. This program is free software; you can 8_;:, .> :=|. This program is free software; you can
9.> <`_, > . <= redistribute it and/or modify it under 9.> <`_, > . <= redistribute it and/or modify it under
10:`=1 )Y*s>-.-- : the terms of the GNU Library General Public 10:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
11.="- .-=="i, .._ License as published by the Free Software 11.="- .-=="i, .._ License as published by the Free Software
12- . .-<_> .<> Foundation; either version 2 of the License, 12- . .-<_> .<> Foundation; either version 2 of the License,
13 ._= =} : or (at your option) any later version. 13 ._= =} : or (at your option) any later version.
14 .%`+i> _;_. 14 .%`+i> _;_.
15 .i_,=:_. -<s. This program is distributed in the hope that 15 .i_,=:_. -<s. This program is distributed in the hope that
16 + . -:. = it will be useful, but WITHOUT ANY WARRANTY; 16 + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
17 : .. .:, . . . without even the implied warranty of 17 : .. .:, . . . without even the implied warranty of
18 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A 18 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
19 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU 19 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
20..}^=.= = ; Library General Public License for more 20..}^=.= = ; Library General Public License for more
21++= -. .` .: details. 21++= -. .` .: details.
22: = ...= . :.=- 22: = ...= . :.=-
23-. .:....=;==+<; You should have received a copy of the GNU 23-. .:....=;==+<; You should have received a copy of the GNU
24 -_. . . )=. = Library General Public License along with 24 -_. . . )=. = Library General Public License along with
25 -- :-=` this library; see the file COPYING.LIB. 25 -- :-=` this library; see the file COPYING.LIB.
26 If not, write to the Free Software Foundation, 26 If not, write to the Free Software Foundation,
27 Inc., 59 Temple Place - Suite 330, 27 Inc., 59 Temple Place - Suite 330,
28 Boston, MA 02111-1307, USA. 28 Boston, MA 02111-1307, USA.
29 29
30*/ 30*/
31 31
32#ifndef OCONFITEM_H 32#ifndef OCONFITEM_H
33#define OCONFITEM_H 33#define OCONFITEM_H
34 34
35#include <qlist.h> 35#include <qlist.h>
36#include <qstring.h> 36#include <qstring.h>
37 37
38class OConfItem 38class OConfItem
39{ 39{
40public: 40public:
41 enum Type { Source, Destination, Option, Arch, NotDefined }; 41 enum Type { Source=0x01,
42 GzSource=0x02,
43 Destination=0x04,
44 Option=0x08,
45 Arch=0x10,
46 NotDefined=0x20 };
42 47
43 OConfItem( Type type = NotDefined, const QString &name = QString::null, 48 OConfItem( Type type = NotDefined, const QString &name = QString::null,
44 const QString &value = QString::null, const QString &features = QString::null, 49 const QString &value = QString::null, const QString &features = QString::null,
45 bool active = true ); 50 bool active = true );
46 51
47 Type type() { return m_type; } 52 Type type() { return m_type; }
48 const QString &name() { return m_name; } 53 const QString &name() { return m_name; }
49 const QString &value() { return m_value; } 54 const QString &value() { return m_value; }
50 const QString &features() { return m_features; } 55 const QString &features() { return m_features; }
51 bool active() { return m_active; } 56 bool active() { return m_active; }
52 57
53 void setType( Type type ) { m_type = type; } 58 void setType( Type type ) { m_type = type; }
54 void setName( const QString &name ) { m_name = name; } 59 void setName( const QString &name ) { m_name = name; }
55 void setValue( const QString &value ) { m_value = value; } 60 void setValue( const QString &value ) { m_value = value; }
56 void setFeatures( const QString &features ) { m_features = features; } 61 void setFeatures( const QString &features ) { m_features = features; }
57 void setActive( bool active ) { m_active = active; } 62 void setActive( bool active ) { m_active = active; }
58 63
59private: 64private:
60 Type m_type; // Type of configuration item 65 Type m_type; // Type of configuration item
61 QString m_name; // Name of item 66 QString m_name; // Name of item
62 QString m_value; // Value of item 67 QString m_value; // Value of item
63 QString m_features; // Comma-deliminated list of features this item supports 68 QString m_features; // Comma-deliminated list of features this item supports
64 bool m_active; // Indicates whether item is currently active 69 bool m_active; // Indicates whether item is currently active
65}; 70};
66 71
67class OConfItemList : public QList<OConfItem> 72class OConfItemList : public QList<OConfItem>
68{ 73{
69private: 74private:
70 75
71 int compareItems( QCollection::Item item1, QCollection::Item item2 ) 76 int compareItems( QCollection::Item item1, QCollection::Item item2 )
72 { 77 {
73 // Sort by OConfItem location then by type 78 // Sort by OConfItem location then by type
74 OConfItem::Type type1 = reinterpret_cast<OConfItem*>(item1)->type(); 79 OConfItem::Type type1 = reinterpret_cast<OConfItem*>(item1)->type();
75 OConfItem::Type type2 = reinterpret_cast<OConfItem*>(item2)->type(); 80 OConfItem::Type type2 = reinterpret_cast<OConfItem*>(item2)->type();
76 if ( type1 < type2 ) 81 if ( type1 < type2 )
77 return -1; 82 return -1;
78 else if ( type1 == type2 ) 83 else if ( type1 == type2 )
79 { 84 {
80 QString name1 = reinterpret_cast<OConfItem*>(item1)->name(); 85 QString name1 = reinterpret_cast<OConfItem*>(item1)->name();
81 QString name2 = reinterpret_cast<OConfItem*>(item2)->name(); 86 QString name2 = reinterpret_cast<OConfItem*>(item2)->name();
82 if ( name1 < name2 ) 87 if ( name1 < name2 )
83 return -1; 88 return -1;
84 else if ( name1 == name2 ) 89 else if ( name1 == name2 )
85 return 0; 90 return 0;
86 else /*if ( name1 > name2 )*/ 91 else /*if ( name1 > name2 )*/
87 return 1; 92 return 1;
88 } 93 }
89 else /*if ( type1 > type2 )*/ 94 else /*if ( type1 > type2 )*/
diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp
index f2d7e39..a885ef8 100644
--- a/noncore/settings/packagemanager/oipkg.cpp
+++ b/noncore/settings/packagemanager/oipkg.cpp
@@ -69,97 +69,98 @@ int fIpkgStatus( char */*name*/, int /*status*/, char *desc, void */*userdata*/
69 oipkg->ipkgStatus( desc ); 69 oipkg->ipkgStatus( desc );
70 return 0; 70 return 0;
71} 71}
72 72
73int fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/, 73int fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/,
74 void */*userdata*/ ) 74 void */*userdata*/ )
75{ 75{
76 oipkg->ipkgList( desc ); 76 oipkg->ipkgList( desc );
77 return 0; 77 return 0;
78} 78}
79 79
80OIpkg::OIpkg( Config *config, QObject *parent, const char *name ) 80OIpkg::OIpkg( Config *config, QObject *parent, const char *name )
81 : QObject( parent, name ) 81 : QObject( parent, name )
82 , m_config( config ) 82 , m_config( config )
83 , m_confInfo( NULL ) 83 , m_confInfo( NULL )
84 , m_ipkgExecOptions( 0 ) 84 , m_ipkgExecOptions( 0 )
85 , m_ipkgExecVerbosity( 1 ) 85 , m_ipkgExecVerbosity( 1 )
86{ 86{
87 // Keep pointer to self for the Ipkg callback functions 87 // Keep pointer to self for the Ipkg callback functions
88 oipkg = this; 88 oipkg = this;
89 89
90 // Initialize libipkg 90 // Initialize libipkg
91 ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs ); 91 ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs );
92 92
93 // Default ipkg run-time arguments 93 // Default ipkg run-time arguments
94 m_ipkgArgs.noaction = false; 94 m_ipkgArgs.noaction = false;
95 m_ipkgArgs.force_defaults = true; 95 m_ipkgArgs.force_defaults = true;
96} 96}
97 97
98OIpkg::~OIpkg() 98OIpkg::~OIpkg()
99{ 99{
100 // Upon destruction, ensure that items in config list are deleted with list 100 // Upon destruction, ensure that items in config list are deleted with list
101 if ( m_confInfo ) 101 if ( m_confInfo )
102 m_confInfo->setAutoDelete( true ); 102 m_confInfo->setAutoDelete( true );
103 103
104 // Free up libipkg resources 104 // Free up libipkg resources
105 ipkg_deinit( &m_ipkgArgs ); 105 ipkg_deinit( &m_ipkgArgs );
106} 106}
107 107
108OConfItemList *OIpkg::configItems() 108OConfItemList *OIpkg::configItems()
109{ 109{
110 // Retrieve all configuration items 110 // Retrieve all configuration items
111 return filterConfItems(); 111 return filterConfItems();
112} 112}
113 113
114OConfItemList *OIpkg::servers() 114OConfItemList *OIpkg::servers()
115{ 115{
116 // Retrieve only servers 116 // Retrieve only servers
117 return filterConfItems( OConfItem::Source ); 117 return filterConfItems( (OConfItem::Type)((int)OConfItem::Source |
118 (int)OConfItem::GzSource) );
118} 119}
119 120
120OConfItemList *OIpkg::destinations() 121OConfItemList *OIpkg::destinations()
121{ 122{
122 // Retrieve only destinations 123 // Retrieve only destinations
123 return filterConfItems( OConfItem::Destination ); 124 return filterConfItems( OConfItem::Destination );
124} 125}
125 126
126OConfItemList *OIpkg::options() 127OConfItemList *OIpkg::options()
127{ 128{
128 // Retrieve only destinations 129 // Retrieve only destinations
129 return filterConfItems( OConfItem::Option ); 130 return filterConfItems( OConfItem::Option );
130} 131}
131 132
132void OIpkg::setConfigItems( OConfItemList *configList ) 133void OIpkg::setConfigItems( OConfItemList *configList )
133{ 134{
134 if ( m_confInfo ) 135 if ( m_confInfo )
135 delete m_confInfo; 136 delete m_confInfo;
136 137
137 m_confInfo = configList; 138 m_confInfo = configList;
138 139
139 // Write out new /etc/ipkg.conf 140 // Write out new /etc/ipkg.conf
140 QFile confFile( IPKG_CONF ); 141 QFile confFile( IPKG_CONF );
141 if ( confFile.open( IO_WriteOnly ) ) 142 if ( confFile.open( IO_WriteOnly ) )
142 { 143 {
143 QTextStream confStream( &confFile ); 144 QTextStream confStream( &confFile );
144 confStream << "# Generated by Opie Package Manager\n\n"; 145 confStream << "# Generated by Opie Package Manager\n\n";
145 146
146 OConfItemListIterator it( *m_confInfo ); 147 OConfItemListIterator it( *m_confInfo );
147 for ( ; it.current(); ++it ) 148 for ( ; it.current(); ++it )
148 { 149 {
149 OConfItem *item = it.current(); 150 OConfItem *item = it.current();
150 151
151 // Only write out valid conf items 152 // Only write out valid conf items
152 if ( item->type() != OConfItem::NotDefined ) 153 if ( item->type() != OConfItem::NotDefined )
153 { 154 {
154 QString confLine; 155 QString confLine;
155 if ( !item->active() ) 156 if ( !item->active() )
156 confLine = "#"; 157 confLine = "#";
157 158
158 switch ( item->type() ) 159 switch ( item->type() )
159 { 160 {
160 case OConfItem::Source : 161 case OConfItem::Source :
161 { 162 {
162 if ( item->features().contains( "Compressed" ) ) 163 if ( item->features().contains( "Compressed" ) )
163 confLine.append( "src/gz " ); 164 confLine.append( "src/gz " );
164 else 165 else
165 confLine.append( "src " ); 166 confLine.append( "src " );
@@ -498,172 +499,174 @@ void OIpkg::ipkgStatus( char *status )
498} 499}
499 500
500void OIpkg::ipkgList( char *filelist ) 501void OIpkg::ipkgList( char *filelist )
501{ 502{
502 emit signalIpkgList( filelist ); 503 emit signalIpkgList( filelist );
503} 504}
504 505
505void OIpkg::loadConfiguration() 506void OIpkg::loadConfiguration()
506{ 507{
507 if ( m_confInfo ) 508 if ( m_confInfo )
508 delete m_confInfo; 509 delete m_confInfo;
509 510
510 // Load configuration item list 511 // Load configuration item list
511 m_confInfo = new OConfItemList(); 512 m_confInfo = new OConfItemList();
512 513
513 QStringList confFiles; 514 QStringList confFiles;
514 QDir confDir( IPKG_CONF_DIR ); 515 QDir confDir( IPKG_CONF_DIR );
515 if ( confDir.exists() ) 516 if ( confDir.exists() )
516 { 517 {
517 confDir.setNameFilter( "*.conf" ); 518 confDir.setNameFilter( "*.conf" );
518 confDir.setFilter( QDir::Files ); 519 confDir.setFilter( QDir::Files );
519 confFiles = confDir.entryList( "*.conf", QDir::Files ); 520 confFiles = confDir.entryList( "*.conf", QDir::Files );
520 } 521 }
521 confFiles << IPKG_CONF; 522 confFiles << IPKG_CONF;
522 523
523 QStringList::Iterator lastFile = confFiles.end(); 524 QStringList::Iterator lastFile = confFiles.end();
524 for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it ) 525 for ( QStringList::Iterator it = confFiles.begin(); it != lastFile; ++it )
525 { 526 {
526 // Create absolute file path if necessary 527 // Create absolute file path if necessary
527 QString absFile = (*it); 528 QString absFile = (*it);
528 if ( !absFile.startsWith( "/" ) ) 529 if ( !absFile.startsWith( "/" ) )
529 absFile.prepend( QString( IPKG_CONF_DIR ) + "/" ); 530 absFile.prepend( QString( IPKG_CONF_DIR ) + "/" );
530 531
531 // Read in file 532 // Read in file
532 QFile f( absFile ); 533 QFile f( absFile );
533 if ( f.open( IO_ReadOnly ) ) 534 if ( f.open( IO_ReadOnly ) )
534 { 535 {
535 QTextStream s( &f ); 536 QTextStream s( &f );
536 while ( !s.eof() ) 537 while ( !s.eof() )
537 { 538 {
538 539
539 QString line = s.readLine().simplifyWhiteSpace(); 540 QString line = s.readLine().simplifyWhiteSpace();
540 541
541 // Parse line and save info to the conf options list 542 // Parse line and save info to the conf options list
542 if ( !line.isEmpty() ) 543 if ( !line.isEmpty() )
543 { 544 {
544 if ( !line.startsWith( "#" ) || 545 if ( !line.startsWith( "#" ) ||
545 line.startsWith( "#src" ) || 546 line.startsWith( "#src" ) ||
547 line.startsWith( "#src/gz" ) ||
546 line.startsWith( "#dest" ) || 548 line.startsWith( "#dest" ) ||
547 line.startsWith( "#arch" ) || 549 line.startsWith( "#arch" ) ||
548 line.startsWith( "#option" ) ) 550 line.startsWith( "#option" ) )
549 { 551 {
550 int pos = line.find( ' ', 1 ); 552 int pos = line.find( ' ', 1 );
551 553
552 // Type 554 // Type
553 QString typeStr = line.left( pos ); 555 QString typeStr = line.left( pos );
554 OConfItem::Type type; 556 OConfItem::Type type;
555 QString features; 557 QString features;
556 if ( typeStr == "src" || typeStr == "#src" ) 558 if ( typeStr == "src" || typeStr == "#src" )
557 type = OConfItem::Source; 559 type = OConfItem::Source;
558 else if ( typeStr == "src/gz" || typeStr == "#src/gz" ) 560 else if ( typeStr == "src/gz" || typeStr == "#src/gz" )
559 { 561 {
560 type = OConfItem::Source; 562 type = OConfItem::Source;
561 features = "Compressed"; 563 features = "Compressed";
562 } 564 }
563 else if ( typeStr == "dest" || typeStr == "#dest" ) 565 else if ( typeStr == "dest" || typeStr == "#dest" )
564 type = OConfItem::Destination; 566 type = OConfItem::Destination;
565 else if ( typeStr == "option" || typeStr == "#option" ) 567 else if ( typeStr == "option" || typeStr == "#option" )
566 type = OConfItem::Option; 568 type = OConfItem::Option;
567 else if ( typeStr == "arch" || typeStr == "#arch" ) 569 else if ( typeStr == "arch" || typeStr == "#arch" )
568 type = OConfItem::Arch; 570 type = OConfItem::Arch;
569 else 571 else
570 type = OConfItem::NotDefined; 572 type = OConfItem::NotDefined;
571 ++pos; 573 ++pos;
572 int endpos = line.find( ' ', pos ); 574 int endpos = line.find( ' ', pos );
573 575
574 // Name 576 // Name
575 QString name = line.mid( pos, endpos - pos ); 577 QString name = line.mid( pos, endpos - pos );
576 578
577 // Value 579 // Value
578 QString value = ""; 580 QString value = "";
579 if ( endpos > -1 ) 581 if ( endpos > -1 )
580 value = line.right( line.length() - endpos - 1 ); 582 value = line.right( line.length() - endpos - 1 );
581 583
582 // Active 584 // Active
583 bool active = !line.startsWith( "#" ); 585 bool active = !line.startsWith( "#" );
584 586
585 // Add to list 587 // Add to list
586 m_confInfo->append( new OConfItem( type, name, value, features, active ) ); 588 m_confInfo->append( new OConfItem( type, name, value, features, active ) );
587 } 589 }
588 } 590 }
589 } 591 }
590 592
591 f.close(); 593 f.close();
592 } 594 }
593 } 595 }
594 596
595 // Load Ipkg execution options from application configuration file 597 // Load Ipkg execution options from application configuration file
596 if ( m_config ) 598 if ( m_config )
597 { 599 {
598 m_config->setGroup( "Ipkg" ); 600 m_config->setGroup( "Ipkg" );
599 m_ipkgExecOptions = m_config->readNumEntry( "ExecOptions", m_ipkgExecOptions ); 601 m_ipkgExecOptions = m_config->readNumEntry( "ExecOptions", m_ipkgExecOptions );
600 m_ipkgExecVerbosity = m_config->readNumEntry( "Verbosity", m_ipkgExecVerbosity ); 602 m_ipkgExecVerbosity = m_config->readNumEntry( "Verbosity", m_ipkgExecVerbosity );
601 } 603 }
602} 604}
603 605
604OConfItemList *OIpkg::filterConfItems( OConfItem::Type typefilter ) 606OConfItemList *OIpkg::filterConfItems( OConfItem::Type typefilter )
605{ 607{
606 // Load Ipkg configuration info if not already cached 608 // Load Ipkg configuration info if not already cached
607 if ( !m_confInfo ) 609 if ( !m_confInfo )
608 loadConfiguration(); 610 loadConfiguration();
609 611
610 // Build new server list (caller is responsible for deleting) 612 // Build new server list (caller is responsible for deleting)
611 OConfItemList *sl = new OConfItemList; 613 OConfItemList *sl = new OConfItemList;
612 614
613 // If typefilter is empty, retrieve all items 615 // If typefilter is empty, retrieve all items
614 bool retrieveAll = ( typefilter == OConfItem::NotDefined ); 616 bool retrieveAll = ( typefilter == OConfItem::NotDefined );
615 617
616 // Parse configuration info for servers 618 // Parse configuration info for servers
617 OConfItemListIterator it( *m_confInfo ); 619 OConfItemListIterator it( *m_confInfo );
618 for ( ; it.current(); ++it ) 620 for ( ; it.current(); ++it )
619 { 621 {
620 OConfItem *item = it.current(); 622 OConfItem *item = it.current();
621 if ( retrieveAll || item->type() == typefilter ) 623 if ( retrieveAll ||
624 ( item->type() & typefilter ) )
622 { 625 {
623 sl->append( item ); 626 sl->append( item );
624 } 627 }
625 } 628 }
626 629
627 return sl; 630 return sl;
628} 631}
629 632
630const QString &OIpkg::rootPath() 633const QString &OIpkg::rootPath()
631{ 634{
632 if ( m_rootPath.isEmpty() ) 635 if ( m_rootPath.isEmpty() )
633 { 636 {
634 OConfItem *rootDest = findConfItem( OConfItem::Destination, "root" ); 637 OConfItem *rootDest = findConfItem( OConfItem::Destination, "root" );
635 rootDest ? m_rootPath = rootDest->value() 638 rootDest ? m_rootPath = rootDest->value()
636 : m_rootPath = '/'; 639 : m_rootPath = '/';
637 if ( m_rootPath.right( 1 ) == '/' ) 640 if ( m_rootPath.right( 1 ) == '/' )
638 m_rootPath.truncate( m_rootPath.length() - 1 ); 641 m_rootPath.truncate( m_rootPath.length() - 1 );
639 } 642 }
640 return m_rootPath; 643 return m_rootPath;
641} 644}
642 645
643void OIpkg::linkPackageDir( const QString &dest ) 646void OIpkg::linkPackageDir( const QString &dest )
644{ 647{
645 if ( !dest.isNull() ) 648 if ( !dest.isNull() )
646 { 649 {
647 OConfItem *destConfItem = findConfItem( OConfItem::Destination, dest ); 650 OConfItem *destConfItem = findConfItem( OConfItem::Destination, dest );
648 651
649 emit signalIpkgMessage( tr( "Linking packages installed in: %1" ).arg( dest ) ); 652 emit signalIpkgMessage( tr( "Linking packages installed in: %1" ).arg( dest ) );
650 653
651 // Set package destination directory 654 // Set package destination directory
652 QString destDir = destConfItem->value(); 655 QString destDir = destConfItem->value();
653 QString destInfoDir = destDir; 656 QString destInfoDir = destDir;
654 if ( destInfoDir.right( 1 ) != '/' ) 657 if ( destInfoDir.right( 1 ) != '/' )
655 destInfoDir.append( '/' ); 658 destInfoDir.append( '/' );
656 destInfoDir.append( IPKG_INFO_PATH ); 659 destInfoDir.append( IPKG_INFO_PATH );
657 660
658 // Get list of installed packages in destination 661 // Get list of installed packages in destination
659 QDir packageDir( destInfoDir ); 662 QDir packageDir( destInfoDir );
660 QStringList packageFiles; 663 QStringList packageFiles;
661 if ( packageDir.exists() ) 664 if ( packageDir.exists() )
662 { 665 {
663 packageDir.setNameFilter( "*.list" ); 666 packageDir.setNameFilter( "*.list" );
664 packageDir.setFilter( QDir::Files ); 667 packageDir.setFilter( QDir::Files );
665 packageFiles = packageDir.entryList( "*.list", QDir::Files ); 668 packageFiles = packageDir.entryList( "*.list", QDir::Files );
666 } 669 }
667 670
668 // Link all files for every package installed in desination 671 // Link all files for every package installed in desination
669 QStringList::Iterator lastFile = packageFiles.end(); 672 QStringList::Iterator lastFile = packageFiles.end();
diff --git a/noncore/settings/packagemanager/opie-packagemanager.control b/noncore/settings/packagemanager/opie-packagemanager.control
index da3ddfe..0153d40 100644
--- a/noncore/settings/packagemanager/opie-packagemanager.control
+++ b/noncore/settings/packagemanager/opie-packagemanager.control
@@ -1,10 +1,10 @@
1Package: opie-packagemanager 1Package: opie-packagemanager
2Files: plugins/application/libpackagemanager.so* bin/packagemanager pics/packagemanager apps/Settings/packagemanager.desktop 2Files: plugins/application/libpackagemanager.so* bin/packagemanager pics/packagemanager apps/Settings/packagemanager.desktop
3Priority: optional 3Priority: optional
4Section: opie/settings 4Section: opie/settings
5Depends: task-opie-minimal, libopiecore2, libopieui2, libipkg (>=0.99.120) 5Depends: task-opie-minimal, libopiecore2, libopieui2, libipkg0 (>=0.99.120), ipkg-link
6Replaces: packagemanager 6Replaces: packagemanager
7Architecture: arm 7Architecture: arm
8Maintainer: Dan Williams (drw@handhelds.org) 8Maintainer: Dan Williams (drw@handhelds.org)
9Description: Opie package management client 9Description: Opie package management client
10Version: 0.6.1$EXTRAVERSION 10Version: $QPE_VERSION$EXTRAVERSION