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@186
|
1172 if ! grep -q ^$pkg_repository$ $LOCAL_STATE/mirror && \
|
gokhlayeh@186
|
1173 ! { [ -d $LOCAL_STATE/undigest ] && \
|
gokhlayeh@186
|
1174 grep -q ^$pkg_repository$ $LOCAL_STATE/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
|
gokhlayeh@186
|
1259 grep $(for pkg in `scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
1260 --look_for=all --with_args`; do echo " -e ^$pkg$"; done) \
|
gokhlayeh@186
|
1261 $tmp/cookorder | tac > $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@186
|
1262 for pkg in $(cat $PACKAGES_REPOSITORY/cookorder.txt); do
|
gokhlayeh@186
|
1263 sed "/^$pkg$/d" -i $tmp/cookorder
|
gokhlayeh@186
|
1264 done
|
gokhlayeh@186
|
1265
|
gokhlayeh@186
|
1266 tac $tmp/cookorder >> $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@186
|
1267 report end-step
|
pascal@91
|
1268 }
|
pascal@91
|
1269
|
gokhlayeh@186
|
1270 ########################################################################
|
gokhlayeh@186
|
1271 # SCAN CORE
|
gokhlayeh@186
|
1272 ########################
|
gokhlayeh@186
|
1273 # Include various scan core-functions. It's not intended to be used
|
gokhlayeh@186
|
1274 # directly : prefer scan wrappers in next section.
|
gokhlayeh@186
|
1275
|
gokhlayeh@186
|
1276 look_for_dep()
|
gokhlayeh@186
|
1277 {
|
gokhlayeh@186
|
1278 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@186
|
1279 grep ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt \
|
gokhlayeh@186
|
1280 | cut -f 2
|
gokhlayeh@186
|
1281 else
|
gokhlayeh@186
|
1282 grep ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1283 cut -f 2
|
gokhlayeh@186
|
1284 fi
|
gokhlayeh@186
|
1285 }
|
gokhlayeh@186
|
1286
|
gokhlayeh@186
|
1287 look_for_bdep()
|
gokhlayeh@186
|
1288 {
|
gokhlayeh@186
|
1289 # if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@186
|
1290 # grep ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt \
|
gokhlayeh@186
|
1291 # | cut -f 3
|
gokhlayeh@186
|
1292 # else
|
gokhlayeh@186
|
1293 # grep ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1294 # cut -f 3
|
gokhlayeh@186
|
1295 # fi
|
gokhlayeh@186
|
1296 look_for_all
|
gokhlayeh@186
|
1297 }
|
gokhlayeh@186
|
1298
|
gokhlayeh@186
|
1299 look_for_all()
|
gokhlayeh@186
|
1300 {
|
gokhlayeh@186
|
1301 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@186
|
1302 grep ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt \
|
gokhlayeh@186
|
1303 | cut -f 2,3 | sed 's/ / /'
|
gokhlayeh@186
|
1304 else
|
gokhlayeh@186
|
1305 grep ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1306 cut -f 2,3 | sed 's/ / /'
|
gokhlayeh@186
|
1307 fi
|
gokhlayeh@186
|
1308 }
|
gokhlayeh@186
|
1309
|
gokhlayeh@186
|
1310 filter()
|
gokhlayeh@186
|
1311 {
|
gokhlayeh@186
|
1312 for pkg in $(cat); do
|
gokhlayeh@186
|
1313 if grep -q ^$pkg$'\t' $dep_db; then
|
gokhlayeh@186
|
1314 { grep ^$pkg$'\t' $wan_db || echo $pkg
|
gokhlayeh@186
|
1315 } | sed 's/\t/ /'
|
gokhlayeh@186
|
1316 else
|
gokhlayeh@186
|
1317 echo "Error: $pkg can't be found." >&2
|
gokhlayeh@186
|
1318 fi
|
gokhlayeh@186
|
1319 done
|
gokhlayeh@186
|
1320 }
|
gokhlayeh@186
|
1321
|
gokhlayeh@186
|
1322 look_for_all_filtered()
|
gokhlayeh@186
|
1323 {
|
gokhlayeh@186
|
1324 look_for_all | filter
|
gokhlayeh@186
|
1325 }
|
gokhlayeh@186
|
1326
|
gokhlayeh@186
|
1327 look_for_rdep()
|
gokhlayeh@186
|
1328 {
|
gokhlayeh@186
|
1329 grep ' '$PACKAGE' ' $INCOMING_REPOSITORY/wok-depends.txt | cut -f 1
|
gokhlayeh@186
|
1330 if [ "$undigest" ]; then
|
gokhlayeh@186
|
1331 for rdep in $(grep ' '$PACKAGE' ' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt | cut -f 1); do
|
gokhlayeh@186
|
1332 if [ ! -f "WOK$/$rdep/receipt" ]; then
|
gokhlayeh@186
|
1333 echo "$rdep"
|
gokhlayeh@186
|
1334 fi
|
gokhlayeh@186
|
1335 done
|
gokhlayeh@186
|
1336 fi
|
gokhlayeh@186
|
1337 }
|
gokhlayeh@186
|
1338
|
gokhlayeh@186
|
1339 look_for_rbdep()
|
gokhlayeh@186
|
1340 {
|
gokhlayeh@186
|
1341 grep ' '$PACKAGE' ' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1342 cut -f 1,3 | grep ' '$PACKAGE' ' | cut -f 1
|
gokhlayeh@186
|
1343 if [ "$undigest" ]; then
|
gokhlayeh@186
|
1344 for rdep in $(grep ' '$PACKAGE' ' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-depends.txt \
|
gokhlayeh@186
|
1345 | cut -f 1,3 | grep ' '$PACKAGE' ' | cut -f 1); do
|
gokhlayeh@186
|
1346 if [ ! -f "WOK$/$rdep/receipt" ]; then
|
gokhlayeh@186
|
1347 echo "$rdep"
|
gokhlayeh@186
|
1348 fi
|
gokhlayeh@186
|
1349 done
|
gokhlayeh@186
|
1350 fi
|
gokhlayeh@186
|
1351 }
|
gokhlayeh@186
|
1352
|
gokhlayeh@186
|
1353 # Return WANTED if it exists.
|
gokhlayeh@186
|
1354 look_for_wanted()
|
gokhlayeh@186
|
1355 {
|
gokhlayeh@186
|
1356 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@186
|
1357 grep ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-wanted.txt | cut -f 2
|
gokhlayeh@186
|
1358 else
|
gokhlayeh@186
|
1359 grep ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-wanted.txt | cut -f 2
|
gokhlayeh@186
|
1360 fi
|
gokhlayeh@186
|
1361 }
|
gokhlayeh@186
|
1362
|
gokhlayeh@186
|
1363 # Return packages which wants PACKAGE.
|
gokhlayeh@186
|
1364 look_for_rwanted()
|
gokhlayeh@186
|
1365 {
|
gokhlayeh@186
|
1366 grep $'\t'$PACKAGE$ $INCOMING_REPOSITORY/wok-wanted.txt | cut -f 1
|
gokhlayeh@186
|
1367 if [ "$undigest" ]; then
|
gokhlayeh@186
|
1368 for rwanted in $(grep $'\t'$PACKAGE$ $SLITAZ_DIR/$SLITAZ_VERSION/packages/wok-wanted.txt | cut -f 1); do
|
gokhlayeh@186
|
1369 if [ ! -f "$WOK/$rwanted/receipt" ]; then
|
gokhlayeh@186
|
1370 echo "$rwanted"
|
gokhlayeh@186
|
1371 fi
|
gokhlayeh@186
|
1372 done
|
gokhlayeh@186
|
1373 fi
|
gokhlayeh@186
|
1374 }
|
gokhlayeh@186
|
1375
|
gokhlayeh@186
|
1376 look_for_dev()
|
gokhlayeh@186
|
1377 {
|
gokhlayeh@186
|
1378 [ -f "$WOK/$PACKAGE-dev/receipt" ] && echo $PACKAGE-dev && return
|
gokhlayeh@186
|
1379 [ "$undigest" ] && [ -f "$SLITAZ_DIR/$SLITAZ_VERSION/wok/$PACKAGE-dev/receipt" ] && \
|
gokhlayeh@186
|
1380 echo $PACKAGE-dev
|
gokhlayeh@186
|
1381 }
|
gokhlayeh@186
|
1382
|
gokhlayeh@186
|
1383 ########################################################################
|
gokhlayeh@186
|
1384 # SCAN
|
gokhlayeh@186
|
1385 ########################
|
gokhlayeh@186
|
1386 # Use wok-wanted.txt and wok-depeds.txt to scan depends.
|
gokhlayeh@186
|
1387 # Option in command line (must be first arg) :
|
gokhlayeh@186
|
1388 # --look_for=bdep/rbdep - Look for depends or reverse depends.
|
gokhlayeh@186
|
1389 # --with_dev - Add development packages (*-dev) in the result.
|
gokhlayeh@186
|
1390 # --with_wanted - Add package+reverse wanted in the result.
|
gokhlayeh@186
|
1391 # --with_args - Include packages in argument in the result.
|
gokhlayeh@186
|
1392
|
gokhlayeh@186
|
1393 scan()
|
gokhlayeh@186
|
1394 {
|
gokhlayeh@186
|
1395 # Get packages in argument.
|
gokhlayeh@186
|
1396 local PACKAGE pkg_list=
|
gokhlayeh@186
|
1397 for arg in $@; do
|
gokhlayeh@186
|
1398 [ "$arg" = "${arg#--}" ] || continue
|
gokhlayeh@186
|
1399 pkg_list="$pkg_list $arg"
|
gokhlayeh@186
|
1400 done
|
gokhlayeh@186
|
1401
|
gokhlayeh@186
|
1402 # Get options.
|
gokhlayeh@186
|
1403 [ "$pkg_list" ] || return
|
gokhlayeh@186
|
1404 local cooklist= look_for= with_dev= with_wanted= with_args= log_command="$0 $@" \
|
gokhlayeh@186
|
1405 get_options_list="look_for with_dev with_wanted with_args cooklist"
|
gokhlayeh@186
|
1406 get_options
|
gokhlayeh@186
|
1407
|
gokhlayeh@186
|
1408 # Cooklist is a special case where we need to modify a little
|
gokhlayeh@186
|
1409 # scan behavior
|
gokhlayeh@186
|
1410 if [ "$cooklist" ]; then
|
gokhlayeh@186
|
1411 look_for=all_filtered && with_args=yes && with_dev= && with_wanted= && rwan=yes
|
gokhlayeh@186
|
1412 pkg_list=$(echo $pkg_list | filter)
|
gokhlayeh@186
|
1413 fi
|
gokhlayeh@186
|
1414
|
gokhlayeh@186
|
1415 ##############################################################
|
gokhlayeh@186
|
1416 # ADD TO LISTS PROPOSAL ######################################
|
gokhlayeh@186
|
1417 ##############################################################
|
gokhlayeh@186
|
1418 #
|
gokhlayeh@186
|
1419 include_wanted()
|
gokhlayeh@186
|
1420 {
|
gokhlayeh@186
|
1421 for pkg in $(cat); do
|
gokhlayeh@186
|
1422 { grep ^$pkg$'\t' $wan_db || echo $pkg
|
gokhlayeh@186
|
1423 } | sed 's/\t/ /'
|
gokhlayeh@186
|
1424 done
|
gokhlayeh@186
|
1425 }
|
gokhlayeh@186
|
1426
|
gokhlayeh@186
|
1427 no_duplication()
|
gokhlayeh@186
|
1428 {
|
gokhlayeh@186
|
1429 for pkg in $(cat); do
|
gokhlayeh@186
|
1430 grep -q ^$pkg$ $tmp/list $tmp/dep && continue
|
gokhlayeh@186
|
1431 echo $pkg
|
gokhlayeh@186
|
1432 done
|
gokhlayeh@186
|
1433 }
|
gokhlayeh@186
|
1434
|
gokhlayeh@186
|
1435 append_to_list()
|
gokhlayeh@186
|
1436 {
|
gokhlayeh@186
|
1437 no_duplication >> $tmp/list
|
gokhlayeh@186
|
1438 # OU
|
gokhlayeh@186
|
1439 include_wanted | no_duplication >> $tmp/list
|
gokhlayeh@186
|
1440 }
|
gokhlayeh@186
|
1441 #
|
gokhlayeh@186
|
1442 ##############################################################
|
gokhlayeh@186
|
1443 mkdir -p $tmp
|
gokhlayeh@186
|
1444 for PACKAGE in $(echo $pkg_list | filter); do
|
gokhlayeh@186
|
1445 look_for_$look_for
|
gokhlayeh@186
|
1446 done | tr ' ' '\n' | sort -u > $tmp/list
|
gokhlayeh@186
|
1447 [ "$look_for" = bdep ] && look_for=dep
|
gokhlayeh@186
|
1448 while [ -s $tmp/list ]; do
|
gokhlayeh@186
|
1449 PACKAGE=$(sed 1!d $tmp/list)
|
gokhlayeh@186
|
1450 sed 1d -i $tmp/list
|
gokhlayeh@186
|
1451 echo $PACKAGE >> $tmp/dep
|
gokhlayeh@186
|
1452 for depend in $(look_for_$look_for); do
|
gokhlayeh@186
|
1453 if ! grep -q ^$depend$ $tmp/list $tmp/dep; then
|
gokhlayeh@186
|
1454 echo $depend >> $tmp/list
|
gokhlayeh@186
|
1455 fi
|
gokhlayeh@186
|
1456 done
|
gokhlayeh@186
|
1457 done
|
gokhlayeh@186
|
1458 [ "$with_args" ] && echo $pkg_list | tr ' ' '\n' >> $tmp/dep
|
gokhlayeh@186
|
1459 if [ -s $tmp/dep ]; then
|
gokhlayeh@186
|
1460 if [ "$with_wanted" ]; then
|
gokhlayeh@186
|
1461 cat $tmp/dep | while read PACKAGE; do
|
gokhlayeh@186
|
1462 look_for_rwanted >> $tmp/dep
|
gokhlayeh@186
|
1463 done
|
gokhlayeh@186
|
1464 elif [ "$with_dev" ]; then
|
gokhlayeh@186
|
1465 cat $tmp/dep | while read PACKAGE; do
|
gokhlayeh@186
|
1466 look_for_dev >> $tmp/dep
|
gokhlayeh@186
|
1467 done
|
gokhlayeh@186
|
1468 fi
|
gokhlayeh@186
|
1469 if [ "$cooklist" ]; then
|
gokhlayeh@186
|
1470
|
gokhlayeh@186
|
1471 # Make report quiet.
|
gokhlayeh@186
|
1472 report(){ : ; }
|
gokhlayeh@186
|
1473
|
gokhlayeh@186
|
1474 mv $tmp/dep $tmp/cooklist
|
gokhlayeh@186
|
1475 sort_cooklist
|
gokhlayeh@186
|
1476 rm $tmp/cooklist
|
gokhlayeh@186
|
1477 else
|
gokhlayeh@186
|
1478 cat $tmp/dep | sort -u
|
gokhlayeh@186
|
1479 fi
|
gokhlayeh@186
|
1480 fi
|
gokhlayeh@186
|
1481 rm $tmp/dep $tmp/list 2>/dev/null
|
gokhlayeh@186
|
1482 }
|
gokhlayeh@186
|
1483
|
gokhlayeh@186
|
1484 ########################################################################
|
gokhlayeh@186
|
1485 # This section contains functions to check package repository and
|
gokhlayeh@186
|
1486 # find which packages to cook.
|
gokhlayeh@186
|
1487 ########################
|
gokhlayeh@186
|
1488
|
gokhlayeh@186
|
1489 # Actually its becomes more than check commit... Maybe put this in report
|
gokhlayeh@186
|
1490 # function is a good idea.
|
gokhlayeh@186
|
1491 check_for_commit()
|
gokhlayeh@186
|
1492 {
|
gokhlayeh@186
|
1493 report step "Checking for commits"
|
gokhlayeh@186
|
1494
|
gokhlayeh@186
|
1495 # Clean the list... Later we will perfom a partial clean only to keep
|
gokhlayeh@186
|
1496 # some usefull informations
|
gokhlayeh@186
|
1497 rm $PACKAGES_REPOSITORY/commit 2>/dev/null
|
gokhlayeh@186
|
1498
|
gokhlayeh@186
|
1499 # If there's a packages-incoming repository we need to check it too.
|
gokhlayeh@186
|
1500 for RECEIPT in $(echo $WOK/*/receipt | grep -v '\*'); do
|
gokhlayeh@186
|
1501 source_receipt
|
gokhlayeh@186
|
1502
|
gokhlayeh@186
|
1503 # We use md5 of cooking stuff in the packaged receipt to check
|
gokhlayeh@186
|
1504 # commit. We look consecutively in 3 different locations :
|
gokhlayeh@186
|
1505 # - in the wok/PACKAGE/taz folder
|
gokhlayeh@186
|
1506 # - in the receipt in the package in incoming repository
|
gokhlayeh@186
|
1507 # - in the receipt in the package in packages repository
|
gokhlayeh@186
|
1508 # If md5sum match, there's no commit.
|
gokhlayeh@186
|
1509 # If there's not md5sum datas, because the package was cooked
|
gokhlayeh@186
|
1510 # with a previous version of tazwok, we don't put in in commit
|
gokhlayeh@186
|
1511 # list (need a cook-all to refresh them)
|
gokhlayeh@186
|
1512 # If there's no receipt available, package is missing so we put
|
gokhlayeh@186
|
1513 # it in commit list.
|
gokhlayeh@186
|
1514 # First look for package in packages-incoming.
|
gokhlayeh@186
|
1515 check_for_commit_using_md5sum()
|
gokhlayeh@186
|
1516 {
|
gokhlayeh@186
|
1517 if [ ! -f $WOK/$PACKAGE/md5 ]; then
|
gokhlayeh@186
|
1518 sed -n '/# md5sum of cooking stuff :/,$p' receipt | \
|
gokhlayeh@186
|
1519 sed -e 1d -e 's/^# //' > $WOK/$PACKAGE/md5
|
gokhlayeh@186
|
1520 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1521 fi
|
gokhlayeh@186
|
1522
|
gokhlayeh@186
|
1523 # Use md5sum list in receipt to check for commit.
|
gokhlayeh@186
|
1524 if [ -s md5 ]; then
|
gokhlayeh@186
|
1525 if md5sum -cs md5; then
|
gokhlayeh@186
|
1526 return_code=0
|
gokhlayeh@186
|
1527
|
gokhlayeh@186
|
1528 # If md5sum check if ok, check for new files in
|
gokhlayeh@186
|
1529 # cooking stuff.
|
gokhlayeh@186
|
1530 for file in receipt description.txt $( [ -d stuff ] && find stuff); do
|
gokhlayeh@186
|
1531 if [ -f $file ] && ! grep -q ' '$file$ md5; then
|
gokhlayeh@186
|
1532 set_commited
|
gokhlayeh@186
|
1533 fi
|
gokhlayeh@186
|
1534 done
|
gokhlayeh@186
|
1535 else
|
gokhlayeh@186
|
1536 set_commited
|
gokhlayeh@186
|
1537 fi
|
gokhlayeh@186
|
1538 else
|
gokhlayeh@186
|
1539 gen_cookmd5
|
gokhlayeh@186
|
1540 fi
|
gokhlayeh@186
|
1541 }
|
gokhlayeh@186
|
1542 set_commited()
|
gokhlayeh@186
|
1543 {
|
gokhlayeh@186
|
1544 echo $PACKAGE >> $PACKAGES_REPOSITORY/commit
|
gokhlayeh@186
|
1545 echo "Commit: $PACKAGE ($VERSION)"
|
gokhlayeh@186
|
1546 gen_cookmd5
|
gokhlayeh@186
|
1547 }
|
gokhlayeh@186
|
1548 taz_dir=$(echo $WOK/$PACKAGE/taz/$PACKAGE-* | grep -v '\*')
|
gokhlayeh@186
|
1549 if [ -f $WOK/$PACKAGE/md5 ]; then
|
gokhlayeh@186
|
1550 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1551 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1552 elif [ "$taz_dir" ]; then
|
gokhlayeh@186
|
1553 cd $taz_dir
|
gokhlayeh@186
|
1554 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1555 else
|
gokhlayeh@186
|
1556 pkg=$(echo $INCOMING_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | grep -v '\*')
|
gokhlayeh@186
|
1557 [ "$pkg" ] || pkg=$(echo $PACKAGES_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | grep -v '\*')
|
gokhlayeh@186
|
1558 if [ "$pkg" ]; then
|
gokhlayeh@186
|
1559 get_pkg_files $pkg
|
gokhlayeh@186
|
1560 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1561 rm -r $pkg_files_dir
|
gokhlayeh@186
|
1562 continue
|
gokhlayeh@186
|
1563 fi
|
gokhlayeh@186
|
1564 set_commited
|
gokhlayeh@186
|
1565 fi
|
gokhlayeh@186
|
1566 done
|
gokhlayeh@186
|
1567 report end-step
|
gokhlayeh@186
|
1568 }
|
gokhlayeh@186
|
1569
|
gokhlayeh@186
|
1570 gen_cook_list()
|
gokhlayeh@186
|
1571 {
|
gokhlayeh@186
|
1572 if [ -s $PACKAGES_REPOSITORY/commit ]; then
|
gokhlayeh@186
|
1573 report step "Generate genpkg & cook lists."
|
gokhlayeh@186
|
1574 cd $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1575 #cp commit $tmp/commit
|
gokhlayeh@186
|
1576 #if [ -s broken ]; then
|
gokhlayeh@186
|
1577 ## dep_scan return deps including the packages given in argument.
|
gokhlayeh@186
|
1578 ## To avoid that, we firt generate a list of direct rdepends of
|
gokhlayeh@186
|
1579 ## brokens without packages in argument, then we generate the
|
gokhlayeh@186
|
1580 ## full rdeps list. We do this because we don't want to block
|
gokhlayeh@186
|
1581 ## packages at source of broken tree if a fix as been commited.
|
gokhlayeh@186
|
1582 #for PACKAGE in $(cat broken); do
|
gokhlayeh@186
|
1583 #look_for_rdep >> $tmp/broken
|
gokhlayeh@186
|
1584 #done
|
gokhlayeh@186
|
1585 #cat $tmp/broken
|
gokhlayeh@186
|
1586 #look_for=rdep && with_wanted=yes
|
gokhlayeh@186
|
1587 #for PACKAGE in $(dep_scan `cat $tmp/broken`); do
|
gokhlayeh@186
|
1588 #if grep -q ^$PACKAGE$ $tmp/commit; then
|
gokhlayeh@186
|
1589 #sed "/^$PACKAGE$/d" -i $tmp/commit
|
gokhlayeh@186
|
1590 #fi
|
gokhlayeh@186
|
1591 #done
|
gokhlayeh@186
|
1592 #rm $tmp/broken
|
gokhlayeh@186
|
1593 #fi
|
gokhlayeh@186
|
1594 for PACKAGE in $(cat commit); do
|
gokhlayeh@186
|
1595 WANTED="$(look_for_wanted)"
|
gokhlayeh@186
|
1596 if [ "$WANTED" ]; then
|
gokhlayeh@186
|
1597
|
gokhlayeh@186
|
1598 # If cook of wanted package is planned, this one will be
|
gokhlayeh@186
|
1599 # packaged at the same time. Else if wanted package is
|
gokhlayeh@186
|
1600 # broken or blocked, ignore the commit. Else, put the
|
gokhlayeh@186
|
1601 # package in genpkglist.
|
gokhlayeh@186
|
1602 { grep -q ^$WANTED$ commit || grep -q ^$WANTED$ broken || \
|
gokhlayeh@186
|
1603 grep -q ^$WANTED$ cooklist || grep -q ^$WANTED$ blocked || \
|
gokhlayeh@186
|
1604 grep -q ^$WANTED$ genpkglist
|
gokhlayeh@186
|
1605 } && continue
|
gokhlayeh@186
|
1606 echo $WANTED >> genpkglist
|
gokhlayeh@186
|
1607 else
|
gokhlayeh@186
|
1608 { grep -q ^$PACKAGE$ blocked || grep -q ^$PACKAGE$ cooklist
|
gokhlayeh@186
|
1609 } && continue
|
gokhlayeh@186
|
1610 echo $PACKAGE >> cooklist
|
gokhlayeh@186
|
1611 sed "/^$PACKAGE$/d" -i broken
|
gokhlayeh@186
|
1612 fi
|
gokhlayeh@186
|
1613 done
|
gokhlayeh@186
|
1614 #rm $tmp/commit
|
gokhlayeh@186
|
1615 if [ -s genpkglist ]; then
|
gokhlayeh@186
|
1616 echo "genpkglist:"
|
gokhlayeh@186
|
1617 cat genpkglist
|
gokhlayeh@186
|
1618 fi
|
gokhlayeh@186
|
1619 report end-step
|
gokhlayeh@186
|
1620 fi
|
gokhlayeh@186
|
1621 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
1622 sort_cooklist
|
gokhlayeh@186
|
1623 }
|
gokhlayeh@186
|
1624
|
gokhlayeh@186
|
1625 sort_cooklist()
|
gokhlayeh@186
|
1626 {
|
gokhlayeh@186
|
1627 [ ! "$cooklist" ] && cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
1628 [ -s $cooklist ] || [ -s "$tmp/cooklist" ] || return
|
gokhlayeh@186
|
1629 [ -s $PACKAGES_REPOSITORY/cookorder.txt ] || gen_wok_db
|
gokhlayeh@186
|
1630 [ ! -s "$tmp/cooklist" ] && cp -a $cooklist $tmp/cooklist
|
gokhlayeh@186
|
1631 report step "Sorting cooklist"
|
gokhlayeh@186
|
1632
|
gokhlayeh@186
|
1633 # Use cookorder.txt to sort cooklist.
|
gokhlayeh@186
|
1634 cat $PACKAGES_REPOSITORY/cookorder.txt | while read PACKAGE; do
|
gokhlayeh@186
|
1635 if grep -q ^$PACKAGE$ $tmp/cooklist; then
|
gokhlayeh@186
|
1636 sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@186
|
1637 echo $PACKAGE >> $tmp/cooklist.tmp
|
gokhlayeh@186
|
1638 fi
|
gokhlayeh@186
|
1639 done
|
gokhlayeh@186
|
1640
|
gokhlayeh@186
|
1641 # Remaining packages in cooklist are thoses without compile_rules.
|
gokhlayeh@186
|
1642 # They can be cooked first in any order.
|
gokhlayeh@186
|
1643 mv -f $tmp/cooklist.tmp $tmp/cooklist
|
gokhlayeh@186
|
1644 [ "$cooklist" = "$PACKAGES_REPOSITORY/cooklist" ] && \
|
gokhlayeh@186
|
1645 cat $tmp/cooklist > $cooklist
|
gokhlayeh@186
|
1646 cat $tmp/cooklist
|
gokhlayeh@186
|
1647 report end-step
|
gokhlayeh@186
|
1648 }
|
gokhlayeh@186
|
1649
|
gokhlayeh@186
|
1650
|
gokhlayeh@186
|
1651
|
gokhlayeh@186
|
1652 #remove_old_packages()
|
gokhlayeh@186
|
1653 #{
|
gokhlayeh@186
|
1654 #report step "Removing old packages"
|
gokhlayeh@186
|
1655 #echo -n "" >> $tmp/oldpkg
|
gokhlayeh@186
|
1656 #if [ -f $INCOMING_REPOSITORY/packages.txt ]; then
|
gokhlayeh@186
|
1657
|
gokhlayeh@186
|
1658 #&& incoming=y
|
gokhlayeh@186
|
1659 #for RECEIPT in $(echo $WOK/*/receipt | grep -v '\*'); do
|
gokhlayeh@186
|
1660 #source_receipt
|
gokhlayeh@186
|
1661 ## First look for package in packages-incoming.
|
gokhlayeh@186
|
1662 #if [ "$incoming" ]; then
|
gokhlayeh@186
|
1663 #pkg=$(echo $INCOMING_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | grep -v '\*')
|
gokhlayeh@186
|
1664 #fi
|
gokhlayeh@186
|
1665 #if [ "$pkg" ]; then
|
gokhlayeh@186
|
1666 #echo $pkg >> $tmp/oldpkg
|
gokhlayeh@186
|
1667 ## The package in PACKAGES_REPOSITORY, even if old, should not be removed yet.
|
gokhlayeh@186
|
1668 #echo $PACKAGES_REPOSITORY/$(grep ^$PACKAGE- $PACKAGES_REPOSITORY/packages.list 2>/dev/null)*.tazpkg >> $tmp/oldpkg
|
gokhlayeh@186
|
1669 #else
|
gokhlayeh@186
|
1670 #echo $PACKAGES_REPOSITORY/$PACKAGE-$VERSION*.tazpkg >> $tmp/oldpkg
|
gokhlayeh@186
|
1671 #fi
|
gokhlayeh@186
|
1672 #done
|
gokhlayeh@186
|
1673 #for pkg in $(echo $PACKAGES_REPOSITORY/*.tazpkg | grep -v '\*') \
|
gokhlayeh@186
|
1674 #$(echo $INCOMING_REPOSITORY/*.tazpkg | grep -v '\*'); do
|
gokhlayeh@186
|
1675 #grep -q ^$pkg$ $tmp/oldpkg && continue
|
gokhlayeh@186
|
1676 #echo "Removing $pkg"
|
gokhlayeh@186
|
1677 ##rm $pkg
|
gokhlayeh@186
|
1678 #done
|
gokhlayeh@186
|
1679 #rm $tmp/oldpkg
|
gokhlayeh@186
|
1680 #}
|
gokhlayeh@186
|
1681
|
gokhlayeh@186
|
1682 check_for_incoming()
|
gokhlayeh@186
|
1683 {
|
gokhlayeh@186
|
1684 [ -s $INCOMING_REPOSITORY/packages.txt ] || return
|
gokhlayeh@186
|
1685 report step "Checking packages-incoming repository"
|
gokhlayeh@186
|
1686 cd $INCOMING_REPOSITORY
|
gokhlayeh@186
|
1687 grep ^[0-9,a-z,A-Z] packages.txt > $tmp/incoming
|
gokhlayeh@186
|
1688 scan `cat $PACKAGES_REPOSITORY/broken` --look_for=bdep --with_wanted > $tmp/broken
|
gokhlayeh@186
|
1689 for PACKAGE in $(scan `cat $tmp/broken` --look_for=rdep --with_wanted --with_args); do
|
gokhlayeh@186
|
1690 sed "/^$PACKAGE$/d" -i $tmp/incoming
|
gokhlayeh@186
|
1691 for rwanted in $(look_for_rwanted); do
|
gokhlayeh@186
|
1692 sed "/^$rwanted$/d" -i $tmp/incoming
|
gokhlayeh@186
|
1693 done
|
gokhlayeh@186
|
1694 done
|
gokhlayeh@186
|
1695 rm $tmp/broken
|
gokhlayeh@186
|
1696 if [ "$incoming_delay" != 0 ]; then
|
gokhlayeh@186
|
1697 cat $tmp/incoming | while read PACKAGE; do
|
gokhlayeh@186
|
1698 [ "$(grep ^$PACKAGE$ $tmp/incoming)" ] || continue
|
gokhlayeh@186
|
1699 dep_list=$( { scan $PACKAGE --look_for=bdep --with_wanted && \
|
gokhlayeh@186
|
1700 scan $PACKAGE --look_for=rdep --with_wanted --with_args; } \
|
gokhlayeh@186
|
1701 | sort -u )
|
gokhlayeh@186
|
1702 for dep in $dep_list; do
|
gokhlayeh@186
|
1703 [ "$(find -name "`get_pkg_version $INCOMING_REPOSITORY`.tazpkg" -mtime +$incoming_delay)" ] && continue
|
gokhlayeh@186
|
1704 for pkg in $dep_list; do
|
gokhlayeh@186
|
1705 sed "/^$pkg$/d" -i $tmp/incoming
|
gokhlayeh@186
|
1706 done && break
|
gokhlayeh@186
|
1707 done
|
gokhlayeh@186
|
1708 done
|
gokhlayeh@186
|
1709 fi
|
gokhlayeh@186
|
1710 if [ -s "$tmp/incoming" ]; then
|
gokhlayeh@186
|
1711 for PACKAGE in $(cat $tmp/incoming); do
|
gokhlayeh@186
|
1712 prev_VERSION=$(get_pkg_version $PACKAGES_REPOSITORY)
|
gokhlayeh@186
|
1713 remove_previous_package $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1714 remove_previous_tarball
|
gokhlayeh@186
|
1715 cur_VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
|
gokhlayeh@186
|
1716 mv -f $PACKAGE-$cur_VERSION.tazpkg $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1717 echo "Moving $PACKAGE to main repository."
|
gokhlayeh@186
|
1718 done
|
gokhlayeh@186
|
1719 pkg_repository=$INCOMING_REPOSITORY && update_packages_db
|
gokhlayeh@186
|
1720 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@186
|
1721 fi
|
gokhlayeh@186
|
1722 report end-step
|
gokhlayeh@186
|
1723 }
|
gokhlayeh@186
|
1724
|
gokhlayeh@186
|
1725 ########################################################################
|
gokhlayeh@186
|
1726 # TAZWOK MAIN FUNCTIONS
|
gokhlayeh@186
|
1727 ########################
|
gokhlayeh@186
|
1728
|
gokhlayeh@186
|
1729 clean()
|
gokhlayeh@186
|
1730 {
|
gokhlayeh@186
|
1731 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1732 ls -A $WOK/$PACKAGE | grep -q -v -e ^receipt$ -e ^description.txt$ \
|
gokhlayeh@186
|
1733 -e ^stuff$ || return
|
gokhlayeh@186
|
1734
|
gokhlayeh@186
|
1735 report step "Cleaning $PACKAGE"
|
gokhlayeh@186
|
1736 # Check for clean_wok function.
|
gokhlayeh@186
|
1737 if grep -q ^clean_wok $RECEIPT; then
|
gokhlayeh@186
|
1738 clean_wok
|
gokhlayeh@186
|
1739 fi
|
gokhlayeh@186
|
1740 # Clean should only have a receipt, stuff and optional desc.
|
gokhlayeh@186
|
1741 for f in `ls .`
|
gokhlayeh@186
|
1742 do
|
gokhlayeh@186
|
1743 case $f in
|
gokhlayeh@186
|
1744 receipt|stuff|description.txt)
|
gokhlayeh@186
|
1745 continue ;;
|
gokhlayeh@186
|
1746 *)
|
gokhlayeh@186
|
1747 echo "Removing: $f"
|
gokhlayeh@186
|
1748 rm -rf $f
|
gokhlayeh@186
|
1749 esac
|
gokhlayeh@186
|
1750 done
|
gokhlayeh@186
|
1751 report end-step
|
gokhlayeh@186
|
1752 }
|
gokhlayeh@186
|
1753
|
gokhlayeh@186
|
1754 # Configure and make a package with the receipt.
|
gokhlayeh@186
|
1755 compile_package()
|
gokhlayeh@186
|
1756 {
|
gokhlayeh@186
|
1757 check_for_package_on_cmdline
|
gokhlayeh@186
|
1758
|
gokhlayeh@186
|
1759 # Include the receipt to get all needed variables and functions
|
gokhlayeh@186
|
1760 # and cd into the work directory to start the work.
|
gokhlayeh@186
|
1761 check_for_receipt
|
gokhlayeh@186
|
1762 source_receipt
|
gokhlayeh@186
|
1763
|
gokhlayeh@186
|
1764 # Log the package name and date.
|
gokhlayeh@186
|
1765 echo "date `date +%Y%m%d\ \%H:%M:%S`" >> $LOG
|
gokhlayeh@186
|
1766 echo "package $PACKAGE (compile)" >> $LOG
|
gokhlayeh@186
|
1767
|
gokhlayeh@186
|
1768 # Set wanted $src variable to help compiling.
|
gokhlayeh@186
|
1769 [ ! "$src" ] && set_src_path
|
gokhlayeh@186
|
1770 check_for_build_depends || return 1
|
gokhlayeh@186
|
1771 check_for_wanted
|
gokhlayeh@186
|
1772 unset target
|
gokhlayeh@186
|
1773 check_for_tarball && check_for_compile_rules
|
gokhlayeh@186
|
1774 }
|
gokhlayeh@186
|
1775
|
gokhlayeh@186
|
1776 # Cook command also include all features to manage lists which keep
|
gokhlayeh@186
|
1777 # track of wok/packages state.
|
gokhlayeh@186
|
1778 cook()
|
gokhlayeh@186
|
1779 {
|
gokhlayeh@186
|
1780 cook_code=
|
gokhlayeh@186
|
1781 set_common_path
|
gokhlayeh@186
|
1782 check_for_receipt
|
gokhlayeh@186
|
1783 source_receipt
|
gokhlayeh@186
|
1784
|
gokhlayeh@186
|
1785 # Define log path and start report.
|
gokhlayeh@186
|
1786 [ -f $LOCAL_REPOSITORY/log/$PACKAGE.html ] && rm $LOCAL_REPOSITORY/log/$PACKAGE.html
|
gokhlayeh@186
|
1787 report sublog $LOCAL_REPOSITORY/log/$PACKAGE.html
|
gokhlayeh@186
|
1788 report step "Cooking $PACKAGE"
|
gokhlayeh@186
|
1789 report open-bloc
|
gokhlayeh@186
|
1790
|
gokhlayeh@186
|
1791 # Clean package if needed.
|
gokhlayeh@186
|
1792 clean $PACKAGE
|
gokhlayeh@186
|
1793
|
gokhlayeh@186
|
1794 # Remove PACKAGE from commit & cook lists.
|
gokhlayeh@186
|
1795 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/commit
|
gokhlayeh@186
|
1796 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
1797 [ -s $tmp/cooklist ] && sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@186
|
1798
|
gokhlayeh@186
|
1799 if compile_package; then
|
gokhlayeh@186
|
1800 refresh_packages_from_compile
|
gokhlayeh@186
|
1801 gen_package
|
gokhlayeh@186
|
1802 remove_src
|
gokhlayeh@186
|
1803
|
gokhlayeh@186
|
1804 # Plan recook of reverse build depends if gen_package has detect
|
gokhlayeh@186
|
1805 # a change in libraries.
|
gokhlayeh@186
|
1806 if [ "$cook_rdep" ]; then
|
gokhlayeh@186
|
1807 report step "Look for packages which need a refresh"
|
gokhlayeh@186
|
1808 for rdep in $(scan $PACKAGE --look_for=rdep); do
|
gokhlayeh@186
|
1809 sed "/^$rdep$/d" -i $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
1810 if [ -f $WOK/$rdep/receipt ] && ! grep -q ^$rdep$ $tmp/cooklist; then
|
gokhlayeh@186
|
1811 echo "Add $rdep in cooklist to avoid broke caused by library update in $PACKAGE"
|
gokhlayeh@186
|
1812 echo $rdep >> $tmp/cooklist
|
gokhlayeh@186
|
1813 regen_cooklist=yes
|
gokhlayeh@186
|
1814 fi
|
gokhlayeh@186
|
1815 done
|
gokhlayeh@186
|
1816 report end-step
|
gokhlayeh@186
|
1817 fi
|
gokhlayeh@186
|
1818
|
gokhlayeh@186
|
1819 # Update packages-incoming repository.
|
gokhlayeh@186
|
1820 store_pkgname=$PACKAGE
|
gokhlayeh@186
|
1821 pkg_repository=$INCOMING_REPOSITORY
|
gokhlayeh@186
|
1822 update_packages_db
|
gokhlayeh@186
|
1823
|
gokhlayeh@186
|
1824 PACKAGE=$store_pkgname
|
gokhlayeh@186
|
1825 unset store_pkgname
|
gokhlayeh@186
|
1826
|
gokhlayeh@186
|
1827 # Upgrade to cooked packages if it was previously installed.
|
gokhlayeh@186
|
1828 report step "Look for package(s) to upgrade"
|
gokhlayeh@186
|
1829 for pkg in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@186
|
1830 if [ -d $INSTALLED/$pkg ]; then
|
gokhlayeh@186
|
1831 tazpkg get-install $pkg --forced
|
gokhlayeh@186
|
1832 fi
|
gokhlayeh@186
|
1833 done
|
gokhlayeh@186
|
1834 report end-step
|
gokhlayeh@186
|
1835 else
|
gokhlayeh@186
|
1836
|
gokhlayeh@186
|
1837 # Set package as broken.
|
gokhlayeh@186
|
1838 if ! grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/broken; then
|
gokhlayeh@186
|
1839 echo $PACKAGE >> $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
1840 fi
|
gokhlayeh@186
|
1841 gen_cookmd5
|
gokhlayeh@186
|
1842 cook_code=1
|
gokhlayeh@186
|
1843 fi
|
gokhlayeh@186
|
1844
|
gokhlayeh@186
|
1845 # Remove build_depends in cook mode (if in cooklist, it's done when
|
gokhlayeh@186
|
1846 # checking build_depends of next package and we remove only unneeded
|
gokhlayeh@186
|
1847 # packages to keep chroot minimal and gain some time).
|
gokhlayeh@186
|
1848 [ "$COMMAND" = cook ] && remove_build_depends $MISSING_PACKAGE
|
gokhlayeh@186
|
1849
|
gokhlayeh@186
|
1850 # Regen the cooklist if it was planned and command is not cook.
|
gokhlayeh@186
|
1851 [ "$regen_cooklist" ] && unset regen_cooklist && \
|
gokhlayeh@186
|
1852 [ "$COMMAND" != cook ] && sort_cooklist
|
gokhlayeh@186
|
1853
|
gokhlayeh@186
|
1854 # Some hacks to set the bloc & function status as failed if cook was
|
gokhlayeh@186
|
1855 # failed.
|
gokhlayeh@186
|
1856 report_return_code=$cook_code
|
gokhlayeh@186
|
1857 report close-bloc
|
gokhlayeh@186
|
1858 report end-sublog
|
gokhlayeh@186
|
1859 return $cook_code
|
gokhlayeh@186
|
1860 }
|
gokhlayeh@186
|
1861
|
gokhlayeh@186
|
1862 genpkg_list()
|
gokhlayeh@186
|
1863 {
|
gokhlayeh@186
|
1864 while [ -s $PACKAGES_REPOSITORY/genpkglist ]; do
|
gokhlayeh@186
|
1865 PACKAGE=$(sed 1!d $PACKAGES_REPOSITORY/genpkglist)
|
gokhlayeh@186
|
1866 gen_package
|
gokhlayeh@186
|
1867 done
|
gokhlayeh@186
|
1868 }
|
gokhlayeh@186
|
1869
|
gokhlayeh@186
|
1870 cook_list()
|
gokhlayeh@186
|
1871 {
|
gokhlayeh@186
|
1872 if [ ! -s $cooklist ]; then
|
gokhlayeh@186
|
1873 echo "Nothing to cook."
|
gokhlayeh@186
|
1874 return
|
gokhlayeh@186
|
1875 fi
|
gokhlayeh@186
|
1876 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
1877 # Note : options -main variables- are automatically keeped by
|
gokhlayeh@186
|
1878 # the sub-applications tazchroot/tazwok; as well as report data.
|
gokhlayeh@186
|
1879 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
1880 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
1881 tazchroot tazwok cook-list --SLITAZ_DIR=$SLITAZ_DIR --SLITAZ_VERSION=$SLITAZ_VERSION ${undigest:+ --undigest=$undigest}
|
gokhlayeh@186
|
1882 return
|
gokhlayeh@186
|
1883 fi
|
gokhlayeh@186
|
1884 while [ -s $tmp/cooklist ]; do
|
gokhlayeh@186
|
1885 PACKAGE=$(sed 1!d $tmp/cooklist)
|
gokhlayeh@186
|
1886 cook
|
gokhlayeh@186
|
1887 done
|
gokhlayeh@186
|
1888 remove_build_depends $MISSING_PACKAGE $remove_later
|
gokhlayeh@186
|
1889 }
|
gokhlayeh@186
|
1890
|
gokhlayeh@186
|
1891 configure_tazchroot()
|
gokhlayeh@186
|
1892 {
|
gokhlayeh@190
|
1893 cat > $LOCAL_REPOSITORY/tazchroot.conf << EOF
|
gokhlayeh@186
|
1894 # Tazchroot configuration file - created by tazwok.
|
gokhlayeh@186
|
1895
|
gokhlayeh@186
|
1896 # Default chroot path
|
gokhlayeh@186
|
1897 SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@186
|
1898 SLITAZ_VERSION=$SLITAZ_VERSION
|
gokhlayeh@186
|
1899 $( [ "$undigest" ] && echo "undigest=$undigest" )
|
gokhlayeh@186
|
1900 LOCAL_REPOSITORY=$SLITAZ_DIR/$(if [ "$undigest" ]; then echo '$undigest'; else echo '$SLITAZ_VERSION'; fi)
|
gokhlayeh@186
|
1901 chroot_dir=\$LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
1902
|
gokhlayeh@186
|
1903 # Default scripts path (theses scripts are added in the
|
gokhlayeh@186
|
1904 # $chroot_dir/usr/bin and can be called with tazchroot script)
|
gokhlayeh@186
|
1905 script_dir=/var/lib/tazchroot
|
gokhlayeh@186
|
1906
|
gokhlayeh@186
|
1907 # List of directories to mount.
|
gokhlayeh@186
|
1908 list_dir="$(for dir in packages wok src packages-incoming log flavors iso; do [ -d "$LOCAL_REPOSITORY/$dir" ] && echo $LOCAL_REPOSITORY/$dir; done)
|
gokhlayeh@186
|
1909 $SLITAZ_LOG$( [ "$undigest" ] && echo -e "\n$SLITAZ_DIR/$SLITAZ_VERSION/packages" )"
|
gokhlayeh@186
|
1910
|
gokhlayeh@186
|
1911 create_chroot()
|
gokhlayeh@186
|
1912 {
|
gokhlayeh@186
|
1913 mkdir -p \$chroot_dir
|
gokhlayeh@186
|
1914 for pkg in \$(tazwok build-depends toolchain --SLITAZ_DIR=\$SLITAZ_DIR --SLITAZ_VERSION=\$SLITAZ_VERSION${undigest:+ --undigest=\$undigest}); do
|
gokhlayeh@186
|
1915 tazpkg get-install \$pkg --root="\$chroot_dir"
|
gokhlayeh@186
|
1916 done
|
gokhlayeh@186
|
1917
|
gokhlayeh@186
|
1918 # Store list of installed packages needed by cleanchroot.
|
gokhlayeh@186
|
1919 ls -1 \$chroot_dir/\$INSTALLED > \$chroot_dir/\$LOCAL_STATE/chroot-pkgs
|
gokhlayeh@186
|
1920
|
gokhlayeh@186
|
1921 sed -e "s~^SLITAZ_DIR=.*~SLITAZ_DIR=\$SLITAZ_DIR~" \\
|
gokhlayeh@186
|
1922 -e "s/^SLITAZ_VERSION=.*/SLITAZ_VERSION=\$SLITAZ_VERSION/" \\
|
gokhlayeh@186
|
1923 -i \$chroot_dir/etc/slitaz/slitaz.conf
|
gokhlayeh@186
|
1924 $( [ "$undigest" ] && echo ' echo "undigest='"$undigest"'" >> $chroot_dir/etc/slitaz/tazwok.conf')
|
gokhlayeh@186
|
1925 sed 's/LC_ALL/LC_ALL=POSIX/' -i \$chroot_dir/etc/profile
|
gokhlayeh@186
|
1926 }
|
gokhlayeh@186
|
1927
|
gokhlayeh@186
|
1928 mount_chroot()
|
gokhlayeh@186
|
1929 {
|
gokhlayeh@186
|
1930 cp -a /etc/resolv.conf \$chroot_dir/etc/resolv.conf
|
gokhlayeh@186
|
1931 echo "\$LOCAL_REPOSITORY/packages" > \$chroot_dir\$LOCAL_STATE/mirror
|
gokhlayeh@186
|
1932 mkdir -p \$chroot_dir\$LOCAL_STATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming
|
gokhlayeh@186
|
1933 echo "\$LOCAL_REPOSITORY/packages-incoming" > \$chroot_dir\$LOCAL_STATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming/mirror
|
gokhlayeh@186
|
1934 $( [ "$undigest" ] && echo ' mkdir -p $chroot_dir$LOCAL_STATE/undigest/$SLITAZ_VERSION
|
gokhlayeh@186
|
1935 echo "$SLITAZ_DIR/$SLITAZ_VERSION/packages" > $chroot_dir$LOCAL_STATE/undigest/$SLITAZ_VERSION/mirror' )
|
gokhlayeh@186
|
1936 echo -e "\${LOCAL_REPOSITORY##*/}-incoming\nmain" > \$chroot_dir\$LOCAL_STATE/priority
|
gokhlayeh@186
|
1937 mount -t proc proc \$chroot_dir/proc
|
gokhlayeh@186
|
1938 mount -t sysfs sysfs \$chroot_dir/sys
|
gokhlayeh@186
|
1939 mount -t devpts devpts \$chroot_dir/dev/pts
|
gokhlayeh@186
|
1940 mount -t tmpfs shm \$chroot_dir/dev/shm
|
gokhlayeh@186
|
1941 for dir in \$list_dir; do
|
gokhlayeh@186
|
1942 mkdir -p \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
1943 mount \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
1944 done
|
gokhlayeh@186
|
1945 }
|
gokhlayeh@186
|
1946
|
gokhlayeh@186
|
1947 umount_chroot()
|
gokhlayeh@186
|
1948 {
|
gokhlayeh@186
|
1949 for dir in \$list_dir; do
|
gokhlayeh@186
|
1950 umount \$chroot_dir\$dir
|
gokhlayeh@186
|
1951 done
|
gokhlayeh@186
|
1952 umount \$chroot_dir/dev/shm
|
gokhlayeh@186
|
1953 umount \$chroot_dir/dev/pts
|
gokhlayeh@186
|
1954 umount \$chroot_dir/sys
|
gokhlayeh@186
|
1955 umount \$chroot_dir/proc
|
gokhlayeh@186
|
1956 }
|
gokhlayeh@186
|
1957 EOF
|
gokhlayeh@186
|
1958 }
|
gokhlayeh@186
|
1959
|
gokhlayeh@186
|
1960 ########################################################################
|
gokhlayeh@186
|
1961 ######################### END OF NEW FUNCTIONS #########################
|
gokhlayeh@186
|
1962 ########################################################################
|
gokhlayeh@186
|
1963
|
pascal@111
|
1964 # List packages providing a virtual package
|
pascal@111
|
1965 whoprovide()
|
pascal@111
|
1966 {
|
pascal@111
|
1967 local i;
|
pascal@111
|
1968 for i in $(grep -l PROVIDE $WOK/*/receipt); do
|
pascal@111
|
1969 . $i
|
pascal@111
|
1970 case " $PROVIDE " in
|
pascal@111
|
1971 *\ $1\ *|*\ $1:*) echo $(basename $(dirname $i));;
|
pascal@111
|
1972 esac
|
pascal@111
|
1973 done
|
pascal@111
|
1974 }
|
pascal@111
|
1975
|
gokhlayeh@186
|
1976 ########################################################################
|
gokhlayeh@186
|
1977 # TAZWOK COMMANDS
|
gokhlayeh@186
|
1978 ########################
|
pankso@7
|
1979
|
pankso@7
|
1980 case "$COMMAND" in
|
pankso@7
|
1981 stats)
|
paul@166
|
1982 # Tazwok general statistics from the wok config file.
|
pankso@7
|
1983 #
|
gokhlayeh@186
|
1984 get_tazwok_config
|
gokhlayeh@186
|
1985 echo -e "\n\033[1mTazwok configuration statistics\033[0m
|
pankso@7
|
1986 ================================================================================
|
pankso@7
|
1987 Wok directory : $WOK
|
pankso@7
|
1988 Packages repository : $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1989 Incoming repository : $INCOMING_REPOSITORY
|
pankso@7
|
1990 Sources repository : $SOURCES_REPOSITORY
|
gokhlayeh@186
|
1991 Log directory : $LOCAL_REPOSITORY/log
|
pankso@7
|
1992 Packages in the wok : `ls -1 $WOK | wc -l`
|
pankso@16
|
1993 Cooked packages : `ls -1 $PACKAGES_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
1994 Incoming packages : `ls -1 $INCOMING_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
1995 ================================================================================\n"
|
gokhlayeh@186
|
1996 ;;
|
pankso@133
|
1997 edit)
|
gokhlayeh@186
|
1998 get_tazwok_config
|
pankso@133
|
1999 check_for_package_on_cmdline
|
pankso@133
|
2000 check_for_receipt
|
gokhlayeh@186
|
2001 $EDITOR $WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
2002 ;;
|
pascal@98
|
2003 build-depends)
|
gokhlayeh@186
|
2004 # List dependencies to rebuild wok, or only a package
|
gokhlayeh@186
|
2005 get_tazwok_config
|
gokhlayeh@186
|
2006 if [ "$PACKAGE" = toolchain-cooklist ]; then
|
gokhlayeh@186
|
2007 mkdir -p $tmp
|
gokhlayeh@186
|
2008 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
2009 --cooklist
|
gokhlayeh@186
|
2010 elif [ ! "$PACKAGE" ] || [ "$PACKAGE" = toolchain ]; then
|
gokhlayeh@186
|
2011 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
2012 --look_for=dep --with_dev --with_args
|
gokhlayeh@186
|
2013 else
|
gokhlayeh@186
|
2014 check_for_package_on_cmdline
|
gokhlayeh@186
|
2015 scan $PACKAGE --look_for=bdep --with_dev
|
gokhlayeh@186
|
2016 fi
|
gokhlayeh@186
|
2017 ;;
|
gokhlayeh@186
|
2018 gen-cooklist)
|
gokhlayeh@186
|
2019 get_options_list="list"
|
gokhlayeh@186
|
2020 get_tazwok_config
|
gokhlayeh@186
|
2021 if [ "$list" ]; then
|
gokhlayeh@186
|
2022 LIST="$list"
|
gokhlayeh@186
|
2023 check_for_list
|
gokhlayeh@186
|
2024 else
|
gokhlayeh@186
|
2025 LIST=$(for pkg in $@; do
|
gokhlayeh@186
|
2026 [ "$pkg" = "${pkg#--}" ] || continue
|
gokhlayeh@186
|
2027 echo -n "$pkg "
|
gokhlayeh@186
|
2028 done)
|
gokhlayeh@186
|
2029 if [ ! "$LIST" ]; then
|
gokhlayeh@186
|
2030 echo "Please give packages or a list file in argument." >&2
|
gokhlayeh@186
|
2031 exit
|
gokhlayeh@186
|
2032 fi
|
gokhlayeh@186
|
2033 fi
|
gokhlayeh@186
|
2034 scan $LIST --cooklist
|
gokhlayeh@186
|
2035 ;;
|
pascal@119
|
2036 check-depends)
|
gokhlayeh@186
|
2037 # Check package depends /!\
|
gokhlayeh@186
|
2038 get_tazwok_config
|
pascal@119
|
2039 echo ""
|
paul@121
|
2040 echo -e "\033[1mCheck every receipt for DEPENDS - doesn't scan ELF files\033[0m
|
pascal@119
|
2041 ================================================================================"
|
pascal@119
|
2042 TMPDIR=/tmp/tazwok$$
|
pascal@119
|
2043 DEFAULT_DEPENDS="glibc-base gcc-lib-base"
|
pascal@119
|
2044
|
pascal@119
|
2045 # Build ALL_DEPENDS variable
|
pascal@119
|
2046 scan_dep()
|
pascal@119
|
2047 {
|
pascal@119
|
2048 local i
|
pascal@119
|
2049 ALL_DEPENDS="$ALL_DEPENDS$PACKAGE "
|
pascal@128
|
2050 for i in $DEPENDS $SUGGESTED ; do
|
pascal@119
|
2051 case " $ALL_DEPENDS " in
|
pascal@119
|
2052 *\ $i\ *) continue;;
|
pascal@119
|
2053 esac
|
pascal@120
|
2054 [ -d $WOK/$i ] || {
|
pascal@120
|
2055 ALL_DEPENDS="$ALL_DEPENDS$i "
|
pascal@120
|
2056 continue
|
pascal@120
|
2057 }
|
pascal@128
|
2058 DEPENDS=""
|
pascal@128
|
2059 SUGGESTED=""
|
pascal@119
|
2060 . $WOK/$i/receipt
|
pascal@119
|
2061 scan_dep
|
pascal@119
|
2062 done
|
pascal@119
|
2063 }
|
pankso@133
|
2064
|
pascal@119
|
2065 # Check for ELF file
|
pascal@119
|
2066 is_elf()
|
pascal@119
|
2067 {
|
pascal@119
|
2068 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" \
|
pascal@119
|
2069 = "ELF" ]
|
pascal@119
|
2070 }
|
pascal@119
|
2071
|
pascal@119
|
2072 # Print shared library dependencies
|
pascal@119
|
2073 ldd()
|
pascal@119
|
2074 {
|
pascal@130
|
2075 LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
|
pascal@119
|
2076 }
|
pascal@119
|
2077
|
pascal@119
|
2078 mkdir $TMPDIR
|
pascal@119
|
2079 cd $TMPDIR
|
pascal@140
|
2080 for i in $LOCALSTATE/files.list.lzma \
|
pascal@140
|
2081 $LOCALSTATE/undigest/*/files.list.lzma ; do
|
pascal@119
|
2082 [ -f $i ] && lzma d $i -so >> files.list
|
pascal@119
|
2083 done
|
pascal@119
|
2084 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
|
pascal@119
|
2085 tazpkg extract $pkg > /dev/null 2>&1
|
pascal@119
|
2086 . */receipt
|
pascal@119
|
2087 ALL_DEPENDS="$DEFAULT_DEPENDS "
|
pascal@119
|
2088 scan_dep
|
pascal@119
|
2089 find */fs -type f | while read file ; do
|
pascal@119
|
2090 is_elf $file || continue
|
pascal@119
|
2091 case "$file" in
|
pascal@119
|
2092 *.o|*.ko|*.ko.gz) continue;;
|
pascal@119
|
2093 esac
|
pascal@119
|
2094 ldd $file | while read lib rem; do
|
pascal@119
|
2095 case "$lib" in
|
pascal@128
|
2096 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
|
pascal@119
|
2097 continue;;
|
pascal@119
|
2098 esac
|
pascal@119
|
2099 for dep in $(grep $lib files.list | cut -d: -f1); do
|
pascal@119
|
2100 case " $ALL_DEPENDS " in
|
pascal@119
|
2101 *\ $dep\ *) continue 2;;
|
pascal@119
|
2102 esac
|
pascal@140
|
2103 for vdep in $(grep $dep $LOCALSTATE/packages.equiv | cut -d= -f1); do
|
pascal@128
|
2104 case " $ALL_DEPENDS " in
|
pascal@129
|
2105 *\ $vdep\ *) continue 3;;
|
pascal@128
|
2106 esac
|
pascal@128
|
2107 done
|
pascal@119
|
2108 done
|
pascal@128
|
2109 [ -n "$dep" ] || dep="UNKNOWN"
|
pascal@119
|
2110 echo "$(basename $pkg): ${file#*fs} depends on package $dep for the shared library $lib"
|
pascal@119
|
2111 done
|
pascal@119
|
2112 done
|
pascal@119
|
2113 rm -rf */
|
pascal@119
|
2114 done
|
pascal@119
|
2115 cd /tmp
|
pascal@119
|
2116 rm -rf $TMPDIR
|
gokhlayeh@186
|
2117 ;;
|
pascal@76
|
2118 check)
|
paul@154
|
2119 # Check wok consistency
|
gokhlayeh@186
|
2120 get_tazwok_config
|
pascal@76
|
2121 echo ""
|
pascal@76
|
2122 echo -e "\033[1mWok and packages checking\033[0m
|
pascal@76
|
2123 ================================================================================"
|
pascal@77
|
2124 cd $WOK
|
pascal@77
|
2125 for pkg in $(ls)
|
pascal@76
|
2126 do
|
pascal@76
|
2127 [ -f $pkg/receipt ] || continue
|
gokhlayeh@186
|
2128 RECEIPT= $pkg/receipt
|
gokhlayeh@186
|
2129 source_receipt
|
gokhlayeh@186
|
2130 [ "$PACKAGE" = "$pkg" ] || echo "Package $PACKAGE should be $pkg" >&2
|
gokhlayeh@186
|
2131 [ -n "$VERSION" ] || echo "Package $PACKAGE has no VERSION" >&2
|
gokhlayeh@186
|
2132 [ -n "$PACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded PACKED_SIZE" >&2
|
gokhlayeh@186
|
2133 [ -n "$UNPACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded UNPACKED_SIZE" >&2
|
gokhlayeh@186
|
2134 [ -n "$EXTRAVERSION" ] && echo "Package $PACKAGE has hardcoded EXTRAVERSION" >&2
|
pascal@97
|
2135 if [ -n "$WANTED" ]; then
|
pascal@97
|
2136 if [ ! -f $WANTED/receipt ]; then
|
gokhlayeh@186
|
2137 echo "Package $PACKAGE wants unknown $WANTED package" >&2
|
pascal@97
|
2138 else
|
pascal@97
|
2139 BASEVERSION=$(. $WANTED/receipt ; echo $VERSION)
|
pascal@103
|
2140 if [ "$VERSION" = "$WANTED" ]; then
|
pascal@103
|
2141 # BASEVERSION is computed in receipt
|
pankso@133
|
2142 grep -q '_pkg=' $pkg/receipt &&
|
pascal@103
|
2143 BASEVERSION=$VERSION
|
pascal@103
|
2144 fi
|
pascal@97
|
2145 if [ "$VERSION" != "$BASEVERSION" ]; then
|
gokhlayeh@186
|
2146 echo "Package $PACKAGE ($VERSION) wants $WANTED ($BASEVERSION)" >&2
|
pascal@97
|
2147 fi
|
pascal@97
|
2148 fi
|
pascal@97
|
2149 fi
|
pascal@97
|
2150
|
pascal@94
|
2151 if [ -n "$CATEGORY" ]; then
|
pascal@94
|
2152 case " $(echo $CATEGORIES) " in
|
pascal@94
|
2153 *\ $CATEGORY\ *);;
|
gokhlayeh@186
|
2154 *) echo "Package $PACKAGE has an invalid CATEGORY" >&2;;
|
pascal@94
|
2155 esac
|
pascal@94
|
2156 else
|
gokhlayeh@186
|
2157 echo"Package $PACKAGE has no CATEGORY" >&2
|
pascal@94
|
2158 fi
|
gokhlayeh@186
|
2159 [ -n "$SHORT_DESC" ] || echo "Package $PACKAGE has no SHORT_DESC" >&2
|
gokhlayeh@186
|
2160 [ -n "$MAINTAINER" ] || echo "Package $PACKAGE has no MAINTAINER" >&2
|
pascal@122
|
2161 case "$WGET_URL" in
|
pascal@178
|
2162 ftp*|http*) busybox wget -s $WGET_URL 2> /dev/null ||
|
gokhlayeh@186
|
2163 echo "Package $PACKAGE has a wrong WGET_URL" >&2;;
|
pascal@122
|
2164 '') ;;
|
gokhlayeh@186
|
2165 *) echo "Package $PACKAGE has an invalid WGET_URL" >&2;;
|
pascal@122
|
2166 esac
|
pascal@112
|
2167 case "$WEB_SITE" in
|
pascal@125
|
2168 ftp*|http*);;
|
gokhlayeh@186
|
2169 '') echo "Package $PACKAGE has no WEB_SITE" >&2;;
|
gokhlayeh@186
|
2170 *) echo "Package $PACKAGE has an invalid WEB_SITE" >&2;;
|
pascal@112
|
2171 esac
|
pascal@78
|
2172 case "$MAINTAINER" in
|
gokhlayeh@186
|
2173 *\<*|*\>*) echo "Package $PACKAGE has an invalid MAINTAINER: $MAINTAINER" >&2;;
|
pascal@78
|
2174 esac
|
pascal@78
|
2175 case "$MAINTAINER" in
|
pascal@78
|
2176 *@*);;
|
gokhlayeh@186
|
2177 *) echo "Package $PACKAGE MAINTAINER is not an email address" >&2;;
|
pascal@78
|
2178 esac
|
gokhlayeh@186
|
2179 MSG="Missing dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@76
|
2180 for i in $DEPENDS; do
|
pascal@76
|
2181 [ -d $i ] && continue
|
pascal@111
|
2182 [ -n "$(whoprovide $i)" ] && continue
|
pascal@76
|
2183 echo -e "$MSG $i"
|
pascal@76
|
2184 MSG=""
|
pascal@76
|
2185 done
|
gokhlayeh@186
|
2186 MSG="Missing build dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@92
|
2187 for i in $BUILD_DEPENDS; do
|
pascal@92
|
2188 [ -d $i ] && continue
|
pascal@111
|
2189 [ -n "$(whoprovide $i)" ] && continue
|
pascal@92
|
2190 echo -e "$MSG $i"
|
pascal@92
|
2191 MSG=""
|
pascal@92
|
2192 done
|
pascal@76
|
2193 MSG="Dependencies loop between $PACKAGE and :\n"
|
pascal@76
|
2194 ALL_DEPS=""
|
pascal@76
|
2195 check_for_deps_loop $PACKAGE $DEPENDS
|
pascal@140
|
2196 [ -d $WOK/$pkg/taz ] && for i in $BUILD_DEPENDS; do
|
pascal@141
|
2197 [ $WOK/$pkg/taz -nt $INSTALLED/$i/files.list ] && continue
|
paul@154
|
2198 echo "$pkg should be rebuilt after $i installation"
|
pascal@140
|
2199 done
|
pascal@76
|
2200 done
|
gokhlayeh@186
|
2201 ;;
|
pankso@7
|
2202 list)
|
paul@166
|
2203 # List packages in wok directory. User can specify a category.
|
pankso@7
|
2204 #
|
gokhlayeh@186
|
2205 get_tazwok_config
|
pankso@7
|
2206 if [ "$2" = "category" ]; then
|
pankso@7
|
2207 echo -e "\033[1m\nPackages categories :\033[0m $CATEGORIES\n"
|
pankso@7
|
2208 exit 0
|
pankso@7
|
2209 fi
|
pankso@7
|
2210 # Check for an asked category.
|
pankso@7
|
2211 if [ -n "$2" ]; then
|
pankso@7
|
2212 ASKED_CATEGORY=$2
|
pankso@7
|
2213 echo ""
|
pankso@7
|
2214 echo -e "\033[1mPackages in category :\033[0m $ASKED_CATEGORY"
|
pankso@7
|
2215 echo "================================================================================"
|
pankso@7
|
2216 for pkg in $WOK/*
|
pankso@7
|
2217 do
|
erjo@168
|
2218 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2219 . $pkg/receipt
|
pankso@7
|
2220 if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then
|
pankso@7
|
2221 echo -n "$PACKAGE"
|
pankso@28
|
2222 echo -e "\033[28G $VERSION"
|
pankso@7
|
2223 packages=$(($packages+1))
|
pankso@7
|
2224 fi
|
pankso@7
|
2225 done
|
pankso@7
|
2226 echo "================================================================================"
|
gokhlayeh@186
|
2227 echo -e "$PACKAGEs packages in category $ASKED_CATEGORY.\n"
|
pankso@7
|
2228 else
|
pankso@7
|
2229 # By default list all packages and version.
|
pankso@7
|
2230 echo ""
|
pankso@7
|
2231 echo -e "\033[1mList of packages in the wok\033[0m"
|
pankso@7
|
2232 echo "================================================================================"
|
pankso@7
|
2233 for pkg in $WOK/*
|
pankso@7
|
2234 do
|
erjo@168
|
2235 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2236 . $pkg/receipt
|
pankso@7
|
2237 echo -n "$PACKAGE"
|
pankso@28
|
2238 echo -en "\033[28G $VERSION"
|
pankso@7
|
2239 echo -e "\033[42G $CATEGORY"
|
pankso@7
|
2240 packages=$(($packages+1))
|
pankso@7
|
2241 done
|
pankso@7
|
2242 echo "================================================================================"
|
gokhlayeh@186
|
2243 echo -e "$PACKAGEs packages available in the wok.\n"
|
pankso@7
|
2244 fi
|
pankso@7
|
2245 ;;
|
pankso@7
|
2246 info)
|
MikeDSmith25@82
|
2247 # Information about a package.
|
pankso@7
|
2248 #
|
gokhlayeh@186
|
2249 get_tazwok_config
|
pankso@7
|
2250 check_for_package_on_cmdline
|
pankso@7
|
2251 check_for_receipt
|
pankso@7
|
2252 . $WOK/$PACKAGE/receipt
|
pankso@7
|
2253 echo ""
|
MikeDSmith25@82
|
2254 echo -e "\033[1mTazwok package information\033[0m
|
pankso@7
|
2255 ================================================================================
|
pankso@7
|
2256 Package : $PACKAGE
|
pankso@7
|
2257 Version : $VERSION
|
pankso@7
|
2258 Category : $CATEGORY
|
pankso@7
|
2259 Short desc : $SHORT_DESC
|
pankso@7
|
2260 Maintainer : $MAINTAINER"
|
pankso@7
|
2261 if [ ! "$WEB_SITE" = "" ]; then
|
pankso@7
|
2262 echo "Web site : $WEB_SITE"
|
pankso@7
|
2263 fi
|
pankso@7
|
2264 if [ ! "$DEPENDS" = "" ]; then
|
pankso@7
|
2265 echo "Depends : $DEPENDS"
|
pankso@7
|
2266 fi
|
pankso@7
|
2267 if [ ! "$WANTED" = "" ]; then
|
pankso@7
|
2268 echo "Wanted src : $WANTED"
|
pankso@7
|
2269 fi
|
pankso@7
|
2270 echo "================================================================================"
|
pankso@7
|
2271 echo ""
|
gokhlayeh@186
|
2272 ;;
|
pankso@7
|
2273 check-log)
|
pankso@7
|
2274 # We just cat the file log to view process info.
|
pankso@7
|
2275 #
|
gokhlayeh@186
|
2276 get_tazwok_config
|
pankso@7
|
2277 if [ ! -f "$LOG" ]; then
|
gokhlayeh@186
|
2278 echo -e "\nNo process log found. The package is probably not cooked.\n" >&2
|
gokhlayeh@186
|
2279 exit 1
|
pankso@7
|
2280 else
|
pankso@7
|
2281 echo ""
|
pankso@7
|
2282 echo -e "\033[1mPackage process log for :\033[0m $PACKAGE"
|
pankso@7
|
2283 echo "================================================================================"
|
pankso@7
|
2284 cat $LOG
|
pankso@7
|
2285 echo "================================================================================"
|
pankso@7
|
2286 echo ""
|
pankso@7
|
2287 fi
|
gokhlayeh@186
|
2288 ;;
|
pankso@7
|
2289 search)
|
pankso@7
|
2290 # Search for a package by pattern or name.
|
pankso@7
|
2291 #
|
gokhlayeh@186
|
2292 get_tazwok_config
|
pankso@7
|
2293 if [ -z "$2" ]; then
|
gokhlayeh@186
|
2294 echo -e "\nPlease specify a pattern or a package name to search." >&2
|
gokhlayeh@186
|
2295 echo -e "Example : 'tazwok search gcc'.\n" >&2
|
gokhlayeh@186
|
2296 exit 1
|
pankso@7
|
2297 fi
|
pankso@7
|
2298 echo ""
|
pankso@7
|
2299 echo -e "\033[1mSearch result for :\033[0m $2"
|
pankso@7
|
2300 echo "================================================================================"
|
pankso@7
|
2301 list=`ls -1 $WOK | grep $2`
|
pankso@7
|
2302 for pkg in $list
|
pankso@7
|
2303 do
|
pankso@7
|
2304 . $WOK/$pkg/receipt
|
pankso@7
|
2305 echo -n "$PACKAGE "
|
pankso@7
|
2306 echo -en "\033[24G $VERSION"
|
pankso@7
|
2307 echo -e "\033[42G $CATEGORY"
|
gokhlayeh@186
|
2308 packages=$(($PACKAGEs+1))
|
pankso@7
|
2309 done
|
pankso@7
|
2310 echo "================================================================================"
|
gokhlayeh@186
|
2311 echo "$PACKAGEs packages found for : $2"
|
pankso@7
|
2312 echo ""
|
gokhlayeh@186
|
2313 ;;
|
pankso@7
|
2314 compile)
|
pankso@7
|
2315 # Configure and make a package with the receipt.
|
pankso@7
|
2316 #
|
gokhlayeh@186
|
2317 get_tazwok_config
|
gokhlayeh@186
|
2318 source_lib report
|
gokhlayeh@186
|
2319 report start
|
pankso@7
|
2320 compile_package
|
gokhlayeh@186
|
2321 ;;
|
pankso@7
|
2322 genpkg)
|
paul@121
|
2323 # Generate a package.
|
pankso@7
|
2324 #
|
gokhlayeh@186
|
2325 get_tazwok_config
|
gokhlayeh@186
|
2326 source_lib report
|
gokhlayeh@186
|
2327 report start
|
gokhlayeh@186
|
2328 mkdir $tmp
|
pankso@7
|
2329 gen_package
|
gokhlayeh@186
|
2330 ;;
|
pankso@7
|
2331 cook)
|
pankso@7
|
2332 # Compile and generate a package. Just execute tazwok with
|
pankso@7
|
2333 # the good commands.
|
pankso@7
|
2334 #
|
pankso@7
|
2335 check_root
|
gokhlayeh@186
|
2336 get_tazwok_config
|
gokhlayeh@186
|
2337 source_lib report
|
gokhlayeh@186
|
2338 report start
|
gokhlayeh@186
|
2339 mkdir -p $tmp
|
gokhlayeh@186
|
2340 cook
|
gokhlayeh@186
|
2341 ;;
|
gokhlayeh@186
|
2342 sort-cooklist)
|
gokhlayeh@186
|
2343 if [ ! "$LIST" ]; then
|
gokhlayeh@186
|
2344 echo "Usage : tazwok sort-cooklist cooklist" >&2\
|
gokhlayeh@186
|
2345 exit 1
|
gokhlayeh@186
|
2346 fi
|
gokhlayeh@186
|
2347 get_tazwok_config
|
gokhlayeh@186
|
2348 source_lib report
|
gokhlayeh@186
|
2349 report start
|
gokhlayeh@186
|
2350 mkdir -p $tmp
|
gokhlayeh@186
|
2351 cooklist=$LIST
|
gokhlayeh@186
|
2352 sort_cooklist
|
gokhlayeh@186
|
2353 cp -af $tmp/cooklist $cooklist
|
gokhlayeh@186
|
2354 ;;
|
pankso@7
|
2355 cook-list)
|
pankso@7
|
2356 # Cook all packages listed in a file. The path to the cooklist must
|
pankso@7
|
2357 # be specified on the cmdline.
|
gokhlayeh@186
|
2358 # /!\
|
gokhlayeh@186
|
2359 check_root
|
gokhlayeh@186
|
2360 get_tazwok_config
|
gokhlayeh@186
|
2361 source_lib report
|
gokhlayeh@186
|
2362 report start
|
gokhlayeh@186
|
2363 mkdir -p $tmp
|
gokhlayeh@186
|
2364 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
|
gokhlayeh@186
|
2365 if [ "$LIST" ]; then
|
gokhlayeh@186
|
2366 sort_cooklist
|
gokhlayeh@186
|
2367 else
|
gokhlayeh@186
|
2368 cp $cooklist $tmp/cooklist
|
gokhlayeh@186
|
2369 fi
|
gokhlayeh@186
|
2370 cook_list
|
gokhlayeh@186
|
2371 ;;
|
gokhlayeh@186
|
2372 clean)
|
gokhlayeh@186
|
2373 # Clean up a package work directory + thoses which want it.
|
pankso@7
|
2374 #
|
gokhlayeh@186
|
2375 get_tazwok_config
|
pankso@7
|
2376 check_for_package_on_cmdline
|
pankso@7
|
2377 check_for_receipt
|
gokhlayeh@186
|
2378 source_lib report
|
gokhlayeh@186
|
2379 report start
|
pankso@7
|
2380 . $RECEIPT
|
gokhlayeh@186
|
2381 clean
|
gokhlayeh@186
|
2382 ;;
|
pankso@7
|
2383 gen-clean-wok)
|
paul@121
|
2384 # Generate a clean wok from the current wok by copying all receipts
|
pankso@7
|
2385 # and stuff directory.
|
pankso@7
|
2386 #
|
gokhlayeh@186
|
2387 get_tazwok_config
|
gokhlayeh@186
|
2388 source_lib report
|
gokhlayeh@186
|
2389 report start
|
gokhlayeh@186
|
2390 if [ -z "$ARG" ]; then
|
gokhlayeh@186
|
2391 echo -e "\nPlease specify the destination for the new clean wok.\n" >&2
|
gokhlayeh@186
|
2392 exit 1
|
pankso@7
|
2393 else
|
gokhlayeh@186
|
2394 dest=$ARG
|
pankso@7
|
2395 mkdir -p $dest
|
pankso@7
|
2396 fi
|
gokhlayeh@186
|
2397 report step "Creating clean wok in : $dest"
|
pankso@7
|
2398 for pkg in `ls -1 $WOK`
|
pankso@7
|
2399 do
|
pankso@7
|
2400 mkdir -p $dest/$pkg
|
pankso@7
|
2401 cp -a $WOK/$pkg/receipt $dest/$pkg
|
gokhlayeh@186
|
2402 [ -f $WOK/$pkg/description.txt ] && \
|
gokhlayeh@186
|
2403 cp -a $WOK/$pkg/description.txt $dest/$pkg
|
pankso@7
|
2404 if [ -d "$WOK/$pkg/stuff" ]; then
|
pankso@7
|
2405 cp -a $WOK/$pkg/stuff $dest/$pkg
|
pankso@7
|
2406 fi
|
pankso@7
|
2407 done
|
gokhlayeh@186
|
2408 [ -d $WOK/.hg ] && cp -a $WOK/.hg $dest
|
gokhlayeh@186
|
2409 report end-step
|
pankso@7
|
2410 echo "Packages cleaned : `ls -1 $dest | wc -l`"
|
pankso@7
|
2411 echo ""
|
gokhlayeh@186
|
2412 ;;
|
pankso@7
|
2413 clean-wok)
|
pankso@7
|
2414 # Clean all packages in the work directory
|
pankso@7
|
2415 #
|
gokhlayeh@186
|
2416 get_tazwok_config
|
gokhlayeh@186
|
2417 source_lib report
|
gokhlayeh@186
|
2418 report start
|
gokhlayeh@186
|
2419 report step "Cleaning wok"
|
gokhlayeh@186
|
2420 report open-bloc
|
gokhlayeh@186
|
2421 for PACKAGE in `ls -1 $WOK`
|
pankso@7
|
2422 do
|
gokhlayeh@186
|
2423 set_common_path
|
gokhlayeh@186
|
2424 source_receipt
|
gokhlayeh@186
|
2425 clean
|
pankso@7
|
2426 done
|
gokhlayeh@186
|
2427 report close-bloc
|
pankso@7
|
2428 echo "`ls -1 $WOK | wc -l` packages cleaned."
|
gokhlayeh@186
|
2429 ;;
|
pankso@7
|
2430 gen-list)
|
gokhlayeh@186
|
2431 check_root
|
gokhlayeh@186
|
2432 get_tazwok_config
|
gokhlayeh@186
|
2433 source_lib report
|
gokhlayeh@186
|
2434 report start
|
gokhlayeh@186
|
2435 dbtype=packages
|
gokhlayeh@186
|
2436 mode=gen
|
gokhlayeh@186
|
2437 for pkg_repository in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@186
|
2438 files_list="$pkg_repository/files.list.lzma \
|
gokhlayeh@186
|
2439 $pkg_repository/packages.list \
|
gokhlayeh@186
|
2440 $pkg_repository/packages.txt \
|
gokhlayeh@186
|
2441 $pkg_repository/packages.desc \
|
gokhlayeh@186
|
2442 $pkg_repository/packages.equiv \
|
gokhlayeh@186
|
2443 $pkg_repository/packages.md5"
|
gokhlayeh@186
|
2444 gen_db
|
gokhlayeh@186
|
2445 echo "$pkgs packages in the repository."
|
gokhlayeh@186
|
2446 echo ""
|
gokhlayeh@186
|
2447 done
|
gokhlayeh@186
|
2448 ;;
|
gokhlayeh@186
|
2449 check-list)
|
gokhlayeh@186
|
2450 # The directory to move into by default is the repository,
|
gokhlayeh@186
|
2451 # if $2 is not empty cd into $2.
|
pankso@7
|
2452 #
|
gokhlayeh@186
|
2453 get_tazwok_config
|
gokhlayeh@186
|
2454 if [ -z "$2" ]; then
|
pankso@7
|
2455 PACKAGES_REPOSITORY=$PACKAGES_REPOSITORY
|
pankso@7
|
2456 else
|
pankso@7
|
2457 if [ -d "$2" ]; then
|
pankso@7
|
2458 PACKAGES_REPOSITORY=$2
|
pankso@7
|
2459 else
|
gokhlayeh@186
|
2460 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@186
|
2461 exit 1
|
pankso@7
|
2462 fi
|
pankso@7
|
2463 fi
|
gokhlayeh@186
|
2464
|
gokhlayeh@186
|
2465 # Use report shared library to control output.
|
gokhlayeh@186
|
2466 tmp=/tmp/tazwok-$$
|
gokhlayeh@186
|
2467 mkdir $tmp
|
gokhlayeh@186
|
2468 source_lib report
|
gokhlayeh@186
|
2469 dbtype=packages
|
gokhlayeh@186
|
2470 mode=update
|
pankso@7
|
2471 cd $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
2472 for pkg in $(echo *.tazpkg); do
|
gokhlayeh@186
|
2473 package_md5=$(md5sum $pkg)
|
gokhlayeh@186
|
2474 [ "$PACKAGE_md5" = "$(grep ' '$pkg$ packages.md5)" ] && continue
|
gokhlayeh@186
|
2475 erase_package_info
|
gokhlayeh@186
|
2476 get_packages_info
|
gokhlayeh@186
|
2477 done
|
pankso@7
|
2478 echo "$pkgs packages in the repository."
|
pankso@7
|
2479 echo ""
|
gokhlayeh@186
|
2480 ;;
|
pankso@7
|
2481 new-tree)
|
MikeDSmith25@82
|
2482 # Just create a few directories and generate an empty receipt to prepare
|
pankso@7
|
2483 # the creation of a new package.
|
pankso@7
|
2484 #
|
gokhlayeh@186
|
2485 get_tazwok_config
|
pankso@7
|
2486 check_for_package_on_cmdline
|
pankso@7
|
2487 if [ -d $WOK/$PACKAGE ]; then
|
gokhlayeh@186
|
2488 echo -e "\n$PACKAGE package tree already exists.\n" >&2
|
gokhlayeh@186
|
2489 exit 1
|
pankso@7
|
2490 fi
|
pankso@7
|
2491 echo "Creating : $WOK/$PACKAGE"
|
pankso@7
|
2492 mkdir $WOK/$PACKAGE
|
pankso@7
|
2493 cd $WOK/$PACKAGE
|
pankso@7
|
2494 echo -n "Preparing the receipt..."
|
pankso@7
|
2495 #
|
pankso@7
|
2496 # Default receipt begin.
|
pankso@7
|
2497 #
|
pankso@7
|
2498 echo "# SliTaz package receipt." > receipt
|
pankso@7
|
2499 echo "" >> receipt
|
pankso@7
|
2500 echo "PACKAGE=\"$PACKAGE\"" >> receipt
|
pankso@7
|
2501 # Finish the empty receipt.
|
pankso@7
|
2502 cat >> receipt << "EOF"
|
pankso@7
|
2503 VERSION=""
|
pankso@7
|
2504 CATEGORY=""
|
pankso@7
|
2505 SHORT_DESC=""
|
pankso@7
|
2506 MAINTAINER=""
|
pankso@7
|
2507 DEPENDS=""
|
pankso@7
|
2508 TARBALL="$PACKAGE-$VERSION.tar.gz"
|
pankso@7
|
2509 WEB_SITE=""
|
pankso@7
|
2510 WGET_URL=""
|
pankso@7
|
2511
|
pankso@7
|
2512 # Rules to configure and make the package.
|
pankso@7
|
2513 compile_rules()
|
pankso@7
|
2514 {
|
pankso@7
|
2515 cd $src
|
pankso@113
|
2516 ./configure \
|
pankso@113
|
2517 --prefix=/usr \
|
pankso@113
|
2518 --infodir=/usr/share/info \
|
pankso@113
|
2519 --mandir=/usr/share/man \
|
pankso@113
|
2520 $CONFIGURE_ARGS &&
|
pascal@169
|
2521 make -j 4 && make DESTDIR=$PWD/_pkg install
|
pankso@7
|
2522 }
|
pankso@7
|
2523
|
pankso@7
|
2524 # Rules to gen a SliTaz package suitable for Tazpkg.
|
pankso@7
|
2525 genpkg_rules()
|
pankso@7
|
2526 {
|
pankso@7
|
2527 mkdir -p $fs/usr
|
pankso@7
|
2528 cp -a $_pkg/usr/bin $fs/usr
|
pankso@7
|
2529 }
|
pankso@7
|
2530
|
pankso@7
|
2531 EOF
|
pankso@7
|
2532 #
|
pankso@7
|
2533 # Default receipt end.
|
pankso@7
|
2534 #
|
pankso@7
|
2535 status
|
pankso@7
|
2536 # Interactive mode, asking and seding.
|
pankso@7
|
2537 if [ "$3" = "--interactive" ]; then
|
paul@154
|
2538 echo "Entering into interactive mode..."
|
pankso@7
|
2539 echo "================================================================================"
|
pankso@7
|
2540 echo "Package : $PACKAGE"
|
pankso@7
|
2541 # Version.
|
pankso@7
|
2542 echo -n "Version : " ; read anser
|
pankso@7
|
2543 sed -i s/'VERSION=\"\"'/"VERSION=\"$anser\""/ receipt
|
pankso@7
|
2544 # Category.
|
pankso@7
|
2545 echo -n "Category : " ; read anser
|
pankso@7
|
2546 sed -i s/'CATEGORY=\"\"'/"CATEGORY=\"$anser\""/ receipt
|
pankso@7
|
2547 # Short description.
|
pankso@7
|
2548 echo -n "Short desc : " ; read anser
|
pankso@7
|
2549 sed -i s/'SHORT_DESC=\"\"'/"SHORT_DESC=\"$anser\""/ receipt
|
pankso@7
|
2550 # Maintainer.
|
pankso@7
|
2551 echo -n "Maintainer : " ; read anser
|
pankso@7
|
2552 sed -i s/'MAINTAINER=\"\"'/"MAINTAINER=\"$anser\""/ receipt
|
pankso@7
|
2553 # Web site.
|
pankso@7
|
2554 echo -n "Web site : " ; read anser
|
pankso@133
|
2555 sed -i s#'WEB_SITE=\"\"'#"WEB_SITE=\"$anser\""# receipt
|
pankso@7
|
2556 echo ""
|
pankso@7
|
2557 # Wget URL.
|
pankso@7
|
2558 echo "Wget URL to download source tarball."
|
pankso@7
|
2559 echo "Example : \$GNU_MIRROR/\$PACKAGE/\$TARBALL"
|
pankso@7
|
2560 echo -n "Wget url : " ; read anser
|
pankso@7
|
2561 sed -i s#'WGET_URL=\"\"'#"WGET_URL=\"$anser\""# receipt
|
pankso@7
|
2562 # Ask for a stuff dir.
|
pankso@7
|
2563 echo -n "Do you need a stuff directory ? (y/N) : " ; read anser
|
pankso@7
|
2564 if [ "$anser" = "y" ]; then
|
pankso@7
|
2565 echo -n "Creating the stuff directory..."
|
pankso@7
|
2566 mkdir stuff && status
|
pankso@7
|
2567 fi
|
pankso@7
|
2568 # Ask for a description file.
|
pankso@7
|
2569 echo -n "Are you going to write a description ? (y/N) : " ; read anser
|
pankso@7
|
2570 if [ "$anser" = "y" ]; then
|
pankso@7
|
2571 echo -n "Creating the description.txt file..."
|
pankso@7
|
2572 echo "" > description.txt && status
|
pankso@7
|
2573 fi
|
pankso@7
|
2574 echo "================================================================================"
|
pankso@7
|
2575 echo ""
|
pankso@7
|
2576 fi
|
gokhlayeh@186
|
2577 ;;
|
pankso@7
|
2578 remove)
|
pankso@7
|
2579 # Remove a package from the wok.
|
pankso@7
|
2580 #
|
gokhlayeh@186
|
2581 get_tazwok_config
|
pankso@7
|
2582 check_for_package_on_cmdline
|
pankso@7
|
2583 echo ""
|
pascal@83
|
2584 echo -n "Please confirm deletion (y/N) : "; read anser
|
pascal@83
|
2585 if [ "$anser" = "y" ]; then
|
pascal@83
|
2586 echo -n "Removing $PACKAGE..."
|
pascal@83
|
2587 rm -rf $WOK/$PACKAGE && status
|
pascal@83
|
2588 echo ""
|
pascal@83
|
2589 fi
|
gokhlayeh@186
|
2590 ;;
|
pankso@106
|
2591 hgup)
|
paul@166
|
2592 # Pull and update a Hg wok.
|
gokhlayeh@186
|
2593 get_tazwok_config
|
pankso@106
|
2594 if ls -l $WOK/.hg/hgrc | grep -q "root"; then
|
pankso@106
|
2595 check_root
|
pankso@106
|
2596 fi
|
pankso@106
|
2597 cd $WOK
|
gokhlayeh@186
|
2598 hg pull && hg update
|
gokhlayeh@186
|
2599 ;;
|
pankso@108
|
2600 maintainers)
|
gokhlayeh@186
|
2601 get_tazwok_config
|
pankso@108
|
2602 echo ""
|
pankso@108
|
2603 echo "List of maintainers for: $WOK"
|
pankso@108
|
2604 echo "================================================================================"
|
pankso@108
|
2605 touch /tmp/slitaz-maintainers
|
pankso@108
|
2606 for pkg in $WOK/*
|
pankso@108
|
2607 do
|
pankso@108
|
2608 . $pkg/receipt
|
pankso@108
|
2609 if ! grep -q "$MAINTAINER" /tmp/slitaz-maintainers; then
|
pankso@108
|
2610 echo "$MAINTAINER" >> /tmp/slitaz-maintainers
|
pankso@108
|
2611 echo "$MAINTAINER"
|
pankso@108
|
2612 fi
|
pankso@108
|
2613 done
|
pankso@108
|
2614 echo "================================================================================"
|
pankso@108
|
2615 echo "Maintainers: `cat /tmp/slitaz-maintainers | wc -l`"
|
pankso@108
|
2616 echo ""
|
pankso@108
|
2617 # Remove tmp files
|
gokhlayeh@186
|
2618 rm -f /tmp/slitaz-maintainers
|
gokhlayeh@186
|
2619 ;;
|
pankso@107
|
2620 maintained-by)
|
paul@166
|
2621 # Search for packages maintained by a contributor.
|
gokhlayeh@186
|
2622 get_tazwok_config
|
pankso@107
|
2623 if [ ! -n "$2" ]; then
|
gokhlayeh@186
|
2624 echo "Specify a name or email of a maintainer." >&2
|
gokhlayeh@186
|
2625 exit 1
|
pankso@107
|
2626 fi
|
pankso@107
|
2627 echo "Maintainer packages"
|
pankso@107
|
2628 echo "================================================================================"
|
pankso@107
|
2629 for pkg in $WOK/*
|
pankso@107
|
2630 do
|
pankso@107
|
2631 . $pkg/receipt
|
pankso@107
|
2632 if echo "$MAINTAINER" | grep -q "$2"; then
|
pankso@107
|
2633 echo "$PACKAGE"
|
gokhlayeh@186
|
2634 packages=$(($PACKAGEs+1))
|
pankso@107
|
2635 fi
|
pankso@107
|
2636 done
|
pankso@107
|
2637 echo "================================================================================"
|
gokhlayeh@186
|
2638 echo "Packages maintained by $2: $PACKAGEs"
|
gokhlayeh@186
|
2639 echo ""
|
gokhlayeh@186
|
2640 ;;
|
erjo@159
|
2641 check-src)
|
erjo@159
|
2642 # Verify if upstream package is still available
|
erjo@159
|
2643 #
|
gokhlayeh@186
|
2644 get_tazwok_config
|
erjo@159
|
2645 check_for_package_on_cmdline
|
erjo@159
|
2646 check_for_receipt
|
gokhlayeh@186
|
2647 source_receipt
|
erjo@159
|
2648 check_src()
|
erjo@159
|
2649 {
|
erjo@159
|
2650 for url in $@; do
|
pascal@178
|
2651 busybox wget -s $url 2>/dev/null && break
|
erjo@159
|
2652 done
|
erjo@159
|
2653 }
|
gokhlayeh@186
|
2654 if [ "$WGET_URL" ];then
|
erjo@159
|
2655 echo -n "$PACKAGE : "
|
erjo@159
|
2656 check_src $WGET_URL
|
erjo@159
|
2657 status
|
erjo@159
|
2658 else
|
erjo@159
|
2659 echo "No tarball to check for $PACKAGE"
|
erjo@159
|
2660 fi
|
gokhlayeh@186
|
2661 ;;
|
gokhlayeh@186
|
2662 get-src)
|
gokhlayeh@186
|
2663 check_root
|
gokhlayeh@186
|
2664 get_options_list="target"
|
gokhlayeh@186
|
2665 get_tazwok_config
|
gokhlayeh@186
|
2666 check_for_package_on_cmdline
|
gokhlayeh@186
|
2667 check_for_receipt
|
gokhlayeh@186
|
2668 source_receipt
|
gokhlayeh@186
|
2669 if [ "$WGET_URL" ];then
|
gokhlayeh@186
|
2670 source_lib report
|
gokhlayeh@186
|
2671 report start
|
gokhlayeh@186
|
2672 check_for_tarball
|
gokhlayeh@186
|
2673 else
|
gokhlayeh@186
|
2674 echo "No tarball to download for $PACKAGE"
|
gokhlayeh@186
|
2675 fi
|
gokhlayeh@186
|
2676 ;;
|
gokhlayeh@186
|
2677 check-commit)
|
gokhlayeh@186
|
2678 check_root
|
gokhlayeh@186
|
2679 get_tazwok_config
|
gokhlayeh@186
|
2680 source_lib report
|
gokhlayeh@186
|
2681 report start
|
gokhlayeh@186
|
2682 mkdir -p $tmp
|
gokhlayeh@186
|
2683 check_for_commit
|
gokhlayeh@186
|
2684 gen_cook_list
|
gokhlayeh@186
|
2685 ;;
|
gokhlayeh@186
|
2686 cook-commit)
|
gokhlayeh@186
|
2687 check_root
|
gokhlayeh@186
|
2688 get_tazwok_config
|
gokhlayeh@186
|
2689 source_lib report
|
gokhlayeh@186
|
2690 report start
|
gokhlayeh@186
|
2691 mkdir -p $tmp
|
gokhlayeh@186
|
2692 check_for_commit
|
gokhlayeh@186
|
2693 # 2) update cook-database (actually complete regeneration)
|
gokhlayeh@186
|
2694 dbtype=wok
|
gokhlayeh@186
|
2695 mode=gen
|
gokhlayeh@186
|
2696 files_list="$dep_db $wan_db $PACKAGE_REPOSITORY/cookorder.txt"
|
gokhlayeh@186
|
2697 gen_db
|
gokhlayeh@186
|
2698 # 3) check cooklist
|
gokhlayeh@186
|
2699 # 3.1) rename pkgs with wanted variable to wanted pkg
|
gokhlayeh@186
|
2700 gen_cook_list
|
gokhlayeh@186
|
2701 cook_list
|
gokhlayeh@186
|
2702 ;;
|
gokhlayeh@186
|
2703 cook-all)
|
gokhlayeh@186
|
2704 check_root
|
gokhlayeh@186
|
2705 get_tazwok_config
|
gokhlayeh@186
|
2706 source_lib report
|
gokhlayeh@186
|
2707 report start
|
gokhlayeh@186
|
2708 mkdir -p $tmp
|
gokhlayeh@186
|
2709 # 2) update cook-database (actually complete regeneration)
|
gokhlayeh@186
|
2710 dbtype=wok
|
gokhlayeh@186
|
2711 mode=gen
|
gokhlayeh@186
|
2712 files_list="$dep_db $wan_db $PACKAGE_REPOSITORY/cookorder.txt"
|
gokhlayeh@186
|
2713 gen_db
|
gokhlayeh@186
|
2714 # Add all packages, without toolchain, in cooklist.
|
gokhlayeh@186
|
2715 # Recook toolchain need to be coded.
|
gokhlayeh@186
|
2716 echo -n "" > $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
2717 for pkg in $(cd $WOK && echo *); do
|
gokhlayeh@186
|
2718 echo $pkg >> $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
2719 done
|
gokhlayeh@186
|
2720 for pkg in $(scan gcc --look_for=all --with_wanted --with_args); do
|
gokhlayeh@186
|
2721 sed "/^$pkg$/d" -i $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
2722 done
|
gokhlayeh@186
|
2723 sort_cooklist
|
gokhlayeh@186
|
2724 cook_list
|
gokhlayeh@186
|
2725 ;;
|
gokhlayeh@186
|
2726 gen-wok-db)
|
gokhlayeh@186
|
2727 check_root
|
gokhlayeh@186
|
2728 get_tazwok_config
|
gokhlayeh@186
|
2729 source_lib report
|
gokhlayeh@186
|
2730 report start
|
gokhlayeh@186
|
2731 mkdir $tmp
|
gokhlayeh@186
|
2732 dbtype=wok
|
gokhlayeh@186
|
2733 mode=gen
|
gokhlayeh@186
|
2734 files_list="$dep_db $wan_db $PACKAGE_REPOSITORY/cookorder.txt"
|
gokhlayeh@186
|
2735 gen_db
|
gokhlayeh@186
|
2736 ;;
|
gokhlayeh@186
|
2737 report)
|
gokhlayeh@186
|
2738 check_root
|
gokhlayeh@186
|
2739 get_tazwok_config
|
gokhlayeh@186
|
2740 cd $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
2741 for i in commit genpkglist cooklist incoming broken blocked; do
|
gokhlayeh@186
|
2742 if [ -s $i ]; then
|
gokhlayeh@186
|
2743 echo -e "\n********************* $i *********************\n$(cat $i)\n*********************"
|
gokhlayeh@186
|
2744 fi
|
gokhlayeh@186
|
2745 done
|
gokhlayeh@186
|
2746 ;;
|
gokhlayeh@186
|
2747 check-incoming)
|
gokhlayeh@186
|
2748 check_root
|
gokhlayeh@186
|
2749 get_tazwok_config
|
gokhlayeh@186
|
2750 source_lib report
|
gokhlayeh@186
|
2751 report start
|
gokhlayeh@186
|
2752 mkdir $tmp
|
gokhlayeh@186
|
2753 check_for_incoming
|
gokhlayeh@186
|
2754 ;;
|
gokhlayeh@186
|
2755 remove-old)
|
gokhlayeh@186
|
2756 check_root
|
gokhlayeh@186
|
2757 get_tazwok_config
|
gokhlayeh@186
|
2758 source_lib report
|
gokhlayeh@186
|
2759 report start
|
gokhlayeh@186
|
2760 mkdir $tmp
|
gokhlayeh@186
|
2761 remove_old_packages
|
gokhlayeh@186
|
2762 ;;
|
gokhlayeh@190
|
2763 configure-chroot)
|
gokhlayeh@190
|
2764 check_root
|
gokhlayeh@190
|
2765 get_tazwok_config
|
gokhlayeh@190
|
2766 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@190
|
2767 cd $LOCAL_REPOSITORY
|
gokhlayeh@190
|
2768 configure_tazchroot
|
gokhlayeh@190
|
2769 else
|
gokhlayeh@190
|
2770 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@190
|
2771 exit 1
|
gokhlayeh@190
|
2772 fi
|
gokhlayeh@190
|
2773 ;;
|
gokhlayeh@186
|
2774 chroot)
|
gokhlayeh@186
|
2775 check_root
|
gokhlayeh@186
|
2776 get_tazwok_config
|
gokhlayeh@186
|
2777 # Merge this and the other chroot function ?.
|
gokhlayeh@186
|
2778 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
2779 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
2780 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
2781 tazchroot
|
gokhlayeh@186
|
2782 else
|
gokhlayeh@186
|
2783 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@186
|
2784 exit 1
|
gokhlayeh@186
|
2785 fi
|
gokhlayeh@186
|
2786 ;;
|
gokhlayeh@186
|
2787 cook-toolchain)
|
gokhlayeh@186
|
2788 check_root
|
gokhlayeh@186
|
2789 get_tazwok_config
|
gokhlayeh@186
|
2790 echo -n "" > $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
2791 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
2792 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
2793 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
2794 tazchroot cook-toolchain
|
gokhlayeh@186
|
2795 # Buggy : chroot can be elsewhere.
|
gokhlayeh@186
|
2796 rm -r $LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
2797 # /!\ to be writed :
|
gokhlayeh@186
|
2798 # next rm chroot and plan cook-all by pushing all packages
|
gokhlayeh@186
|
2799 # in cooklist.
|
gokhlayeh@186
|
2800 else
|
gokhlayeh@186
|
2801 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@186
|
2802 exit 1
|
gokhlayeh@186
|
2803 fi
|
gokhlayeh@186
|
2804 ;;
|
pankso@7
|
2805 usage|*)
|
MikeDSmith25@82
|
2806 # Print usage also for all unknown commands.
|
pankso@7
|
2807 #
|
pankso@7
|
2808 usage
|
gokhlayeh@186
|
2809 ;;
|
pankso@7
|
2810 esac
|
pankso@7
|
2811
|
gokhlayeh@186
|
2812 [ -d "$tmp" ] && rm -r $tmp
|
gokhlayeh@186
|
2813 report stop 2>/dev/null || exit 0
|