summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2005-06-02 21:44:41 (UTC)
committer mickeyl <mickeyl>2005-06-02 21:44:41 (UTC)
commitd0f6a0721d7ab67a115d08990143944ee71d54ba (patch) (unidiff)
treeba22ad18027419a6417f3d6439a2faf67917ab74
parentf55a56f54de1d3fa9084160159a379079a317d96 (diff)
downloadopie-d0f6a0721d7ab67a115d08990143944ee71d54ba.zip
opie-d0f6a0721d7ab67a115d08990143944ee71d54ba.tar.gz
opie-d0f6a0721d7ab67a115d08990143944ee71d54ba.tar.bz2
- move addLanguage.sh and mkipks to scripts/ directory
- finish recursive directory locks and mention in ChangeLog beginning with `CVS:' are removed automatically CVS: CVS: Committing in . CVS: CVS: Modified Files: CVS: ChangeLog libopie2/opiecore/linux/ofilenotify.cpp CVS: libopie2/opiecore/linux/ofilenotify.h CVS: examples/opiecore/onotifytest/main.cpp CVS: examples/opiecore/onotifytest/main.h CVS: Added Files: CVS: scripts/addLanguage.sh scripts/mkipks CVS: ----------------------------------------------------------------------
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ChangeLog3
-rw-r--r--examples/opiecore/onotifytest/main.cpp18
-rw-r--r--examples/opiecore/onotifytest/main.h10
-rw-r--r--libopie2/opiecore/linux/ofilenotify.cpp40
-rw-r--r--libopie2/opiecore/linux/ofilenotify.h3
-rwxr-xr-xscripts/addLanguage.sh33
-rwxr-xr-xscripts/mkipks261
7 files changed, 343 insertions, 25 deletions
diff --git a/ChangeLog b/ChangeLog
index bce86d1..4dcee93 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -24,13 +24,14 @@
24 * n.a.- memoryapplet: fix crash in memoryapplet on kernels without swap support (seneca cunningham) 24 * n.a.- memoryapplet: fix crash in memoryapplet on kernels without swap support (seneca cunningham)
25 * n.a. - networksettings: ignore hostap control interfaces wifi* (mickeyl) 25 * n.a. - networksettings: ignore hostap control interfaces wifi* (mickeyl)
26 26
27 Internal 27 Internal
28 -------- 28 --------
29 * Make BluezApplet use OTaskbarApplet (mickeyl) 29 * Make BluezApplet use OTaskbarApplet (mickeyl)
30 * Rewrite OFileNotification to use the upcoming inotify interface instead of the deprecated dnotify (mickeyl) 30 * libopiecore: rewrite OFileNotification to use the Linux 2.6 inotify interface (mickeyl)
31 * libopiecore: add ODirNotification - recursive directory notifications (mickeyl)
31 * libopienet: Skip hostap control interfaces 'wifi' and improve robustness in ONetworkInterface (mickeyl) 32 * libopienet: Skip hostap control interfaces 'wifi' and improve robustness in ONetworkInterface (mickeyl)
32 * libopieui: Remove OVersatileView and OVersatileViewItem (mickeyl) 33 * libopieui: Remove OVersatileView and OVersatileViewItem (mickeyl)
33 * libopienet: Miscellaneous API cleanups (mickeyl) 34 * libopienet: Miscellaneous API cleanups (mickeyl)
34 * libopiecore: Add linux pcmcia system abstraction classes (mickeyl) 35 * libopiecore: Add linux pcmcia system abstraction classes (mickeyl)
35 36
36 2005-03-25Opie 1.2.0 37 2005-03-25Opie 1.2.0
diff --git a/examples/opiecore/onotifytest/main.cpp b/examples/opiecore/onotifytest/main.cpp
index b773da9..7b7b0bc 100644
--- a/examples/opiecore/onotifytest/main.cpp
+++ b/examples/opiecore/onotifytest/main.cpp
@@ -28,27 +28,37 @@ App::App( int argc, char** argv ) : QApplication( argc, argv )
28 } 28 }
29 29
30 QObject::connect( tmpfoo, SIGNAL(accessed(const QString&)), this, SLOT(quit()) ); 30 QObject::connect( tmpfoo, SIGNAL(accessed(const QString&)), this, SLOT(quit()) );
31 QObject::connect( tmpfoo, SIGNAL(closed(const QString&,bool)), this, SLOT(quit()) ); 31 QObject::connect( tmpfoo, SIGNAL(closed(const QString&,bool)), this, SLOT(quit()) );
32#endif 32#endif
33 33
34 ODirNotification* tmpfoo = new ODirNotification( 0, 0 ); 34 tmpfoo = new ODirNotification( 0, 0 );
35 35
36 int result = tmpfoo->watch( "/tmp/foo", false, CreateFile, 2 ); 36 int result = tmpfoo->watch( "/tmp/foo", false, CreateFile, 2 );
37 QObject::connect( tmpfoo, SIGNAL(triggered(const QString&,unsigned int,const QString&)), 37
38 this, SLOT(triggered(const QString&,unsigned int,const QString&)) ); 38 if ( result != -1 )
39 {
40 QObject::connect( tmpfoo, SIGNAL(triggered(const QString&,unsigned int,const QString&)),
41 this, SLOT(triggered(const QString&,unsigned int,const QString&)) );
42 }
43 else
44 {
45 QMessageBox::warning( qApp->desktop(), "info", "Couldn't watch /tmp/foo\nDoes it exist?" );
46 }
39} 47}
40 48
41App::~App() 49App::~App()
42{ 50{
43 odebug << "~App()" << oendl; 51 odebug << "~App()" << oendl;
52 delete tmpfoo;
44} 53}
45 54
46void App::triggered( const QString& str1, unsigned int id, const QString& str2 ) 55void App::triggered( const QString& str1, unsigned int id, const QString& str2 )
47{ 56{
48 QMessageBox::information( qApp->desktop(), "info", QString( "%1\n%2\n%3" ).arg( str1 ).arg( id ).arg( str2 ) ); 57 QMessageBox::information( qApp->desktop(), "info", QString().sprintf( "%s\n0x%08x\n%s",
58 (const char*) str1, id, (const char*) str2 ) );
49} 59}
50 60
51int main( int argc, char** argv ) 61int main( int argc, char** argv )
52{ 62{
53 App* app = new App( argc, argv ); 63 App* app = new App( argc, argv );
54 QPushButton* b = new QPushButton( "Click me to close", 0 ); 64 QPushButton* b = new QPushButton( "Click me to close", 0 );
diff --git a/examples/opiecore/onotifytest/main.h b/examples/opiecore/onotifytest/main.h
index afad947..7ce4b9f 100644
--- a/examples/opiecore/onotifytest/main.h
+++ b/examples/opiecore/onotifytest/main.h
@@ -1,23 +1,29 @@
1// (C) Michael 'Mickey' Lauer <mickey@Vanille.de> 1// (C) Michael 'Mickey' Lauer <mickey@Vanille.de>
2// LICENSE = "GPLv2" 2// LICENSE = "GPLv2"
3 3
4#ifndef MAIN_H 4#ifndef MAIN_H
5#define MAIN_H 5#define MAIN_H
6 6
7/* OPIE */
8#include <opie2/ofilenotify.h>
9
7/* QT */ 10/* QT */
8#include <qapplication.h> 11#include <qapplication.h>
9#include <qpushbutton.h> 12#include <qpushbutton.h>
10#include <qtextstream.h> 13#include <qtextstream.h>
11 14
12class App : public QApplication 15class App : public QApplication
13{ 16{
14 Q_OBJECT 17 Q_OBJECT
15public: 18 public:
16 App( int argc, char** argv ); 19 App( int argc, char** argv );
17 ~App(); 20 ~App();
18 21
19public slots: 22 public slots:
20 void triggered( const QString&, unsigned int, const QString& ); 23 void triggered( const QString&, unsigned int, const QString& );
24
25 private:
26 Opie::Core::ODirNotification* tmpfoo;
21}; 27};
22 28
23#endif 29#endif
diff --git a/libopie2/opiecore/linux/ofilenotify.cpp b/libopie2/opiecore/linux/ofilenotify.cpp
index a7820ee..68c5a96 100644
--- a/libopie2/opiecore/linux/ofilenotify.cpp
+++ b/libopie2/opiecore/linux/ofilenotify.cpp
@@ -233,38 +233,44 @@ bool OFileNotification::isSingleShot() const
233 233
234 234
235bool OFileNotification::activate( const OFileNotificationEvent* e ) 235bool OFileNotification::activate( const OFileNotificationEvent* e )
236{ 236{
237 qDebug( "OFileNotification::activate(): e = ( %s, %d, 0x%08x, %d, %s )", (const char*) _path, e->descriptor(), e->mask(), e->cookie(), (const char*) e->name() ); 237 qDebug( "OFileNotification::activate(): e = ( %s, %d, 0x%08x, %d, %s )", (const char*) _path, e->descriptor(), e->mask(), e->cookie(), (const char*) e->name() );
238 238
239 //FIXME: Should we really deliver QueueOverflow and/or Ignore to user level code?
240
239 // dumb signal 241 // dumb signal
240 _signal.activate(); 242 _signal.activate();
241 243
242 // generic signal 244 // generic signal
243 emit triggered( _path, e->mask(), e->name() ); 245 emit triggered( _path, e->mask(), e->name() );
244 246
245 // specialized signals 247 // specialized signals
246 switch ( e->mask() ) 248 switch ( e->mask() )
247 { 249 {
248 case Access: emit accessed( _path ); break; 250 case Access: emit accessed( _path ); break;
249 case Modify: emit modified( _path ); break; 251 case Modify: emit modified( _path ); break;
250 case Attrib: emit attributed( _path); break; 252 case Attrib: emit attributed( _path); break;
251 case CloseWrite: emit closed( _path, true ); break; 253 case CloseWrite: emit closed( _path, true ); break;
252 case CloseNoWrite: emit closed( _path, false ); break; 254 case CloseNoWrite: emit closed( _path, false ); break;
253 case Open: emit opened( _path ); break; 255 case Open: emit opened( _path ); break;
254 case MovedFrom: emit movedFrom( _path, e->name() ); break; 256 case MovedFrom: emit movedFrom( _path, e->name() ); break;
255 case MovedTo: emit movedTo( _path, e->name() ); break; 257 case MovedTo: emit movedTo( _path, e->name() ); break;
256 case DeleteSubdir: emit deletedSubdir( _path, e->name() ); break; 258 case DeleteSubdir: emit deletedSubdir( _path, e->name() ); break;
257 case DeleteFile: emit deletedFile( _path, e->name() ); break; 259 case DeleteFile: emit deletedFile( _path, e->name() ); break;
258 case CreateSubdir: emit createdSubdir( _path, e->name() ); break; 260 case CreateSubdir: emit createdSubdir( _path, e->name() ); break;
259 case CreateFile: emit createdFile( _path, e->name() ); break; 261 case CreateFile: emit createdFile( _path, e->name() ); break;
260 case DeleteSelf: emit deleted( _path ); break; 262 case DeleteSelf: emit deleted( _path ); break;
261 case Unmount: emit unmounted( _path ); break; 263 case Unmount: emit unmounted( _path ); break;
264 case _QueueOverflow: qFatal( "OFileNotification::activate() - Inotify Event Queue Overload!" ); break;
265 case _Ignored: qWarning( "OFileNotification::activate() - Further Events for '%s' will be ignored", (const char*) _path ); break;
262 default: assert( 0 ); 266 default: assert( 0 );
263 } 267 }
264 268
269 delete e;
270
265 if ( !_multi ) stop(); 271 if ( !_multi ) stop();
266 272
267 return true; 273 return true;
268} 274}
269 275
270 276
@@ -314,13 +320,13 @@ bool OFileNotification::registerEventHandler()
314 if ( OFileNotification::_fd < 0 ) 320 if ( OFileNotification::_fd < 0 )
315 { 321 {
316 qWarning( "OFileNotification::registerEventHandler(): couldn't register event handler: %s", strerror( errno ) ); 322 qWarning( "OFileNotification::registerEventHandler(): couldn't register event handler: %s", strerror( errno ) );
317 return false; 323 return false;
318 } 324 }
319 325
320 OFileNotification::_sn = new QSocketNotifier( _fd, QSocketNotifier::Read, this, "inotify event" ); 326 OFileNotification::_sn = new QSocketNotifier( _fd, QSocketNotifier::Read );
321 connect( OFileNotification::_sn, SIGNAL( activated(int) ), this, SLOT( inotifyEventHandler() ) ); 327 connect( OFileNotification::_sn, SIGNAL( activated(int) ), this, SLOT( inotifyEventHandler() ) );
322 328
323 qDebug( "OFileNotification::registerEventHandler(): done" ); 329 qDebug( "OFileNotification::registerEventHandler(): done" );
324 return true; 330 return true;
325} 331}
326 332
@@ -345,13 +351,13 @@ ODirNotification::ODirNotification( QObject* parent, const char* name )
345 351
346ODirNotification::~ODirNotification() 352ODirNotification::~ODirNotification()
347{ 353{
348 qDebug( "ODirNotification::~ODirNotification()" ); 354 qDebug( "ODirNotification::~ODirNotification()" );
349} 355}
350 356
351/* 357/**
352 Love-Trowbridge recursive directory scanning algorithm: 358 Love-Trowbridge recursive directory scanning algorithm:
353 359
354 Step 1. Start at initial directory foo. Add watch. 360 Step 1. Start at initial directory foo. Add watch.
355 361
356 Step 2. Setup handlers for watch created in Step 1. 362 Step 2. Setup handlers for watch created in Step 1.
357 Specifically, ensure that a directory created 363 Specifically, ensure that a directory created
@@ -362,13 +368,13 @@ ODirNotification::~ODirNotification()
362 368
363 Step 4. For each subdirectory of foo read in step 3, repeat 369 Step 4. For each subdirectory of foo read in step 3, repeat
364 step 1. 370 step 1.
365 371
366 Step 5. For any CREATE_SUBDIR event on bar, if a watch is 372 Step 5. For any CREATE_SUBDIR event on bar, if a watch is
367 not yet created on bar, repeat step 1 on bar. 373 not yet created on bar, repeat step 1 on bar.
368*/ 374**/
369 375
370int ODirNotification::watch( const QString& path, bool sshot, OFileNotificationType type, int recurse ) 376int ODirNotification::watch( const QString& path, bool sshot, OFileNotificationType type, int recurse )
371{ 377{
372 if ( _type == Nothing ) _type = type; // only set it once - for the top level call 378 if ( _type == Nothing ) _type = type; // only set it once - for the top level call
373 OFileNotificationType subtype = ( recurse != 0 ) ? (OFileNotificationType) int( _type | CreateSubdir ) : _type; 379 OFileNotificationType subtype = ( recurse != 0 ) ? (OFileNotificationType) int( _type | CreateSubdir ) : _type;
374 qDebug( "ODirNotification::watch( %s, %d, 0x%08x, %d )", (const char*) path, sshot, subtype, recurse ); 380 qDebug( "ODirNotification::watch( %s, %d, 0x%08x, %d )", (const char*) path, sshot, subtype, recurse );
diff --git a/libopie2/opiecore/linux/ofilenotify.h b/libopie2/opiecore/linux/ofilenotify.h
index 17e6b5d..c713b30 100644
--- a/libopie2/opiecore/linux/ofilenotify.h
+++ b/libopie2/opiecore/linux/ofilenotify.h
@@ -254,13 +254,14 @@ class OFileNotification : public QObject
254 *======================================================================================*/ 254 *======================================================================================*/
255 255
256/** 256/**
257 * @brief Represents a directory notification 257 * @brief Represents a directory notification
258 * 258 *
259 * This class allows to watch for events happening to directories 259 * This class allows to watch for events happening to directories
260 * It uses the OFileNotification class 260 * It uses the OFileNotification class and (for recursive watches)
261 * implements the Love-Trowbridge recursive directory scanning algorithm.
261 * 262 *
262 * @see http://www.kernel.org/pub/linux/kernel/people/rml/inotify/ 263 * @see http://www.kernel.org/pub/linux/kernel/people/rml/inotify/
263 * 264 *
264 * @author Michael 'Mickey' Lauer <mickey@vanille.de> 265 * @author Michael 'Mickey' Lauer <mickey@vanille.de>
265 * 266 *
266 **/ 267 **/
diff --git a/scripts/addLanguage.sh b/scripts/addLanguage.sh
new file mode 100755
index 0000000..e321804
--- a/dev/null
+++ b/scripts/addLanguage.sh
@@ -0,0 +1,33 @@
1#!/bin/bash
2
3# (c) 2002 Bruno Rodrigues <bruno.rodrigues@litux.org>
4# Under GPL Licence
5
6# Add a new TRANSLATION line to every .pro file if there
7# is already at least one TRANSLATION file and this LANG
8# is not present
9# The perl line would grab a TRANSLATION = something and
10# duplicate it to TRANSLATION += .../LANG/...
11
12LANG=$1
13
14if [ "$1x" == "x" ] ; then
15 echo "Usage: $0 <LANG>"
16 exit
17fi
18
19for i in `find . -name "*.pro"` ; do
20 grep TRANSLATIONS $i > /dev/null
21 if [ "$?" != 0 ] ; then
22 echo "$i: No Translations"
23 else
24 grep "../i18n/$LANG/" $i > /dev/null
25 if [ "$?" == 0 ] ; then
26 echo "$i: $LANG already there"
27 else
28 echo "$i: Adding $LANG"
29 perl -p -i.bak -e 's/^(TRANSLATIONS\s*\+?=\s*)(.+?i18n\/)(.+?)(\/.+?\.ts)(.*)$/$1$2$3$4 \\\n\t $2'$LANG'$4$5/' $i
30 fi
31 fi
32done
33
diff --git a/scripts/mkipks b/scripts/mkipks
new file mode 100755
index 0000000..f142029
--- a/dev/null
+++ b/scripts/mkipks
@@ -0,0 +1,261 @@
1#!/bin/sh
2
3if [ -z "$QTE_BASEVERSION" ]
4then
5 if [ -e $QTDIR/include/qglobal.h ]
6 then
7 QTE_BASEVERSION=`cat $QTDIR/include/qglobal.h|grep '^#define QT_VERSION'|grep -v STR|sed -e 's,#define QT_VERSION\t*,,;' -e 's,.*\([0-9]\)\([0-9]\)\([0-9]\).*,\1.\2.\3,;'`
8 else
9 QTE_BASEVERSION=2.3.4
10 fi
11fi
12if [ -z "$QTE_VERSION" ]
13then
14 if [ -e $QTDIR/include/qglobal.h ]
15 then
16 QTE_VERSION=`cat $QTDIR/include/qglobal.h|grep '^#define QT_VERSION_STR'|sed -e 's,#define QT_VERSION_STR\t*,,;' -e 's,.*"\([^"]*\)".*,\1,;'`
17 else
18 QTE_VERSION=2.3.4
19 fi
20fi
21[ -z "$QTE_REVISION" ] && QTE_REVISION=5
22DEB_VERSION=2.0
23
24# Have to do this here, since CVS can't store symlinks
25
26mkdir -p $OPIEDIR/etc/rcS.d
27ln -sf ../init.d/bootsplash $OPIEDIR/etc/rcS.d/S01bootsplash
28
29VERSION_MAJ=$(sed -n -e 's/.*QPE_VERSION "\([0-9]*\)\..*\..*".*/\1/p' <$OPIEDIR/include/qpe/version.h)
30VERSION_MIN=$(sed -n -e 's/.*QPE_VERSION ".*\.\([0-9]*\)\..*".*/\1/p' <$OPIEDIR/include/qpe/version.h)
31VERSION_PAT=$(sed -n -e 's/.*QPE_VERSION ".*\..*\.\([0-9]*\).*/\1/p' <$OPIEDIR/include/qpe/version.h)
32SUB_VERSION=$(sed -n -e 's,.*SUB_VERSION \"\(.*\)\".*,\1,p' <$OPIEDIR/include/qpe/version.h)
33if grep -q 'QPE_VERSION .*snapshot' $OPIEDIR/include/qpe/version.h
34then
35 [ -z "$VERSION_CVS" ] && VERSION_CVS="$(date +%Y%m%d)"
36 SUB_VERSION=$VERSION_CVS
37else
38 VERSION_CVS=""
39fi
40
41QPE_VERSION=$VERSION_MAJ.$VERSION_MIN.$VERSION_PAT
42
43ARCH=arm
44STRIP=arm-linux-strip
45STRIP_FILES="*ARM*not stripped"
46
47TDIR=/tmp/ipk$$
48DATADIR=$TDIR
49CTRLDIR=$TDIR/CONTROL
50
51IMAGEDIR=
52VERB=
53LIST=
54RPM=
55
56while [ $# -ne 0 ]
57do
58 case "$1" in
59 -v)
60 VERB=1
61 echo >&2 "Packaging for version $VERSION_MAJ.$VERSION_MIN.$VERSION_PAT$VERSION_CVS"
62 ;; -l)
63 LIST=1
64 ;; -i)
65 shift
66 IMAGEDIR=$1
67 DATADIR=$IMAGEDIR
68 mkdir -p $IMAGEDIR
69 ;; -classic)
70 classicopts=-c
71 ;; -rpm)
72 if [ "$OPIEDIR" != "/opt/Qtopia" ]
73 then
74 echo >&2 '$OPIEDIR is not the standard /usr/Qtopia directory.'
75 sleep 1
76 #exit 1
77 fi
78 RPM=1
79 ;; -arch)
80 shift
81 ARCH=$1
82 STRIP=
83 STRIP_FILES=
84 ;; /*)
85 FILES="$FILES $1"
86 ;; *)
87 FILES="$FILES $PWD/$1"
88 esac
89 shift
90done
91
92if [ -z "$FILES" ]
93then
94 FILES=`find $OPIEDIR -name "*.control" -print`
95fi
96
97RDIR=$PWD
98ORIGDIR=`pwd`
99cd $OPIEDIR
100
101for i in $FILES
102do
103 rm -rf $TDIR
104
105 mkdir -p $DATADIR
106 mkdir -p $CTRLDIR
107
108 packagename=${i##*/}; packagename=${packagename%.control}
109 version=$(eval echo '"'$(sed -n -e "s/^Version: *//p" $i)'"')
110 depends=$(eval echo '"'$(sed -n -e "s/^Depends: *//p" $i)'"')
111 files=$(eval echo $(sed -n -e "s/^Files://p" $i))
112 arch=$(eval echo $(sed -n -e "s/^Arch://p" $i))
113 section=$(sed -n -e "s/^Section: *//p" $i)
114 provides=$(sed -n -e "s/^Provides: *//p" $i)
115 conflicts=$(sed -n -e "s/^Conflicts: *//p" $i)
116 license=$(sed -n -e "s/^License: *//p" $i)
117 summary=$(sed -n -e "s/^Description: *//p" $i)
118 package=${packagename}_${version}_$ARCH
119 ERROR=
120 if [ -z "$files" ]
121 then
122 mkdir -p $DATADIR/usr/share/doc/$packagename
123 else
124 for f in $files
125 do
126 if [ -d $f ]
127 then
128 ffiles=$(find $f -type f -o -type b -o -type c -o -type l)
129 else
130 ffiles=$f
131 fi
132 for ff in $ffiles
133 do
134 case $ff in
135 */CVS/*)
136 continue
137 ;;*~)
138 continue
139 ;;*.control)
140 continue
141 ;; $QTDIR/*)
142 BASE=$(dirname /opt/QtPalmtop/${ff#$QTDIR/})
143 ;; etc/*.d/*)
144 BASE=$(dirname /$ff)
145 ;; root/*)
146 BASE=$(dirname ${ff#root})
147 ;; lib/*)
148 BASE=$(dirname /opt/QtPalmtop/$ff)
149 ;; $OPIEDIR/lib/*)
150 BASE=$(dirname /opt/QtPalmtop/${ff#$OPIEDIR/})
151 ;; $OPIEDIR/root/*)
152 BASE=$(dirname /${ff#$OPIEDIR/root/})
153 ;; *)
154 # For SHARP ROM compatibility. Should change to Qtopia.
155 BASE=/opt/QtPalmtop/$(dirname $ff)
156 esac
157
158 if [ -f $ff -o -b $ff -o -c $ff ]
159 then
160 D=$DATADIR$BASE
161 if [ -x $ff -a -n "$STRIP" ]
162 then
163 case $(file $ff) in
164 $STRIP_FILES)
165 $STRIP $ff
166 ;; *)
167 esac
168 fi
169 if [ -n "$RPM" ]
170 then
171 case "$ff" in
172 /*) RPMFILES="$RPMFILES $ff"
173 ;; *) RPMFILES="$RPMFILES $OPIEDIR/$ff"
174 esac
175 else
176 mkdir -p $D
177 if cp -a $ff $D
178 then
179 true
180 else
181 ERROR=1
182 fi
183 fi
184 else
185 echo >&2 "$0: $i: No such file: $ff"
186 ERROR=1
187 fi
188 done
189 done
190 fi
191 if [ -z "$ERROR" ]
192 then
193 if [ -n "$RPM" ]
194 then
195 SPEC=/tmp/mkipks-rpm-$$.spec
196 echo >$SPEC "Summary: $summary"
197 echo >>$SPEC "Name: $packagename"
198 echo >>$SPEC "Group: $section" ##########
199 echo >>$SPEC "License: $license"
200 echo >>$SPEC "Version: ${version%-*}"
201 echo >>$SPEC "Release: ${version#*-}"
202
203 echo >>$SPEC "%description"
204 sed -n -e '/^Description:/,$ p' $i | tail +2 >>$SPEC
205 echo >>$SPEC "%files"
206 echo >>$SPEC "%defattr(-,root,root)"
207 /bin/ls $RPMFILES >>$SPEC
208 rpm -bb --target $ARCH-unknown-linux $SPEC
209 # rm $SPEC
210 elif [ -z "$IMAGEDIR" ]
211 then
212 #size=$(du -h -s $DATADIR | sed -e 's/[ ].*//')
213 if (which mkfs.jffs2 >/dev/null 2>&1); then
214 size=$(mkfs.jffs2 -r $DATADIR | wc -c)
215 fi
216 if ! (cat $i|grep -q ^Package:); then
217 echo "Package: $packagename" >$CTRLDIR/control
218 fi
219 if [ ! -z "$size" ]; then
220 echo "Installed-Size: $size" >>$CTRLDIR/control
221 else
222 if [ -z "$SIZEWARNED" ]
223 then
224 echo "Warning, no mkfs.jffs2 found, unable to set Installed-Size."
225 SIZEWARNED=1
226 fi
227 fi
228 echo "Architecture: $ARCH" >>$CTRLDIR/control
229 echo "Version: $version" >>$CTRLDIR/control
230 [ ! -z "$depends" ] && echo "Depends: $depends" >>$CTRLDIR/control
231 [ ! -z "$provides" ] && echo "Provides: $provides" >>$CTRLDIR/control
232 [ ! -z "$conflicts" ] && echo "Conflicts: $conflicts" >>$CTRLDIR/control
233 egrep -v "^(Files|Version|Depends|Provides|Conflicts|Architecture):" >>$CTRLDIR/control $i
234 [ -n "$classicopts" ] && echo "$DEB_VERSION" >$TDIR/debian-binary
235 base=${i%.control}
236 scripts="preinst postinst prerm postrm"
237 for pf in $scripts
238 do
239 if [ -e ${base}.$pf ]
240 then
241 cp ${base}.$pf $CTRLDIR/$pf
242 chmod 755 $CTRLDIR/$pf
243 fi
244 done
245 cd $ORIGDIR; $OPIEDIR/scripts/ipkg-build $classicopts -o root -g root $TDIR; cd $OPIEDIR;
246 RESULT=$package.ipk
247 if [ -n "$VERB" ]
248 then
249 echo >&2 "Built $RESULT ($size)"
250 fi
251 if [ -n "$LIST" ]
252 then
253 echo $RESULT
254 fi
255 fi
256 else
257 echo >&2 "Not building $package package"
258 fi
259done
260# clean up
261rm -rf $TDIR