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