rev |
line source |
pankso@7
|
1 #!/bin/sh
|
pankso@7
|
2 # Tazwok - SliTaz source compiler and binary packages generator/cooker.
|
pankso@7
|
3 #
|
MikeDSmith25@82
|
4 # Tazwok can compile source packages and create binary packages suitable for
|
MikeDSmith25@82
|
5 # Tazpkg (Tiny Autonomous zone package manager). You can build individual
|
MikeDSmith25@82
|
6 # packages or a list of packages with one command, rebuild the full distro,
|
pankso@7
|
7 # generate a packages repository and also list and get info about packages.
|
pankso@7
|
8 #
|
pankso@106
|
9 # (C) 2007-2009 SliTaz - GNU General Public License.
|
pankso@7
|
10 #
|
pankso@7
|
11
|
gokhlayeh@186
|
12 VERSION=3.9.0
|
gokhlayeh@186
|
13 . /usr/lib/slitaz/libtaz
|
gokhlayeh@186
|
14 source_lib commons
|
pankso@7
|
15
|
gokhlayeh@186
|
16 # Use text instead of numbers, don't get $2 here if it's an option.
|
gokhlayeh@186
|
17 [ "$2" = "${2#--}" ] && PACKAGE=$2 && LIST=$2 && ARG=$2
|
gokhlayeh@186
|
18 COMMAND=$1
|
pankso@7
|
19
|
gokhlayeh@186
|
20 ########################################################################
|
gokhlayeh@186
|
21 # TAZWOK USAGE
|
gokhlayeh@186
|
22 ########################
|
gokhlayeh@186
|
23 # Print the usage (English).
|
pankso@7
|
24
|
pankso@7
|
25 usage ()
|
pankso@7
|
26 {
|
pankso@7
|
27 echo -e "\nSliTaz sources compiler and packages generator - Version: $VERSION\n
|
pankso@107
|
28 \033[1mUsage: \033[0m `basename $0` [command] [package|list|category|dir|id] [--option]
|
pankso@7
|
29 \033[1mCommands: \033[0m\n
|
pankso@7
|
30 usage Print this short usage.
|
pankso@7
|
31 stats Print Tazwok statistics from the config file and the wok.
|
pankso@133
|
32 edit Edit a package receipt in the current wok.
|
paul@121
|
33 build-depends Generate a list of packages to build a wok.
|
gokhlayeh@186
|
34 cmp|compare* Compare the wok and the cooked pkgs (--remove old pkgs).
|
pankso@7
|
35 list List all packages in the wok tree or by category.
|
MikeDSmith25@82
|
36 info Get information about a package in the wok.
|
pascal@92
|
37 check Check every receipt for common errors.
|
pankso@7
|
38 check-log Check the process log file of a package.
|
gokhlayeh@186
|
39 check-depends* Check every receipt for DEPENDS - doesn't scan ELF files.
|
erjo@159
|
40 check-src Check upstream tarball for package in the wok.
|
pankso@7
|
41 search Search for a package in the wok by pattern or name.
|
MikeDSmith25@82
|
42 compile Configure and build a package using the receipt rules.
|
pankso@7
|
43 genpkg Generate a suitable package for Tazpkg with the rules.
|
pankso@7
|
44 cook Compile and generate a package directly.
|
pankso@7
|
45 cook-list Cook all packages specified in the list by order.
|
gokhlayeh@186
|
46 cook-commit Cook all modified receipts.
|
gokhlayeh@186
|
47 cook-all Cook all packages excepted toolchain.
|
gokhlayeh@186
|
48 cook-toolchain Cook the toolchain packages.
|
gokhlayeh@186
|
49 gen-cooklist Generate a sorted cooklist using packages or list (--list) in argument.
|
gokhlayeh@186
|
50 sort-cooklist Sort the cooklist given in argument.
|
gokhlayeh@186
|
51 get-src Download the tarball of the package given in argument.
|
pankso@7
|
52 clean Clean all generated files in the package tree.
|
pankso@7
|
53 new-tree Prepare a new package tree and receipt (--interactive).
|
gokhlayeh@186
|
54 gen-list (Re-)Generate a packages list for a repository.
|
gokhlayeh@186
|
55 gen-wok-db (Re-)Generate wok lists with depends and wanted datas.
|
pankso@7
|
56 gen-clean-wok Gen a clean wok in a dir ('clean-wok' cleans current wok).
|
gokhlayeh@186
|
57 clean-wok Clean entirely the wok.
|
pankso@107
|
58 remove Remove a package from the wok.
|
pankso@108
|
59 hgup Pull and update a wok under Hg.
|
pankso@108
|
60 maintainers List all maintainers in the wok.
|
gokhlayeh@186
|
61 maintained-by List packages maintained by a contributor.\n
|
gokhlayeh@186
|
62
|
gokhlayeh@186
|
63 You can use `basename $0` command --help to list avaible options.
|
gokhlayeh@186
|
64 \033[1mImportant - *: \033[0m Commands which need a rewrite."
|
pankso@7
|
65 }
|
pankso@7
|
66
|
gokhlayeh@186
|
67 # This function display an error message without returning any error code.
|
gokhlayeh@186
|
68 # It also log the message in source package's warnings.txt; this file can be
|
gokhlayeh@186
|
69 # used on an eventual package page on website to display cooking warnings.
|
gokhlayeh@186
|
70 tazwok_warning()
|
pankso@7
|
71 {
|
gokhlayeh@186
|
72 echo -e "tazwok: $1" >&2
|
gokhlayeh@186
|
73 echo -e "$1" >> $WOK/${WANTED:-$PACKAGE}/warning.txt
|
gokhlayeh@186
|
74 return
|
pankso@7
|
75 }
|
pankso@7
|
76
|
gokhlayeh@186
|
77 ########################################################################
|
gokhlayeh@186
|
78 # TAZWOK VARIABLES & INITIAL CONFIGURATION
|
gokhlayeh@186
|
79 ########################
|
gokhlayeh@186
|
80
|
gokhlayeh@186
|
81 get_tazwok_config()
|
pankso@7
|
82 {
|
gokhlayeh@186
|
83 # Get configuration file.
|
gokhlayeh@186
|
84 get_config
|
gokhlayeh@186
|
85
|
gokhlayeh@186
|
86 # Define & get options.
|
gokhlayeh@186
|
87 get_options_list="$get_options_list SLITAZ_DIR SLITAZ_VERSION undigest"
|
gokhlayeh@186
|
88 get_options
|
gokhlayeh@186
|
89
|
gokhlayeh@186
|
90 if [ "$undigest" ]; then
|
gokhlayeh@186
|
91 LOCAL_REPOSITORY=$SLITAZ_DIR/$undigest
|
gokhlayeh@186
|
92 else
|
gokhlayeh@186
|
93 LOCAL_REPOSITORY=$SLITAZ_DIR/$SLITAZ_VERSION
|
pankso@7
|
94 fi
|
gokhlayeh@186
|
95
|
gokhlayeh@186
|
96 # The path to the most important files/dir used by Tazwok.
|
gokhlayeh@186
|
97 PACKAGES_REPOSITORY=$LOCAL_REPOSITORY/packages
|
gokhlayeh@186
|
98 WOK=$LOCAL_REPOSITORY/wok
|
gokhlayeh@186
|
99 INCOMING_REPOSITORY=$LOCAL_REPOSITORY/packages-incoming
|
gokhlayeh@186
|
100 SOURCES_REPOSITORY=$LOCAL_REPOSITORY/src
|
gokhlayeh@186
|
101 set_common_path
|
gokhlayeh@186
|
102
|
gokhlayeh@186
|
103 # /!\ This part needs some changes.
|
gokhlayeh@186
|
104 # Basically, get theses files from the net if they are missing.
|
gokhlayeh@186
|
105 dbtype=wok
|
gokhlayeh@186
|
106 dep_db=$INCOMING_REPOSITORY/wok-depends.txt
|
gokhlayeh@186
|
107 wan_db=$INCOMING_REPOSITORY/wok-wanted.txt
|
gokhlayeh@186
|
108 target_db=$INCOMING_REPOSITORY/wok-depends.txt
|
gokhlayeh@186
|
109
|
gokhlayeh@186
|
110 # Check commons directories, create them if user is root.
|
gokhlayeh@186
|
111 if test $(id -u) = 0 ; then
|
gokhlayeh@186
|
112 check_dir $WOK || chmod 777 $WOK
|
gokhlayeh@186
|
113 check_dir $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
114 check_dir $SOURCES_REPOSITORY
|
gokhlayeh@186
|
115 check_dir $INCOMING_REPOSITORY
|
gokhlayeh@186
|
116 check_dir $LOCAL_REPOSITORY/log
|
gokhlayeh@186
|
117 fi
|
gokhlayeh@186
|
118
|
gokhlayeh@186
|
119 # Some files are needed by tazwok in PACKAGES_REPOSITORY. Create
|
gokhlayeh@186
|
120 # them if they are missing.
|
gokhlayeh@186
|
121 for file in broken blocked commit incoming genpkglist cooklist; do
|
gokhlayeh@186
|
122 [ ! -f $PACKAGES_REPOSITORY/$file ] && touch $PACKAGES_REPOSITORY/$file
|
gokhlayeh@186
|
123 done
|
gokhlayeh@186
|
124
|
gokhlayeh@186
|
125 # Limit memory usage.
|
gokhlayeh@186
|
126 ulimit -v $(awk '/MemTotal/ { print int(($2*80)/100) }' < /proc/meminfo)
|
pankso@7
|
127 }
|
pankso@7
|
128
|
gokhlayeh@186
|
129 # Used in several functions.
|
gokhlayeh@186
|
130 set_common_path()
|
gokhlayeh@186
|
131 {
|
gokhlayeh@186
|
132 # The receipt is used to compile the source code and
|
gokhlayeh@186
|
133 # generate suitable packages for Tazpkg.
|
gokhlayeh@186
|
134 RECEIPT="$WOK/$PACKAGE/receipt"
|
gokhlayeh@186
|
135
|
gokhlayeh@186
|
136 # The path to the process log file.
|
gokhlayeh@186
|
137 LOG="$WOK/$PACKAGE/process.log"
|
gokhlayeh@186
|
138 }
|
gokhlayeh@186
|
139
|
gokhlayeh@186
|
140 ########################################################################
|
gokhlayeh@186
|
141 # TAZWOK CHECK FUNCTIONS
|
gokhlayeh@186
|
142 ########################
|
gokhlayeh@186
|
143
|
pankso@7
|
144 # Check for a package name on cmdline.
|
pankso@7
|
145 check_for_package_on_cmdline()
|
pankso@7
|
146 {
|
gokhlayeh@186
|
147 if [ ! "$PACKAGE" ]; then
|
gokhlayeh@186
|
148 echo -e "\nYou must specify a package name on the command line." >&2
|
gokhlayeh@186
|
149 echo -e "Example : tazwok $COMMAND package\n" >&2
|
gokhlayeh@186
|
150 exit 1
|
pankso@7
|
151 fi
|
pankso@7
|
152 }
|
pankso@7
|
153
|
pankso@7
|
154 # Check for the receipt of a package used to cook.
|
pankso@7
|
155 check_for_receipt()
|
pankso@7
|
156 {
|
pankso@7
|
157 if [ ! -f "$RECEIPT" ]; then
|
gokhlayeh@186
|
158 echo -e "\nUnable to find the receipt : $RECEIPT\n" >&2
|
gokhlayeh@186
|
159 exit 1
|
pankso@7
|
160 fi
|
pankso@7
|
161 }
|
pankso@7
|
162
|
pankso@7
|
163 # Check for a specified file list on cmdline.
|
pankso@7
|
164 check_for_list()
|
pankso@7
|
165 {
|
gokhlayeh@186
|
166 if [ ! "$LIST" ]; then
|
gokhlayeh@186
|
167 echo -e "\nPlease specify the path to the list of packages to cook.\n" >&2
|
gokhlayeh@186
|
168 exit 1
|
pankso@7
|
169 fi
|
gokhlayeh@186
|
170
|
MikeDSmith25@82
|
171 # Check if the list of packages exists.
|
pankso@7
|
172 if [ -f "$LIST" ]; then
|
pankso@7
|
173 LIST=`cat $LIST`
|
pankso@7
|
174 else
|
gokhlayeh@186
|
175 echo -e "\nUnable to find $LIST packages list.\n" >&2
|
gokhlayeh@186
|
176 exit 1
|
pankso@7
|
177 fi
|
gokhlayeh@186
|
178
|
gokhlayeh@186
|
179 if [ ! "$LIST" ]; then
|
gokhlayeh@186
|
180 echo -e "\nList is empty.\n" >&2
|
gokhlayeh@186
|
181 exit 1
|
gokhlayeh@186
|
182 fi
|
gokhlayeh@186
|
183 }
|
gokhlayeh@186
|
184
|
gokhlayeh@186
|
185
|
gokhlayeh@186
|
186 ########################################################################
|
gokhlayeh@186
|
187 # TAZWOK CORE FUNCTIONS
|
gokhlayeh@186
|
188 ########################
|
gokhlayeh@186
|
189
|
gokhlayeh@186
|
190 remove_src()
|
gokhlayeh@186
|
191 {
|
gokhlayeh@186
|
192 look_for_cookopt !remove_src && return
|
gokhlayeh@186
|
193 if [ ! -d $WOK/$PACKAGE/install ] && [ "$_pkg" ] && [ -d "$_pkg" ]; then
|
gokhlayeh@186
|
194 check_for_var_modification _pkg src || return
|
gokhlayeh@186
|
195 mv "$_pkg" $WOK/$PACKAGE/install
|
gokhlayeh@186
|
196 fi
|
gokhlayeh@186
|
197
|
gokhlayeh@186
|
198 # Don't remove sources if a package use src variable in his
|
gokhlayeh@186
|
199 # genpkg_rules: it maybe need something inside.
|
gokhlayeh@186
|
200 for i in $PACKAGE $(look_for_rwanted); do
|
gokhlayeh@186
|
201 sed -n '/^genpkg_rules\(\)/','/}/'p $WOK/$i/receipt | \
|
gokhlayeh@186
|
202 grep -q \$src && tazwok_warning "Sources will not be removed \
|
gokhlayeh@186
|
203 because $i use \$src in his receipt." && return
|
gokhlayeh@186
|
204 done
|
gokhlayeh@186
|
205
|
gokhlayeh@186
|
206 report step "Removing sources directory"
|
gokhlayeh@186
|
207 rm -fr "$src"
|
gokhlayeh@186
|
208 report end-step
|
gokhlayeh@186
|
209 }
|
gokhlayeh@186
|
210
|
gokhlayeh@186
|
211 # Check $COOK_OPT; usage : get_cookopt particular_opt
|
gokhlayeh@186
|
212 # Return error if not founded
|
gokhlayeh@186
|
213 # Return args if the opt is in the format opt=arg1:arg2:etc
|
gokhlayeh@186
|
214 look_for_cookopt()
|
gokhlayeh@186
|
215 {
|
gokhlayeh@186
|
216 for arg in $COOK_OPT; do
|
gokhlayeh@186
|
217 case $arg in
|
gokhlayeh@186
|
218 $1=*)
|
gokhlayeh@186
|
219 arg=${arg#$1=}
|
gokhlayeh@186
|
220 while [ "$arg" ]; do
|
gokhlayeh@186
|
221 echo "${arg%%:*}"
|
gokhlayeh@186
|
222 [ "${arg/:}" = "$arg" ] && return
|
gokhlayeh@186
|
223 arg=${arg#*:}
|
gokhlayeh@186
|
224 done
|
gokhlayeh@186
|
225 ;;
|
gokhlayeh@186
|
226 $1)
|
gokhlayeh@186
|
227 return
|
gokhlayeh@186
|
228 ;;
|
gokhlayeh@186
|
229 esac
|
gokhlayeh@186
|
230 done
|
gokhlayeh@186
|
231 return 1
|
pankso@7
|
232 }
|
pankso@7
|
233
|
pankso@7
|
234 # Check for the wanted package if specified in WANTED
|
paul@166
|
235 # receipt variable. Set the $src/$_pkg variable to help compile
|
paul@166
|
236 # and generate packages.
|
pankso@7
|
237 check_for_wanted()
|
pankso@7
|
238 {
|
gokhlayeh@186
|
239 if [ "$WANTED" ]; then
|
gokhlayeh@186
|
240 report "Checking for the wanted package"
|
pankso@7
|
241 if [ ! -d "$WOK/$WANTED" ]; then
|
gokhlayeh@186
|
242 report exit "\nWanted package is missing in the work directory.\n"
|
pankso@7
|
243 fi
|
gokhlayeh@186
|
244
|
erjo@38
|
245 # Checking for buildtree of Wanted package
|
pankso@39
|
246 if [ ! -d "$WOK/$WANTED/taz" ]; then
|
erjo@38
|
247 echo -e "\n\nSource files of wanted package is missing in the work directory."
|
erjo@38
|
248 echo -n "Would you like to build the missing package (y/N) ? " ; read anser
|
erjo@38
|
249 if [ "$anser" == "y" ]; then
|
erjo@38
|
250 tazwok cook $WANTED
|
erjo@38
|
251 else
|
gokhlayeh@186
|
252 report exit "\nWanted package source tree is missing in the work directory.\n"
|
erjo@38
|
253 fi
|
erjo@38
|
254 fi
|
gokhlayeh@186
|
255 report end-step
|
gokhlayeh@186
|
256
|
pankso@7
|
257 # Set wanted src path.
|
gokhlayeh@186
|
258 set_src_path && set_pkg_path
|
gokhlayeh@186
|
259
|
pankso@7
|
260 fi
|
pankso@7
|
261 }
|
pankso@7
|
262
|
erjo@38
|
263
|
pankso@40
|
264 # Check for build dependencies, notify user and install if specified.
|
pankso@18
|
265 check_for_build_depends()
|
pankso@18
|
266 {
|
gokhlayeh@186
|
267 report step "Looking for build dependencies"
|
gokhlayeh@186
|
268
|
gokhlayeh@186
|
269 # Keep the list of previously installed build_depends then compare
|
gokhlayeh@186
|
270 # it with new build_depends to know what to install and what to
|
gokhlayeh@186
|
271 # what to remove.
|
gokhlayeh@186
|
272 plan_remove=" $MISSING_PACKAGE $remove_later "
|
gokhlayeh@186
|
273 [ ! "${plan_remove// }" ] && unset plan_remove
|
gokhlayeh@186
|
274 unset MISSING_PACKAGE remove_later
|
gokhlayeh@186
|
275 rwanted=$(look_for_rwanted)
|
gokhlayeh@186
|
276
|
gokhlayeh@186
|
277 for pkg in $(scan $PACKAGE --look_for=bdep --with_dev | \
|
gokhlayeh@186
|
278 grep -v -e "Don't make the command fail" $(for i in $(look_for_rwanted); do echo " -e $i"; done))
|
pankso@18
|
279 do
|
gokhlayeh@186
|
280
|
gokhlayeh@186
|
281 # Delay the removing of previous cook depends if they are needed
|
gokhlayeh@186
|
282 # for next cook too.
|
gokhlayeh@186
|
283 if [ ! -d "$INSTALLED/$pkg" ] ; then
|
gokhlayeh@186
|
284 MISSING_PACKAGE="$MISSING_PACKAGE $pkg"
|
gokhlayeh@186
|
285 fi
|
gokhlayeh@186
|
286 if [ "$plan_remove" != "${plan_remove/ $pkg }" ]; then
|
gokhlayeh@186
|
287 plan_remove="${plan_remove/ $pkg / }"
|
gokhlayeh@186
|
288 remove_later="$remove_later $pkg"
|
gokhlayeh@186
|
289 fi
|
gokhlayeh@186
|
290 if grep -q ^$pkg$ $PACKAGES_REPOSITORY/broken; then
|
gokhlayeh@186
|
291 broken="$broken$pkg "
|
pankso@18
|
292 fi
|
pankso@18
|
293 done
|
gokhlayeh@186
|
294
|
gokhlayeh@186
|
295 # Don't cook if a depend is broken.
|
gokhlayeh@186
|
296 if [ "$broken" ]; then
|
gokhlayeh@186
|
297 MISSING_PACKAGE=$plan_remove
|
gokhlayeh@186
|
298 echo "Can't cook $PACKAGE because broken depend(s) : $broken" >&2
|
gokhlayeh@186
|
299 unset plan_remove broken
|
gokhlayeh@186
|
300
|
gokhlayeh@186
|
301 # Set report step to failed.
|
gokhlayeh@186
|
302 report_return_code=1
|
gokhlayeh@186
|
303 report end-step
|
gokhlayeh@186
|
304 return 1
|
gokhlayeh@186
|
305 fi
|
gokhlayeh@186
|
306 if [ "$MISSING_PACKAGE" ]; then
|
gokhlayeh@186
|
307 install_missing()
|
gokhlayeh@186
|
308 {
|
gokhlayeh@186
|
309 echo "Installing missing packages : $MISSING_PACKAGE"
|
gokhlayeh@186
|
310 for pkg in $MISSING_PACKAGE; do
|
gokhlayeh@186
|
311 [ -d "$INSTALLED/$pkg" ] || tazpkg get-install $pkg
|
gokhlayeh@186
|
312 done
|
gokhlayeh@186
|
313 }
|
gokhlayeh@186
|
314 if [ "$auto_install" = yes ]; then
|
gokhlayeh@186
|
315 install_missing
|
gokhlayeh@186
|
316 else
|
gokhlayeh@186
|
317 echo "================================================================================"
|
gokhlayeh@186
|
318 for pkg in $MISSING_PACKAGE
|
gokhlayeh@186
|
319 do
|
pankso@18
|
320 echo "Missing : $pkg"
|
gokhlayeh@186
|
321 done
|
gokhlayeh@186
|
322 echo "================================================================================"
|
gokhlayeh@186
|
323 echo "You can continue, exit or install missing dependencies."
|
gokhlayeh@186
|
324 echo -n "Install, continue or exit (install/y/N) ? "; read answer
|
gokhlayeh@186
|
325 case $answer in
|
gokhlayeh@186
|
326 install)
|
gokhlayeh@186
|
327 install_missing ;;
|
gokhlayeh@186
|
328 y|yes)
|
gokhlayeh@186
|
329 unset MISSING_PACKAGE;;
|
gokhlayeh@186
|
330 *)
|
gokhlayeh@186
|
331 report stop
|
gokhlayeh@186
|
332 exit 0 ;;
|
gokhlayeh@186
|
333 esac
|
gokhlayeh@186
|
334 fi
|
gokhlayeh@186
|
335 fi
|
gokhlayeh@186
|
336 report end-step
|
gokhlayeh@186
|
337 remove_build_depends $plan_remove
|
gokhlayeh@186
|
338 unset plan_remove
|
gokhlayeh@186
|
339 }
|
gokhlayeh@186
|
340
|
gokhlayeh@186
|
341 remove_build_depends()
|
gokhlayeh@186
|
342 {
|
gokhlayeh@186
|
343 [ "$1" ] || return
|
gokhlayeh@186
|
344 report step "Removing previous build dependencies"
|
gokhlayeh@186
|
345 echo "Removing theses packages : $@"
|
gokhlayeh@186
|
346 for pkg in $@; do
|
gokhlayeh@186
|
347 [ -d "$INSTALLED/$pkg" ] && echo y | tazpkg remove $pkg
|
gokhlayeh@186
|
348 done
|
gokhlayeh@186
|
349 report end-step
|
gokhlayeh@186
|
350 }
|
gokhlayeh@186
|
351
|
gokhlayeh@186
|
352 # Check if we can use the new way to handle tarball
|
gokhlayeh@186
|
353 # or if we keep the previous method by check for
|
gokhlayeh@186
|
354 # _pkg=/src= in receipt and reverse-wanted.
|
gokhlayeh@186
|
355 check_for_var_modification()
|
gokhlayeh@186
|
356 {
|
gokhlayeh@186
|
357 for var in $@; do
|
gokhlayeh@186
|
358 for pkg in $PACKAGE $(look_for_wanted) $(look_for_rwanted); do
|
gokhlayeh@186
|
359 [ -f $WOK/$pkg/receipt ] || continue
|
gokhlayeh@186
|
360 grep -q "$var=" $WOK/$pkg/receipt && return 1
|
pankso@18
|
361 done
|
gokhlayeh@186
|
362 done
|
gokhlayeh@186
|
363
|
gokhlayeh@186
|
364 # Tweak to make if; then...; fi function working with this one.
|
gokhlayeh@186
|
365 echo -n ""
|
gokhlayeh@186
|
366 }
|
gokhlayeh@186
|
367
|
gokhlayeh@186
|
368 set_src_path()
|
gokhlayeh@186
|
369 {
|
gokhlayeh@186
|
370 if check_for_var_modification src _pkg; then
|
gokhlayeh@186
|
371 src=$WOK/${WANTED:-$PACKAGE}/${WANTED:-$PACKAGE}-$VERSION
|
gokhlayeh@186
|
372 else
|
gokhlayeh@186
|
373 src=$WOK/${WANTED:-$PACKAGE}/${SOURCE:-${WANTED:-$PACKAGE}}-$VERSION
|
pankso@18
|
374 fi
|
pankso@18
|
375 }
|
pascal@76
|
376
|
gokhlayeh@186
|
377 set_pkg_path()
|
gokhlayeh@186
|
378 {
|
gokhlayeh@186
|
379 if [ -d $WOK/${WANTED:-$PACKAGE}/install ] ; then
|
gokhlayeh@186
|
380 _pkg=$WOK/${WANTED:-$PACKAGE}/install
|
gokhlayeh@186
|
381 else
|
gokhlayeh@186
|
382 _pkg=$src/_pkg
|
gokhlayeh@186
|
383 fi
|
gokhlayeh@186
|
384
|
gokhlayeh@186
|
385 }
|
gokhlayeh@186
|
386
|
gokhlayeh@186
|
387 # Output $VERSION-$EXTRAVERSION using packages.txt
|
gokhlayeh@186
|
388 get_pkg_version()
|
gokhlayeh@186
|
389 {
|
gokhlayeh@186
|
390 [ "$PACKAGE" ] || return
|
gokhlayeh@186
|
391 grep -A1 -sh ^$PACKAGE$ $1/packages.txt | tail -1 | sed 's/ *//'
|
gokhlayeh@186
|
392 }
|
gokhlayeh@186
|
393
|
gokhlayeh@186
|
394
|
gokhlayeh@186
|
395 remove_previous_tarball()
|
gokhlayeh@186
|
396 {
|
gokhlayeh@186
|
397 [ "$prev_VERSION" ] || return
|
gokhlayeh@186
|
398 if [ "$VERSION" != "$prev_VERSION" ]; then
|
gokhlayeh@186
|
399 rm -f $SOURCES_REPOSITORY/$PACKAGE-$prev_VERSION.tar.lzma
|
gokhlayeh@186
|
400 fi
|
gokhlayeh@186
|
401 }
|
gokhlayeh@186
|
402
|
gokhlayeh@186
|
403 remove_previous_package()
|
gokhlayeh@186
|
404 {
|
gokhlayeh@186
|
405 [ "$prev_VERSION" ] || return
|
gokhlayeh@186
|
406 if [ "$VERSION$EXTRAVERSION" != "$prev_VERSION" ]; then
|
gokhlayeh@186
|
407 rm -f $1/$PACKAGE-$prev_VERSION.tazpkg
|
gokhlayeh@186
|
408 fi
|
gokhlayeh@186
|
409 }
|
gokhlayeh@186
|
410
|
gokhlayeh@186
|
411 # Check for src tarball and wget if needed.
|
gokhlayeh@186
|
412 check_for_tarball()
|
gokhlayeh@186
|
413 {
|
gokhlayeh@186
|
414 if [ "$WGET_URL" ]; then
|
gokhlayeh@186
|
415 report step "Checking for source tarball"
|
gokhlayeh@186
|
416
|
gokhlayeh@186
|
417 if [ ! -f "$SOURCES_REPOSITORY/$TARBALL" ] && \
|
gokhlayeh@186
|
418 [ ! -f "$SOURCES_REPOSITORY/$PACKAGE-$VERSION.tar.lzma" ] ; then
|
gokhlayeh@186
|
419 cd $SOURCES_REPOSITORY
|
gokhlayeh@186
|
420 download $WGET_URL
|
gokhlayeh@186
|
421
|
gokhlayeh@186
|
422 # If source tarball is unreachable, try to find it on SliTaz
|
gokhlayeh@186
|
423 # mirror.
|
gokhlayeh@186
|
424 if [ ! -f "$SOURCES_REPOSITORY/$TARBALL" ]; then
|
gokhlayeh@186
|
425 report step "Download failed, try with mirror copy... "
|
gokhlayeh@186
|
426 download http://mirror.slitaz.org/sources/packages/${PACKAGE:0:1}/$PACKAGE-$VERSION.tar.lzma
|
gokhlayeh@186
|
427 fi
|
gokhlayeh@186
|
428 if [ ! -f "$SOURCES_REPOSITORY/$TARBALL" ] && \
|
gokhlayeh@186
|
429 [ ! -f "$SOURCES_REPOSITORY/$PACKAGE-$VERSION.tar.lzma" ]; then
|
gokhlayeh@186
|
430 report step "Download failed, try with mirror copy (again)... "
|
gokhlayeh@186
|
431 file=$(basename $WGET_URL)
|
gokhlayeh@186
|
432 download http://mirror.slitaz.org/sources/packages/${file:0:1}/$file
|
gokhlayeh@186
|
433 fi
|
gokhlayeh@186
|
434
|
gokhlayeh@186
|
435 # Exit if download failed to avoid errors.
|
gokhlayeh@186
|
436 if [ ! -f "$SOURCES_REPOSITORY/$TARBALL" ]; then
|
gokhlayeh@186
|
437 echo -e "\nDownload failed, exiting. Please check WGET_URL variable.\n" >&2
|
gokhlayeh@186
|
438 report end-step
|
gokhlayeh@186
|
439 return 1
|
gokhlayeh@186
|
440 fi
|
gokhlayeh@186
|
441
|
gokhlayeh@186
|
442 fi
|
gokhlayeh@186
|
443 report end-step
|
gokhlayeh@186
|
444
|
gokhlayeh@186
|
445 # Untaring source if necessary. We don't need to extract source if
|
gokhlayeh@186
|
446 # the package is built with a wanted source package.
|
gokhlayeh@186
|
447 if [ ! "$WANTED" ]; then
|
gokhlayeh@186
|
448 report step "Untaring source tarball"
|
gokhlayeh@186
|
449 if [ "$target" ]; then
|
gokhlayeh@186
|
450 src="$target"
|
gokhlayeh@186
|
451 else
|
gokhlayeh@186
|
452 set_src_path
|
gokhlayeh@186
|
453 fi
|
gokhlayeh@186
|
454 if [ ! -d "$src" ]; then
|
gokhlayeh@186
|
455
|
gokhlayeh@186
|
456 # Log process.
|
gokhlayeh@186
|
457 echo "untaring source tarball" >> $LOG
|
gokhlayeh@186
|
458
|
gokhlayeh@186
|
459 tmp_src=$WOK/$PACKAGE/tmp-src-$$
|
gokhlayeh@186
|
460 mkdir $tmp_src
|
gokhlayeh@186
|
461 if [ -f "$SOURCES_REPOSITORY/$PACKAGE-$VERSION.tar.lzma" ]; then
|
gokhlayeh@186
|
462 lzma d $SOURCES_REPOSITORY/$PACKAGE-$VERSION.tar.lzma -so | \
|
gokhlayeh@186
|
463 tar xf - -C $tmp_src
|
gokhlayeh@186
|
464 else
|
gokhlayeh@186
|
465 case "$TARBALL" in
|
gokhlayeh@186
|
466 *zip|*xpi) ( cd $tmp_src; unzip -o $SOURCES_REPOSITORY/$TARBALL );;
|
gokhlayeh@186
|
467 *bz2) tar xjf $SOURCES_REPOSITORY/$TARBALL -C $tmp_src;;
|
gokhlayeh@186
|
468 *tar) tar xf $SOURCES_REPOSITORY/$TARBALL -C $tmp_src;;
|
gokhlayeh@186
|
469 *lzma) unlzma -c $SOURCES_REPOSITORY/$TARBALL | tar xf - -C $tmp_src;;
|
gokhlayeh@186
|
470 *xz) unxz -c $SOURCES_REPOSITORY/$TARBALL | tar xf - -C $tmp_src;;
|
gokhlayeh@186
|
471 *Z) uncompress -c $SOURCES_REPOSITORY/$TARBALL | tar xf - -C $tmp_src;;
|
gokhlayeh@186
|
472 *) tar xzf $SOURCES_REPOSITORY/$TARBALL -C $tmp_src;;
|
gokhlayeh@186
|
473 esac || return 1
|
gokhlayeh@186
|
474
|
gokhlayeh@186
|
475 # Check if uncompressed tarbal is in a root dir or not.
|
gokhlayeh@186
|
476 if [ "$(ls -A $tmp_src | wc -l)" -gt 1 ]; then
|
gokhlayeh@186
|
477 if check_for_var_modification src _pkg; then
|
gokhlayeh@186
|
478 mv $tmp_src $tmp_src-1
|
gokhlayeh@186
|
479 mkdir $tmp_src
|
gokhlayeh@186
|
480 mv $tmp_src-1 $tmp_src/$PACKAGE-$VERSION
|
gokhlayeh@186
|
481 else
|
gokhlayeh@186
|
482 mv $tmp_src/* $WOK/$PACKAGE
|
gokhlayeh@186
|
483 repack_src=no
|
gokhlayeh@186
|
484 rm -r $tmp_src
|
gokhlayeh@186
|
485 fi
|
gokhlayeh@186
|
486 fi
|
gokhlayeh@186
|
487
|
gokhlayeh@186
|
488 if [ "$repack_src" = yes ]; then
|
gokhlayeh@186
|
489 report step "Repacking sources in .tar.lzma format"
|
gokhlayeh@186
|
490 cd $tmp_src
|
gokhlayeh@186
|
491 tar -c * | lzma e $SOURCES_REPOSITORY/$PACKAGE-$VERSION.tar.lzma -si
|
gokhlayeh@186
|
492 rm $SOURCES_REPOSITORY/$TARBALL
|
gokhlayeh@186
|
493 prev_VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
|
gokhlayeh@186
|
494
|
gokhlayeh@186
|
495 # Remove previous tarball if it's not used either by
|
gokhlayeh@186
|
496 # incoming and legacy packages.
|
gokhlayeh@186
|
497 [ "$prev_VERSION" != "$(get_pkg_version $PACKAGES_REPOSITORY)" ] && \
|
gokhlayeh@186
|
498 remove_previous_tarball
|
gokhlayeh@186
|
499
|
gokhlayeh@186
|
500 fi
|
gokhlayeh@186
|
501 fi
|
gokhlayeh@186
|
502 if [ -d "$tmp_src" ]; then
|
gokhlayeh@186
|
503 if ! check_for_var_modification src _pkg; then
|
gokhlayeh@186
|
504 src="${src%/*}/$(ls $tmp_src)"
|
gokhlayeh@186
|
505 fi
|
gokhlayeh@186
|
506 mv $(echo $tmp_src/*) "$src"
|
gokhlayeh@186
|
507 rm -r $tmp_src
|
gokhlayeh@186
|
508
|
gokhlayeh@186
|
509 # Permissions settings.
|
gokhlayeh@186
|
510 chown -R root.root "$src"
|
gokhlayeh@186
|
511 fi
|
gokhlayeh@186
|
512 else
|
gokhlayeh@186
|
513 echo "There's already something at $src. Abord." >&2
|
gokhlayeh@186
|
514 fi
|
gokhlayeh@186
|
515 report end-step
|
gokhlayeh@186
|
516 fi
|
gokhlayeh@186
|
517 fi
|
gokhlayeh@186
|
518 }
|
gokhlayeh@186
|
519
|
gokhlayeh@186
|
520 # Log and execute compile_rules function if it exists, to configure and
|
gokhlayeh@186
|
521 # make the package if it exists.
|
gokhlayeh@186
|
522 check_for_compile_rules()
|
gokhlayeh@186
|
523 {
|
gokhlayeh@186
|
524 if grep -q ^compile_rules $RECEIPT; then
|
gokhlayeh@186
|
525 echo "executing compile_rules" >> $LOG
|
gokhlayeh@186
|
526 report step "Executing compile_rules"
|
gokhlayeh@186
|
527 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
528 rm -f /tmp/config.site
|
gokhlayeh@186
|
529
|
gokhlayeh@186
|
530 # Free some RAM by cleaning cache if option is enabled.
|
gokhlayeh@186
|
531 freeram=$(free | grep '^-/+ buffers' | tr -s ' ' | cut -f 4 -d ' ')
|
gokhlayeh@186
|
532 #if [ "$clean_cache" = yes ] && [ "$freeram" -lt 524288 ]; then
|
gokhlayeh@186
|
533 # sync; echo 3 > /proc/sys/vm/drop_caches
|
gokhlayeh@186
|
534 # freeram=$(free | grep ^Total | tr -s ' ' | cut -f 4 -d ' ')
|
gokhlayeh@186
|
535 #fi
|
gokhlayeh@186
|
536
|
gokhlayeh@186
|
537 # Disable -pipe in CFLAGS/CXXFLAGS if less than 512Mb of free
|
gokhlayeh@186
|
538 # RAM are available.
|
gokhlayeh@186
|
539 if [ "$CFLAGS" != "${CFLAGS/-pipe}" ] || \
|
gokhlayeh@186
|
540 [ "$CXXFLAGS" != "${CXXFLAGS/-pipe}" ]; then
|
gokhlayeh@186
|
541
|
gokhlayeh@186
|
542 if [ "$freeram" -lt 524288 ]; then
|
gokhlayeh@186
|
543 tazwok_warning "Disabling -pipe compile flag because only $freeramb of RAM are available."
|
gokhlayeh@186
|
544 CFLAGS="${CFLAGS/-pipe}"
|
gokhlayeh@186
|
545 CXXFLAGS="${CXXFLAGS/-pipe}"
|
gokhlayeh@186
|
546 fi
|
gokhlayeh@186
|
547 fi
|
gokhlayeh@186
|
548 unset freeram
|
gokhlayeh@186
|
549
|
gokhlayeh@186
|
550 # Set cook environnement variables.
|
gokhlayeh@186
|
551 [ "$src" ] || set_src_path
|
gokhlayeh@186
|
552 [ "$DESTDIR" ] || DESTDIR="$WOK/$PACKAGE/install"
|
gokhlayeh@186
|
553 [ "$CONFIG_SITE" ] || CONFIG_SITE=/etc/config.site
|
gokhlayeh@186
|
554 export CFLAGS CXXFLAGS MAKEFLAGS DESTDIR BUILD_HOST \
|
gokhlayeh@186
|
555 CONFIG_SITE default_prefix \
|
gokhlayeh@186
|
556 default_datarootdir default_datadir default_localedir \
|
gokhlayeh@186
|
557 default_infodir default_mandir default_build default_host
|
gokhlayeh@186
|
558 local LC_ALL=POSIX LANG=POSIX
|
gokhlayeh@186
|
559 compile_rules
|
gokhlayeh@186
|
560
|
gokhlayeh@186
|
561 # Check if config.site has been used.
|
gokhlayeh@186
|
562 # /!\ disabled since it screw the return_code of the step.
|
gokhlayeh@186
|
563 #if [ -f /tmp/config.site ]; then
|
gokhlayeh@186
|
564 # rm /tmp/config.site
|
gokhlayeh@186
|
565 #else
|
gokhlayeh@186
|
566 # tazwok_warning "config.site hasn't been used during \
|
gokhlayeh@186
|
567 #configuration process."
|
gokhlayeh@186
|
568 #fi
|
gokhlayeh@186
|
569
|
gokhlayeh@186
|
570 report end-step
|
gokhlayeh@186
|
571 fi
|
gokhlayeh@186
|
572 }
|
gokhlayeh@186
|
573
|
gokhlayeh@186
|
574 # Check for loop in deps tree. /!\ can be removed
|
pascal@76
|
575 check_for_deps_loop()
|
pascal@76
|
576 {
|
pascal@76
|
577 local list
|
pascal@76
|
578 local pkg
|
pascal@76
|
579 local deps
|
pascal@76
|
580 pkg=$1
|
pascal@76
|
581 shift
|
pascal@76
|
582 [ -n "$1" ] || return
|
pascal@76
|
583 list=""
|
gokhlayeh@186
|
584
|
pascal@76
|
585 # Filter out already processed deps
|
pascal@76
|
586 for i in $@; do
|
pascal@76
|
587 case " $ALL_DEPS" in
|
pascal@76
|
588 *\ $i\ *);;
|
pascal@76
|
589 *) list="$list $i";;
|
pascal@76
|
590 esac
|
pascal@76
|
591 done
|
pascal@76
|
592 ALL_DEPS="$ALL_DEPS$list "
|
pascal@76
|
593 for i in $list; do
|
pascal@76
|
594 [ -f $i/receipt ] || continue
|
pascal@76
|
595 deps="$(DEPENDS=""; . $i/receipt; echo $DEPENDS)"
|
pascal@76
|
596 case " $deps " in
|
pascal@76
|
597 *\ $pkg\ *) echo -e "$MSG $i"; MSG="";;
|
pascal@76
|
598 *) check_for_deps_loop $pkg $deps;;
|
pascal@76
|
599 esac
|
pascal@76
|
600 done
|
pascal@76
|
601 }
|
pascal@76
|
602
|
erjo@53
|
603 download()
|
erjo@53
|
604 {
|
erjo@53
|
605 for file in $@; do
|
gokhlayeh@186
|
606 wget -q $file && break
|
erjo@53
|
607 done
|
erjo@53
|
608 }
|
pankso@18
|
609
|
gokhlayeh@186
|
610 # Regenerate every package that wants a PACKAGE compiled
|
gokhlayeh@186
|
611 # /!\
|
pascal@138
|
612
|
pascal@156
|
613 refresh_packages_from_compile()
|
pascal@156
|
614 {
|
pascal@156
|
615 # make tazwok genpkg happy
|
pascal@156
|
616 mkdir $WOK/$PACKAGE/taz
|
gokhlayeh@186
|
617
|
gokhlayeh@186
|
618 # Cook rwanted in default or specied order
|
gokhlayeh@186
|
619 genlist=" $(look_for_rwanted | tr '\n' ' ') "
|
gokhlayeh@186
|
620 for i in $(look_for_cookopt genpkg | tac); do
|
gokhlayeh@186
|
621 [ "${genlist/ $i }" = "$genlist" ] && continue
|
gokhlayeh@186
|
622 genlist=" $i${genlist/ $i / }"
|
pascal@156
|
623 done
|
gokhlayeh@186
|
624 for i in $genlist; do
|
gokhlayeh@186
|
625 tazwok genpkg $i --SLITAZ_VERSION=$SLITAZ_VERSION \
|
gokhlayeh@186
|
626 --undigest=$undigest --SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@186
|
627 done
|
gokhlayeh@186
|
628
|
pascal@156
|
629 # Still needs tazwok genpkg for this package
|
pascal@156
|
630 rm -rf $WOK/$PACKAGE/taz
|
pascal@156
|
631 }
|
pascal@156
|
632
|
MikeDSmith25@82
|
633 # Copy all generic files (locale, pixmaps, .desktop). We use standard paths,
|
pankso@22
|
634 # so some packages need to copy these files with the receipt and genpkg_rules.
|
pankso@22
|
635 # This function is executed by gen_package when 'tazwok genpkg'.
|
pankso@22
|
636 copy_generic_files()
|
pankso@22
|
637 {
|
MikeDSmith25@82
|
638 # In most cases, locales are in $_pkg/usr/share/locale so we copy files
|
pankso@22
|
639 # using generic variables and $LOCALE from Tazwok config file.
|
gokhlayeh@186
|
640 if [ "$LOCALE" ]; then
|
pankso@22
|
641 if [ -d "$_pkg/usr/share/locale" ]; then
|
pankso@22
|
642 for i in $LOCALE
|
pankso@22
|
643 do
|
pankso@37
|
644 if [ -d "$_pkg/usr/share/locale/$i" ]; then
|
pankso@37
|
645 mkdir -p $fs/usr/share/locale
|
pankso@37
|
646 cp -a $_pkg/usr/share/locale/$i $fs/usr/share/locale
|
pankso@37
|
647 fi
|
pankso@22
|
648 done
|
pankso@22
|
649 fi
|
pankso@22
|
650 fi
|
gokhlayeh@186
|
651
|
pankso@133
|
652 # Pixmaps (PNG or/and XPM only). Some icons/images can be added through
|
MikeDSmith25@82
|
653 # genpkg_rules and generic copy can be disabled with GENERIC_PIXMAPS="no"
|
pankso@31
|
654 # in pkg receipt.
|
gokhlayeh@186
|
655 if [ "$GENERIC_PIXMAPS" != "no" ]; then
|
pankso@22
|
656 if [ -d "$_pkg/usr/share/pixmaps" ]; then
|
pankso@27
|
657 mkdir -p $fs/usr/share/pixmaps
|
pankso@31
|
658 cp -a $_pkg/usr/share/pixmaps/$PACKAGE.png \
|
pankso@31
|
659 $fs/usr/share/pixmaps 2>/dev/null
|
pankso@31
|
660 cp -a $_pkg/usr/share/pixmaps/$PACKAGE.xpm \
|
pankso@22
|
661 $fs/usr/share/pixmaps 2>/dev/null
|
pankso@23
|
662 fi
|
gokhlayeh@186
|
663
|
MikeDSmith25@82
|
664 # Custom or homemade PNG pixmap can be in stuff.
|
pankso@23
|
665 if [ -f "stuff/$PACKAGE.png" ]; then
|
pankso@27
|
666 mkdir -p $fs/usr/share/pixmaps
|
pankso@23
|
667 cp -a stuff/$PACKAGE.png $fs/usr/share/pixmaps
|
pankso@22
|
668 fi
|
pankso@22
|
669 fi
|
gokhlayeh@186
|
670
|
pankso@22
|
671 # Desktop entry (.desktop).
|
pankso@22
|
672 if [ -d "$_pkg/usr/share/applications" ]; then
|
pankso@22
|
673 cp -a $_pkg/usr/share/applications $fs/usr/share
|
pankso@23
|
674 fi
|
gokhlayeh@186
|
675
|
MikeDSmith25@82
|
676 # Homemade desktop file(s) can be in stuff.
|
pankso@34
|
677 if [ -d "stuff/applications" ]; then
|
pankso@42
|
678 mkdir -p $fs/usr/share
|
pankso@42
|
679 cp -a stuff/applications $fs/usr/share
|
pankso@34
|
680 fi
|
pankso@34
|
681 if [ -f "stuff/$PACKAGE.desktop" ]; then
|
pankso@42
|
682 mkdir -p $fs/usr/share/applications
|
pankso@42
|
683 cp -a stuff/$PACKAGE.desktop $fs/usr/share/applications
|
pankso@22
|
684 fi
|
pankso@22
|
685 }
|
pankso@22
|
686
|
pankso@25
|
687 # Find and strip : --strip-all (-s) or --strip-debug on static libs.
|
pankso@25
|
688 strip_package()
|
pankso@25
|
689 {
|
gokhlayeh@186
|
690 look_for_cookopt !strip && return
|
gokhlayeh@186
|
691 report step "Executing strip on all files"
|
gokhlayeh@186
|
692
|
pankso@25
|
693 # Binaries.
|
pankso@25
|
694 for dir in $fs/bin $fs/sbin $fs/usr/bin $fs/usr/sbin $fs/usr/games
|
pankso@25
|
695 do
|
pankso@25
|
696 if [ -d "$dir" ]; then
|
pankso@25
|
697 find $dir -type f -exec strip -s '{}' 2>/dev/null \;
|
pankso@25
|
698 fi
|
pankso@25
|
699 done
|
gokhlayeh@186
|
700
|
pankso@25
|
701 # Libraries.
|
pankso@25
|
702 find $fs -name "*.so*" -exec strip -s '{}' 2>/dev/null \;
|
pankso@25
|
703 find $fs -name "*.a" -exec strip --strip-debug '{}' 2>/dev/null \;
|
gokhlayeh@186
|
704 report end-step
|
gokhlayeh@186
|
705 }
|
gokhlayeh@186
|
706
|
gokhlayeh@186
|
707 # Remove .pyc and .pyo files from packages
|
gokhlayeh@186
|
708 py_compiled_files_remove()
|
gokhlayeh@186
|
709 {
|
gokhlayeh@186
|
710 report step "Removing all .pyc and .pyo files from package ..."
|
gokhlayeh@186
|
711 find $fs -type f -name "*.pyc" -delete 2>/dev/null
|
gokhlayeh@186
|
712 find $fs -type f -name "*.pyo" -delete 2>/dev/null
|
gokhlayeh@186
|
713 report end-step
|
pankso@25
|
714 }
|
pankso@25
|
715
|
pankso@135
|
716 # Check FSH in a slitaz package (Path: /:/usr)
|
pankso@135
|
717 check_fsh()
|
pankso@135
|
718 {
|
pankso@135
|
719 cd $WOK/$PACKAGE/taz/*/fs
|
pascal@149
|
720 [ -n "$FSH" ] || FSH="bin boot dev etc home init lib media mnt proc \
|
pascal@149
|
721 root sbin share sys tmp usr var vz usr/bin usr/games usr/include usr/lib \
|
pascal@149
|
722 usr/local usr/sbin usr/share usr/src"
|
pankso@135
|
723 for i in `ls -d * usr/* 2>/dev/null`
|
pankso@135
|
724 do
|
pankso@135
|
725 if ! echo $FSH | grep -q $i; then
|
gokhlayeh@186
|
726 echo "Wrong path: /$i" >&2
|
pankso@135
|
727 error=1
|
pankso@135
|
728 fi
|
pankso@135
|
729 done
|
pankso@135
|
730 if [ "$error" = "1" ]; then
|
pankso@135
|
731 cat << _EOT_
|
pankso@135
|
732
|
paul@155
|
733 Package will install files in a non standard directory and won't be generated.
|
paul@154
|
734 You may have a wrong copy path in genpkg_rules or need to add some options to
|
pankso@135
|
735 configure in compile_rules. Some valid options for SliTaz (Linux FSH):
|
pankso@135
|
736
|
pankso@135
|
737 --prefix=/usr
|
pankso@135
|
738 --sysconfdir=/etc
|
pankso@135
|
739 --libexecdir=/usr/lib/(pkgname)
|
pankso@135
|
740 --localstatedir=/var
|
pankso@135
|
741 --mandir=/usr/share/man
|
pankso@135
|
742 --infodir=/usr/share/info
|
pankso@135
|
743
|
paul@152
|
744 For more information please read SliTaz docs and run: ./configure --help
|
pankso@135
|
745 ================================================================================
|
pankso@135
|
746 $PACKAGE package generation aborted.
|
pankso@135
|
747
|
pankso@135
|
748 _EOT_
|
gokhlayeh@186
|
749
|
pankso@135
|
750 # Dont generate a corrupted package.
|
pankso@137
|
751 cd $WOK/$PACKAGE && rm -rf taz
|
gokhlayeh@186
|
752 report exit
|
pankso@135
|
753 fi
|
gokhlayeh@186
|
754 }
|
gokhlayeh@186
|
755
|
gokhlayeh@186
|
756 gen_cookmd5()
|
gokhlayeh@186
|
757 {
|
gokhlayeh@186
|
758 # md5sum of cooking stuff make tazwok able to check for changes
|
gokhlayeh@186
|
759 # without hg.
|
gokhlayeh@186
|
760 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
761 md5sum receipt > md5
|
gokhlayeh@186
|
762 [ -f description.txt ] && md5sum description.txt >> md5
|
gokhlayeh@186
|
763 if [ -d stuff ]; then
|
gokhlayeh@186
|
764 find stuff | while read file; do
|
gokhlayeh@186
|
765 md5sum $file >> md5
|
gokhlayeh@186
|
766 done
|
gokhlayeh@186
|
767 fi
|
pankso@135
|
768 }
|
pankso@135
|
769
|
MikeDSmith25@82
|
770 # Create a package tree and build the gziped cpio archive
|
pankso@7
|
771 # to make a SliTaz (.tazpkg) package.
|
pankso@7
|
772 gen_package()
|
pankso@7
|
773 {
|
pankso@7
|
774 check_root
|
pankso@7
|
775 check_for_package_on_cmdline
|
pankso@7
|
776 check_for_receipt
|
pascal@74
|
777 EXTRAVERSION=""
|
pankso@7
|
778 . $RECEIPT
|
gokhlayeh@186
|
779
|
pascal@86
|
780 # May compute VERSION
|
pascal@86
|
781 if grep -q ^get_version $RECEIPT; then
|
pascal@86
|
782 get_version
|
pascal@86
|
783 fi
|
pankso@7
|
784 check_for_wanted
|
pankso@7
|
785 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
786
|
pankso@7
|
787 # Remove old Tazwok package files.
|
gokhlayeh@186
|
788 [ -d "taz" ] && rm -rf taz
|
gokhlayeh@186
|
789
|
MikeDSmith25@82
|
790 # Create the package tree and set useful variables.
|
pankso@7
|
791 mkdir -p taz/$PACKAGE-$VERSION/fs
|
pankso@7
|
792 fs=taz/$PACKAGE-$VERSION/fs
|
gokhlayeh@186
|
793
|
MikeDSmith25@82
|
794 # Set $src for standard package and $_pkg variables.
|
gokhlayeh@186
|
795 set_src_path && set_pkg_path
|
gokhlayeh@186
|
796
|
pankso@135
|
797 # Execute genpkg_rules, check package and copy generic files to build
|
pankso@135
|
798 # the package.
|
gokhlayeh@186
|
799 report step "Building $PACKAGE with the receipt"
|
gokhlayeh@186
|
800 report open-bloc
|
pankso@28
|
801 if grep -q ^genpkg_rules $RECEIPT; then
|
gokhlayeh@186
|
802
|
pankso@7
|
803 # Log process.
|
pankso@7
|
804 echo "executing genpkg_rules" >> $LOG
|
gokhlayeh@186
|
805 report step "Executing genpkg_rules"
|
pascal@126
|
806 genpkg_rules
|
gokhlayeh@186
|
807 report end-step
|
pankso@135
|
808 check_fsh
|
pankso@25
|
809 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
810
|
pankso@133
|
811 # Skip generic files for packages with a WANTED variable
|
pankso@24
|
812 # (dev and splited pkgs).
|
gokhlayeh@186
|
813 if [ ! "$WANTED" ]; then
|
pankso@24
|
814 copy_generic_files
|
pankso@24
|
815 fi
|
pankso@25
|
816 strip_package
|
gokhlayeh@186
|
817 py_compiled_files_remove
|
pankso@7
|
818 else
|
gokhlayeh@186
|
819 echo "No package rules to gen $PACKAGE..." >&2
|
gokhlayeh@186
|
820 report exit
|
pankso@7
|
821 fi
|
gokhlayeh@186
|
822
|
paul@154
|
823 # Copy the receipt and description (if exists) into the binary package tree.
|
pankso@7
|
824 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
825 report step "Copying the receipt"
|
pankso@7
|
826 cp receipt taz/$PACKAGE-$VERSION
|
gokhlayeh@186
|
827 report end-step
|
pascal@89
|
828 if grep -q ^get_version $RECEIPT; then
|
gokhlayeh@186
|
829 report step "Updating version in receipt"
|
pascal@89
|
830 sed -i "s/^VERSION=.*/VERSION=\"$VERSION\"/" \
|
pascal@89
|
831 taz/$PACKAGE-$VERSION/receipt
|
gokhlayeh@186
|
832 report end-step
|
pascal@89
|
833 fi
|
pankso@7
|
834 if [ -f "description.txt" ]; then
|
gokhlayeh@186
|
835 report step "Copying the description file"
|
pankso@7
|
836 cp description.txt taz/$PACKAGE-$VERSION
|
gokhlayeh@186
|
837 report end-step
|
pankso@7
|
838 fi
|
gokhlayeh@186
|
839
|
gokhlayeh@186
|
840 # Generate md5 of cooking stuff to look for commit later.
|
gokhlayeh@186
|
841 gen_cookmd5
|
gokhlayeh@186
|
842 echo -e "\n# md5sum of cooking stuff :" >> taz/$PACKAGE-$VERSION/receipt
|
gokhlayeh@186
|
843 cat md5 | sed 's/^/# /' >> taz/$PACKAGE-$VERSION/receipt
|
gokhlayeh@186
|
844
|
MikeDSmith25@82
|
845 # Create the files.list by redirecting find output.
|
gokhlayeh@186
|
846 report step "Creating the list of files"
|
pascal@15
|
847 cd taz/$PACKAGE-$VERSION
|
pascal@13
|
848 LAST_FILE=""
|
pascal@15
|
849 ( find fs -print; echo ) | while read file; do
|
gokhlayeh@186
|
850 if [ "$LAST_FILE" ]; then
|
pascal@15
|
851 case "$file" in
|
pascal@13
|
852 $LAST_FILE/*)
|
pankso@133
|
853 case "$(ls -ld "$LAST_FILE")" in
|
pascal@15
|
854 drwxr-xr-x\ *\ root\ *\ root\ *);;
|
pascal@15
|
855 *) echo ${LAST_FILE#fs};;
|
pascal@13
|
856 esac;;
|
pascal@15
|
857 *) echo ${LAST_FILE#fs};;
|
pascal@13
|
858 esac
|
pascal@13
|
859 fi
|
pascal@15
|
860 LAST_FILE="$file"
|
pascal@15
|
861 done > files.list
|
gokhlayeh@186
|
862
|
gokhlayeh@186
|
863 # Next, check if something has changed in lib files.
|
gokhlayeh@186
|
864 if [ ! "$cook_rdep" ]; then
|
gokhlayeh@186
|
865 report step "Look for changes in libraries"
|
gokhlayeh@186
|
866
|
gokhlayeh@186
|
867 # Find the most recent previous files.list.
|
gokhlayeh@186
|
868 # /!\ need some work to check only for minor update (not micro)
|
gokhlayeh@186
|
869 if grep -q ^$PACKAGE$ $INCOMING_REPOSITORY/packages.txt 2>/dev/null; then
|
gokhlayeh@186
|
870 files_list_dir=$PACKAGES_INCOMING
|
gokhlayeh@186
|
871 elif grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/packages.txt 2>/dev/null; then
|
gokhlayeh@186
|
872 files_list_dir=$PACKAGES_REPOSITORY
|
gokhlayeh@186
|
873 elif [ "$undigest" ] && grep -q ^$PACKAGE$ $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/packages.txt 2>/dev/null; then
|
gokhlayeh@186
|
874 files_list_dir=$SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming
|
gokhlayeh@186
|
875 elif [ "$undigest" ] && grep -q ^$PACKAGE$ $SLITAZ_DIR/$SLITAZ_VERSION/packages/packages.txt 2>/dev/null; then
|
gokhlayeh@186
|
876 files_list_dir=$SLITAZ_DIR/$SLITAZ_VERSION/packages
|
gokhlayeh@186
|
877 fi
|
gokhlayeh@186
|
878
|
gokhlayeh@186
|
879 # If founded, generate libs.list (new and previous)
|
gokhlayeh@186
|
880 if [ "$files_list_dir" ] && [ -f $files_list_dir/files.list.lzma ]; then
|
gokhlayeh@186
|
881 grep -e '\.so$' -e '\.so.[0-9]' files.list >> $tmp/libs.list.new
|
gokhlayeh@186
|
882 if [ -f $tmp/libs.list.new ]; then
|
gokhlayeh@186
|
883 lzma d $files_list_dir/files.list.lzma $tmp/files.list 2>/dev/null
|
gokhlayeh@186
|
884 grep ^$PACKAGE: $tmp/files.list >> $tmp/libs.list.previous
|
gokhlayeh@186
|
885
|
gokhlayeh@186
|
886 # If something as changed in libs path/names, plan recook of all
|
gokhlayeh@186
|
887 # reverse build depends.
|
gokhlayeh@186
|
888 [ "$(diff -q $tmp/libs.list.old $tmp/libs.list.previous 2>/dev/null)" ] && cook_rdep=yes
|
gokhlayeh@186
|
889 rm $tmp/libs.list.new $tmp/files.list $tmp/libs.list.old 2>/dev/null
|
gokhlayeh@186
|
890 unset files_list_dir
|
gokhlayeh@186
|
891 fi
|
gokhlayeh@186
|
892 fi
|
gokhlayeh@186
|
893 report end-step
|
gokhlayeh@186
|
894 fi
|
gokhlayeh@186
|
895 if [ ! "$EXTRAVERSION" ]; then
|
pascal@84
|
896 case "$PACKAGE" in
|
pascal@84
|
897 linux*);;
|
pascal@85
|
898 *) EXTRAVERSION="$(grep '/lib/modules/.*-slitaz/' files.list |\
|
pascal@84
|
899 head -1 | sed 's|/lib/modules/\(.*\)-slitaz/.*|_\1|')";;
|
pascal@84
|
900 esac
|
pascal@84
|
901 fi
|
gokhlayeh@186
|
902 rm -f $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg 2> /dev/null
|
gokhlayeh@186
|
903 report step "Creating md5sum of files"
|
pascal@70
|
904 while read file; do
|
pascal@71
|
905 [ -L "fs$file" ] && continue
|
pascal@71
|
906 [ -f "fs$file" ] || continue
|
pascal@71
|
907 md5sum "fs$file" | sed 's/ fs/ /'
|
pascal@70
|
908 done < files.list > md5sum
|
pascal@84
|
909 UNPACKED_SIZE=$(du -chs fs receipt files.list md5sum description.txt \
|
pascal@84
|
910 2> /dev/null | awk '{ sz=$1 } END { print sz }')
|
gokhlayeh@186
|
911
|
pankso@7
|
912 # Build cpio archives. Find, cpio and gzip the fs, finish by
|
pankso@7
|
913 # removing the fs tree.
|
gokhlayeh@186
|
914 # Don't log this because compression always output error messages.
|
gokhlayeh@186
|
915 report end-step
|
pascal@150
|
916 find fs -print | cpio -o -H newc | case "$PACKAGE-$COMPRESSION" in
|
pascal@150
|
917 tazpkg-lzma) gzip > fs.cpio.gz;;
|
pascal@150
|
918 *-lzma) lzma e fs.cpio.lzma -si;;
|
pascal@150
|
919 *) gzip > fs.cpio.gz;;
|
pascal@150
|
920 esac && rm -rf fs
|
pascal@150
|
921 PACKED_SIZE=$(du -chs fs.cpio.* receipt files.list md5sum \
|
pascal@84
|
922 description.txt 2> /dev/null | awk '{ sz=$1 } END { print sz }')
|
gokhlayeh@186
|
923 report step "Updating receipt sizes"
|
pascal@138
|
924 sed -i '/^PACKED_SIZE/d' receipt
|
pascal@138
|
925 sed -i '/^UNPACKED_SIZE/d' receipt
|
pascal@59
|
926 sed -i "s/^PACKAGE=/PACKED_SIZE=\"$PACKED_SIZE\"\nUNPACKED_SIZE=\"$UNPACKED_SIZE\"\nPACKAGE=/" receipt
|
pascal@86
|
927 sed -i "s/^VERSION=$/VERSION=\"$VERSION\"/" receipt
|
pascal@72
|
928 if [ -n "$EXTRAVERSION" ]; then
|
gokhlayeh@186
|
929 report step "Updating receipt EXTRAVERSION"
|
pascal@72
|
930 sed -i s/^EXTRAVERSION.*$// receipt
|
pascal@72
|
931 sed -i "s/^VERSION=/EXTRAVERSION=\"$EXTRAVERSION\"\nVERSION=/" receipt
|
pascal@72
|
932 fi
|
gokhlayeh@186
|
933 prev_VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
|
gokhlayeh@186
|
934 remove_previous_package $INCOMING_REPOSITORY
|
gokhlayeh@186
|
935 report step "Creating full cpio archive"
|
gokhlayeh@186
|
936 find . -print | cpio -o -H newc > $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg
|
gokhlayeh@186
|
937
|
paul@154
|
938 # Restore package tree in case we want to browse it.
|
gokhlayeh@186
|
939 report step "Restoring original package tree"
|
gokhlayeh@186
|
940 ( zcat fs.cpio.gz 2> /dev/null || unlzma -c fs.cpio.lzma ) | cpio --quiet -id
|
pascal@150
|
941 rm fs.cpio.* && cd ..
|
gokhlayeh@186
|
942
|
pankso@7
|
943 # Log process.
|
pascal@69
|
944 echo "$PACKAGE-$VERSION$EXTRAVERSION.tazpkg (done)" >> $LOG
|
gokhlayeh@186
|
945 report close-bloc
|
pascal@68
|
946 echo "Package $PACKAGE ($VERSION$EXTRAVERSION) generated."
|
gokhlayeh@186
|
947 echo "Size : `du -sh $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg`"
|
pankso@7
|
948 echo ""
|
gokhlayeh@186
|
949
|
gokhlayeh@186
|
950 # Remove package from broken & genpkg list if needed.
|
gokhlayeh@186
|
951 if grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/broken; then
|
gokhlayeh@186
|
952 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
953 regen_cooklist=yes
|
gokhlayeh@186
|
954 fi
|
gokhlayeh@186
|
955
|
gokhlayeh@186
|
956 # Remove package from genpkglist.
|
gokhlayeh@186
|
957 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/genpkglist
|
pankso@7
|
958 }
|
pankso@7
|
959
|
gokhlayeh@186
|
960 ########################################################################
|
gokhlayeh@186
|
961 ######################## START OF NEW FUNCTIONS ########################
|
gokhlayeh@186
|
962 ########################################################################
|
gokhlayeh@186
|
963
|
gokhlayeh@186
|
964 ########################################################################
|
gokhlayeh@186
|
965 # This section contains functions used by several other functions
|
gokhlayeh@186
|
966 # bellow.
|
gokhlayeh@186
|
967 ########################
|
gokhlayeh@186
|
968
|
gokhlayeh@186
|
969 # Look for receipt/files.list in wok. If they can't be found, get them
|
gokhlayeh@186
|
970 # from package. Accept one argument : absolute path to package.
|
gokhlayeh@186
|
971 get_pkg_files()
|
pankso@28
|
972 {
|
gokhlayeh@186
|
973 pkg_files_dir=$tmp/$(basename ${1%.tazpkg})
|
gokhlayeh@186
|
974 mkdir -p $pkg_files_dir && \
|
gokhlayeh@186
|
975 cd $pkg_files_dir && \
|
gokhlayeh@186
|
976 cpio --quiet -idm receipt < $1 && \
|
gokhlayeh@186
|
977 cpio --quiet -idm files.list < $1
|
gokhlayeh@186
|
978 }
|
gokhlayeh@170
|
979
|
gokhlayeh@186
|
980 ########################################################################
|
gokhlayeh@186
|
981 # This section contains functions to generate packages/wok databases.
|
gokhlayeh@186
|
982 ########################
|
gokhlayeh@186
|
983
|
gokhlayeh@186
|
984 # Generic actions in both gen-packages-db/gen-wok-db
|
gokhlayeh@186
|
985 gen_db()
|
gokhlayeh@186
|
986 {
|
gokhlayeh@186
|
987 report step "Generating $dbtype database"
|
gokhlayeh@186
|
988 report open-bloc
|
gokhlayeh@186
|
989 report step "Removing old files"
|
gokhlayeh@186
|
990 for file in $files_list; do
|
gokhlayeh@186
|
991 [ -f $file ] && rm $file
|
gokhlayeh@186
|
992 [ "${file##*.}" != lzma ] && touch $file
|
gokhlayeh@186
|
993 done
|
gokhlayeh@186
|
994
|
gokhlayeh@186
|
995 # Generate wok/packages data lists.
|
gokhlayeh@186
|
996 gen_${dbtype}_db
|
gokhlayeh@186
|
997 report close-bloc
|
gokhlayeh@186
|
998 }
|
gokhlayeh@186
|
999
|
gokhlayeh@186
|
1000 gen_packages_db()
|
gokhlayeh@186
|
1001 {
|
gokhlayeh@186
|
1002 # pkg_repository can be $PACKAGES_REPOSITORY or $INCOMING_REPOSITORY.
|
gokhlayeh@186
|
1003 [ ! "$pkg_repository" ] && pkg_repository=$PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1004 cd $pkg_repository
|
gokhlayeh@186
|
1005 packages_db_start
|
gokhlayeh@186
|
1006 unset RECEIPT
|
gokhlayeh@186
|
1007 report step "Reading datas from all packages"
|
gokhlayeh@186
|
1008 for pkg in $(echo $pkg_repository/*.tazpkg | grep -v '\*'); do
|
gokhlayeh@186
|
1009 get_packages_info
|
gokhlayeh@186
|
1010 done
|
gokhlayeh@186
|
1011 report end-step
|
gokhlayeh@186
|
1012 packages_db_end
|
gokhlayeh@186
|
1013 }
|
gokhlayeh@186
|
1014
|
gokhlayeh@186
|
1015 update_packages_db()
|
gokhlayeh@186
|
1016 {
|
gokhlayeh@186
|
1017 [ ! "$pkg_repository" ] && pkg_repository=$PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1018 cd $pkg_repository
|
gokhlayeh@186
|
1019
|
gokhlayeh@186
|
1020 # If files are missing, generate the lists - not only update.
|
gokhlayeh@186
|
1021 dbtype=packages
|
gokhlayeh@186
|
1022 files_list="packages.list packages.equiv packages.md5 packages.desc packages.txt"
|
gokhlayeh@186
|
1023 for file in $files_list; do
|
gokhlayeh@186
|
1024 if [ ! -f "$file" ]; then
|
gokhlayeh@186
|
1025 gen_db
|
gokhlayeh@186
|
1026 return
|
gokhlayeh@186
|
1027 fi
|
gokhlayeh@186
|
1028 done
|
gokhlayeh@186
|
1029 if [ -f files.list.lzma ]; then
|
gokhlayeh@186
|
1030 lzma d files.list.lzma files.list
|
gokhlayeh@186
|
1031 else
|
gokhlayeh@186
|
1032 gen_db
|
gokhlayeh@186
|
1033 fi
|
gokhlayeh@186
|
1034 packages_db_start
|
gokhlayeh@186
|
1035 report step "Updating packages lists"
|
gokhlayeh@186
|
1036 touch $tmp/pkglist
|
gokhlayeh@186
|
1037
|
gokhlayeh@186
|
1038 # Look for removed/update packages.
|
gokhlayeh@186
|
1039 for PACKAGE in $(grep ^[0-9,a-z,A-Z] packages.txt); do
|
gokhlayeh@186
|
1040 pkg=$(echo $pkg_repository/`grep ^$PACKAGE- packages.list | sed 1!d`*.tazpkg | grep -v '\*')
|
gokhlayeh@186
|
1041 if [ ! "$pkg" ]; then
|
gokhlayeh@186
|
1042 pkg=$(grep ^$PACKAGE- packages.list | sed 1!d).tazpkg
|
gokhlayeh@186
|
1043 erase_package_info
|
gokhlayeh@186
|
1044 else
|
gokhlayeh@186
|
1045 echo $pkg >> $tmp/pkglist
|
gokhlayeh@186
|
1046 if [ "$pkg" -nt "packages.list" ]; then
|
gokhlayeh@186
|
1047 erase_package_info
|
gokhlayeh@186
|
1048 get_packages_info
|
gokhlayeh@186
|
1049 fi
|
gokhlayeh@170
|
1050 fi
|
gokhlayeh@170
|
1051 done
|
gokhlayeh@170
|
1052
|
gokhlayeh@186
|
1053 # Look for new packages.
|
gokhlayeh@186
|
1054 for pkg in $(echo $pkg_repository/*.tazpkg | grep -v '\*'); do
|
gokhlayeh@186
|
1055 if ! grep -q ^$pkg$ $tmp/pkglist; then
|
gokhlayeh@186
|
1056 get_packages_info
|
gokhlayeh@186
|
1057 fi
|
gokhlayeh@186
|
1058 done
|
gokhlayeh@186
|
1059 rm $tmp/pkglist
|
gokhlayeh@186
|
1060 report end-step
|
gokhlayeh@186
|
1061 packages_db_end
|
gokhlayeh@186
|
1062 }
|
gokhlayeh@186
|
1063
|
gokhlayeh@186
|
1064 packages_db_start()
|
gokhlayeh@186
|
1065 {
|
gokhlayeh@186
|
1066 if [ ! -s packages.txt ]; then
|
gokhlayeh@186
|
1067 echo "# SliTaz GNU/Linux - Packages list
|
gokhlayeh@186
|
1068 #
|
gokhlayeh@186
|
1069 # Packages : unknow
|
gokhlayeh@186
|
1070 # Date : $(date +%Y-%m-%d\ \%H:%M:%S)
|
gokhlayeh@186
|
1071 #" > packages.txt
|
pascal@62
|
1072 else
|
gokhlayeh@186
|
1073 sed -e 's/^# Packages :.*/# Packages : unknow/' \
|
gokhlayeh@186
|
1074 -e "s/# Date :.*/# Date : $(date +%Y-%m-%d\ \%H:%M:%S)/" \
|
gokhlayeh@186
|
1075 -i packages.txt
|
pascal@60
|
1076 fi
|
gokhlayeh@186
|
1077
|
gokhlayeh@186
|
1078 # Needed in some case as tazwok define RECEIPT at configuration time
|
gokhlayeh@186
|
1079 # in this particular case it can broke the script.
|
gokhlayeh@186
|
1080 unset RECEIPT
|
gokhlayeh@186
|
1081 }
|
gokhlayeh@186
|
1082
|
gokhlayeh@186
|
1083 erase_package_info()
|
gokhlayeh@186
|
1084 {
|
gokhlayeh@186
|
1085 cd $pkg_repository
|
gokhlayeh@186
|
1086 sed "/^$PACKAGE$/,/^$/d" -i packages.txt
|
gokhlayeh@186
|
1087 sed "/^$PACKAGE /d" -i packages.desc
|
gokhlayeh@186
|
1088 sed -e "s/=$PACKAGE /= /" -e "s/ $PACKAGE / /" -e "s/ $PACKAGE$//" \
|
gokhlayeh@186
|
1089 -e "/=$PACKAGE$/d" -e "s/=[0-9,a-z,A-Z]:$PACKAGE /= /" \
|
gokhlayeh@186
|
1090 -e "s/ [0-9,a-z,A-Z]:$PACKAGE / /" -e "s/ [0-9,a-z,A-Z]:$PACKAGE$/ /" \
|
gokhlayeh@186
|
1091 -e "/=[0-9,a-z,A-Z]:$PACKAGE$/d" \
|
gokhlayeh@186
|
1092 -i packages.equiv
|
gokhlayeh@186
|
1093 sed "/^$PACKAGE:/d" -i files.list
|
gokhlayeh@186
|
1094 sed "/^$(basename ${pkg%.tazpkg})$/d" -i packages.list
|
gokhlayeh@186
|
1095 sed "/ $(basename $pkg)$/d" -i packages.md5
|
gokhlayeh@186
|
1096 }
|
gokhlayeh@186
|
1097
|
gokhlayeh@186
|
1098 get_packages_info()
|
gokhlayeh@186
|
1099 {
|
gokhlayeh@186
|
1100 # If there's no taz folder in the wok, extract infos from the
|
gokhlayeh@186
|
1101 # package.
|
gokhlayeh@186
|
1102 get_pkg_files $pkg
|
gokhlayeh@186
|
1103 source_receipt
|
gokhlayeh@186
|
1104 echo "Getting datas from $PACKAGE"
|
gokhlayeh@186
|
1105
|
gokhlayeh@186
|
1106 cat >> $pkg_repository/packages.txt << _EOT_
|
pankso@28
|
1107
|
pankso@28
|
1108 $PACKAGE
|
gokhlayeh@186
|
1109 $VERSION$EXTRAVERSION
|
pankso@28
|
1110 $SHORT_DESC
|
pankso@28
|
1111 _EOT_
|
gokhlayeh@186
|
1112 [ "$PACKED_SIZE" ] && cat >> $pkg_repository/packages.txt << _EOT_
|
pankso@133
|
1113 $PACKED_SIZE ($UNPACKED_SIZE installed)
|
pascal@60
|
1114 _EOT_
|
gokhlayeh@186
|
1115
|
paul@121
|
1116 # Packages.desc is used by Tazpkgbox <tree>.
|
gokhlayeh@186
|
1117 echo "$PACKAGE | $VERSION$EXTRAVERSION | $SHORT_DESC | $CATEGORY | $WEB_SITE" >> $pkg_repository/packages.desc
|
gokhlayeh@186
|
1118
|
paul@121
|
1119 # Packages.equiv is used by tazpkg install to check depends
|
pascal@99
|
1120 for i in $PROVIDE; do
|
pascal@99
|
1121 DEST=""
|
pascal@99
|
1122 echo $i | grep -q : && DEST="${i#*:}:"
|
gokhlayeh@186
|
1123 if grep -qs ^${i%:*}= $pkg_repository/packages.equiv; then
|
gokhlayeh@186
|
1124 sed -i "s/^${i%:*}=/${i%:*}=$DEST$PACKAGE /" $pkg_repository/packages.equiv
|
pascal@99
|
1125 else
|
gokhlayeh@186
|
1126 echo "${i%:*}=$DEST$PACKAGE" >> $pkg_repository/packages.equiv
|
gokhlayeh@186
|
1127 fi
|
gokhlayeh@186
|
1128 done
|
gokhlayeh@186
|
1129
|
gokhlayeh@186
|
1130 if [ -f files.list ]; then
|
gokhlayeh@186
|
1131 { echo "$PACKAGE"; cat files.list; } | awk '
|
gokhlayeh@186
|
1132 BEGIN { name="" } { if (name == "") name=$0; else printf("%s: %s\n",name,$0); }' >> $pkg_repository/files.list
|
gokhlayeh@186
|
1133 fi
|
gokhlayeh@186
|
1134
|
gokhlayeh@186
|
1135 cd .. && rm -r "$pkg_files_dir"
|
gokhlayeh@186
|
1136
|
gokhlayeh@186
|
1137 cd $pkg_repository
|
gokhlayeh@186
|
1138 echo $(basename ${pkg%.tazpkg}) >> packages.list
|
gokhlayeh@186
|
1139 [ ! "$package_md5" ] && package_md5=$(md5sum $(basename $pkg))
|
gokhlayeh@186
|
1140 echo "$package_md5" >> packages.md5
|
gokhlayeh@186
|
1141 unset package_md5
|
gokhlayeh@186
|
1142 }
|
gokhlayeh@186
|
1143
|
gokhlayeh@186
|
1144 source_receipt()
|
gokhlayeh@186
|
1145 {
|
gokhlayeh@186
|
1146 unset PACKAGE SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \
|
gokhlayeh@186
|
1147 MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED \
|
gokhlayeh@186
|
1148 PACKED_SIZE UNPACKED_SIZE COOK_OPT PROVIDE CONFIG_FILES TAGS \
|
gokhlayeh@186
|
1149 src _pkg DESTDIR CONFIG_SITE
|
gokhlayeh@186
|
1150 . ${RECEIPT:-$PWD/receipt}
|
gokhlayeh@186
|
1151 }
|
gokhlayeh@186
|
1152
|
gokhlayeh@186
|
1153 packages_db_end()
|
gokhlayeh@186
|
1154 {
|
gokhlayeh@186
|
1155 cd $pkg_repository
|
gokhlayeh@186
|
1156 pkgs=$(wc -l packages.list | sed 's/ .*//')
|
gokhlayeh@186
|
1157 sed "s/# Packages : .*/# Packages : $pkgs/" -i packages.txt
|
gokhlayeh@186
|
1158
|
gokhlayeh@186
|
1159 # If lists was updated it's generally needed to sort them well.
|
gokhlayeh@186
|
1160 if ! sort -c packages.list 2> /dev/null; then
|
gokhlayeh@186
|
1161 report step "Sorting packages lists"
|
gokhlayeh@186
|
1162 for file in packages.list packages.desc packages.equiv; do
|
gokhlayeh@186
|
1163 [ -f $file ] || continue
|
gokhlayeh@186
|
1164 sort -o $file $file
|
gokhlayeh@186
|
1165 done
|
gokhlayeh@186
|
1166 report end-step
|
gokhlayeh@186
|
1167 fi
|
gokhlayeh@186
|
1168
|
gokhlayeh@186
|
1169 # Dont log this because lzma always output error.
|
gokhlayeh@186
|
1170 lzma e files.list files.list.lzma
|
gokhlayeh@186
|
1171 rm files.list 2>/dev/null
|
gokhlayeh@194
|
1172 if ! grep -q ^$pkg_repository$ $LOCALSTATE/mirror && \
|
gokhlayeh@194
|
1173 ! { [ -d $LOCALSTATE/undigest ] && \
|
gokhlayeh@194
|
1174 grep -q ^$pkg_repository$ $LOCALSTATE/undigest/*/mirror; }; then
|
gokhlayeh@186
|
1175 tazpkg add-undigest $(basename `echo $pkg_repository | sed 's~/packages~~'`) $pkg_repository
|
gokhlayeh@186
|
1176 fi
|
gokhlayeh@186
|
1177 }
|
gokhlayeh@186
|
1178
|
gokhlayeh@186
|
1179 ########################################################################
|
gokhlayeh@186
|
1180 # This section contains functions to generate wok database.
|
gokhlayeh@186
|
1181 ########################
|
gokhlayeh@186
|
1182
|
gokhlayeh@186
|
1183 gen_wok_db()
|
gokhlayeh@186
|
1184 {
|
gokhlayeh@186
|
1185 get_wok_info $(echo $WOK/*/receipt | sed -e "s~$WOK/~~g" -e "s~/receipt~~g")
|
gokhlayeh@186
|
1186 sort_db
|
gokhlayeh@186
|
1187 report close-bloc
|
gokhlayeh@186
|
1188 }
|
gokhlayeh@186
|
1189
|
gokhlayeh@186
|
1190 get_wok_info()
|
gokhlayeh@186
|
1191 {
|
gokhlayeh@186
|
1192 report step "Getting datas from wok"
|
gokhlayeh@186
|
1193 report open-bloc
|
gokhlayeh@186
|
1194
|
gokhlayeh@186
|
1195 report step "Generating wok-wanted.txt"
|
gokhlayeh@186
|
1196 for PACKAGE in $@; do
|
gokhlayeh@186
|
1197 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
1198 source_receipt
|
gokhlayeh@186
|
1199 [ "$WANTED" ] || continue
|
gokhlayeh@186
|
1200 echo -e $PACKAGE"\t"$WANTED >> $wan_db
|
gokhlayeh@186
|
1201 done
|
gokhlayeh@186
|
1202
|
gokhlayeh@186
|
1203 report step "Generating wok-depends.txt"
|
gokhlayeh@186
|
1204 for PACKAGE in $@; do
|
gokhlayeh@186
|
1205 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
1206 if [ -s $RECEIPT ]; then
|
gokhlayeh@186
|
1207 source_receipt
|
gokhlayeh@186
|
1208 echo -e $PACKAGE"\t "$DEPENDS" \t "$BUILD_DEPENDS' ' >> $dep_db
|
pankso@133
|
1209 fi
|
pascal@99
|
1210 done
|
gokhlayeh@186
|
1211 report end-step
|
pankso@28
|
1212 }
|
pankso@28
|
1213
|
gokhlayeh@186
|
1214 sort_db()
|
pascal@91
|
1215 {
|
gokhlayeh@186
|
1216 report step "Generating cookorder.txt"
|
gokhlayeh@186
|
1217 rm $PACKAGES_REPOSITORY/blocked && touch $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@186
|
1218 cat $dep_db | sed 's/ \t / /' | while read PACKAGE BUILD_DEPENDS; do
|
gokhlayeh@186
|
1219 grep -q ^$PACKAGE$'\t' $wan_db && continue
|
gokhlayeh@186
|
1220
|
gokhlayeh@186
|
1221 # Replace each BUILD_DEPENDS with a WANTED package by it's
|
gokhlayeh@186
|
1222 # WANTED package.
|
gokhlayeh@186
|
1223 replace_by_wanted()
|
gokhlayeh@186
|
1224 {
|
gokhlayeh@186
|
1225 for p in $BUILD_DEPENDS; do
|
gokhlayeh@186
|
1226 if grep -q ^$p$'\t' $wan_db; then
|
gokhlayeh@186
|
1227 echo -n $(grep ^$p$'\t' $wan_db | cut -f 2)' '
|
gokhlayeh@186
|
1228 else
|
gokhlayeh@186
|
1229 echo -n $p' '
|
gokhlayeh@186
|
1230 fi
|
gokhlayeh@186
|
1231 done | tr ' ' '\n' | sort -u | sed "/^$PACKAGE$/d" | tr '\n' ' '
|
gokhlayeh@186
|
1232 }
|
gokhlayeh@186
|
1233 echo -e $PACKAGE"\t $(replace_by_wanted) "
|
gokhlayeh@186
|
1234 done > $tmp/db
|
gokhlayeh@186
|
1235 while [ -s "$tmp/db" ]; do
|
gokhlayeh@186
|
1236 status=start
|
gokhlayeh@186
|
1237 for pkg in $(cut -f 1 $tmp/db); do
|
gokhlayeh@186
|
1238 if ! grep -q ' '$pkg' ' $tmp/db; then
|
gokhlayeh@186
|
1239 echo $pkg >> $tmp/cookorder
|
gokhlayeh@186
|
1240 sed -e "/^$pkg\t/d" -e "s/ $pkg / /g" -i $tmp/db
|
gokhlayeh@186
|
1241 status=proceed
|
gokhlayeh@186
|
1242 fi
|
gokhlayeh@186
|
1243 done
|
gokhlayeh@186
|
1244 if [ "$status" = start ]; then
|
gokhlayeh@186
|
1245 cp -f $tmp/db /tmp/remain-depends.txt
|
gokhlayeh@186
|
1246 echo "Can't go further because there's depency(ies) loop(s). The remaining packages will be commentend in the cookorder and will be unbuild in case of major update until the problem is solved." >&2
|
gokhlayeh@186
|
1247 for blocked in $(cut -f 1 $tmp/db); do
|
gokhlayeh@186
|
1248 echo "$blocked" >> $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@186
|
1249 done
|
gokhlayeh@186
|
1250 break
|
gokhlayeh@186
|
1251 fi
|
gokhlayeh@186
|
1252 done
|
gokhlayeh@186
|
1253 [ -s $tmp/cookorder ] || touch $tmp/cookorder
|
gokhlayeh@186
|
1254
|
gokhlayeh@186
|
1255 # The toolchain packages are moved in first position.
|
gokhlayeh@186
|
1256 grep $(for pkg in `scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
1257 --look_for=all --with_args`; do echo " -e ^$pkg$"; done) \
|
gokhlayeh@186
|
1258 $tmp/cookorder | tac > $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@186
|
1259 for pkg in $(cat $PACKAGES_REPOSITORY/cookorder.txt); do
|
gokhlayeh@186
|
1260 sed "/^$pkg$/d" -i $tmp/cookorder
|
gokhlayeh@186
|
1261 done
|
gokhlayeh@186
|
1262
|
gokhlayeh@186
|
1263 tac $tmp/cookorder >> $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@186
|
1264 report end-step
|
pascal@91
|
1265 }
|
pascal@91
|
1266
|
gokhlayeh@186
|
1267 ########################################################################
|
gokhlayeh@186
|
1268 # SCAN CORE
|
gokhlayeh@186
|
1269 ########################
|
gokhlayeh@186
|
1270 # Include various scan core-functions. It's not intended to be used
|
gokhlayeh@186
|
1271 # directly : prefer scan wrappers in next section.
|
gokhlayeh@186
|
1272
|
gokhlayeh@186
|
1273 look_for_dep()
|
gokhlayeh@186
|
1274 {
|
gokhlayeh@186
|
1275 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@186
|
1276 grep ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt \
|
gokhlayeh@186
|
1277 | cut -f 2
|
gokhlayeh@186
|
1278 else
|
gokhlayeh@186
|
1279 grep ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1280 cut -f 2
|
gokhlayeh@186
|
1281 fi
|
gokhlayeh@186
|
1282 }
|
gokhlayeh@186
|
1283
|
gokhlayeh@186
|
1284 look_for_bdep()
|
gokhlayeh@186
|
1285 {
|
gokhlayeh@186
|
1286 # if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@186
|
1287 # grep ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt \
|
gokhlayeh@186
|
1288 # | cut -f 3
|
gokhlayeh@186
|
1289 # else
|
gokhlayeh@186
|
1290 # grep ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1291 # cut -f 3
|
gokhlayeh@186
|
1292 # fi
|
gokhlayeh@186
|
1293 look_for_all
|
gokhlayeh@186
|
1294 }
|
gokhlayeh@186
|
1295
|
gokhlayeh@186
|
1296 look_for_all()
|
gokhlayeh@186
|
1297 {
|
gokhlayeh@186
|
1298 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@186
|
1299 grep ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt \
|
gokhlayeh@186
|
1300 | cut -f 2,3 | sed 's/ / /'
|
gokhlayeh@186
|
1301 else
|
gokhlayeh@186
|
1302 grep ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1303 cut -f 2,3 | sed 's/ / /'
|
gokhlayeh@186
|
1304 fi
|
gokhlayeh@186
|
1305 }
|
gokhlayeh@186
|
1306
|
gokhlayeh@186
|
1307 filter()
|
gokhlayeh@186
|
1308 {
|
gokhlayeh@186
|
1309 for pkg in $(cat); do
|
gokhlayeh@186
|
1310 if grep -q ^$pkg$'\t' $dep_db; then
|
gokhlayeh@186
|
1311 { grep ^$pkg$'\t' $wan_db || echo $pkg
|
gokhlayeh@186
|
1312 } | sed 's/\t/ /'
|
gokhlayeh@186
|
1313 else
|
gokhlayeh@186
|
1314 echo "Error: $pkg can't be found." >&2
|
gokhlayeh@186
|
1315 fi
|
gokhlayeh@186
|
1316 done
|
gokhlayeh@186
|
1317 }
|
gokhlayeh@186
|
1318
|
gokhlayeh@186
|
1319 look_for_all_filtered()
|
gokhlayeh@186
|
1320 {
|
gokhlayeh@186
|
1321 look_for_all | filter
|
gokhlayeh@186
|
1322 }
|
gokhlayeh@186
|
1323
|
gokhlayeh@186
|
1324 look_for_rdep()
|
gokhlayeh@186
|
1325 {
|
gokhlayeh@186
|
1326 grep ' '$PACKAGE' ' $INCOMING_REPOSITORY/wok-depends.txt | cut -f 1
|
gokhlayeh@186
|
1327 if [ "$undigest" ]; then
|
gokhlayeh@186
|
1328 for rdep in $(grep ' '$PACKAGE' ' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt | cut -f 1); do
|
gokhlayeh@186
|
1329 if [ ! -f "WOK$/$rdep/receipt" ]; then
|
gokhlayeh@186
|
1330 echo "$rdep"
|
gokhlayeh@186
|
1331 fi
|
gokhlayeh@186
|
1332 done
|
gokhlayeh@186
|
1333 fi
|
gokhlayeh@186
|
1334 }
|
gokhlayeh@186
|
1335
|
gokhlayeh@186
|
1336 look_for_rbdep()
|
gokhlayeh@186
|
1337 {
|
gokhlayeh@186
|
1338 grep ' '$PACKAGE' ' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1339 cut -f 1,3 | grep ' '$PACKAGE' ' | cut -f 1
|
gokhlayeh@186
|
1340 if [ "$undigest" ]; then
|
gokhlayeh@186
|
1341 for rdep in $(grep ' '$PACKAGE' ' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt \
|
gokhlayeh@186
|
1342 | cut -f 1,3 | grep ' '$PACKAGE' ' | cut -f 1); do
|
gokhlayeh@186
|
1343 if [ ! -f "WOK$/$rdep/receipt" ]; then
|
gokhlayeh@186
|
1344 echo "$rdep"
|
gokhlayeh@186
|
1345 fi
|
gokhlayeh@186
|
1346 done
|
gokhlayeh@186
|
1347 fi
|
gokhlayeh@186
|
1348 }
|
gokhlayeh@186
|
1349
|
gokhlayeh@186
|
1350 # Return WANTED if it exists.
|
gokhlayeh@186
|
1351 look_for_wanted()
|
gokhlayeh@186
|
1352 {
|
gokhlayeh@186
|
1353 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@186
|
1354 grep ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-wanted.txt | cut -f 2
|
gokhlayeh@186
|
1355 else
|
gokhlayeh@186
|
1356 grep ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-wanted.txt | cut -f 2
|
gokhlayeh@186
|
1357 fi
|
gokhlayeh@186
|
1358 }
|
gokhlayeh@186
|
1359
|
gokhlayeh@186
|
1360 # Return packages which wants PACKAGE.
|
gokhlayeh@186
|
1361 look_for_rwanted()
|
gokhlayeh@186
|
1362 {
|
gokhlayeh@186
|
1363 grep $'\t'$PACKAGE$ $INCOMING_REPOSITORY/wok-wanted.txt | cut -f 1
|
gokhlayeh@186
|
1364 if [ "$undigest" ]; then
|
gokhlayeh@186
|
1365 for rwanted in $(grep $'\t'$PACKAGE$ $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-wanted.txt | cut -f 1); do
|
gokhlayeh@186
|
1366 if [ ! -f "$WOK/$rwanted/receipt" ]; then
|
gokhlayeh@186
|
1367 echo "$rwanted"
|
gokhlayeh@186
|
1368 fi
|
gokhlayeh@186
|
1369 done
|
gokhlayeh@186
|
1370 fi
|
gokhlayeh@186
|
1371 }
|
gokhlayeh@186
|
1372
|
gokhlayeh@186
|
1373 look_for_dev()
|
gokhlayeh@186
|
1374 {
|
gokhlayeh@186
|
1375 [ -f "$WOK/$PACKAGE-dev/receipt" ] && echo $PACKAGE-dev && return
|
gokhlayeh@186
|
1376 [ "$undigest" ] && [ -f "$SLITAZ_DIR/$SLITAZ_VERSION/wok/$PACKAGE-dev/receipt" ] && \
|
gokhlayeh@186
|
1377 echo $PACKAGE-dev
|
gokhlayeh@186
|
1378 }
|
gokhlayeh@186
|
1379
|
gokhlayeh@186
|
1380 ########################################################################
|
gokhlayeh@186
|
1381 # SCAN
|
gokhlayeh@186
|
1382 ########################
|
gokhlayeh@186
|
1383 # Use wok-wanted.txt and wok-depeds.txt to scan depends.
|
gokhlayeh@186
|
1384 # Option in command line (must be first arg) :
|
gokhlayeh@186
|
1385 # --look_for=bdep/rbdep - Look for depends or reverse depends.
|
gokhlayeh@186
|
1386 # --with_dev - Add development packages (*-dev) in the result.
|
gokhlayeh@186
|
1387 # --with_wanted - Add package+reverse wanted in the result.
|
gokhlayeh@186
|
1388 # --with_args - Include packages in argument in the result.
|
gokhlayeh@186
|
1389
|
gokhlayeh@186
|
1390 scan()
|
gokhlayeh@186
|
1391 {
|
gokhlayeh@193
|
1392 # With some commands we don't want report (list output).
|
gokhlayeh@193
|
1393 if [ "$COMMAND" = gen-cooklist ] || [ "$COMMAND" = build-depends ]; then
|
gokhlayeh@193
|
1394 report(){ : ; }
|
gokhlayeh@193
|
1395 fi
|
gokhlayeh@193
|
1396
|
gokhlayeh@193
|
1397 # Generate wok data files if they're missing. Output message in
|
gokhlayeh@193
|
1398 # stderr as stdout output may be used as packages list.
|
gokhlayeh@193
|
1399 if [ ! -s "$wan_db" ] || [ ! -s "$dep_db" ]; then
|
gokhlayeh@193
|
1400 echo "Missing wok data files, generating them... This may take few minutes." >&2
|
gokhlayeh@193
|
1401 gen_wok_db
|
gokhlayeh@193
|
1402 fi
|
gokhlayeh@193
|
1403
|
gokhlayeh@186
|
1404 # Get packages in argument.
|
gokhlayeh@186
|
1405 local PACKAGE pkg_list=
|
gokhlayeh@186
|
1406 for arg in $@; do
|
gokhlayeh@186
|
1407 [ "$arg" = "${arg#--}" ] || continue
|
gokhlayeh@186
|
1408 pkg_list="$pkg_list $arg"
|
gokhlayeh@186
|
1409 done
|
gokhlayeh@186
|
1410
|
gokhlayeh@186
|
1411 # Get options.
|
gokhlayeh@186
|
1412 [ "$pkg_list" ] || return
|
gokhlayeh@186
|
1413 local cooklist= look_for= with_dev= with_wanted= with_args= log_command="$0 $@" \
|
gokhlayeh@186
|
1414 get_options_list="look_for with_dev with_wanted with_args cooklist"
|
gokhlayeh@186
|
1415 get_options
|
gokhlayeh@186
|
1416
|
gokhlayeh@186
|
1417 # Cooklist is a special case where we need to modify a little
|
gokhlayeh@186
|
1418 # scan behavior
|
gokhlayeh@186
|
1419 if [ "$cooklist" ]; then
|
gokhlayeh@186
|
1420 look_for=all_filtered && with_args=yes && with_dev= && with_wanted= && rwan=yes
|
gokhlayeh@186
|
1421 pkg_list=$(echo $pkg_list | filter)
|
gokhlayeh@186
|
1422 fi
|
gokhlayeh@186
|
1423
|
gokhlayeh@186
|
1424 ##############################################################
|
gokhlayeh@186
|
1425 # ADD TO LISTS PROPOSAL ######################################
|
gokhlayeh@186
|
1426 ##############################################################
|
gokhlayeh@186
|
1427 #
|
gokhlayeh@186
|
1428 include_wanted()
|
gokhlayeh@186
|
1429 {
|
gokhlayeh@186
|
1430 for pkg in $(cat); do
|
gokhlayeh@186
|
1431 { grep ^$pkg$'\t' $wan_db || echo $pkg
|
gokhlayeh@186
|
1432 } | sed 's/\t/ /'
|
gokhlayeh@186
|
1433 done
|
gokhlayeh@186
|
1434 }
|
gokhlayeh@186
|
1435
|
gokhlayeh@186
|
1436 no_duplication()
|
gokhlayeh@186
|
1437 {
|
gokhlayeh@186
|
1438 for pkg in $(cat); do
|
gokhlayeh@186
|
1439 grep -q ^$pkg$ $tmp/list $tmp/dep && continue
|
gokhlayeh@186
|
1440 echo $pkg
|
gokhlayeh@186
|
1441 done
|
gokhlayeh@186
|
1442 }
|
gokhlayeh@186
|
1443
|
gokhlayeh@186
|
1444 append_to_list()
|
gokhlayeh@186
|
1445 {
|
gokhlayeh@186
|
1446 no_duplication >> $tmp/list
|
gokhlayeh@186
|
1447 # OU
|
gokhlayeh@186
|
1448 include_wanted | no_duplication >> $tmp/list
|
gokhlayeh@186
|
1449 }
|
gokhlayeh@186
|
1450 #
|
gokhlayeh@186
|
1451 ##############################################################
|
gokhlayeh@186
|
1452 mkdir -p $tmp
|
gokhlayeh@186
|
1453 for PACKAGE in $(echo $pkg_list | filter); do
|
gokhlayeh@186
|
1454 look_for_$look_for
|
gokhlayeh@186
|
1455 done | tr ' ' '\n' | sort -u > $tmp/list
|
gokhlayeh@186
|
1456 [ "$look_for" = bdep ] && look_for=dep
|
gokhlayeh@186
|
1457 while [ -s $tmp/list ]; do
|
gokhlayeh@186
|
1458 PACKAGE=$(sed 1!d $tmp/list)
|
gokhlayeh@186
|
1459 sed 1d -i $tmp/list
|
gokhlayeh@186
|
1460 echo $PACKAGE >> $tmp/dep
|
gokhlayeh@186
|
1461 for depend in $(look_for_$look_for); do
|
gokhlayeh@186
|
1462 if ! grep -q ^$depend$ $tmp/list $tmp/dep; then
|
gokhlayeh@186
|
1463 echo $depend >> $tmp/list
|
gokhlayeh@186
|
1464 fi
|
gokhlayeh@186
|
1465 done
|
gokhlayeh@186
|
1466 done
|
gokhlayeh@186
|
1467 [ "$with_args" ] && echo $pkg_list | tr ' ' '\n' >> $tmp/dep
|
gokhlayeh@186
|
1468 if [ -s $tmp/dep ]; then
|
gokhlayeh@186
|
1469 if [ "$with_wanted" ]; then
|
gokhlayeh@186
|
1470 cat $tmp/dep | while read PACKAGE; do
|
gokhlayeh@186
|
1471 look_for_rwanted >> $tmp/dep
|
gokhlayeh@186
|
1472 done
|
gokhlayeh@186
|
1473 elif [ "$with_dev" ]; then
|
gokhlayeh@186
|
1474 cat $tmp/dep | while read PACKAGE; do
|
gokhlayeh@186
|
1475 look_for_dev >> $tmp/dep
|
gokhlayeh@186
|
1476 done
|
gokhlayeh@186
|
1477 fi
|
gokhlayeh@186
|
1478 if [ "$cooklist" ]; then
|
gokhlayeh@186
|
1479 mv $tmp/dep $tmp/cooklist
|
gokhlayeh@186
|
1480 sort_cooklist
|
gokhlayeh@186
|
1481 rm $tmp/cooklist
|
gokhlayeh@186
|
1482 else
|
gokhlayeh@186
|
1483 cat $tmp/dep | sort -u
|
gokhlayeh@186
|
1484 fi
|
gokhlayeh@186
|
1485 fi
|
gokhlayeh@186
|
1486 rm $tmp/dep $tmp/list 2>/dev/null
|
gokhlayeh@186
|
1487 }
|
gokhlayeh@186
|
1488
|
gokhlayeh@186
|
1489 ########################################################################
|
gokhlayeh@186
|
1490 # This section contains functions to check package repository and
|
gokhlayeh@186
|
1491 # find which packages to cook.
|
gokhlayeh@186
|
1492 ########################
|
gokhlayeh@186
|
1493
|
gokhlayeh@186
|
1494 # Actually its becomes more than check commit... Maybe put this in report
|
gokhlayeh@186
|
1495 # function is a good idea.
|
gokhlayeh@186
|
1496 check_for_commit()
|
gokhlayeh@186
|
1497 {
|
gokhlayeh@186
|
1498 report step "Checking for commits"
|
gokhlayeh@186
|
1499
|
gokhlayeh@186
|
1500 # Clean the list... Later we will perfom a partial clean only to keep
|
gokhlayeh@186
|
1501 # some usefull informations
|
gokhlayeh@186
|
1502 rm $PACKAGES_REPOSITORY/commit 2>/dev/null
|
gokhlayeh@186
|
1503
|
gokhlayeh@186
|
1504 # If there's a packages-incoming repository we need to check it too.
|
gokhlayeh@186
|
1505 for RECEIPT in $(echo $WOK/*/receipt | grep -v '\*'); do
|
gokhlayeh@186
|
1506 source_receipt
|
gokhlayeh@186
|
1507
|
gokhlayeh@186
|
1508 # We use md5 of cooking stuff in the packaged receipt to check
|
gokhlayeh@186
|
1509 # commit. We look consecutively in 3 different locations :
|
gokhlayeh@186
|
1510 # - in the wok/PACKAGE/taz folder
|
gokhlayeh@186
|
1511 # - in the receipt in the package in incoming repository
|
gokhlayeh@186
|
1512 # - in the receipt in the package in packages repository
|
gokhlayeh@186
|
1513 # If md5sum match, there's no commit.
|
gokhlayeh@186
|
1514 # If there's not md5sum datas, because the package was cooked
|
gokhlayeh@186
|
1515 # with a previous version of tazwok, we don't put in in commit
|
gokhlayeh@186
|
1516 # list (need a cook-all to refresh them)
|
gokhlayeh@186
|
1517 # If there's no receipt available, package is missing so we put
|
gokhlayeh@186
|
1518 # it in commit list.
|
gokhlayeh@186
|
1519 # First look for package in packages-incoming.
|
gokhlayeh@186
|
1520 check_for_commit_using_md5sum()
|
gokhlayeh@186
|
1521 {
|
gokhlayeh@186
|
1522 if [ ! -f $WOK/$PACKAGE/md5 ]; then
|
gokhlayeh@186
|
1523 sed -n '/# md5sum of cooking stuff :/,$p' receipt | \
|
gokhlayeh@186
|
1524 sed -e 1d -e 's/^# //' > $WOK/$PACKAGE/md5
|
gokhlayeh@186
|
1525 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1526 fi
|
gokhlayeh@186
|
1527
|
gokhlayeh@186
|
1528 # Use md5sum list in receipt to check for commit.
|
gokhlayeh@186
|
1529 if [ -s md5 ]; then
|
gokhlayeh@186
|
1530 if md5sum -cs md5; then
|
gokhlayeh@186
|
1531 return_code=0
|
gokhlayeh@186
|
1532
|
gokhlayeh@186
|
1533 # If md5sum check if ok, check for new files in
|
gokhlayeh@186
|
1534 # cooking stuff.
|
gokhlayeh@186
|
1535 for file in receipt description.txt $( [ -d stuff ] && find stuff); do
|
gokhlayeh@186
|
1536 if [ -f $file ] && ! grep -q ' '$file$ md5; then
|
gokhlayeh@186
|
1537 set_commited
|
gokhlayeh@186
|
1538 fi
|
gokhlayeh@186
|
1539 done
|
gokhlayeh@186
|
1540 else
|
gokhlayeh@186
|
1541 set_commited
|
gokhlayeh@186
|
1542 fi
|
gokhlayeh@186
|
1543 else
|
gokhlayeh@186
|
1544 gen_cookmd5
|
gokhlayeh@186
|
1545 fi
|
gokhlayeh@186
|
1546 }
|
gokhlayeh@186
|
1547 set_commited()
|
gokhlayeh@186
|
1548 {
|
gokhlayeh@186
|
1549 echo $PACKAGE >> $PACKAGES_REPOSITORY/commit
|
gokhlayeh@186
|
1550 echo "Commit: $PACKAGE ($VERSION)"
|
gokhlayeh@186
|
1551 gen_cookmd5
|
gokhlayeh@186
|
1552 }
|
gokhlayeh@186
|
1553 taz_dir=$(echo $WOK/$PACKAGE/taz/$PACKAGE-* | grep -v '\*')
|
gokhlayeh@186
|
1554 if [ -f $WOK/$PACKAGE/md5 ]; then
|
gokhlayeh@186
|
1555 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1556 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1557 elif [ "$taz_dir" ]; then
|
gokhlayeh@186
|
1558 cd $taz_dir
|
gokhlayeh@186
|
1559 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1560 else
|
gokhlayeh@186
|
1561 pkg=$(echo $INCOMING_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | grep -v '\*')
|
gokhlayeh@186
|
1562 [ "$pkg" ] || pkg=$(echo $PACKAGES_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | grep -v '\*')
|
gokhlayeh@186
|
1563 if [ "$pkg" ]; then
|
gokhlayeh@186
|
1564 get_pkg_files $pkg
|
gokhlayeh@186
|
1565 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1566 rm -r $pkg_files_dir
|
gokhlayeh@186
|
1567 continue
|
gokhlayeh@186
|
1568 fi
|
gokhlayeh@186
|
1569 set_commited
|
gokhlayeh@186
|
1570 fi
|
gokhlayeh@186
|
1571 done
|
gokhlayeh@186
|
1572 report end-step
|
gokhlayeh@186
|
1573 }
|
gokhlayeh@186
|
1574
|
gokhlayeh@186
|
1575 gen_cook_list()
|
gokhlayeh@186
|
1576 {
|
gokhlayeh@186
|
1577 if [ -s $PACKAGES_REPOSITORY/commit ]; then
|
gokhlayeh@186
|
1578 report step "Generate genpkg & cook lists."
|
gokhlayeh@186
|
1579 cd $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1580 #cp commit $tmp/commit
|
gokhlayeh@186
|
1581 #if [ -s broken ]; then
|
gokhlayeh@186
|
1582 ## dep_scan return deps including the packages given in argument.
|
gokhlayeh@186
|
1583 ## To avoid that, we firt generate a list of direct rdepends of
|
gokhlayeh@186
|
1584 ## brokens without packages in argument, then we generate the
|
gokhlayeh@186
|
1585 ## full rdeps list. We do this because we don't want to block
|
gokhlayeh@186
|
1586 ## packages at source of broken tree if a fix as been commited.
|
gokhlayeh@186
|
1587 #for PACKAGE in $(cat broken); do
|
gokhlayeh@186
|
1588 #look_for_rdep >> $tmp/broken
|
gokhlayeh@186
|
1589 #done
|
gokhlayeh@186
|
1590 #cat $tmp/broken
|
gokhlayeh@186
|
1591 #look_for=rdep && with_wanted=yes
|
gokhlayeh@186
|
1592 #for PACKAGE in $(dep_scan `cat $tmp/broken`); do
|
gokhlayeh@186
|
1593 #if grep -q ^$PACKAGE$ $tmp/commit; then
|
gokhlayeh@186
|
1594 #sed "/^$PACKAGE$/d" -i $tmp/commit
|
gokhlayeh@186
|
1595 #fi
|
gokhlayeh@186
|
1596 #done
|
gokhlayeh@186
|
1597 #rm $tmp/broken
|
gokhlayeh@186
|
1598 #fi
|
gokhlayeh@186
|
1599 for PACKAGE in $(cat commit); do
|
gokhlayeh@186
|
1600 WANTED="$(look_for_wanted)"
|
gokhlayeh@186
|
1601 if [ "$WANTED" ]; then
|
gokhlayeh@186
|
1602
|
gokhlayeh@186
|
1603 # If cook of wanted package is planned, this one will be
|
gokhlayeh@186
|
1604 # packaged at the same time. Else if wanted package is
|
gokhlayeh@186
|
1605 # broken or blocked, ignore the commit. Else, put the
|
gokhlayeh@186
|
1606 # package in genpkglist.
|
gokhlayeh@186
|
1607 { grep -q ^$WANTED$ commit || grep -q ^$WANTED$ broken || \
|
gokhlayeh@186
|
1608 grep -q ^$WANTED$ cooklist || grep -q ^$WANTED$ blocked || \
|
gokhlayeh@186
|
1609 grep -q ^$WANTED$ genpkglist
|
gokhlayeh@186
|
1610 } && continue
|
gokhlayeh@186
|
1611 echo $WANTED >> genpkglist
|
gokhlayeh@186
|
1612 else
|
gokhlayeh@186
|
1613 { grep -q ^$PACKAGE$ blocked || grep -q ^$PACKAGE$ cooklist
|
gokhlayeh@186
|
1614 } && continue
|
gokhlayeh@186
|
1615 echo $PACKAGE >> cooklist
|
gokhlayeh@186
|
1616 sed "/^$PACKAGE$/d" -i broken
|
gokhlayeh@186
|
1617 fi
|
gokhlayeh@186
|
1618 done
|
gokhlayeh@186
|
1619 #rm $tmp/commit
|
gokhlayeh@186
|
1620 if [ -s genpkglist ]; then
|
gokhlayeh@186
|
1621 echo "genpkglist:"
|
gokhlayeh@186
|
1622 cat genpkglist
|
gokhlayeh@186
|
1623 fi
|
gokhlayeh@186
|
1624 report end-step
|
gokhlayeh@186
|
1625 fi
|
gokhlayeh@186
|
1626 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
1627 sort_cooklist
|
gokhlayeh@186
|
1628 }
|
gokhlayeh@186
|
1629
|
gokhlayeh@186
|
1630 sort_cooklist()
|
gokhlayeh@186
|
1631 {
|
gokhlayeh@186
|
1632 [ ! "$cooklist" ] && cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
1633 [ -s $cooklist ] || [ -s "$tmp/cooklist" ] || return
|
gokhlayeh@186
|
1634 [ -s $PACKAGES_REPOSITORY/cookorder.txt ] || gen_wok_db
|
gokhlayeh@186
|
1635 [ ! -s "$tmp/cooklist" ] && cp -a $cooklist $tmp/cooklist
|
gokhlayeh@186
|
1636 report step "Sorting cooklist"
|
gokhlayeh@186
|
1637
|
gokhlayeh@186
|
1638 # Use cookorder.txt to sort cooklist.
|
gokhlayeh@186
|
1639 cat $PACKAGES_REPOSITORY/cookorder.txt | while read PACKAGE; do
|
gokhlayeh@186
|
1640 if grep -q ^$PACKAGE$ $tmp/cooklist; then
|
gokhlayeh@186
|
1641 sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@186
|
1642 echo $PACKAGE >> $tmp/cooklist.tmp
|
gokhlayeh@186
|
1643 fi
|
gokhlayeh@186
|
1644 done
|
gokhlayeh@186
|
1645
|
gokhlayeh@186
|
1646 # Remaining packages in cooklist are thoses without compile_rules.
|
gokhlayeh@186
|
1647 # They can be cooked first in any order.
|
gokhlayeh@186
|
1648 mv -f $tmp/cooklist.tmp $tmp/cooklist
|
gokhlayeh@186
|
1649 [ "$cooklist" = "$PACKAGES_REPOSITORY/cooklist" ] && \
|
gokhlayeh@186
|
1650 cat $tmp/cooklist > $cooklist
|
gokhlayeh@186
|
1651 cat $tmp/cooklist
|
gokhlayeh@186
|
1652 report end-step
|
gokhlayeh@186
|
1653 }
|
gokhlayeh@186
|
1654
|
gokhlayeh@186
|
1655
|
gokhlayeh@186
|
1656
|
gokhlayeh@186
|
1657 #remove_old_packages()
|
gokhlayeh@186
|
1658 #{
|
gokhlayeh@186
|
1659 #report step "Removing old packages"
|
gokhlayeh@186
|
1660 #echo -n "" >> $tmp/oldpkg
|
gokhlayeh@186
|
1661 #if [ -f $INCOMING_REPOSITORY/packages.txt ]; then
|
gokhlayeh@186
|
1662
|
gokhlayeh@186
|
1663 #&& incoming=y
|
gokhlayeh@186
|
1664 #for RECEIPT in $(echo $WOK/*/receipt | grep -v '\*'); do
|
gokhlayeh@186
|
1665 #source_receipt
|
gokhlayeh@186
|
1666 ## First look for package in packages-incoming.
|
gokhlayeh@186
|
1667 #if [ "$incoming" ]; then
|
gokhlayeh@186
|
1668 #pkg=$(echo $INCOMING_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | grep -v '\*')
|
gokhlayeh@186
|
1669 #fi
|
gokhlayeh@186
|
1670 #if [ "$pkg" ]; then
|
gokhlayeh@186
|
1671 #echo $pkg >> $tmp/oldpkg
|
gokhlayeh@186
|
1672 ## The package in PACKAGES_REPOSITORY, even if old, should not be removed yet.
|
gokhlayeh@186
|
1673 #echo $PACKAGES_REPOSITORY/$(grep ^$PACKAGE- $PACKAGES_REPOSITORY/packages.list 2>/dev/null)*.tazpkg >> $tmp/oldpkg
|
gokhlayeh@186
|
1674 #else
|
gokhlayeh@186
|
1675 #echo $PACKAGES_REPOSITORY/$PACKAGE-$VERSION*.tazpkg >> $tmp/oldpkg
|
gokhlayeh@186
|
1676 #fi
|
gokhlayeh@186
|
1677 #done
|
gokhlayeh@186
|
1678 #for pkg in $(echo $PACKAGES_REPOSITORY/*.tazpkg | grep -v '\*') \
|
gokhlayeh@186
|
1679 #$(echo $INCOMING_REPOSITORY/*.tazpkg | grep -v '\*'); do
|
gokhlayeh@186
|
1680 #grep -q ^$pkg$ $tmp/oldpkg && continue
|
gokhlayeh@186
|
1681 #echo "Removing $pkg"
|
gokhlayeh@186
|
1682 ##rm $pkg
|
gokhlayeh@186
|
1683 #done
|
gokhlayeh@186
|
1684 #rm $tmp/oldpkg
|
gokhlayeh@186
|
1685 #}
|
gokhlayeh@186
|
1686
|
gokhlayeh@186
|
1687 check_for_incoming()
|
gokhlayeh@186
|
1688 {
|
gokhlayeh@186
|
1689 [ -s $INCOMING_REPOSITORY/packages.txt ] || return
|
gokhlayeh@186
|
1690 report step "Checking packages-incoming repository"
|
gokhlayeh@186
|
1691 cd $INCOMING_REPOSITORY
|
gokhlayeh@186
|
1692 grep ^[0-9,a-z,A-Z] packages.txt > $tmp/incoming
|
gokhlayeh@186
|
1693 scan `cat $PACKAGES_REPOSITORY/broken` --look_for=bdep --with_wanted > $tmp/broken
|
gokhlayeh@186
|
1694 for PACKAGE in $(scan `cat $tmp/broken` --look_for=rdep --with_wanted --with_args); do
|
gokhlayeh@186
|
1695 sed "/^$PACKAGE$/d" -i $tmp/incoming
|
gokhlayeh@186
|
1696 for rwanted in $(look_for_rwanted); do
|
gokhlayeh@186
|
1697 sed "/^$rwanted$/d" -i $tmp/incoming
|
gokhlayeh@186
|
1698 done
|
gokhlayeh@186
|
1699 done
|
gokhlayeh@186
|
1700 rm $tmp/broken
|
gokhlayeh@186
|
1701 if [ "$incoming_delay" != 0 ]; then
|
gokhlayeh@186
|
1702 cat $tmp/incoming | while read PACKAGE; do
|
gokhlayeh@186
|
1703 [ "$(grep ^$PACKAGE$ $tmp/incoming)" ] || continue
|
gokhlayeh@186
|
1704 dep_list=$( { scan $PACKAGE --look_for=bdep --with_wanted && \
|
gokhlayeh@186
|
1705 scan $PACKAGE --look_for=rdep --with_wanted --with_args; } \
|
gokhlayeh@186
|
1706 | sort -u )
|
gokhlayeh@186
|
1707 for dep in $dep_list; do
|
gokhlayeh@186
|
1708 [ "$(find -name "`get_pkg_version $INCOMING_REPOSITORY`.tazpkg" -mtime +$incoming_delay)" ] && continue
|
gokhlayeh@186
|
1709 for pkg in $dep_list; do
|
gokhlayeh@186
|
1710 sed "/^$pkg$/d" -i $tmp/incoming
|
gokhlayeh@186
|
1711 done && break
|
gokhlayeh@186
|
1712 done
|
gokhlayeh@186
|
1713 done
|
gokhlayeh@186
|
1714 fi
|
gokhlayeh@186
|
1715 if [ -s "$tmp/incoming" ]; then
|
gokhlayeh@186
|
1716 for PACKAGE in $(cat $tmp/incoming); do
|
gokhlayeh@186
|
1717 prev_VERSION=$(get_pkg_version $PACKAGES_REPOSITORY)
|
gokhlayeh@186
|
1718 remove_previous_package $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1719 remove_previous_tarball
|
gokhlayeh@186
|
1720 cur_VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
|
gokhlayeh@186
|
1721 mv -f $PACKAGE-$cur_VERSION.tazpkg $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1722 echo "Moving $PACKAGE to main repository."
|
gokhlayeh@186
|
1723 done
|
gokhlayeh@186
|
1724 pkg_repository=$INCOMING_REPOSITORY && update_packages_db
|
gokhlayeh@186
|
1725 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@186
|
1726 fi
|
gokhlayeh@186
|
1727 report end-step
|
gokhlayeh@186
|
1728 }
|
gokhlayeh@186
|
1729
|
gokhlayeh@186
|
1730 ########################################################################
|
gokhlayeh@186
|
1731 # TAZWOK MAIN FUNCTIONS
|
gokhlayeh@186
|
1732 ########################
|
gokhlayeh@186
|
1733
|
gokhlayeh@186
|
1734 clean()
|
gokhlayeh@186
|
1735 {
|
gokhlayeh@186
|
1736 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1737 ls -A $WOK/$PACKAGE | grep -q -v -e ^receipt$ -e ^description.txt$ \
|
gokhlayeh@186
|
1738 -e ^stuff$ || return
|
gokhlayeh@186
|
1739
|
gokhlayeh@186
|
1740 report step "Cleaning $PACKAGE"
|
gokhlayeh@186
|
1741 # Check for clean_wok function.
|
gokhlayeh@186
|
1742 if grep -q ^clean_wok $RECEIPT; then
|
gokhlayeh@186
|
1743 clean_wok
|
gokhlayeh@186
|
1744 fi
|
gokhlayeh@186
|
1745 # Clean should only have a receipt, stuff and optional desc.
|
gokhlayeh@186
|
1746 for f in `ls .`
|
gokhlayeh@186
|
1747 do
|
gokhlayeh@186
|
1748 case $f in
|
gokhlayeh@186
|
1749 receipt|stuff|description.txt)
|
gokhlayeh@186
|
1750 continue ;;
|
gokhlayeh@186
|
1751 *)
|
gokhlayeh@186
|
1752 echo "Removing: $f"
|
gokhlayeh@186
|
1753 rm -rf $f
|
gokhlayeh@186
|
1754 esac
|
gokhlayeh@186
|
1755 done
|
gokhlayeh@186
|
1756 report end-step
|
gokhlayeh@186
|
1757 }
|
gokhlayeh@186
|
1758
|
gokhlayeh@186
|
1759 # Configure and make a package with the receipt.
|
gokhlayeh@186
|
1760 compile_package()
|
gokhlayeh@186
|
1761 {
|
gokhlayeh@186
|
1762 check_for_package_on_cmdline
|
gokhlayeh@186
|
1763
|
gokhlayeh@186
|
1764 # Include the receipt to get all needed variables and functions
|
gokhlayeh@186
|
1765 # and cd into the work directory to start the work.
|
gokhlayeh@186
|
1766 check_for_receipt
|
gokhlayeh@186
|
1767 source_receipt
|
gokhlayeh@186
|
1768
|
gokhlayeh@186
|
1769 # Log the package name and date.
|
gokhlayeh@186
|
1770 echo "date `date +%Y%m%d\ \%H:%M:%S`" >> $LOG
|
gokhlayeh@186
|
1771 echo "package $PACKAGE (compile)" >> $LOG
|
gokhlayeh@186
|
1772
|
gokhlayeh@186
|
1773 # Set wanted $src variable to help compiling.
|
gokhlayeh@186
|
1774 [ ! "$src" ] && set_src_path
|
gokhlayeh@186
|
1775 check_for_build_depends || return 1
|
gokhlayeh@186
|
1776 check_for_wanted
|
gokhlayeh@186
|
1777 unset target
|
gokhlayeh@186
|
1778 check_for_tarball && check_for_compile_rules
|
gokhlayeh@186
|
1779 }
|
gokhlayeh@186
|
1780
|
gokhlayeh@186
|
1781 # Cook command also include all features to manage lists which keep
|
gokhlayeh@186
|
1782 # track of wok/packages state.
|
gokhlayeh@186
|
1783 cook()
|
gokhlayeh@186
|
1784 {
|
gokhlayeh@186
|
1785 cook_code=
|
gokhlayeh@186
|
1786 set_common_path
|
gokhlayeh@186
|
1787 check_for_receipt
|
gokhlayeh@186
|
1788 source_receipt
|
gokhlayeh@186
|
1789
|
gokhlayeh@186
|
1790 # Define log path and start report.
|
gokhlayeh@186
|
1791 [ -f $LOCAL_REPOSITORY/log/$PACKAGE.html ] && rm $LOCAL_REPOSITORY/log/$PACKAGE.html
|
gokhlayeh@186
|
1792 report sublog $LOCAL_REPOSITORY/log/$PACKAGE.html
|
gokhlayeh@186
|
1793 report step "Cooking $PACKAGE"
|
gokhlayeh@186
|
1794 report open-bloc
|
gokhlayeh@186
|
1795
|
gokhlayeh@186
|
1796 # Clean package if needed.
|
gokhlayeh@186
|
1797 clean $PACKAGE
|
gokhlayeh@186
|
1798
|
gokhlayeh@186
|
1799 # Remove PACKAGE from commit & cook lists.
|
gokhlayeh@186
|
1800 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/commit
|
gokhlayeh@186
|
1801 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
1802 [ -s $tmp/cooklist ] && sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@186
|
1803
|
gokhlayeh@186
|
1804 if compile_package; then
|
gokhlayeh@186
|
1805 refresh_packages_from_compile
|
gokhlayeh@186
|
1806 gen_package
|
gokhlayeh@186
|
1807 remove_src
|
gokhlayeh@186
|
1808
|
gokhlayeh@186
|
1809 # Plan recook of reverse build depends if gen_package has detect
|
gokhlayeh@186
|
1810 # a change in libraries.
|
gokhlayeh@186
|
1811 if [ "$cook_rdep" ]; then
|
gokhlayeh@186
|
1812 report step "Look for packages which need a refresh"
|
gokhlayeh@186
|
1813 for rdep in $(scan $PACKAGE --look_for=rdep); do
|
gokhlayeh@186
|
1814 sed "/^$rdep$/d" -i $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
1815 if [ -f $WOK/$rdep/receipt ] && ! grep -q ^$rdep$ $tmp/cooklist; then
|
gokhlayeh@186
|
1816 echo "Add $rdep in cooklist to avoid broke caused by library update in $PACKAGE"
|
gokhlayeh@186
|
1817 echo $rdep >> $tmp/cooklist
|
gokhlayeh@186
|
1818 regen_cooklist=yes
|
gokhlayeh@186
|
1819 fi
|
gokhlayeh@186
|
1820 done
|
gokhlayeh@186
|
1821 report end-step
|
gokhlayeh@186
|
1822 fi
|
gokhlayeh@186
|
1823
|
gokhlayeh@186
|
1824 # Update packages-incoming repository.
|
gokhlayeh@186
|
1825 store_pkgname=$PACKAGE
|
gokhlayeh@186
|
1826 pkg_repository=$INCOMING_REPOSITORY
|
gokhlayeh@186
|
1827 update_packages_db
|
gokhlayeh@186
|
1828
|
gokhlayeh@186
|
1829 PACKAGE=$store_pkgname
|
gokhlayeh@186
|
1830 unset store_pkgname
|
gokhlayeh@186
|
1831
|
gokhlayeh@186
|
1832 # Upgrade to cooked packages if it was previously installed.
|
gokhlayeh@186
|
1833 report step "Look for package(s) to upgrade"
|
gokhlayeh@186
|
1834 for pkg in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@186
|
1835 if [ -d $INSTALLED/$pkg ]; then
|
gokhlayeh@186
|
1836 tazpkg get-install $pkg --forced
|
gokhlayeh@186
|
1837 fi
|
gokhlayeh@186
|
1838 done
|
gokhlayeh@186
|
1839 report end-step
|
gokhlayeh@186
|
1840 else
|
gokhlayeh@186
|
1841
|
gokhlayeh@186
|
1842 # Set package as broken.
|
gokhlayeh@186
|
1843 if ! grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/broken; then
|
gokhlayeh@186
|
1844 echo $PACKAGE >> $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
1845 fi
|
gokhlayeh@186
|
1846 gen_cookmd5
|
gokhlayeh@186
|
1847 cook_code=1
|
gokhlayeh@186
|
1848 fi
|
gokhlayeh@186
|
1849
|
gokhlayeh@186
|
1850 # Remove build_depends in cook mode (if in cooklist, it's done when
|
gokhlayeh@186
|
1851 # checking build_depends of next package and we remove only unneeded
|
gokhlayeh@186
|
1852 # packages to keep chroot minimal and gain some time).
|
gokhlayeh@186
|
1853 [ "$COMMAND" = cook ] && remove_build_depends $MISSING_PACKAGE
|
gokhlayeh@186
|
1854
|
gokhlayeh@186
|
1855 # Regen the cooklist if it was planned and command is not cook.
|
gokhlayeh@186
|
1856 [ "$regen_cooklist" ] && unset regen_cooklist && \
|
gokhlayeh@186
|
1857 [ "$COMMAND" != cook ] && sort_cooklist
|
gokhlayeh@186
|
1858
|
gokhlayeh@186
|
1859 # Some hacks to set the bloc & function status as failed if cook was
|
gokhlayeh@186
|
1860 # failed.
|
gokhlayeh@186
|
1861 report_return_code=$cook_code
|
gokhlayeh@186
|
1862 report close-bloc
|
gokhlayeh@186
|
1863 report end-sublog
|
gokhlayeh@186
|
1864 return $cook_code
|
gokhlayeh@186
|
1865 }
|
gokhlayeh@186
|
1866
|
gokhlayeh@186
|
1867 genpkg_list()
|
gokhlayeh@186
|
1868 {
|
gokhlayeh@186
|
1869 while [ -s $PACKAGES_REPOSITORY/genpkglist ]; do
|
gokhlayeh@186
|
1870 PACKAGE=$(sed 1!d $PACKAGES_REPOSITORY/genpkglist)
|
gokhlayeh@186
|
1871 gen_package
|
gokhlayeh@186
|
1872 done
|
gokhlayeh@186
|
1873 }
|
gokhlayeh@186
|
1874
|
gokhlayeh@186
|
1875 cook_list()
|
gokhlayeh@186
|
1876 {
|
gokhlayeh@186
|
1877 if [ ! -s $cooklist ]; then
|
gokhlayeh@186
|
1878 echo "Nothing to cook."
|
gokhlayeh@186
|
1879 return
|
gokhlayeh@186
|
1880 fi
|
gokhlayeh@186
|
1881 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
1882 # Note : options -main variables- are automatically keeped by
|
gokhlayeh@186
|
1883 # the sub-applications tazchroot/tazwok; as well as report data.
|
gokhlayeh@186
|
1884 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
1885 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
1886 tazchroot tazwok cook-list --SLITAZ_DIR=$SLITAZ_DIR --SLITAZ_VERSION=$SLITAZ_VERSION ${undigest:+ --undigest=$undigest}
|
gokhlayeh@186
|
1887 return
|
gokhlayeh@186
|
1888 fi
|
gokhlayeh@186
|
1889 while [ -s $tmp/cooklist ]; do
|
gokhlayeh@186
|
1890 PACKAGE=$(sed 1!d $tmp/cooklist)
|
gokhlayeh@186
|
1891 cook
|
gokhlayeh@186
|
1892 done
|
gokhlayeh@186
|
1893 remove_build_depends $MISSING_PACKAGE $remove_later
|
gokhlayeh@186
|
1894 }
|
gokhlayeh@186
|
1895
|
gokhlayeh@186
|
1896 configure_tazchroot()
|
gokhlayeh@186
|
1897 {
|
gokhlayeh@190
|
1898 cat > $LOCAL_REPOSITORY/tazchroot.conf << EOF
|
gokhlayeh@186
|
1899 # Tazchroot configuration file - created by tazwok.
|
gokhlayeh@186
|
1900
|
gokhlayeh@186
|
1901 # Default chroot path
|
gokhlayeh@186
|
1902 SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@186
|
1903 SLITAZ_VERSION=$SLITAZ_VERSION
|
gokhlayeh@186
|
1904 $( [ "$undigest" ] && echo "undigest=$undigest" )
|
gokhlayeh@186
|
1905 LOCAL_REPOSITORY=$SLITAZ_DIR/$(if [ "$undigest" ]; then echo '$undigest'; else echo '$SLITAZ_VERSION'; fi)
|
gokhlayeh@186
|
1906 chroot_dir=\$LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
1907
|
gokhlayeh@186
|
1908 # Default scripts path (theses scripts are added in the
|
gokhlayeh@186
|
1909 # $chroot_dir/usr/bin and can be called with tazchroot script)
|
gokhlayeh@186
|
1910 script_dir=/var/lib/tazchroot
|
gokhlayeh@186
|
1911
|
gokhlayeh@186
|
1912 # List of directories to mount.
|
gokhlayeh@192
|
1913 list_dir="$(for dir in packages wok src packages-incoming log flavors iso; do echo $LOCAL_REPOSITORY/$dir; done)
|
gokhlayeh@186
|
1914 $SLITAZ_LOG$( [ "$undigest" ] && echo -e "\n$SLITAZ_DIR/$SLITAZ_VERSION/packages" )"
|
gokhlayeh@186
|
1915
|
gokhlayeh@186
|
1916 create_chroot()
|
gokhlayeh@186
|
1917 {
|
gokhlayeh@186
|
1918 mkdir -p \$chroot_dir
|
gokhlayeh@186
|
1919 for pkg in \$(tazwok build-depends toolchain --SLITAZ_DIR=\$SLITAZ_DIR --SLITAZ_VERSION=\$SLITAZ_VERSION${undigest:+ --undigest=\$undigest}); do
|
gokhlayeh@186
|
1920 tazpkg get-install \$pkg --root="\$chroot_dir"
|
gokhlayeh@186
|
1921 done
|
gokhlayeh@186
|
1922
|
gokhlayeh@186
|
1923 # Store list of installed packages needed by cleanchroot.
|
gokhlayeh@194
|
1924 ls -1 \$chroot_dir/\$INSTALLED > \$chroot_dir/\$LOCALSTATE/chroot-pkgs
|
gokhlayeh@186
|
1925
|
gokhlayeh@186
|
1926 sed -e "s~^SLITAZ_DIR=.*~SLITAZ_DIR=\$SLITAZ_DIR~" \\
|
gokhlayeh@186
|
1927 -e "s/^SLITAZ_VERSION=.*/SLITAZ_VERSION=\$SLITAZ_VERSION/" \\
|
gokhlayeh@186
|
1928 -i \$chroot_dir/etc/slitaz/slitaz.conf
|
gokhlayeh@186
|
1929 $( [ "$undigest" ] && echo ' echo "undigest='"$undigest"'" >> $chroot_dir/etc/slitaz/tazwok.conf')
|
gokhlayeh@186
|
1930 sed 's/LC_ALL/LC_ALL=POSIX/' -i \$chroot_dir/etc/profile
|
gokhlayeh@186
|
1931 }
|
gokhlayeh@186
|
1932
|
gokhlayeh@186
|
1933 mount_chroot()
|
gokhlayeh@186
|
1934 {
|
gokhlayeh@186
|
1935 cp -a /etc/resolv.conf \$chroot_dir/etc/resolv.conf
|
gokhlayeh@194
|
1936 echo "\$LOCAL_REPOSITORY/packages" > \$chroot_dir\$LOCALSTATE/mirror
|
gokhlayeh@194
|
1937 mkdir -p \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming
|
gokhlayeh@194
|
1938 echo "\$LOCAL_REPOSITORY/packages-incoming" > \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming/mirror
|
gokhlayeh@194
|
1939 $( [ "$undigest" ] && echo ' mkdir -p $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION
|
gokhlayeh@194
|
1940 echo "$SLITAZ_DIR/$SLITAZ_VERSION/packages" > $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION/mirror' )
|
gokhlayeh@194
|
1941 echo -e "\${LOCAL_REPOSITORY##*/}-incoming\nmain" > \$chroot_dir\$LOCALSTATE/priority
|
gokhlayeh@186
|
1942 mount -t proc proc \$chroot_dir/proc
|
gokhlayeh@186
|
1943 mount -t sysfs sysfs \$chroot_dir/sys
|
gokhlayeh@186
|
1944 mount -t devpts devpts \$chroot_dir/dev/pts
|
gokhlayeh@186
|
1945 mount -t tmpfs shm \$chroot_dir/dev/shm
|
gokhlayeh@186
|
1946 for dir in \$list_dir; do
|
gokhlayeh@186
|
1947 mkdir -p \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
1948 mount \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
1949 done
|
gokhlayeh@186
|
1950 }
|
gokhlayeh@186
|
1951
|
gokhlayeh@186
|
1952 umount_chroot()
|
gokhlayeh@186
|
1953 {
|
gokhlayeh@186
|
1954 for dir in \$list_dir; do
|
gokhlayeh@186
|
1955 umount \$chroot_dir\$dir
|
gokhlayeh@186
|
1956 done
|
gokhlayeh@186
|
1957 umount \$chroot_dir/dev/shm
|
gokhlayeh@186
|
1958 umount \$chroot_dir/dev/pts
|
gokhlayeh@186
|
1959 umount \$chroot_dir/sys
|
gokhlayeh@186
|
1960 umount \$chroot_dir/proc
|
gokhlayeh@186
|
1961 }
|
gokhlayeh@186
|
1962 EOF
|
gokhlayeh@186
|
1963 }
|
gokhlayeh@186
|
1964
|
gokhlayeh@186
|
1965 ########################################################################
|
gokhlayeh@186
|
1966 ######################### END OF NEW FUNCTIONS #########################
|
gokhlayeh@186
|
1967 ########################################################################
|
gokhlayeh@186
|
1968
|
pascal@111
|
1969 # List packages providing a virtual package
|
pascal@111
|
1970 whoprovide()
|
pascal@111
|
1971 {
|
pascal@111
|
1972 local i;
|
pascal@111
|
1973 for i in $(grep -l PROVIDE $WOK/*/receipt); do
|
pascal@111
|
1974 . $i
|
pascal@111
|
1975 case " $PROVIDE " in
|
pascal@111
|
1976 *\ $1\ *|*\ $1:*) echo $(basename $(dirname $i));;
|
pascal@111
|
1977 esac
|
pascal@111
|
1978 done
|
pascal@111
|
1979 }
|
pascal@111
|
1980
|
gokhlayeh@186
|
1981 ########################################################################
|
gokhlayeh@186
|
1982 # TAZWOK COMMANDS
|
gokhlayeh@186
|
1983 ########################
|
pankso@7
|
1984
|
pankso@7
|
1985 case "$COMMAND" in
|
pankso@7
|
1986 stats)
|
paul@166
|
1987 # Tazwok general statistics from the wok config file.
|
pankso@7
|
1988 #
|
gokhlayeh@186
|
1989 get_tazwok_config
|
gokhlayeh@186
|
1990 echo -e "\n\033[1mTazwok configuration statistics\033[0m
|
pankso@7
|
1991 ================================================================================
|
pankso@7
|
1992 Wok directory : $WOK
|
pankso@7
|
1993 Packages repository : $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1994 Incoming repository : $INCOMING_REPOSITORY
|
pankso@7
|
1995 Sources repository : $SOURCES_REPOSITORY
|
gokhlayeh@186
|
1996 Log directory : $LOCAL_REPOSITORY/log
|
pankso@7
|
1997 Packages in the wok : `ls -1 $WOK | wc -l`
|
pankso@16
|
1998 Cooked packages : `ls -1 $PACKAGES_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
1999 Incoming packages : `ls -1 $INCOMING_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2000 ================================================================================\n"
|
gokhlayeh@186
|
2001 ;;
|
pankso@133
|
2002 edit)
|
gokhlayeh@186
|
2003 get_tazwok_config
|
pankso@133
|
2004 check_for_package_on_cmdline
|
pankso@133
|
2005 check_for_receipt
|
gokhlayeh@186
|
2006 $EDITOR $WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
2007 ;;
|
pascal@98
|
2008 build-depends)
|
gokhlayeh@186
|
2009 # List dependencies to rebuild wok, or only a package
|
gokhlayeh@186
|
2010 get_tazwok_config
|
gokhlayeh@186
|
2011 if [ "$PACKAGE" = toolchain-cooklist ]; then
|
gokhlayeh@186
|
2012 mkdir -p $tmp
|
gokhlayeh@186
|
2013 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
2014 --cooklist
|
gokhlayeh@186
|
2015 elif [ ! "$PACKAGE" ] || [ "$PACKAGE" = toolchain ]; then
|
gokhlayeh@186
|
2016 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
2017 --look_for=dep --with_dev --with_args
|
gokhlayeh@186
|
2018 else
|
gokhlayeh@186
|
2019 check_for_package_on_cmdline
|
gokhlayeh@186
|
2020 scan $PACKAGE --look_for=bdep --with_dev
|
gokhlayeh@186
|
2021 fi
|
gokhlayeh@186
|
2022 ;;
|
gokhlayeh@186
|
2023 gen-cooklist)
|
gokhlayeh@186
|
2024 get_options_list="list"
|
gokhlayeh@186
|
2025 get_tazwok_config
|
gokhlayeh@186
|
2026 if [ "$list" ]; then
|
gokhlayeh@186
|
2027 LIST="$list"
|
gokhlayeh@186
|
2028 check_for_list
|
gokhlayeh@186
|
2029 else
|
gokhlayeh@186
|
2030 LIST=$(for pkg in $@; do
|
gokhlayeh@186
|
2031 [ "$pkg" = "${pkg#--}" ] || continue
|
gokhlayeh@186
|
2032 echo -n "$pkg "
|
gokhlayeh@186
|
2033 done)
|
gokhlayeh@186
|
2034 if [ ! "$LIST" ]; then
|
gokhlayeh@186
|
2035 echo "Please give packages or a list file in argument." >&2
|
gokhlayeh@186
|
2036 exit
|
gokhlayeh@186
|
2037 fi
|
gokhlayeh@186
|
2038 fi
|
gokhlayeh@186
|
2039 scan $LIST --cooklist
|
gokhlayeh@186
|
2040 ;;
|
pascal@119
|
2041 check-depends)
|
gokhlayeh@186
|
2042 # Check package depends /!\
|
gokhlayeh@186
|
2043 get_tazwok_config
|
pascal@119
|
2044 echo ""
|
paul@121
|
2045 echo -e "\033[1mCheck every receipt for DEPENDS - doesn't scan ELF files\033[0m
|
pascal@119
|
2046 ================================================================================"
|
pascal@119
|
2047 TMPDIR=/tmp/tazwok$$
|
pascal@119
|
2048 DEFAULT_DEPENDS="glibc-base gcc-lib-base"
|
pascal@119
|
2049
|
pascal@119
|
2050 # Build ALL_DEPENDS variable
|
pascal@119
|
2051 scan_dep()
|
pascal@119
|
2052 {
|
pascal@119
|
2053 local i
|
pascal@119
|
2054 ALL_DEPENDS="$ALL_DEPENDS$PACKAGE "
|
pascal@128
|
2055 for i in $DEPENDS $SUGGESTED ; do
|
pascal@119
|
2056 case " $ALL_DEPENDS " in
|
pascal@119
|
2057 *\ $i\ *) continue;;
|
pascal@119
|
2058 esac
|
pascal@120
|
2059 [ -d $WOK/$i ] || {
|
pascal@120
|
2060 ALL_DEPENDS="$ALL_DEPENDS$i "
|
pascal@120
|
2061 continue
|
pascal@120
|
2062 }
|
pascal@128
|
2063 DEPENDS=""
|
pascal@128
|
2064 SUGGESTED=""
|
pascal@119
|
2065 . $WOK/$i/receipt
|
pascal@119
|
2066 scan_dep
|
pascal@119
|
2067 done
|
pascal@119
|
2068 }
|
pankso@133
|
2069
|
pascal@119
|
2070 # Check for ELF file
|
pascal@119
|
2071 is_elf()
|
pascal@119
|
2072 {
|
pascal@119
|
2073 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" \
|
pascal@119
|
2074 = "ELF" ]
|
pascal@119
|
2075 }
|
pascal@119
|
2076
|
pascal@119
|
2077 # Print shared library dependencies
|
pascal@119
|
2078 ldd()
|
pascal@119
|
2079 {
|
pascal@130
|
2080 LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
|
pascal@119
|
2081 }
|
pascal@119
|
2082
|
pascal@119
|
2083 mkdir $TMPDIR
|
pascal@119
|
2084 cd $TMPDIR
|
pascal@140
|
2085 for i in $LOCALSTATE/files.list.lzma \
|
pascal@140
|
2086 $LOCALSTATE/undigest/*/files.list.lzma ; do
|
pascal@119
|
2087 [ -f $i ] && lzma d $i -so >> files.list
|
pascal@119
|
2088 done
|
pascal@119
|
2089 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
|
pascal@119
|
2090 tazpkg extract $pkg > /dev/null 2>&1
|
pascal@119
|
2091 . */receipt
|
pascal@119
|
2092 ALL_DEPENDS="$DEFAULT_DEPENDS "
|
pascal@119
|
2093 scan_dep
|
pascal@119
|
2094 find */fs -type f | while read file ; do
|
pascal@119
|
2095 is_elf $file || continue
|
pascal@119
|
2096 case "$file" in
|
pascal@119
|
2097 *.o|*.ko|*.ko.gz) continue;;
|
pascal@119
|
2098 esac
|
pascal@119
|
2099 ldd $file | while read lib rem; do
|
pascal@119
|
2100 case "$lib" in
|
pascal@128
|
2101 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
|
pascal@119
|
2102 continue;;
|
pascal@119
|
2103 esac
|
pascal@119
|
2104 for dep in $(grep $lib files.list | cut -d: -f1); do
|
pascal@119
|
2105 case " $ALL_DEPENDS " in
|
pascal@119
|
2106 *\ $dep\ *) continue 2;;
|
pascal@119
|
2107 esac
|
pascal@140
|
2108 for vdep in $(grep $dep $LOCALSTATE/packages.equiv | cut -d= -f1); do
|
pascal@128
|
2109 case " $ALL_DEPENDS " in
|
pascal@129
|
2110 *\ $vdep\ *) continue 3;;
|
pascal@128
|
2111 esac
|
pascal@128
|
2112 done
|
pascal@119
|
2113 done
|
pascal@128
|
2114 [ -n "$dep" ] || dep="UNKNOWN"
|
pascal@119
|
2115 echo "$(basename $pkg): ${file#*fs} depends on package $dep for the shared library $lib"
|
pascal@119
|
2116 done
|
pascal@119
|
2117 done
|
pascal@119
|
2118 rm -rf */
|
pascal@119
|
2119 done
|
pascal@119
|
2120 cd /tmp
|
pascal@119
|
2121 rm -rf $TMPDIR
|
gokhlayeh@186
|
2122 ;;
|
pascal@76
|
2123 check)
|
paul@154
|
2124 # Check wok consistency
|
gokhlayeh@186
|
2125 get_tazwok_config
|
pascal@76
|
2126 echo ""
|
pascal@76
|
2127 echo -e "\033[1mWok and packages checking\033[0m
|
pascal@76
|
2128 ================================================================================"
|
pascal@77
|
2129 cd $WOK
|
pascal@77
|
2130 for pkg in $(ls)
|
pascal@76
|
2131 do
|
pascal@76
|
2132 [ -f $pkg/receipt ] || continue
|
gokhlayeh@186
|
2133 RECEIPT= $pkg/receipt
|
gokhlayeh@186
|
2134 source_receipt
|
gokhlayeh@186
|
2135 [ "$PACKAGE" = "$pkg" ] || echo "Package $PACKAGE should be $pkg" >&2
|
gokhlayeh@186
|
2136 [ -n "$VERSION" ] || echo "Package $PACKAGE has no VERSION" >&2
|
gokhlayeh@186
|
2137 [ -n "$PACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded PACKED_SIZE" >&2
|
gokhlayeh@186
|
2138 [ -n "$UNPACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded UNPACKED_SIZE" >&2
|
gokhlayeh@186
|
2139 [ -n "$EXTRAVERSION" ] && echo "Package $PACKAGE has hardcoded EXTRAVERSION" >&2
|
pascal@97
|
2140 if [ -n "$WANTED" ]; then
|
pascal@97
|
2141 if [ ! -f $WANTED/receipt ]; then
|
gokhlayeh@186
|
2142 echo "Package $PACKAGE wants unknown $WANTED package" >&2
|
pascal@97
|
2143 else
|
pascal@97
|
2144 BASEVERSION=$(. $WANTED/receipt ; echo $VERSION)
|
pascal@103
|
2145 if [ "$VERSION" = "$WANTED" ]; then
|
pascal@103
|
2146 # BASEVERSION is computed in receipt
|
pankso@133
|
2147 grep -q '_pkg=' $pkg/receipt &&
|
pascal@103
|
2148 BASEVERSION=$VERSION
|
pascal@103
|
2149 fi
|
pascal@97
|
2150 if [ "$VERSION" != "$BASEVERSION" ]; then
|
gokhlayeh@186
|
2151 echo "Package $PACKAGE ($VERSION) wants $WANTED ($BASEVERSION)" >&2
|
pascal@97
|
2152 fi
|
pascal@97
|
2153 fi
|
pascal@97
|
2154 fi
|
pascal@97
|
2155
|
pascal@94
|
2156 if [ -n "$CATEGORY" ]; then
|
pascal@94
|
2157 case " $(echo $CATEGORIES) " in
|
pascal@94
|
2158 *\ $CATEGORY\ *);;
|
gokhlayeh@186
|
2159 *) echo "Package $PACKAGE has an invalid CATEGORY" >&2;;
|
pascal@94
|
2160 esac
|
pascal@94
|
2161 else
|
gokhlayeh@186
|
2162 echo"Package $PACKAGE has no CATEGORY" >&2
|
pascal@94
|
2163 fi
|
gokhlayeh@186
|
2164 [ -n "$SHORT_DESC" ] || echo "Package $PACKAGE has no SHORT_DESC" >&2
|
gokhlayeh@186
|
2165 [ -n "$MAINTAINER" ] || echo "Package $PACKAGE has no MAINTAINER" >&2
|
pascal@122
|
2166 case "$WGET_URL" in
|
pascal@178
|
2167 ftp*|http*) busybox wget -s $WGET_URL 2> /dev/null ||
|
gokhlayeh@186
|
2168 echo "Package $PACKAGE has a wrong WGET_URL" >&2;;
|
pascal@122
|
2169 '') ;;
|
gokhlayeh@186
|
2170 *) echo "Package $PACKAGE has an invalid WGET_URL" >&2;;
|
pascal@122
|
2171 esac
|
pascal@112
|
2172 case "$WEB_SITE" in
|
pascal@125
|
2173 ftp*|http*);;
|
gokhlayeh@186
|
2174 '') echo "Package $PACKAGE has no WEB_SITE" >&2;;
|
gokhlayeh@186
|
2175 *) echo "Package $PACKAGE has an invalid WEB_SITE" >&2;;
|
pascal@112
|
2176 esac
|
pascal@78
|
2177 case "$MAINTAINER" in
|
gokhlayeh@186
|
2178 *\<*|*\>*) echo "Package $PACKAGE has an invalid MAINTAINER: $MAINTAINER" >&2;;
|
pascal@78
|
2179 esac
|
pascal@78
|
2180 case "$MAINTAINER" in
|
pascal@78
|
2181 *@*);;
|
gokhlayeh@186
|
2182 *) echo "Package $PACKAGE MAINTAINER is not an email address" >&2;;
|
pascal@78
|
2183 esac
|
gokhlayeh@186
|
2184 MSG="Missing dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@76
|
2185 for i in $DEPENDS; do
|
pascal@76
|
2186 [ -d $i ] && continue
|
pascal@111
|
2187 [ -n "$(whoprovide $i)" ] && continue
|
pascal@76
|
2188 echo -e "$MSG $i"
|
pascal@76
|
2189 MSG=""
|
pascal@76
|
2190 done
|
gokhlayeh@186
|
2191 MSG="Missing build dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@92
|
2192 for i in $BUILD_DEPENDS; do
|
pascal@92
|
2193 [ -d $i ] && continue
|
pascal@111
|
2194 [ -n "$(whoprovide $i)" ] && continue
|
pascal@92
|
2195 echo -e "$MSG $i"
|
pascal@92
|
2196 MSG=""
|
pascal@92
|
2197 done
|
pascal@76
|
2198 MSG="Dependencies loop between $PACKAGE and :\n"
|
pascal@76
|
2199 ALL_DEPS=""
|
pascal@76
|
2200 check_for_deps_loop $PACKAGE $DEPENDS
|
pascal@140
|
2201 [ -d $WOK/$pkg/taz ] && for i in $BUILD_DEPENDS; do
|
pascal@141
|
2202 [ $WOK/$pkg/taz -nt $INSTALLED/$i/files.list ] && continue
|
paul@154
|
2203 echo "$pkg should be rebuilt after $i installation"
|
pascal@140
|
2204 done
|
pascal@76
|
2205 done
|
gokhlayeh@186
|
2206 ;;
|
pankso@7
|
2207 list)
|
paul@166
|
2208 # List packages in wok directory. User can specify a category.
|
pankso@7
|
2209 #
|
gokhlayeh@186
|
2210 get_tazwok_config
|
pankso@7
|
2211 if [ "$2" = "category" ]; then
|
pankso@7
|
2212 echo -e "\033[1m\nPackages categories :\033[0m $CATEGORIES\n"
|
pankso@7
|
2213 exit 0
|
pankso@7
|
2214 fi
|
pankso@7
|
2215 # Check for an asked category.
|
pankso@7
|
2216 if [ -n "$2" ]; then
|
pankso@7
|
2217 ASKED_CATEGORY=$2
|
pankso@7
|
2218 echo ""
|
pankso@7
|
2219 echo -e "\033[1mPackages in category :\033[0m $ASKED_CATEGORY"
|
pankso@7
|
2220 echo "================================================================================"
|
pankso@7
|
2221 for pkg in $WOK/*
|
pankso@7
|
2222 do
|
erjo@168
|
2223 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2224 . $pkg/receipt
|
pankso@7
|
2225 if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then
|
pankso@7
|
2226 echo -n "$PACKAGE"
|
pankso@28
|
2227 echo -e "\033[28G $VERSION"
|
pankso@7
|
2228 packages=$(($packages+1))
|
pankso@7
|
2229 fi
|
pankso@7
|
2230 done
|
pankso@7
|
2231 echo "================================================================================"
|
gokhlayeh@186
|
2232 echo -e "$PACKAGEs packages in category $ASKED_CATEGORY.\n"
|
pankso@7
|
2233 else
|
pankso@7
|
2234 # By default list all packages and version.
|
pankso@7
|
2235 echo ""
|
pankso@7
|
2236 echo -e "\033[1mList of packages in the wok\033[0m"
|
pankso@7
|
2237 echo "================================================================================"
|
pankso@7
|
2238 for pkg in $WOK/*
|
pankso@7
|
2239 do
|
erjo@168
|
2240 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2241 . $pkg/receipt
|
pankso@7
|
2242 echo -n "$PACKAGE"
|
pankso@28
|
2243 echo -en "\033[28G $VERSION"
|
pankso@7
|
2244 echo -e "\033[42G $CATEGORY"
|
pankso@7
|
2245 packages=$(($packages+1))
|
pankso@7
|
2246 done
|
pankso@7
|
2247 echo "================================================================================"
|
gokhlayeh@186
|
2248 echo -e "$PACKAGEs packages available in the wok.\n"
|
pankso@7
|
2249 fi
|
pankso@7
|
2250 ;;
|
pankso@7
|
2251 info)
|
MikeDSmith25@82
|
2252 # Information about a package.
|
pankso@7
|
2253 #
|
gokhlayeh@186
|
2254 get_tazwok_config
|
pankso@7
|
2255 check_for_package_on_cmdline
|
pankso@7
|
2256 check_for_receipt
|
pankso@7
|
2257 . $WOK/$PACKAGE/receipt
|
pankso@7
|
2258 echo ""
|
MikeDSmith25@82
|
2259 echo -e "\033[1mTazwok package information\033[0m
|
pankso@7
|
2260 ================================================================================
|
pankso@7
|
2261 Package : $PACKAGE
|
pankso@7
|
2262 Version : $VERSION
|
pankso@7
|
2263 Category : $CATEGORY
|
pankso@7
|
2264 Short desc : $SHORT_DESC
|
pankso@7
|
2265 Maintainer : $MAINTAINER"
|
pankso@7
|
2266 if [ ! "$WEB_SITE" = "" ]; then
|
pankso@7
|
2267 echo "Web site : $WEB_SITE"
|
pankso@7
|
2268 fi
|
pankso@7
|
2269 if [ ! "$DEPENDS" = "" ]; then
|
pankso@7
|
2270 echo "Depends : $DEPENDS"
|
pankso@7
|
2271 fi
|
pankso@7
|
2272 if [ ! "$WANTED" = "" ]; then
|
pankso@7
|
2273 echo "Wanted src : $WANTED"
|
pankso@7
|
2274 fi
|
pankso@7
|
2275 echo "================================================================================"
|
pankso@7
|
2276 echo ""
|
gokhlayeh@186
|
2277 ;;
|
pankso@7
|
2278 check-log)
|
pankso@7
|
2279 # We just cat the file log to view process info.
|
pankso@7
|
2280 #
|
gokhlayeh@186
|
2281 get_tazwok_config
|
pankso@7
|
2282 if [ ! -f "$LOG" ]; then
|
gokhlayeh@186
|
2283 echo -e "\nNo process log found. The package is probably not cooked.\n" >&2
|
gokhlayeh@186
|
2284 exit 1
|
pankso@7
|
2285 else
|
pankso@7
|
2286 echo ""
|
pankso@7
|
2287 echo -e "\033[1mPackage process log for :\033[0m $PACKAGE"
|
pankso@7
|
2288 echo "================================================================================"
|
pankso@7
|
2289 cat $LOG
|
pankso@7
|
2290 echo "================================================================================"
|
pankso@7
|
2291 echo ""
|
pankso@7
|
2292 fi
|
gokhlayeh@186
|
2293 ;;
|
pankso@7
|
2294 search)
|
pankso@7
|
2295 # Search for a package by pattern or name.
|
pankso@7
|
2296 #
|
gokhlayeh@186
|
2297 get_tazwok_config
|
pankso@7
|
2298 if [ -z "$2" ]; then
|
gokhlayeh@186
|
2299 echo -e "\nPlease specify a pattern or a package name to search." >&2
|
gokhlayeh@186
|
2300 echo -e "Example : 'tazwok search gcc'.\n" >&2
|
gokhlayeh@186
|
2301 exit 1
|
pankso@7
|
2302 fi
|
pankso@7
|
2303 echo ""
|
pankso@7
|
2304 echo -e "\033[1mSearch result for :\033[0m $2"
|
pankso@7
|
2305 echo "================================================================================"
|
pankso@7
|
2306 list=`ls -1 $WOK | grep $2`
|
pankso@7
|
2307 for pkg in $list
|
pankso@7
|
2308 do
|
pankso@7
|
2309 . $WOK/$pkg/receipt
|
pankso@7
|
2310 echo -n "$PACKAGE "
|
pankso@7
|
2311 echo -en "\033[24G $VERSION"
|
pankso@7
|
2312 echo -e "\033[42G $CATEGORY"
|
gokhlayeh@186
|
2313 packages=$(($PACKAGEs+1))
|
pankso@7
|
2314 done
|
pankso@7
|
2315 echo "================================================================================"
|
gokhlayeh@186
|
2316 echo "$PACKAGEs packages found for : $2"
|
pankso@7
|
2317 echo ""
|
gokhlayeh@186
|
2318 ;;
|
pankso@7
|
2319 compile)
|
pankso@7
|
2320 # Configure and make a package with the receipt.
|
pankso@7
|
2321 #
|
gokhlayeh@186
|
2322 get_tazwok_config
|
gokhlayeh@186
|
2323 source_lib report
|
gokhlayeh@186
|
2324 report start
|
pankso@7
|
2325 compile_package
|
gokhlayeh@186
|
2326 ;;
|
pankso@7
|
2327 genpkg)
|
paul@121
|
2328 # Generate a package.
|
pankso@7
|
2329 #
|
gokhlayeh@186
|
2330 get_tazwok_config
|
gokhlayeh@186
|
2331 source_lib report
|
gokhlayeh@186
|
2332 report start
|
gokhlayeh@186
|
2333 mkdir $tmp
|
pankso@7
|
2334 gen_package
|
gokhlayeh@186
|
2335 ;;
|
pankso@7
|
2336 cook)
|
pankso@7
|
2337 # Compile and generate a package. Just execute tazwok with
|
pankso@7
|
2338 # the good commands.
|
pankso@7
|
2339 #
|
pankso@7
|
2340 check_root
|
gokhlayeh@186
|
2341 get_tazwok_config
|
gokhlayeh@186
|
2342 source_lib report
|
gokhlayeh@186
|
2343 report start
|
gokhlayeh@186
|
2344 mkdir -p $tmp
|
gokhlayeh@186
|
2345 cook
|
gokhlayeh@186
|
2346 ;;
|
gokhlayeh@186
|
2347 sort-cooklist)
|
gokhlayeh@186
|
2348 if [ ! "$LIST" ]; then
|
gokhlayeh@186
|
2349 echo "Usage : tazwok sort-cooklist cooklist" >&2\
|
gokhlayeh@186
|
2350 exit 1
|
gokhlayeh@186
|
2351 fi
|
gokhlayeh@186
|
2352 get_tazwok_config
|
gokhlayeh@186
|
2353 source_lib report
|
gokhlayeh@186
|
2354 report start
|
gokhlayeh@186
|
2355 mkdir -p $tmp
|
gokhlayeh@186
|
2356 cooklist=$LIST
|
gokhlayeh@186
|
2357 sort_cooklist
|
gokhlayeh@186
|
2358 cp -af $tmp/cooklist $cooklist
|
gokhlayeh@186
|
2359 ;;
|
pankso@7
|
2360 cook-list)
|
pankso@7
|
2361 # Cook all packages listed in a file. The path to the cooklist must
|
pankso@7
|
2362 # be specified on the cmdline.
|
gokhlayeh@186
|
2363 # /!\
|
gokhlayeh@186
|
2364 check_root
|
gokhlayeh@186
|
2365 get_tazwok_config
|
gokhlayeh@186
|
2366 source_lib report
|
gokhlayeh@186
|
2367 report start
|
gokhlayeh@186
|
2368 mkdir -p $tmp
|
gokhlayeh@186
|
2369 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
|
gokhlayeh@186
|
2370 if [ "$LIST" ]; then
|
gokhlayeh@186
|
2371 sort_cooklist
|
gokhlayeh@186
|
2372 else
|
gokhlayeh@186
|
2373 cp $cooklist $tmp/cooklist
|
gokhlayeh@186
|
2374 fi
|
gokhlayeh@186
|
2375 cook_list
|
gokhlayeh@186
|
2376 ;;
|
gokhlayeh@186
|
2377 clean)
|
gokhlayeh@186
|
2378 # Clean up a package work directory + thoses which want it.
|
pankso@7
|
2379 #
|
gokhlayeh@186
|
2380 get_tazwok_config
|
pankso@7
|
2381 check_for_package_on_cmdline
|
pankso@7
|
2382 check_for_receipt
|
gokhlayeh@186
|
2383 source_lib report
|
gokhlayeh@186
|
2384 report start
|
pankso@7
|
2385 . $RECEIPT
|
gokhlayeh@186
|
2386 clean
|
gokhlayeh@186
|
2387 ;;
|
pankso@7
|
2388 gen-clean-wok)
|
paul@121
|
2389 # Generate a clean wok from the current wok by copying all receipts
|
pankso@7
|
2390 # and stuff directory.
|
pankso@7
|
2391 #
|
gokhlayeh@186
|
2392 get_tazwok_config
|
gokhlayeh@186
|
2393 source_lib report
|
gokhlayeh@186
|
2394 report start
|
gokhlayeh@186
|
2395 if [ -z "$ARG" ]; then
|
gokhlayeh@186
|
2396 echo -e "\nPlease specify the destination for the new clean wok.\n" >&2
|
gokhlayeh@186
|
2397 exit 1
|
pankso@7
|
2398 else
|
gokhlayeh@186
|
2399 dest=$ARG
|
pankso@7
|
2400 mkdir -p $dest
|
pankso@7
|
2401 fi
|
gokhlayeh@186
|
2402 report step "Creating clean wok in : $dest"
|
pankso@7
|
2403 for pkg in `ls -1 $WOK`
|
pankso@7
|
2404 do
|
pankso@7
|
2405 mkdir -p $dest/$pkg
|
pankso@7
|
2406 cp -a $WOK/$pkg/receipt $dest/$pkg
|
gokhlayeh@186
|
2407 [ -f $WOK/$pkg/description.txt ] && \
|
gokhlayeh@186
|
2408 cp -a $WOK/$pkg/description.txt $dest/$pkg
|
pankso@7
|
2409 if [ -d "$WOK/$pkg/stuff" ]; then
|
pankso@7
|
2410 cp -a $WOK/$pkg/stuff $dest/$pkg
|
pankso@7
|
2411 fi
|
pankso@7
|
2412 done
|
gokhlayeh@186
|
2413 [ -d $WOK/.hg ] && cp -a $WOK/.hg $dest
|
gokhlayeh@186
|
2414 report end-step
|
pankso@7
|
2415 echo "Packages cleaned : `ls -1 $dest | wc -l`"
|
pankso@7
|
2416 echo ""
|
gokhlayeh@186
|
2417 ;;
|
pankso@7
|
2418 clean-wok)
|
pankso@7
|
2419 # Clean all packages in the work directory
|
pankso@7
|
2420 #
|
gokhlayeh@186
|
2421 get_tazwok_config
|
gokhlayeh@186
|
2422 source_lib report
|
gokhlayeh@186
|
2423 report start
|
gokhlayeh@186
|
2424 report step "Cleaning wok"
|
gokhlayeh@186
|
2425 report open-bloc
|
gokhlayeh@186
|
2426 for PACKAGE in `ls -1 $WOK`
|
pankso@7
|
2427 do
|
gokhlayeh@186
|
2428 set_common_path
|
gokhlayeh@186
|
2429 source_receipt
|
gokhlayeh@186
|
2430 clean
|
pankso@7
|
2431 done
|
gokhlayeh@186
|
2432 report close-bloc
|
pankso@7
|
2433 echo "`ls -1 $WOK | wc -l` packages cleaned."
|
gokhlayeh@186
|
2434 ;;
|
pankso@7
|
2435 gen-list)
|
gokhlayeh@186
|
2436 check_root
|
gokhlayeh@186
|
2437 get_tazwok_config
|
gokhlayeh@186
|
2438 source_lib report
|
gokhlayeh@186
|
2439 report start
|
gokhlayeh@186
|
2440 dbtype=packages
|
gokhlayeh@186
|
2441 mode=gen
|
gokhlayeh@186
|
2442 for pkg_repository in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@186
|
2443 files_list="$pkg_repository/files.list.lzma \
|
gokhlayeh@186
|
2444 $pkg_repository/packages.list \
|
gokhlayeh@186
|
2445 $pkg_repository/packages.txt \
|
gokhlayeh@186
|
2446 $pkg_repository/packages.desc \
|
gokhlayeh@186
|
2447 $pkg_repository/packages.equiv \
|
gokhlayeh@186
|
2448 $pkg_repository/packages.md5"
|
gokhlayeh@186
|
2449 gen_db
|
gokhlayeh@186
|
2450 echo "$pkgs packages in the repository."
|
gokhlayeh@186
|
2451 echo ""
|
gokhlayeh@186
|
2452 done
|
gokhlayeh@186
|
2453 ;;
|
gokhlayeh@186
|
2454 check-list)
|
gokhlayeh@186
|
2455 # The directory to move into by default is the repository,
|
gokhlayeh@186
|
2456 # if $2 is not empty cd into $2.
|
pankso@7
|
2457 #
|
gokhlayeh@186
|
2458 get_tazwok_config
|
gokhlayeh@186
|
2459 if [ -z "$2" ]; then
|
pankso@7
|
2460 PACKAGES_REPOSITORY=$PACKAGES_REPOSITORY
|
pankso@7
|
2461 else
|
pankso@7
|
2462 if [ -d "$2" ]; then
|
pankso@7
|
2463 PACKAGES_REPOSITORY=$2
|
pankso@7
|
2464 else
|
gokhlayeh@186
|
2465 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@186
|
2466 exit 1
|
pankso@7
|
2467 fi
|
pankso@7
|
2468 fi
|
gokhlayeh@186
|
2469
|
gokhlayeh@186
|
2470 # Use report shared library to control output.
|
gokhlayeh@186
|
2471 tmp=/tmp/tazwok-$$
|
gokhlayeh@186
|
2472 mkdir $tmp
|
gokhlayeh@186
|
2473 source_lib report
|
gokhlayeh@186
|
2474 dbtype=packages
|
gokhlayeh@186
|
2475 mode=update
|
pankso@7
|
2476 cd $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
2477 for pkg in $(echo *.tazpkg); do
|
gokhlayeh@186
|
2478 package_md5=$(md5sum $pkg)
|
gokhlayeh@186
|
2479 [ "$PACKAGE_md5" = "$(grep ' '$pkg$ packages.md5)" ] && continue
|
gokhlayeh@186
|
2480 erase_package_info
|
gokhlayeh@186
|
2481 get_packages_info
|
gokhlayeh@186
|
2482 done
|
pankso@7
|
2483 echo "$pkgs packages in the repository."
|
pankso@7
|
2484 echo ""
|
gokhlayeh@186
|
2485 ;;
|
pankso@7
|
2486 new-tree)
|
MikeDSmith25@82
|
2487 # Just create a few directories and generate an empty receipt to prepare
|
pankso@7
|
2488 # the creation of a new package.
|
pankso@7
|
2489 #
|
gokhlayeh@186
|
2490 get_tazwok_config
|
pankso@7
|
2491 check_for_package_on_cmdline
|
pankso@7
|
2492 if [ -d $WOK/$PACKAGE ]; then
|
gokhlayeh@186
|
2493 echo -e "\n$PACKAGE package tree already exists.\n" >&2
|
gokhlayeh@186
|
2494 exit 1
|
pankso@7
|
2495 fi
|
pankso@7
|
2496 echo "Creating : $WOK/$PACKAGE"
|
pankso@7
|
2497 mkdir $WOK/$PACKAGE
|
pankso@7
|
2498 cd $WOK/$PACKAGE
|
pankso@7
|
2499 echo -n "Preparing the receipt..."
|
pankso@7
|
2500 #
|
pankso@7
|
2501 # Default receipt begin.
|
pankso@7
|
2502 #
|
pankso@7
|
2503 echo "# SliTaz package receipt." > receipt
|
pankso@7
|
2504 echo "" >> receipt
|
pankso@7
|
2505 echo "PACKAGE=\"$PACKAGE\"" >> receipt
|
pankso@7
|
2506 # Finish the empty receipt.
|
pankso@7
|
2507 cat >> receipt << "EOF"
|
pankso@7
|
2508 VERSION=""
|
pankso@7
|
2509 CATEGORY=""
|
pankso@7
|
2510 SHORT_DESC=""
|
pankso@7
|
2511 MAINTAINER=""
|
pankso@7
|
2512 DEPENDS=""
|
pankso@7
|
2513 TARBALL="$PACKAGE-$VERSION.tar.gz"
|
pankso@7
|
2514 WEB_SITE=""
|
pankso@7
|
2515 WGET_URL=""
|
pankso@7
|
2516
|
pankso@7
|
2517 # Rules to configure and make the package.
|
pankso@7
|
2518 compile_rules()
|
pankso@7
|
2519 {
|
pankso@7
|
2520 cd $src
|
pankso@113
|
2521 ./configure \
|
pankso@113
|
2522 --prefix=/usr \
|
pankso@113
|
2523 --infodir=/usr/share/info \
|
pankso@113
|
2524 --mandir=/usr/share/man \
|
pankso@113
|
2525 $CONFIGURE_ARGS &&
|
pascal@169
|
2526 make -j 4 && make DESTDIR=$PWD/_pkg install
|
pankso@7
|
2527 }
|
pankso@7
|
2528
|
pankso@7
|
2529 # Rules to gen a SliTaz package suitable for Tazpkg.
|
pankso@7
|
2530 genpkg_rules()
|
pankso@7
|
2531 {
|
pankso@7
|
2532 mkdir -p $fs/usr
|
pankso@7
|
2533 cp -a $_pkg/usr/bin $fs/usr
|
pankso@7
|
2534 }
|
pankso@7
|
2535
|
pankso@7
|
2536 EOF
|
pankso@7
|
2537 #
|
pankso@7
|
2538 # Default receipt end.
|
pankso@7
|
2539 #
|
pankso@7
|
2540 status
|
pankso@7
|
2541 # Interactive mode, asking and seding.
|
pankso@7
|
2542 if [ "$3" = "--interactive" ]; then
|
paul@154
|
2543 echo "Entering into interactive mode..."
|
pankso@7
|
2544 echo "================================================================================"
|
pankso@7
|
2545 echo "Package : $PACKAGE"
|
pankso@7
|
2546 # Version.
|
pankso@7
|
2547 echo -n "Version : " ; read anser
|
pankso@7
|
2548 sed -i s/'VERSION=\"\"'/"VERSION=\"$anser\""/ receipt
|
pankso@7
|
2549 # Category.
|
pankso@7
|
2550 echo -n "Category : " ; read anser
|
pankso@7
|
2551 sed -i s/'CATEGORY=\"\"'/"CATEGORY=\"$anser\""/ receipt
|
pankso@7
|
2552 # Short description.
|
pankso@7
|
2553 echo -n "Short desc : " ; read anser
|
pankso@7
|
2554 sed -i s/'SHORT_DESC=\"\"'/"SHORT_DESC=\"$anser\""/ receipt
|
pankso@7
|
2555 # Maintainer.
|
pankso@7
|
2556 echo -n "Maintainer : " ; read anser
|
pankso@7
|
2557 sed -i s/'MAINTAINER=\"\"'/"MAINTAINER=\"$anser\""/ receipt
|
pankso@7
|
2558 # Web site.
|
pankso@7
|
2559 echo -n "Web site : " ; read anser
|
pankso@133
|
2560 sed -i s#'WEB_SITE=\"\"'#"WEB_SITE=\"$anser\""# receipt
|
pankso@7
|
2561 echo ""
|
pankso@7
|
2562 # Wget URL.
|
pankso@7
|
2563 echo "Wget URL to download source tarball."
|
pankso@7
|
2564 echo "Example : \$GNU_MIRROR/\$PACKAGE/\$TARBALL"
|
pankso@7
|
2565 echo -n "Wget url : " ; read anser
|
pankso@7
|
2566 sed -i s#'WGET_URL=\"\"'#"WGET_URL=\"$anser\""# receipt
|
pankso@7
|
2567 # Ask for a stuff dir.
|
pankso@7
|
2568 echo -n "Do you need a stuff directory ? (y/N) : " ; read anser
|
pankso@7
|
2569 if [ "$anser" = "y" ]; then
|
pankso@7
|
2570 echo -n "Creating the stuff directory..."
|
pankso@7
|
2571 mkdir stuff && status
|
pankso@7
|
2572 fi
|
pankso@7
|
2573 # Ask for a description file.
|
pankso@7
|
2574 echo -n "Are you going to write a description ? (y/N) : " ; read anser
|
pankso@7
|
2575 if [ "$anser" = "y" ]; then
|
pankso@7
|
2576 echo -n "Creating the description.txt file..."
|
pankso@7
|
2577 echo "" > description.txt && status
|
pankso@7
|
2578 fi
|
pankso@7
|
2579 echo "================================================================================"
|
pankso@7
|
2580 echo ""
|
pankso@7
|
2581 fi
|
gokhlayeh@186
|
2582 ;;
|
pankso@7
|
2583 remove)
|
pankso@7
|
2584 # Remove a package from the wok.
|
pankso@7
|
2585 #
|
gokhlayeh@186
|
2586 get_tazwok_config
|
pankso@7
|
2587 check_for_package_on_cmdline
|
pankso@7
|
2588 echo ""
|
pascal@83
|
2589 echo -n "Please confirm deletion (y/N) : "; read anser
|
pascal@83
|
2590 if [ "$anser" = "y" ]; then
|
pascal@83
|
2591 echo -n "Removing $PACKAGE..."
|
pascal@83
|
2592 rm -rf $WOK/$PACKAGE && status
|
pascal@83
|
2593 echo ""
|
pascal@83
|
2594 fi
|
gokhlayeh@186
|
2595 ;;
|
pankso@106
|
2596 hgup)
|
paul@166
|
2597 # Pull and update a Hg wok.
|
gokhlayeh@186
|
2598 get_tazwok_config
|
pankso@106
|
2599 if ls -l $WOK/.hg/hgrc | grep -q "root"; then
|
pankso@106
|
2600 check_root
|
pankso@106
|
2601 fi
|
pankso@106
|
2602 cd $WOK
|
gokhlayeh@186
|
2603 hg pull && hg update
|
gokhlayeh@186
|
2604 ;;
|
pankso@108
|
2605 maintainers)
|
gokhlayeh@186
|
2606 get_tazwok_config
|
pankso@108
|
2607 echo ""
|
pankso@108
|
2608 echo "List of maintainers for: $WOK"
|
pankso@108
|
2609 echo "================================================================================"
|
pankso@108
|
2610 touch /tmp/slitaz-maintainers
|
pankso@108
|
2611 for pkg in $WOK/*
|
pankso@108
|
2612 do
|
pankso@108
|
2613 . $pkg/receipt
|
pankso@108
|
2614 if ! grep -q "$MAINTAINER" /tmp/slitaz-maintainers; then
|
pankso@108
|
2615 echo "$MAINTAINER" >> /tmp/slitaz-maintainers
|
pankso@108
|
2616 echo "$MAINTAINER"
|
pankso@108
|
2617 fi
|
pankso@108
|
2618 done
|
pankso@108
|
2619 echo "================================================================================"
|
pankso@108
|
2620 echo "Maintainers: `cat /tmp/slitaz-maintainers | wc -l`"
|
pankso@108
|
2621 echo ""
|
pankso@108
|
2622 # Remove tmp files
|
gokhlayeh@186
|
2623 rm -f /tmp/slitaz-maintainers
|
gokhlayeh@186
|
2624 ;;
|
pankso@107
|
2625 maintained-by)
|
paul@166
|
2626 # Search for packages maintained by a contributor.
|
gokhlayeh@186
|
2627 get_tazwok_config
|
pankso@107
|
2628 if [ ! -n "$2" ]; then
|
gokhlayeh@186
|
2629 echo "Specify a name or email of a maintainer." >&2
|
gokhlayeh@186
|
2630 exit 1
|
pankso@107
|
2631 fi
|
pankso@107
|
2632 echo "Maintainer packages"
|
pankso@107
|
2633 echo "================================================================================"
|
pankso@107
|
2634 for pkg in $WOK/*
|
pankso@107
|
2635 do
|
pankso@107
|
2636 . $pkg/receipt
|
pankso@107
|
2637 if echo "$MAINTAINER" | grep -q "$2"; then
|
pankso@107
|
2638 echo "$PACKAGE"
|
gokhlayeh@186
|
2639 packages=$(($PACKAGEs+1))
|
pankso@107
|
2640 fi
|
pankso@107
|
2641 done
|
pankso@107
|
2642 echo "================================================================================"
|
gokhlayeh@186
|
2643 echo "Packages maintained by $2: $PACKAGEs"
|
gokhlayeh@186
|
2644 echo ""
|
gokhlayeh@186
|
2645 ;;
|
erjo@159
|
2646 check-src)
|
erjo@159
|
2647 # Verify if upstream package is still available
|
erjo@159
|
2648 #
|
gokhlayeh@186
|
2649 get_tazwok_config
|
erjo@159
|
2650 check_for_package_on_cmdline
|
erjo@159
|
2651 check_for_receipt
|
gokhlayeh@186
|
2652 source_receipt
|
erjo@159
|
2653 check_src()
|
erjo@159
|
2654 {
|
erjo@159
|
2655 for url in $@; do
|
pascal@178
|
2656 busybox wget -s $url 2>/dev/null && break
|
erjo@159
|
2657 done
|
erjo@159
|
2658 }
|
gokhlayeh@186
|
2659 if [ "$WGET_URL" ];then
|
erjo@159
|
2660 echo -n "$PACKAGE : "
|
erjo@159
|
2661 check_src $WGET_URL
|
erjo@159
|
2662 status
|
erjo@159
|
2663 else
|
erjo@159
|
2664 echo "No tarball to check for $PACKAGE"
|
erjo@159
|
2665 fi
|
gokhlayeh@186
|
2666 ;;
|
gokhlayeh@186
|
2667 get-src)
|
gokhlayeh@186
|
2668 check_root
|
gokhlayeh@186
|
2669 get_options_list="target"
|
gokhlayeh@186
|
2670 get_tazwok_config
|
gokhlayeh@186
|
2671 check_for_package_on_cmdline
|
gokhlayeh@186
|
2672 check_for_receipt
|
gokhlayeh@186
|
2673 source_receipt
|
gokhlayeh@186
|
2674 if [ "$WGET_URL" ];then
|
gokhlayeh@186
|
2675 source_lib report
|
gokhlayeh@186
|
2676 report start
|
gokhlayeh@186
|
2677 check_for_tarball
|
gokhlayeh@186
|
2678 else
|
gokhlayeh@186
|
2679 echo "No tarball to download for $PACKAGE"
|
gokhlayeh@186
|
2680 fi
|
gokhlayeh@186
|
2681 ;;
|
gokhlayeh@186
|
2682 check-commit)
|
gokhlayeh@186
|
2683 check_root
|
gokhlayeh@186
|
2684 get_tazwok_config
|
gokhlayeh@186
|
2685 source_lib report
|
gokhlayeh@186
|
2686 report start
|
gokhlayeh@186
|
2687 mkdir -p $tmp
|
gokhlayeh@186
|
2688 check_for_commit
|
gokhlayeh@186
|
2689 gen_cook_list
|
gokhlayeh@186
|
2690 ;;
|
gokhlayeh@186
|
2691 cook-commit)
|
gokhlayeh@186
|
2692 check_root
|
gokhlayeh@186
|
2693 get_tazwok_config
|
gokhlayeh@186
|
2694 source_lib report
|
gokhlayeh@186
|
2695 report start
|
gokhlayeh@186
|
2696 mkdir -p $tmp
|
gokhlayeh@186
|
2697 check_for_commit
|
gokhlayeh@186
|
2698 # 2) update cook-database (actually complete regeneration)
|
gokhlayeh@186
|
2699 dbtype=wok
|
gokhlayeh@186
|
2700 mode=gen
|
gokhlayeh@186
|
2701 files_list="$dep_db $wan_db $PACKAGE_REPOSITORY/cookorder.txt"
|
gokhlayeh@186
|
2702 gen_db
|
gokhlayeh@186
|
2703 # 3) check cooklist
|
gokhlayeh@186
|
2704 # 3.1) rename pkgs with wanted variable to wanted pkg
|
gokhlayeh@186
|
2705 gen_cook_list
|
gokhlayeh@186
|
2706 cook_list
|
gokhlayeh@186
|
2707 ;;
|
gokhlayeh@186
|
2708 cook-all)
|
gokhlayeh@186
|
2709 check_root
|
gokhlayeh@186
|
2710 get_tazwok_config
|
gokhlayeh@186
|
2711 source_lib report
|
gokhlayeh@186
|
2712 report start
|
gokhlayeh@186
|
2713 mkdir -p $tmp
|
gokhlayeh@186
|
2714 # 2) update cook-database (actually complete regeneration)
|
gokhlayeh@186
|
2715 dbtype=wok
|
gokhlayeh@186
|
2716 mode=gen
|
gokhlayeh@186
|
2717 files_list="$dep_db $wan_db $PACKAGE_REPOSITORY/cookorder.txt"
|
gokhlayeh@186
|
2718 gen_db
|
gokhlayeh@186
|
2719 # Add all packages, without toolchain, in cooklist.
|
gokhlayeh@186
|
2720 # Recook toolchain need to be coded.
|
gokhlayeh@186
|
2721 echo -n "" > $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
2722 for pkg in $(cd $WOK && echo *); do
|
gokhlayeh@186
|
2723 echo $pkg >> $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
2724 done
|
gokhlayeh@186
|
2725 for pkg in $(scan gcc --look_for=all --with_wanted --with_args); do
|
gokhlayeh@186
|
2726 sed "/^$pkg$/d" -i $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
2727 done
|
gokhlayeh@186
|
2728 sort_cooklist
|
gokhlayeh@186
|
2729 cook_list
|
gokhlayeh@186
|
2730 ;;
|
gokhlayeh@186
|
2731 gen-wok-db)
|
gokhlayeh@186
|
2732 check_root
|
gokhlayeh@186
|
2733 get_tazwok_config
|
gokhlayeh@186
|
2734 source_lib report
|
gokhlayeh@186
|
2735 report start
|
gokhlayeh@186
|
2736 mkdir $tmp
|
gokhlayeh@186
|
2737 dbtype=wok
|
gokhlayeh@186
|
2738 mode=gen
|
gokhlayeh@186
|
2739 files_list="$dep_db $wan_db $PACKAGE_REPOSITORY/cookorder.txt"
|
gokhlayeh@186
|
2740 gen_db
|
gokhlayeh@186
|
2741 ;;
|
gokhlayeh@186
|
2742 report)
|
gokhlayeh@186
|
2743 check_root
|
gokhlayeh@186
|
2744 get_tazwok_config
|
gokhlayeh@186
|
2745 cd $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
2746 for i in commit genpkglist cooklist incoming broken blocked; do
|
gokhlayeh@186
|
2747 if [ -s $i ]; then
|
gokhlayeh@186
|
2748 echo -e "\n********************* $i *********************\n$(cat $i)\n*********************"
|
gokhlayeh@186
|
2749 fi
|
gokhlayeh@186
|
2750 done
|
gokhlayeh@186
|
2751 ;;
|
gokhlayeh@186
|
2752 check-incoming)
|
gokhlayeh@186
|
2753 check_root
|
gokhlayeh@186
|
2754 get_tazwok_config
|
gokhlayeh@186
|
2755 source_lib report
|
gokhlayeh@186
|
2756 report start
|
gokhlayeh@186
|
2757 mkdir $tmp
|
gokhlayeh@186
|
2758 check_for_incoming
|
gokhlayeh@186
|
2759 ;;
|
gokhlayeh@186
|
2760 remove-old)
|
gokhlayeh@186
|
2761 check_root
|
gokhlayeh@186
|
2762 get_tazwok_config
|
gokhlayeh@186
|
2763 source_lib report
|
gokhlayeh@186
|
2764 report start
|
gokhlayeh@186
|
2765 mkdir $tmp
|
gokhlayeh@186
|
2766 remove_old_packages
|
gokhlayeh@186
|
2767 ;;
|
gokhlayeh@190
|
2768 configure-chroot)
|
gokhlayeh@190
|
2769 check_root
|
gokhlayeh@190
|
2770 get_tazwok_config
|
gokhlayeh@190
|
2771 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@190
|
2772 cd $LOCAL_REPOSITORY
|
gokhlayeh@190
|
2773 configure_tazchroot
|
gokhlayeh@190
|
2774 else
|
gokhlayeh@190
|
2775 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@190
|
2776 exit 1
|
gokhlayeh@190
|
2777 fi
|
gokhlayeh@190
|
2778 ;;
|
gokhlayeh@186
|
2779 chroot)
|
gokhlayeh@186
|
2780 check_root
|
gokhlayeh@186
|
2781 get_tazwok_config
|
gokhlayeh@186
|
2782 # Merge this and the other chroot function ?.
|
gokhlayeh@186
|
2783 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
2784 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
2785 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
2786 tazchroot
|
gokhlayeh@186
|
2787 else
|
gokhlayeh@186
|
2788 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@186
|
2789 exit 1
|
gokhlayeh@186
|
2790 fi
|
gokhlayeh@186
|
2791 ;;
|
gokhlayeh@186
|
2792 cook-toolchain)
|
gokhlayeh@186
|
2793 check_root
|
gokhlayeh@186
|
2794 get_tazwok_config
|
gokhlayeh@186
|
2795 echo -n "" > $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
2796 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
2797 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
2798 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
2799 tazchroot cook-toolchain
|
gokhlayeh@186
|
2800 # Buggy : chroot can be elsewhere.
|
gokhlayeh@186
|
2801 rm -r $LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
2802 # /!\ to be writed :
|
gokhlayeh@186
|
2803 # next rm chroot and plan cook-all by pushing all packages
|
gokhlayeh@186
|
2804 # in cooklist.
|
gokhlayeh@186
|
2805 else
|
gokhlayeh@186
|
2806 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@186
|
2807 exit 1
|
gokhlayeh@186
|
2808 fi
|
gokhlayeh@186
|
2809 ;;
|
pankso@7
|
2810 usage|*)
|
MikeDSmith25@82
|
2811 # Print usage also for all unknown commands.
|
pankso@7
|
2812 #
|
pankso@7
|
2813 usage
|
gokhlayeh@186
|
2814 ;;
|
pankso@7
|
2815 esac
|
pankso@7
|
2816
|
gokhlayeh@186
|
2817 [ -d "$tmp" ] && rm -r $tmp
|
gokhlayeh@186
|
2818 report stop 2>/dev/null || exit 0
|