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