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@186
|
2237 $( [ "$undigest" ] && echo ' echo "undigest='"$undigest"'" >> $chroot_dir/etc/slitaz/tazwok.conf')
|
gokhlayeh@186
|
2238 sed 's/LC_ALL/LC_ALL=POSIX/' -i \$chroot_dir/etc/profile
|
paul@430
|
2239 # The build bot may run in a sandbox: link sandbox lockfile.
|
pascal@368
|
2240 ln -s \$LOCAL_REPOSITORY/sandbox/proc/1 \$chroot_dir/proc/1
|
gokhlayeh@186
|
2241 }
|
gokhlayeh@186
|
2242
|
gokhlayeh@186
|
2243 mount_chroot()
|
gokhlayeh@186
|
2244 {
|
gokhlayeh@186
|
2245 cp -a /etc/resolv.conf \$chroot_dir/etc/resolv.conf
|
gokhlayeh@194
|
2246 echo "\$LOCAL_REPOSITORY/packages" > \$chroot_dir\$LOCALSTATE/mirror
|
gokhlayeh@194
|
2247 mkdir -p \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming
|
gokhlayeh@194
|
2248 echo "\$LOCAL_REPOSITORY/packages-incoming" > \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming/mirror
|
gokhlayeh@194
|
2249 $( [ "$undigest" ] && echo ' mkdir -p $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION
|
gokhlayeh@194
|
2250 echo "$SLITAZ_DIR/$SLITAZ_VERSION/packages" > $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION/mirror' )
|
gokhlayeh@194
|
2251 echo -e "\${LOCAL_REPOSITORY##*/}-incoming\nmain" > \$chroot_dir\$LOCALSTATE/priority
|
gokhlayeh@440
|
2252 mount -o bind /proc \$chroot_dir/proc
|
gokhlayeh@440
|
2253 mount -o bind /sys \$chroot_dir/sys
|
gokhlayeh@433
|
2254 mount -o bind /dev/pts \$chroot_dir/dev/pts
|
gokhlayeh@433
|
2255 mount -o bind /dev/shm \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2256 for dir in \$list_dir; do
|
gokhlayeh@186
|
2257 mkdir -p \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2258 mount \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2259 done
|
gokhlayeh@186
|
2260 }
|
gokhlayeh@186
|
2261
|
gokhlayeh@186
|
2262 umount_chroot()
|
gokhlayeh@186
|
2263 {
|
gokhlayeh@186
|
2264 for dir in \$list_dir; do
|
gokhlayeh@186
|
2265 umount \$chroot_dir\$dir
|
gokhlayeh@186
|
2266 done
|
gokhlayeh@186
|
2267 umount \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2268 umount \$chroot_dir/dev/pts
|
gokhlayeh@186
|
2269 umount \$chroot_dir/sys
|
gokhlayeh@186
|
2270 umount \$chroot_dir/proc
|
gokhlayeh@186
|
2271 }
|
gokhlayeh@186
|
2272 EOF
|
gokhlayeh@186
|
2273 }
|
gokhlayeh@186
|
2274
|
gokhlayeh@186
|
2275 ########################################################################
|
gokhlayeh@186
|
2276 ######################### END OF NEW FUNCTIONS #########################
|
gokhlayeh@186
|
2277 ########################################################################
|
gokhlayeh@186
|
2278
|
paul@430
|
2279 # List packages providing a virtual package.
|
pascal@111
|
2280 whoprovide()
|
pascal@111
|
2281 {
|
pascal@111
|
2282 local i;
|
gokhlayeh@195
|
2283 for i in $(fgrep -l PROVIDE $WOK/*/receipt); do
|
pascal@111
|
2284 . $i
|
pascal@111
|
2285 case " $PROVIDE " in
|
pascal@111
|
2286 *\ $1\ *|*\ $1:*) echo $(basename $(dirname $i));;
|
pascal@111
|
2287 esac
|
pascal@111
|
2288 done
|
pascal@111
|
2289 }
|
pascal@111
|
2290
|
gokhlayeh@186
|
2291 ########################################################################
|
gokhlayeh@186
|
2292 # TAZWOK COMMANDS
|
gokhlayeh@186
|
2293 ########################
|
pankso@7
|
2294
|
pankso@7
|
2295 case "$COMMAND" in
|
pankso@7
|
2296 stats)
|
paul@166
|
2297 # Tazwok general statistics from the wok config file.
|
pankso@7
|
2298 #
|
gokhlayeh@186
|
2299 get_tazwok_config
|
gokhlayeh@186
|
2300 echo -e "\n\033[1mTazwok configuration statistics\033[0m
|
pankso@7
|
2301 ================================================================================
|
pankso@7
|
2302 Wok directory : $WOK
|
pankso@7
|
2303 Packages repository : $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
2304 Incoming repository : $INCOMING_REPOSITORY
|
pankso@7
|
2305 Sources repository : $SOURCES_REPOSITORY
|
gokhlayeh@186
|
2306 Log directory : $LOCAL_REPOSITORY/log
|
pankso@7
|
2307 Packages in the wok : `ls -1 $WOK | wc -l`
|
pankso@16
|
2308 Cooked packages : `ls -1 $PACKAGES_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2309 Incoming packages : `ls -1 $INCOMING_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2310 ================================================================================\n"
|
gokhlayeh@186
|
2311 ;;
|
pankso@133
|
2312 edit)
|
gokhlayeh@186
|
2313 get_tazwok_config
|
pankso@133
|
2314 check_for_package_on_cmdline
|
pankso@133
|
2315 check_for_receipt
|
gokhlayeh@186
|
2316 $EDITOR $WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
2317 ;;
|
pascal@98
|
2318 build-depends)
|
paul@430
|
2319 # List dependencies to rebuild wok, or only a package.
|
gokhlayeh@186
|
2320 get_tazwok_config
|
gokhlayeh@215
|
2321 report(){ : ; }
|
gokhlayeh@242
|
2322 if [ ! "$PACKAGE" ] || [ "$PACKAGE" = toolchain ]; then
|
gokhlayeh@186
|
2323 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
2324 --look_for=dep --with_dev --with_args
|
gokhlayeh@186
|
2325 else
|
gokhlayeh@186
|
2326 check_for_package_on_cmdline
|
gokhlayeh@186
|
2327 scan $PACKAGE --look_for=bdep --with_dev
|
gokhlayeh@186
|
2328 fi
|
gokhlayeh@186
|
2329 ;;
|
gokhlayeh@186
|
2330 gen-cooklist)
|
gokhlayeh@215
|
2331 check_root
|
gokhlayeh@204
|
2332 get_options_list="pkg"
|
gokhlayeh@186
|
2333 get_tazwok_config
|
gokhlayeh@215
|
2334 report(){ : ; }
|
gokhlayeh@204
|
2335 if ! [ "$pkg" ]; then
|
gokhlayeh@242
|
2336 if [ ! "$LIST" ] || [ "$LIST" = toolchain ]; then
|
gokhlayeh@242
|
2337 pkg="$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA"
|
gokhlayeh@242
|
2338 else
|
gokhlayeh@242
|
2339 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
|
gokhlayeh@242
|
2340 fi
|
gokhlayeh@186
|
2341 fi
|
gokhlayeh@204
|
2342 gen_cook_list
|
gokhlayeh@186
|
2343 ;;
|
pascal@119
|
2344 check-depends)
|
paul@430
|
2345 # Check package depends /!\.
|
gokhlayeh@186
|
2346 get_tazwok_config
|
pascal@119
|
2347 echo ""
|
paul@121
|
2348 echo -e "\033[1mCheck every receipt for DEPENDS - doesn't scan ELF files\033[0m
|
pascal@119
|
2349 ================================================================================"
|
pascal@119
|
2350 TMPDIR=/tmp/tazwok$$
|
pascal@119
|
2351 DEFAULT_DEPENDS="glibc-base gcc-lib-base"
|
pascal@119
|
2352
|
paul@430
|
2353 # Build ALL_DEPENDS variable.
|
pascal@119
|
2354 scan_dep()
|
pascal@119
|
2355 {
|
pascal@119
|
2356 local i
|
pascal@119
|
2357 ALL_DEPENDS="$ALL_DEPENDS$PACKAGE "
|
pascal@128
|
2358 for i in $DEPENDS $SUGGESTED ; do
|
pascal@119
|
2359 case " $ALL_DEPENDS " in
|
pascal@119
|
2360 *\ $i\ *) continue;;
|
pascal@119
|
2361 esac
|
pascal@120
|
2362 [ -d $WOK/$i ] || {
|
pascal@120
|
2363 ALL_DEPENDS="$ALL_DEPENDS$i "
|
pascal@120
|
2364 continue
|
pascal@120
|
2365 }
|
pascal@128
|
2366 DEPENDS=""
|
pascal@128
|
2367 SUGGESTED=""
|
pascal@119
|
2368 . $WOK/$i/receipt
|
pascal@119
|
2369 scan_dep
|
pascal@119
|
2370 done
|
pascal@119
|
2371 }
|
pankso@133
|
2372
|
paul@430
|
2373 # Check for ELF file.
|
pascal@119
|
2374 is_elf()
|
pascal@119
|
2375 {
|
slaxemulator@323
|
2376 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ]
|
pascal@119
|
2377 }
|
pascal@119
|
2378
|
paul@430
|
2379 # Print shared library dependencies.
|
pascal@119
|
2380 ldd()
|
pascal@119
|
2381 {
|
pascal@130
|
2382 LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
|
pascal@119
|
2383 }
|
pascal@119
|
2384
|
pascal@119
|
2385 mkdir $TMPDIR
|
pascal@119
|
2386 cd $TMPDIR
|
pascal@140
|
2387 for i in $LOCALSTATE/files.list.lzma \
|
pascal@140
|
2388 $LOCALSTATE/undigest/*/files.list.lzma ; do
|
pascal@119
|
2389 [ -f $i ] && lzma d $i -so >> files.list
|
pascal@119
|
2390 done
|
pascal@119
|
2391 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
|
pascal@119
|
2392 tazpkg extract $pkg > /dev/null 2>&1
|
pascal@119
|
2393 . */receipt
|
pascal@119
|
2394 ALL_DEPENDS="$DEFAULT_DEPENDS "
|
pascal@119
|
2395 scan_dep
|
pascal@119
|
2396 find */fs -type f | while read file ; do
|
pascal@119
|
2397 is_elf $file || continue
|
pascal@119
|
2398 case "$file" in
|
pascal@119
|
2399 *.o|*.ko|*.ko.gz) continue;;
|
pascal@119
|
2400 esac
|
pascal@119
|
2401 ldd $file | while read lib rem; do
|
pascal@119
|
2402 case "$lib" in
|
pascal@128
|
2403 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
|
pascal@119
|
2404 continue;;
|
pascal@119
|
2405 esac
|
gokhlayeh@195
|
2406 for dep in $(fgrep $lib files.list | cut -d: -f1); do
|
pascal@119
|
2407 case " $ALL_DEPENDS " in
|
pascal@119
|
2408 *\ $dep\ *) continue 2;;
|
pascal@119
|
2409 esac
|
gokhlayeh@195
|
2410 for vdep in $(fgrep $dep $LOCALSTATE/packages.equiv | cut -d= -f1); do
|
pascal@128
|
2411 case " $ALL_DEPENDS " in
|
pascal@129
|
2412 *\ $vdep\ *) continue 3;;
|
pascal@128
|
2413 esac
|
pascal@128
|
2414 done
|
pascal@119
|
2415 done
|
pascal@128
|
2416 [ -n "$dep" ] || dep="UNKNOWN"
|
pascal@119
|
2417 echo "$(basename $pkg): ${file#*fs} depends on package $dep for the shared library $lib"
|
pascal@119
|
2418 done
|
pascal@119
|
2419 done
|
pascal@119
|
2420 rm -rf */
|
pascal@119
|
2421 done
|
pascal@119
|
2422 cd /tmp
|
pascal@119
|
2423 rm -rf $TMPDIR
|
gokhlayeh@186
|
2424 ;;
|
pascal@76
|
2425 check)
|
paul@430
|
2426 # Check wok consistency.
|
gokhlayeh@186
|
2427 get_tazwok_config
|
pascal@76
|
2428 echo ""
|
pascal@76
|
2429 echo -e "\033[1mWok and packages checking\033[0m
|
pascal@76
|
2430 ================================================================================"
|
pascal@77
|
2431 cd $WOK
|
pascal@77
|
2432 for pkg in $(ls)
|
pascal@76
|
2433 do
|
pascal@76
|
2434 [ -f $pkg/receipt ] || continue
|
gokhlayeh@186
|
2435 RECEIPT= $pkg/receipt
|
gokhlayeh@186
|
2436 source_receipt
|
gokhlayeh@186
|
2437 [ "$PACKAGE" = "$pkg" ] || echo "Package $PACKAGE should be $pkg" >&2
|
gokhlayeh@186
|
2438 [ -n "$VERSION" ] || echo "Package $PACKAGE has no VERSION" >&2
|
gokhlayeh@186
|
2439 [ -n "$PACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded PACKED_SIZE" >&2
|
gokhlayeh@186
|
2440 [ -n "$UNPACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded UNPACKED_SIZE" >&2
|
gokhlayeh@186
|
2441 [ -n "$EXTRAVERSION" ] && echo "Package $PACKAGE has hardcoded EXTRAVERSION" >&2
|
pascal@97
|
2442 if [ -n "$WANTED" ]; then
|
pascal@97
|
2443 if [ ! -f $WANTED/receipt ]; then
|
gokhlayeh@186
|
2444 echo "Package $PACKAGE wants unknown $WANTED package" >&2
|
pascal@97
|
2445 else
|
pascal@97
|
2446 BASEVERSION=$(. $WANTED/receipt ; echo $VERSION)
|
pascal@103
|
2447 if [ "$VERSION" = "$WANTED" ]; then
|
pascal@103
|
2448 # BASEVERSION is computed in receipt
|
gokhlayeh@195
|
2449 fgrep -q '_pkg=' $pkg/receipt &&
|
pascal@103
|
2450 BASEVERSION=$VERSION
|
pascal@103
|
2451 fi
|
pascal@97
|
2452 if [ "$VERSION" != "$BASEVERSION" ]; then
|
gokhlayeh@186
|
2453 echo "Package $PACKAGE ($VERSION) wants $WANTED ($BASEVERSION)" >&2
|
pascal@97
|
2454 fi
|
pascal@97
|
2455 fi
|
pascal@97
|
2456 fi
|
pascal@97
|
2457
|
pascal@94
|
2458 if [ -n "$CATEGORY" ]; then
|
pascal@94
|
2459 case " $(echo $CATEGORIES) " in
|
pascal@94
|
2460 *\ $CATEGORY\ *);;
|
gokhlayeh@186
|
2461 *) echo "Package $PACKAGE has an invalid CATEGORY" >&2;;
|
pascal@94
|
2462 esac
|
pascal@94
|
2463 else
|
gokhlayeh@186
|
2464 echo"Package $PACKAGE has no CATEGORY" >&2
|
pascal@94
|
2465 fi
|
gokhlayeh@186
|
2466 [ -n "$SHORT_DESC" ] || echo "Package $PACKAGE has no SHORT_DESC" >&2
|
gokhlayeh@186
|
2467 [ -n "$MAINTAINER" ] || echo "Package $PACKAGE has no MAINTAINER" >&2
|
pascal@122
|
2468 case "$WGET_URL" in
|
pascal@178
|
2469 ftp*|http*) busybox wget -s $WGET_URL 2> /dev/null ||
|
gokhlayeh@186
|
2470 echo "Package $PACKAGE has a wrong WGET_URL" >&2;;
|
pascal@122
|
2471 '') ;;
|
gokhlayeh@186
|
2472 *) echo "Package $PACKAGE has an invalid WGET_URL" >&2;;
|
pascal@122
|
2473 esac
|
pascal@112
|
2474 case "$WEB_SITE" in
|
pascal@125
|
2475 ftp*|http*);;
|
gokhlayeh@186
|
2476 '') echo "Package $PACKAGE has no WEB_SITE" >&2;;
|
gokhlayeh@186
|
2477 *) echo "Package $PACKAGE has an invalid WEB_SITE" >&2;;
|
pascal@112
|
2478 esac
|
pascal@78
|
2479 case "$MAINTAINER" in
|
gokhlayeh@186
|
2480 *\<*|*\>*) echo "Package $PACKAGE has an invalid MAINTAINER: $MAINTAINER" >&2;;
|
pascal@78
|
2481 esac
|
pascal@78
|
2482 case "$MAINTAINER" in
|
pascal@78
|
2483 *@*);;
|
gokhlayeh@186
|
2484 *) echo "Package $PACKAGE MAINTAINER is not an email address" >&2;;
|
pascal@78
|
2485 esac
|
gokhlayeh@186
|
2486 MSG="Missing dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@76
|
2487 for i in $DEPENDS; do
|
pascal@76
|
2488 [ -d $i ] && continue
|
pascal@111
|
2489 [ -n "$(whoprovide $i)" ] && continue
|
pascal@76
|
2490 echo -e "$MSG $i"
|
pascal@76
|
2491 MSG=""
|
pascal@76
|
2492 done
|
gokhlayeh@186
|
2493 MSG="Missing build dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@92
|
2494 for i in $BUILD_DEPENDS; do
|
pascal@92
|
2495 [ -d $i ] && continue
|
pascal@111
|
2496 [ -n "$(whoprovide $i)" ] && continue
|
pascal@92
|
2497 echo -e "$MSG $i"
|
pascal@92
|
2498 MSG=""
|
pascal@92
|
2499 done
|
paul@430
|
2500 MSG="Dependency loop between $PACKAGE and :\n"
|
pascal@76
|
2501 ALL_DEPS=""
|
pascal@76
|
2502 check_for_deps_loop $PACKAGE $DEPENDS
|
pascal@140
|
2503 [ -d $WOK/$pkg/taz ] && for i in $BUILD_DEPENDS; do
|
pascal@141
|
2504 [ $WOK/$pkg/taz -nt $INSTALLED/$i/files.list ] && continue
|
paul@154
|
2505 echo "$pkg should be rebuilt after $i installation"
|
pascal@140
|
2506 done
|
pascal@76
|
2507 done
|
gokhlayeh@186
|
2508 ;;
|
pankso@7
|
2509 list)
|
paul@166
|
2510 # List packages in wok directory. User can specify a category.
|
pankso@7
|
2511 #
|
gokhlayeh@186
|
2512 get_tazwok_config
|
pankso@7
|
2513 if [ "$2" = "category" ]; then
|
pankso@7
|
2514 echo -e "\033[1m\nPackages categories :\033[0m $CATEGORIES\n"
|
pankso@7
|
2515 exit 0
|
pankso@7
|
2516 fi
|
pankso@7
|
2517 # Check for an asked category.
|
pankso@7
|
2518 if [ -n "$2" ]; then
|
pankso@7
|
2519 ASKED_CATEGORY=$2
|
pankso@7
|
2520 echo ""
|
pankso@7
|
2521 echo -e "\033[1mPackages in category :\033[0m $ASKED_CATEGORY"
|
pankso@7
|
2522 echo "================================================================================"
|
pankso@7
|
2523 for pkg in $WOK/*
|
pankso@7
|
2524 do
|
erjo@168
|
2525 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2526 . $pkg/receipt
|
pankso@7
|
2527 if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then
|
pankso@7
|
2528 echo -n "$PACKAGE"
|
pankso@28
|
2529 echo -e "\033[28G $VERSION"
|
pankso@7
|
2530 packages=$(($packages+1))
|
pankso@7
|
2531 fi
|
pankso@7
|
2532 done
|
pankso@7
|
2533 echo "================================================================================"
|
pankso@7
|
2534 echo -e "$packages packages in category $ASKED_CATEGORY.\n"
|
pankso@7
|
2535 else
|
pankso@7
|
2536 # By default list all packages and version.
|
pankso@7
|
2537 echo ""
|
pankso@7
|
2538 echo -e "\033[1mList of packages in the wok\033[0m"
|
pankso@7
|
2539 echo "================================================================================"
|
pankso@7
|
2540 for pkg in $WOK/*
|
pankso@7
|
2541 do
|
erjo@168
|
2542 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2543 . $pkg/receipt
|
pankso@7
|
2544 echo -n "$PACKAGE"
|
pankso@28
|
2545 echo -en "\033[28G $VERSION"
|
pankso@7
|
2546 echo -e "\033[42G $CATEGORY"
|
pankso@7
|
2547 packages=$(($packages+1))
|
pankso@7
|
2548 done
|
pankso@7
|
2549 echo "================================================================================"
|
MikeDSmith25@82
|
2550 echo -e "$packages packages available in the wok.\n"
|
pankso@7
|
2551 fi
|
pankso@7
|
2552 ;;
|
pankso@7
|
2553 info)
|
MikeDSmith25@82
|
2554 # Information about a package.
|
pankso@7
|
2555 #
|
gokhlayeh@186
|
2556 get_tazwok_config
|
pankso@7
|
2557 check_for_package_on_cmdline
|
pankso@7
|
2558 check_for_receipt
|
pankso@7
|
2559 . $WOK/$PACKAGE/receipt
|
pankso@7
|
2560 echo ""
|
MikeDSmith25@82
|
2561 echo -e "\033[1mTazwok package information\033[0m
|
pankso@7
|
2562 ================================================================================
|
pankso@7
|
2563 Package : $PACKAGE
|
pankso@7
|
2564 Version : $VERSION
|
pankso@7
|
2565 Category : $CATEGORY
|
pankso@7
|
2566 Short desc : $SHORT_DESC
|
pankso@7
|
2567 Maintainer : $MAINTAINER"
|
pankso@7
|
2568 if [ ! "$WEB_SITE" = "" ]; then
|
pankso@7
|
2569 echo "Web site : $WEB_SITE"
|
pankso@7
|
2570 fi
|
pankso@7
|
2571 if [ ! "$DEPENDS" = "" ]; then
|
pankso@7
|
2572 echo "Depends : $DEPENDS"
|
pankso@7
|
2573 fi
|
pankso@7
|
2574 if [ ! "$WANTED" = "" ]; then
|
pankso@7
|
2575 echo "Wanted src : $WANTED"
|
pankso@7
|
2576 fi
|
pankso@7
|
2577 echo "================================================================================"
|
pankso@7
|
2578 echo ""
|
gokhlayeh@186
|
2579 ;;
|
pankso@7
|
2580 check-log)
|
pankso@7
|
2581 # We just cat the file log to view process info.
|
pankso@7
|
2582 #
|
gokhlayeh@186
|
2583 get_tazwok_config
|
pankso@7
|
2584 if [ ! -f "$LOG" ]; then
|
gokhlayeh@186
|
2585 echo -e "\nNo process log found. The package is probably not cooked.\n" >&2
|
gokhlayeh@186
|
2586 exit 1
|
pankso@7
|
2587 else
|
pankso@7
|
2588 echo ""
|
pankso@7
|
2589 echo -e "\033[1mPackage process log for :\033[0m $PACKAGE"
|
pankso@7
|
2590 echo "================================================================================"
|
pankso@7
|
2591 cat $LOG
|
pankso@7
|
2592 echo "================================================================================"
|
pankso@7
|
2593 echo ""
|
gokhlayeh@237
|
2594 if [ -s "$WOK/$PACKAGE/warning.txt" ]; then
|
gokhlayeh@237
|
2595 echo -e "\033[1mCook warning(s) for :\033[0m $PACKAGE"
|
gokhlayeh@237
|
2596 echo "================================================================================"
|
gokhlayeh@237
|
2597 cat "$WOK/$PACKAGE/warning.txt"
|
gokhlayeh@237
|
2598 echo "================================================================================"
|
gokhlayeh@237
|
2599 echo ""
|
gokhlayeh@237
|
2600 fi
|
pankso@7
|
2601 fi
|
gokhlayeh@186
|
2602 ;;
|
pankso@7
|
2603 search)
|
pankso@7
|
2604 # Search for a package by pattern or name.
|
pankso@7
|
2605 #
|
gokhlayeh@186
|
2606 get_tazwok_config
|
pankso@7
|
2607 if [ -z "$2" ]; then
|
gokhlayeh@186
|
2608 echo -e "\nPlease specify a pattern or a package name to search." >&2
|
gokhlayeh@186
|
2609 echo -e "Example : 'tazwok search gcc'.\n" >&2
|
gokhlayeh@186
|
2610 exit 1
|
pankso@7
|
2611 fi
|
pankso@7
|
2612 echo ""
|
pankso@7
|
2613 echo -e "\033[1mSearch result for :\033[0m $2"
|
pankso@7
|
2614 echo "================================================================================"
|
gokhlayeh@195
|
2615 list=`ls -1 $WOK | fgrep $2`
|
pankso@7
|
2616 for pkg in $list
|
pankso@7
|
2617 do
|
pankso@7
|
2618 . $WOK/$pkg/receipt
|
pankso@7
|
2619 echo -n "$PACKAGE "
|
pankso@7
|
2620 echo -en "\033[24G $VERSION"
|
pankso@7
|
2621 echo -e "\033[42G $CATEGORY"
|
gokhlayeh@186
|
2622 packages=$(($PACKAGEs+1))
|
pankso@7
|
2623 done
|
pankso@7
|
2624 echo "================================================================================"
|
pankso@7
|
2625 echo "$packages packages found for : $2"
|
pankso@7
|
2626 echo ""
|
gokhlayeh@186
|
2627 ;;
|
pankso@7
|
2628 compile)
|
pankso@7
|
2629 # Configure and make a package with the receipt.
|
pankso@7
|
2630 #
|
gokhlayeh@186
|
2631 get_tazwok_config
|
gokhlayeh@186
|
2632 source_lib report
|
gokhlayeh@186
|
2633 report start
|
pankso@7
|
2634 compile_package
|
gokhlayeh@186
|
2635 ;;
|
pankso@7
|
2636 genpkg)
|
paul@121
|
2637 # Generate a package.
|
pankso@7
|
2638 #
|
gokhlayeh@186
|
2639 get_tazwok_config
|
gokhlayeh@186
|
2640 source_lib report
|
gokhlayeh@186
|
2641 report start
|
pankso@7
|
2642 gen_package
|
gokhlayeh@186
|
2643 ;;
|
pankso@7
|
2644 cook)
|
pankso@7
|
2645 # Compile and generate a package. Just execute tazwok with
|
pankso@7
|
2646 # the good commands.
|
pankso@7
|
2647 #
|
pankso@7
|
2648 check_root
|
gokhlayeh@186
|
2649 get_tazwok_config
|
gokhlayeh@186
|
2650 source_lib report
|
gokhlayeh@186
|
2651 report start
|
gokhlayeh@215
|
2652 update_wan_db
|
gokhlayeh@215
|
2653 check_for_commit
|
gokhlayeh@215
|
2654 [ "$plan_sort_depdb" ] && sort -o $dep_db $dep_db && unset plan_sort_depdb
|
gokhlayeh@215
|
2655 [ "$plan_sort_wandb" ] && sort -o $wan_db $wan_db && unset plan_sort_wandb
|
gokhlayeh@215
|
2656 if [ "$plan_regen_cookorder" ]; then
|
gokhlayeh@352
|
2657 [ "$(sed 1!d $PACKAGES_REPOSITORY/cookorder.txt)" = "#PlanSort" ] || \
|
gokhlayeh@215
|
2658 sed 1i"#PlanSort" -i $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@215
|
2659 fi
|
gokhlayeh@186
|
2660 cook
|
gokhlayeh@186
|
2661 ;;
|
gokhlayeh@186
|
2662 sort-cooklist)
|
gokhlayeh@297
|
2663 if [ ! -f "$LIST" ]; then
|
gokhlayeh@297
|
2664 echo "Usage : tazwok sort-cooklist cooklist" >&2
|
gokhlayeh@186
|
2665 exit 1
|
gokhlayeh@186
|
2666 fi
|
gokhlayeh@297
|
2667 check_root
|
gokhlayeh@186
|
2668 get_tazwok_config
|
gokhlayeh@297
|
2669 report(){ : ; }
|
gokhlayeh@297
|
2670 # When using sort-cooklist, the script should behave as for gen-cooklist
|
paul@430
|
2671 # The only difference between these two is where the output is sent.
|
gokhlayeh@297
|
2672 COMMAND=gen-cooklist
|
gokhlayeh@186
|
2673 cooklist=$LIST
|
gokhlayeh@297
|
2674 gen_cook_list
|
gokhlayeh@300
|
2675 cp -af $tmp/cooklist $cooklist
|
gokhlayeh@186
|
2676 ;;
|
pankso@7
|
2677 cook-list)
|
gokhlayeh@204
|
2678 # Cook all packages listed in a file or in default cooklist.
|
gokhlayeh@186
|
2679 check_root
|
gokhlayeh@204
|
2680 get_options_list="pkg forced"
|
gokhlayeh@186
|
2681 get_tazwok_config
|
gokhlayeh@186
|
2682 source_lib report
|
gokhlayeh@186
|
2683 report start
|
gokhlayeh@204
|
2684 if ! [ "$pkg" ]; then
|
gokhlayeh@204
|
2685 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
|
gokhlayeh@186
|
2686 fi
|
gokhlayeh@204
|
2687 gen_cook_list
|
gokhlayeh@186
|
2688 cook_list
|
gokhlayeh@186
|
2689 ;;
|
gokhlayeh@186
|
2690 clean)
|
paul@430
|
2691 # Clean up a package work directory + those which want it.
|
pankso@7
|
2692 #
|
gokhlayeh@186
|
2693 get_tazwok_config
|
pankso@7
|
2694 check_for_package_on_cmdline
|
pankso@7
|
2695 check_for_receipt
|
gokhlayeh@186
|
2696 source_lib report
|
gokhlayeh@186
|
2697 report start
|
pankso@7
|
2698 . $RECEIPT
|
gokhlayeh@186
|
2699 clean
|
gokhlayeh@186
|
2700 ;;
|
pankso@7
|
2701 gen-clean-wok)
|
paul@121
|
2702 # Generate a clean wok from the current wok by copying all receipts
|
pankso@7
|
2703 # and stuff directory.
|
pankso@7
|
2704 #
|
gokhlayeh@186
|
2705 get_tazwok_config
|
gokhlayeh@186
|
2706 source_lib report
|
gokhlayeh@186
|
2707 report start
|
gokhlayeh@186
|
2708 if [ -z "$ARG" ]; then
|
gokhlayeh@186
|
2709 echo -e "\nPlease specify the destination for the new clean wok.\n" >&2
|
gokhlayeh@186
|
2710 exit 1
|
pankso@7
|
2711 else
|
gokhlayeh@186
|
2712 dest=$ARG
|
pankso@7
|
2713 mkdir -p $dest
|
pankso@7
|
2714 fi
|
gokhlayeh@186
|
2715 report step "Creating clean wok in : $dest"
|
pankso@7
|
2716 for pkg in `ls -1 $WOK`
|
pankso@7
|
2717 do
|
pankso@7
|
2718 mkdir -p $dest/$pkg
|
pankso@7
|
2719 cp -a $WOK/$pkg/receipt $dest/$pkg
|
gokhlayeh@186
|
2720 [ -f $WOK/$pkg/description.txt ] && \
|
gokhlayeh@186
|
2721 cp -a $WOK/$pkg/description.txt $dest/$pkg
|
pankso@7
|
2722 if [ -d "$WOK/$pkg/stuff" ]; then
|
pankso@7
|
2723 cp -a $WOK/$pkg/stuff $dest/$pkg
|
pankso@7
|
2724 fi
|
pankso@7
|
2725 done
|
gokhlayeh@186
|
2726 [ -d $WOK/.hg ] && cp -a $WOK/.hg $dest
|
gokhlayeh@186
|
2727 report end-step
|
pankso@7
|
2728 echo "Packages cleaned : `ls -1 $dest | wc -l`"
|
pankso@7
|
2729 echo ""
|
gokhlayeh@186
|
2730 ;;
|
pankso@7
|
2731 clean-wok)
|
paul@430
|
2732 # Clean all packages in the work directory.
|
pankso@7
|
2733 #
|
gokhlayeh@186
|
2734 get_tazwok_config
|
gokhlayeh@186
|
2735 source_lib report
|
gokhlayeh@186
|
2736 report start
|
gokhlayeh@186
|
2737 report step "Cleaning wok"
|
gokhlayeh@186
|
2738 for PACKAGE in `ls -1 $WOK`
|
pankso@7
|
2739 do
|
gokhlayeh@186
|
2740 set_common_path
|
gokhlayeh@186
|
2741 source_receipt
|
gokhlayeh@186
|
2742 clean
|
pankso@7
|
2743 done
|
pankso@7
|
2744 echo "`ls -1 $WOK | wc -l` packages cleaned."
|
gokhlayeh@186
|
2745 ;;
|
gokhlayeh@266
|
2746 clean-src)
|
gokhlayeh@266
|
2747 # Remove tarball unrelated to wok receipts from src repo.
|
gokhlayeh@266
|
2748 check_root
|
gokhlayeh@266
|
2749 get_options_list="forced"
|
gokhlayeh@266
|
2750 get_tazwok_config
|
gokhlayeh@266
|
2751 cd $SOURCES_REPOSITORY
|
gokhlayeh@266
|
2752 echo -n "Checking $SOURCES_REPOSITORY..."
|
gokhlayeh@266
|
2753 for TARBALL in *; do
|
gokhlayeh@266
|
2754 [ "$TARBALL" = sources.list ] && continue
|
gokhlayeh@266
|
2755 grep -q $'\t'$TARBALL$ $SOURCES_REPOSITORY/sources.list || \
|
gokhlayeh@266
|
2756 echo $TARBALL >> $tmp/obsolete
|
gokhlayeh@266
|
2757 done
|
gokhlayeh@266
|
2758 status
|
slaxemulator@273
|
2759 if ! [ -f $tmp/obsolete ]; then
|
slaxemulator@273
|
2760 echo "No sources need to be removed."
|
slaxemulator@273
|
2761 exit 1
|
slaxemulator@273
|
2762 fi
|
gokhlayeh@266
|
2763 echo ""
|
paul@430
|
2764 echo -e "\033[1mObsolete/unrelated-to-wok sources :\033[0m"
|
gokhlayeh@266
|
2765 horizontal_line
|
gokhlayeh@266
|
2766 cat $tmp/obsolete
|
gokhlayeh@266
|
2767 horizontal_line
|
gokhlayeh@266
|
2768 echo "$(wc -l $tmp/obsolete | cut -f1 -d' ') tarballs to remove."
|
pankso@7
|
2769 echo ""
|
paul@430
|
2770 echo -n "Please confirm before removing (type uppercase YES): "
|
gokhlayeh@266
|
2771 read answer
|
gokhlayeh@266
|
2772 if [ "$answer" = YES ]; then
|
gokhlayeh@266
|
2773 echo -n "Removing old sources..."
|
gokhlayeh@266
|
2774 cat $tmp/obsolete | while read i; do
|
gokhlayeh@266
|
2775 rm -f $SOURCES_REPOSITORY/$i
|
gokhlayeh@266
|
2776 done
|
gokhlayeh@266
|
2777 status
|
gokhlayeh@266
|
2778 fi
|
gokhlayeh@266
|
2779 ;;
|
pankso@7
|
2780 gen-list)
|
gokhlayeh@186
|
2781 get_tazwok_config
|
gokhlayeh@204
|
2782 if [ "$2" ]; then
|
pankso@7
|
2783 if [ -d "$2" ]; then
|
gokhlayeh@204
|
2784 pkg_repository=$2
|
pankso@7
|
2785 else
|
gokhlayeh@204
|
2786 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@204
|
2787 exit 1
|
pankso@7
|
2788 fi
|
pankso@7
|
2789 fi
|
gokhlayeh@204
|
2790
|
gokhlayeh@186
|
2791 source_lib report
|
gokhlayeh@186
|
2792 report start
|
gokhlayeh@204
|
2793 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
2794 gen_packages_db
|
gokhlayeh@204
|
2795 else
|
gokhlayeh@204
|
2796 pkg_repository=$PACKAGES_REPOSITORY && gen_packages_db
|
gokhlayeh@204
|
2797 pkg_repository=$INCOMING_REPOSITORY && gen_packages_db
|
pankso@28
|
2798 fi
|
gokhlayeh@186
|
2799 ;;
|
gokhlayeh@186
|
2800 check-list)
|
gokhlayeh@186
|
2801 # The directory to move into by default is the repository,
|
gokhlayeh@186
|
2802 # if $2 is not empty cd into $2.
|
pascal@178
|
2803 #
|
gokhlayeh@186
|
2804 get_tazwok_config
|
gokhlayeh@204
|
2805 if [ "$2" ]; then
|
pascal@178
|
2806 if [ -d "$2" ]; then
|
gokhlayeh@204
|
2807 pkg_repository=$2
|
pascal@178
|
2808 else
|
gokhlayeh@186
|
2809 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@186
|
2810 exit 1
|
pascal@178
|
2811 fi
|
pascal@178
|
2812 fi
|
gokhlayeh@186
|
2813
|
gokhlayeh@186
|
2814 source_lib report
|
gokhlayeh@204
|
2815 report start
|
gokhlayeh@204
|
2816 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
2817 update_packages_db
|
gokhlayeh@204
|
2818 else
|
gokhlayeh@204
|
2819 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
2820 pkg_repository=$INCOMING_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
2821 fi
|
gokhlayeh@186
|
2822 ;;
|
pankso@7
|
2823 new-tree)
|
MikeDSmith25@82
|
2824 # Just create a few directories and generate an empty receipt to prepare
|
pankso@7
|
2825 # the creation of a new package.
|
pankso@7
|
2826 #
|
gokhlayeh@186
|
2827 get_tazwok_config
|
pankso@7
|
2828 check_for_package_on_cmdline
|
slaxemulator@362
|
2829 clean_wok=$LOCAL_REPOSITORY/clean-wok
|
slaxemulator@362
|
2830 if [ -d $clean_wok/$PACKAGE ]; then
|
gokhlayeh@186
|
2831 echo -e "\n$PACKAGE package tree already exists.\n" >&2
|
gokhlayeh@186
|
2832 exit 1
|
pankso@7
|
2833 fi
|
gokhlayeh@442
|
2834 echo "Creating : $clean_wok/$PACKAGE"
|
slaxemulator@362
|
2835 mkdir $clean_wok/$PACKAGE
|
slaxemulator@362
|
2836 cd $clean_wok/$PACKAGE
|
pankso@7
|
2837 echo -n "Preparing the receipt..."
|
pankso@7
|
2838 #
|
pankso@7
|
2839 # Default receipt begin.
|
pankso@7
|
2840 #
|
pankso@7
|
2841 echo "# SliTaz package receipt." > receipt
|
pankso@7
|
2842 echo "" >> receipt
|
pankso@7
|
2843 echo "PACKAGE=\"$PACKAGE\"" >> receipt
|
pankso@7
|
2844 # Finish the empty receipt.
|
pankso@7
|
2845 cat >> receipt << "EOF"
|
pankso@7
|
2846 VERSION=""
|
pankso@7
|
2847 CATEGORY=""
|
pankso@7
|
2848 SHORT_DESC=""
|
pankso@7
|
2849 MAINTAINER=""
|
pankso@7
|
2850 DEPENDS=""
|
pankso@7
|
2851 TARBALL="$PACKAGE-$VERSION.tar.gz"
|
pankso@7
|
2852 WEB_SITE=""
|
pankso@7
|
2853 WGET_URL=""
|
pankso@7
|
2854
|
pankso@7
|
2855 # Rules to configure and make the package.
|
pankso@7
|
2856 compile_rules()
|
pankso@7
|
2857 {
|
pankso@7
|
2858 cd $src
|
gokhlayeh@204
|
2859 ./configure && make && make install
|
pankso@7
|
2860 }
|
pankso@7
|
2861
|
pankso@7
|
2862 # Rules to gen a SliTaz package suitable for Tazpkg.
|
pankso@7
|
2863 genpkg_rules()
|
pankso@7
|
2864 {
|
pankso@7
|
2865 mkdir -p $fs/usr
|
pankso@7
|
2866 cp -a $_pkg/usr/bin $fs/usr
|
pankso@7
|
2867 }
|
pankso@7
|
2868
|
pankso@7
|
2869 EOF
|
pankso@7
|
2870 #
|
pankso@7
|
2871 # Default receipt end.
|
pankso@7
|
2872 #
|
pankso@7
|
2873 status
|
pankso@7
|
2874 # Interactive mode, asking and seding.
|
pankso@7
|
2875 if [ "$3" = "--interactive" ]; then
|
paul@430
|
2876 echo "Entering interactive mode..."
|
pankso@7
|
2877 echo "================================================================================"
|
pankso@7
|
2878 echo "Package : $PACKAGE"
|
pankso@7
|
2879 # Version.
|
pankso@7
|
2880 echo -n "Version : " ; read anser
|
pankso@7
|
2881 sed -i s/'VERSION=\"\"'/"VERSION=\"$anser\""/ receipt
|
pankso@7
|
2882 # Category.
|
pankso@7
|
2883 echo -n "Category : " ; read anser
|
pankso@7
|
2884 sed -i s/'CATEGORY=\"\"'/"CATEGORY=\"$anser\""/ receipt
|
pankso@7
|
2885 # Short description.
|
pankso@7
|
2886 echo -n "Short desc : " ; read anser
|
pankso@7
|
2887 sed -i s/'SHORT_DESC=\"\"'/"SHORT_DESC=\"$anser\""/ receipt
|
pankso@7
|
2888 # Maintainer.
|
pankso@7
|
2889 echo -n "Maintainer : " ; read anser
|
pankso@7
|
2890 sed -i s/'MAINTAINER=\"\"'/"MAINTAINER=\"$anser\""/ receipt
|
pankso@7
|
2891 # Web site.
|
pankso@7
|
2892 echo -n "Web site : " ; read anser
|
pankso@133
|
2893 sed -i s#'WEB_SITE=\"\"'#"WEB_SITE=\"$anser\""# receipt
|
pankso@7
|
2894 echo ""
|
pankso@7
|
2895 # Wget URL.
|
pankso@7
|
2896 echo "Wget URL to download source tarball."
|
pankso@7
|
2897 echo "Example : \$GNU_MIRROR/\$PACKAGE/\$TARBALL"
|
pankso@7
|
2898 echo -n "Wget url : " ; read anser
|
pankso@7
|
2899 sed -i s#'WGET_URL=\"\"'#"WGET_URL=\"$anser\""# receipt
|
pankso@7
|
2900 # Ask for a stuff dir.
|
pankso@7
|
2901 echo -n "Do you need a stuff directory ? (y/N) : " ; read anser
|
pankso@7
|
2902 if [ "$anser" = "y" ]; then
|
pankso@7
|
2903 echo -n "Creating the stuff directory..."
|
pankso@7
|
2904 mkdir stuff && status
|
pankso@7
|
2905 fi
|
pankso@7
|
2906 # Ask for a description file.
|
pankso@7
|
2907 echo -n "Are you going to write a description ? (y/N) : " ; read anser
|
pankso@7
|
2908 if [ "$anser" = "y" ]; then
|
pankso@7
|
2909 echo -n "Creating the description.txt file..."
|
pankso@7
|
2910 echo "" > description.txt && status
|
pankso@7
|
2911 fi
|
pankso@7
|
2912 echo "================================================================================"
|
pankso@7
|
2913 echo ""
|
pankso@7
|
2914 fi
|
gokhlayeh@186
|
2915 ;;
|
pankso@7
|
2916 remove)
|
pankso@7
|
2917 # Remove a package from the wok.
|
pankso@7
|
2918 #
|
gokhlayeh@186
|
2919 get_tazwok_config
|
pankso@7
|
2920 check_for_package_on_cmdline
|
pankso@7
|
2921 echo ""
|
pascal@83
|
2922 echo -n "Please confirm deletion (y/N) : "; read anser
|
pascal@83
|
2923 if [ "$anser" = "y" ]; then
|
pascal@83
|
2924 echo -n "Removing $PACKAGE..."
|
pascal@83
|
2925 rm -rf $WOK/$PACKAGE && status
|
pascal@83
|
2926 echo ""
|
pascal@83
|
2927 fi
|
gokhlayeh@186
|
2928 ;;
|
gokhlayeh@304
|
2929 update-wok)
|
paul@166
|
2930 # Pull and update a Hg wok.
|
gokhlayeh@304
|
2931 get_options_list="local"
|
gokhlayeh@186
|
2932 get_tazwok_config
|
gokhlayeh@309
|
2933 source_lib report
|
gokhlayeh@310
|
2934 report start
|
gokhlayeh@304
|
2935 clean_wok=$LOCAL_REPOSITORY/clean-wok
|
gokhlayeh@304
|
2936 cd $clean_wok
|
gokhlayeh@304
|
2937 if ! [ "$local" ]; then
|
gokhlayeh@304
|
2938 if [ "$WOK_UPDATE_METHOD" = hg ]; then
|
gokhlayeh@304
|
2939 if ! [ -f "$INSTALLED/mercurial/receipt" ]; then
|
gokhlayeh@304
|
2940
|
gokhlayeh@304
|
2941 # Auto-install only if we are in a cook chroot.
|
gokhlayeh@304
|
2942 if [ -x /usr/bin/clean-chroot ]; then
|
gokhlayeh@392
|
2943 tazpkg get-install mercurial
|
gokhlayeh@392
|
2944 else
|
gokhlayeh@304
|
2945 echo "" >&2
|
paul@430
|
2946 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
|
2947 echo "">&2
|
gokhlayeh@330
|
2948 exit 1
|
gokhlayeh@304
|
2949 fi
|
gokhlayeh@330
|
2950 fi
|
gokhlayeh@304
|
2951
|
gokhlayeh@330
|
2952 report step "Getting wok changes using hg"
|
gokhlayeh@330
|
2953 if [ -d .hg ]; then
|
gokhlayeh@330
|
2954 hg pull -u || exit 1
|
gokhlayeh@304
|
2955 else
|
gokhlayeh@330
|
2956 hg clone $HG_WOK . || exit 1
|
gokhlayeh@304
|
2957 fi
|
gokhlayeh@309
|
2958 report end-step
|
gokhlayeh@304
|
2959 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@304
|
2960 else
|
gokhlayeh@309
|
2961 report step "Getting wok changes using tarball"
|
gokhlayeh@304
|
2962 { mkdir .tmp && cd .tmp
|
gokhlayeh@304
|
2963 wget "$TARBALL_WOK" &&
|
gokhlayeh@304
|
2964 case $TARBALL_WOK in
|
gokhlayeh@304
|
2965 *bz2) tar xjf *.bz2 -C wok; rm *.bz2;;
|
gokhlayeh@304
|
2966 *lzma) unlzma -c *.lzma | tar xf - -C wok; rm *.lzma ;;
|
gokhlayeh@304
|
2967 *gz) tar xzf *.gz -C wok; rm*.gz ;;
|
gokhlayeh@304
|
2968 esac &&
|
gokhlayeh@304
|
2969 rm -r $(ls -d $clean_wok/*) &&
|
gokhlayeh@304
|
2970 cp -a wok/* $clean_wok &&
|
gokhlayeh@304
|
2971 cd .. &&
|
gokhlayeh@304
|
2972 rm -r .tmp
|
gokhlayeh@304
|
2973 } || { echo "That's not cool: it fails!" >&2
|
gokhlayeh@309
|
2974 report end-step
|
gokhlayeh@304
|
2975 exit 1; }
|
gokhlayeh@309
|
2976 report end-step
|
gokhlayeh@304
|
2977 fi
|
pankso@106
|
2978 fi
|
gokhlayeh@309
|
2979 report step "Appending changes to wok"
|
gokhlayeh@304
|
2980
|
gokhlayeh@308
|
2981 # Handle removed files/dir.
|
gokhlayeh@308
|
2982 cd $WOK
|
gokhlayeh@313
|
2983 for dir in *; do
|
slaxemulator@329
|
2984 [ -d "$clean_wok/$dir" ] || rm -rf $dir
|
gokhlayeh@308
|
2985 done
|
gokhlayeh@308
|
2986 for file in */receipt */description.txt; do
|
slaxemulator@329
|
2987 [ -f "$clean_wok/$file" ] || rm -rf $file
|
gokhlayeh@308
|
2988 done
|
gokhlayeh@330
|
2989 for i in $(find */stuff 2>/dev/null); do
|
slaxemulator@329
|
2990 [ -e "$clean_wok/$i" ] || rm -rf $i
|
gokhlayeh@304
|
2991 done
|
gokhlayeh@304
|
2992
|
gokhlayeh@308
|
2993 cp -a $clean_wok/* $WOK
|
gokhlayeh@309
|
2994 report end-step
|
gokhlayeh@186
|
2995 ;;
|
pankso@108
|
2996 maintainers)
|
gokhlayeh@186
|
2997 get_tazwok_config
|
pankso@108
|
2998 echo ""
|
pankso@108
|
2999 echo "List of maintainers for: $WOK"
|
pankso@108
|
3000 echo "================================================================================"
|
pankso@108
|
3001 touch /tmp/slitaz-maintainers
|
pankso@108
|
3002 for pkg in $WOK/*
|
pankso@108
|
3003 do
|
pankso@108
|
3004 . $pkg/receipt
|
gokhlayeh@195
|
3005 if ! fgrep -q "$MAINTAINER" /tmp/slitaz-maintainers; then
|
pankso@108
|
3006 echo "$MAINTAINER" >> /tmp/slitaz-maintainers
|
pankso@108
|
3007 echo "$MAINTAINER"
|
pankso@108
|
3008 fi
|
pankso@108
|
3009 done
|
pankso@108
|
3010 echo "================================================================================"
|
pankso@108
|
3011 echo "Maintainers: `cat /tmp/slitaz-maintainers | wc -l`"
|
pankso@108
|
3012 echo ""
|
pankso@108
|
3013 # Remove tmp files
|
gokhlayeh@186
|
3014 rm -f /tmp/slitaz-maintainers
|
gokhlayeh@186
|
3015 ;;
|
pankso@107
|
3016 maintained-by)
|
paul@166
|
3017 # Search for packages maintained by a contributor.
|
gokhlayeh@186
|
3018 get_tazwok_config
|
pankso@107
|
3019 if [ ! -n "$2" ]; then
|
gokhlayeh@186
|
3020 echo "Specify a name or email of a maintainer." >&2
|
gokhlayeh@186
|
3021 exit 1
|
pankso@107
|
3022 fi
|
pankso@107
|
3023 echo "Maintainer packages"
|
pankso@107
|
3024 echo "================================================================================"
|
pankso@107
|
3025 for pkg in $WOK/*
|
pankso@107
|
3026 do
|
pankso@107
|
3027 . $pkg/receipt
|
gokhlayeh@195
|
3028 if echo "$MAINTAINER" | fgrep -q "$2"; then
|
pankso@107
|
3029 echo "$PACKAGE"
|
gokhlayeh@186
|
3030 packages=$(($PACKAGEs+1))
|
pankso@107
|
3031 fi
|
pankso@107
|
3032 done
|
pankso@107
|
3033 echo "================================================================================"
|
gokhlayeh@186
|
3034 echo "Packages maintained by $2: $PACKAGEs"
|
gokhlayeh@186
|
3035 echo ""
|
gokhlayeh@186
|
3036 ;;
|
gokhlayeh@268
|
3037 tags)
|
gokhlayeh@268
|
3038 get_tazwok_config
|
gokhlayeh@268
|
3039 echo -e "\n\033[1mTags list :\033[0m"
|
gokhlayeh@268
|
3040 horizontal_line
|
gokhlayeh@268
|
3041 cd $WOK
|
gokhlayeh@268
|
3042 for i in */receipt; do
|
gokhlayeh@268
|
3043 unset TAGS
|
gokhlayeh@268
|
3044 source $i
|
gokhlayeh@268
|
3045 for t in $TAGS; do
|
gokhlayeh@268
|
3046 grep -q ^$t$ $tmp/tags && continue
|
gokhlayeh@268
|
3047 echo $t | tee -a $tmp/tags
|
gokhlayeh@268
|
3048 done
|
gokhlayeh@268
|
3049 done
|
gokhlayeh@268
|
3050 horizontal_line
|
gokhlayeh@268
|
3051 echo "$(wc -l $tmp/tags | cut -f1 -d ' ') tags listed."
|
gokhlayeh@268
|
3052 ;;
|
erjo@159
|
3053 check-src)
|
paul@430
|
3054 # Verify if upstream package is still available.
|
erjo@159
|
3055 #
|
gokhlayeh@186
|
3056 get_tazwok_config
|
erjo@159
|
3057 check_for_package_on_cmdline
|
erjo@159
|
3058 check_for_receipt
|
gokhlayeh@186
|
3059 source_receipt
|
erjo@159
|
3060 check_src()
|
erjo@159
|
3061 {
|
erjo@159
|
3062 for url in $@; do
|
pascal@178
|
3063 busybox wget -s $url 2>/dev/null && break
|
erjo@159
|
3064 done
|
erjo@159
|
3065 }
|
gokhlayeh@186
|
3066 if [ "$WGET_URL" ];then
|
erjo@159
|
3067 echo -n "$PACKAGE : "
|
erjo@159
|
3068 check_src $WGET_URL
|
erjo@159
|
3069 status
|
erjo@159
|
3070 else
|
erjo@159
|
3071 echo "No tarball to check for $PACKAGE"
|
erjo@159
|
3072 fi
|
gokhlayeh@186
|
3073 ;;
|
gokhlayeh@186
|
3074 get-src)
|
gokhlayeh@186
|
3075 check_root
|
gokhlayeh@225
|
3076 get_options_list="target nounpack"
|
gokhlayeh@186
|
3077 get_tazwok_config
|
gokhlayeh@186
|
3078 check_for_package_on_cmdline
|
gokhlayeh@186
|
3079 check_for_receipt
|
gokhlayeh@186
|
3080 source_receipt
|
gokhlayeh@186
|
3081 if [ "$WGET_URL" ];then
|
gokhlayeh@186
|
3082 source_lib report
|
gokhlayeh@186
|
3083 report start
|
gokhlayeh@225
|
3084 check_for_tarball
|
gokhlayeh@186
|
3085 else
|
gokhlayeh@186
|
3086 echo "No tarball to download for $PACKAGE"
|
gokhlayeh@186
|
3087 fi
|
gokhlayeh@186
|
3088 ;;
|
gokhlayeh@204
|
3089 check-commit)
|
gokhlayeh@186
|
3090 check_root
|
gokhlayeh@204
|
3091 get_options_list="missing forced"
|
gokhlayeh@186
|
3092 get_tazwok_config
|
gokhlayeh@186
|
3093 source_lib report
|
gokhlayeh@186
|
3094 report start
|
gokhlayeh@204
|
3095 if [ "$forced" ]; then
|
gokhlayeh@204
|
3096 rm -f $WOK/*/md5
|
gokhlayeh@204
|
3097 unset forced
|
gokhlayeh@204
|
3098 fi
|
gokhlayeh@204
|
3099 if [ "$missing" ]; then
|
gokhlayeh@204
|
3100 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3101 else
|
gokhlayeh@204
|
3102 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3103 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3104 } | sort -u)"
|
gokhlayeh@204
|
3105 fi
|
gokhlayeh@204
|
3106 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
3107 gen_cook_list
|
gokhlayeh@186
|
3108 ;;
|
gokhlayeh@186
|
3109 cook-commit)
|
gokhlayeh@186
|
3110 check_root
|
gokhlayeh@204
|
3111 get_options_list="missing forced"
|
gokhlayeh@186
|
3112 get_tazwok_config
|
gokhlayeh@186
|
3113 source_lib report
|
gokhlayeh@186
|
3114 report start
|
gokhlayeh@204
|
3115 if [ "$forced" ]; then
|
gokhlayeh@204
|
3116 rm -f $WOK/*/md5
|
gokhlayeh@204
|
3117 unset forced
|
gokhlayeh@204
|
3118 fi
|
gokhlayeh@204
|
3119 if [ "$missing" ]; then
|
gokhlayeh@204
|
3120 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3121 else
|
gokhlayeh@204
|
3122 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3123 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3124 } | sort -u)"
|
gokhlayeh@204
|
3125 fi
|
gokhlayeh@204
|
3126 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
3127 gen_cook_list
|
gokhlayeh@186
|
3128 cook_list
|
gokhlayeh@186
|
3129 ;;
|
gokhlayeh@186
|
3130 cook-all)
|
gokhlayeh@186
|
3131 check_root
|
gokhlayeh@204
|
3132 get_options_list="forced missing"
|
gokhlayeh@186
|
3133 get_tazwok_config
|
gokhlayeh@186
|
3134 source_lib report
|
gokhlayeh@186
|
3135 report start
|
gokhlayeh@204
|
3136 if [ "$missing" ]; then
|
gokhlayeh@204
|
3137 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3138 else
|
gokhlayeh@204
|
3139 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3140 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3141 } | sort -u)"
|
gokhlayeh@204
|
3142 fi
|
gokhlayeh@204
|
3143 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@204
|
3144 gen_cook_list
|
gokhlayeh@186
|
3145 cook_list
|
gokhlayeh@186
|
3146 ;;
|
gokhlayeh@186
|
3147 gen-wok-db)
|
gokhlayeh@186
|
3148 check_root
|
gokhlayeh@186
|
3149 get_tazwok_config
|
gokhlayeh@186
|
3150 source_lib report
|
gokhlayeh@186
|
3151 report start
|
gokhlayeh@204
|
3152 gen_wok_db
|
gokhlayeh@186
|
3153 ;;
|
gokhlayeh@186
|
3154 report)
|
gokhlayeh@186
|
3155 get_tazwok_config
|
gokhlayeh@186
|
3156 cd $PACKAGES_REPOSITORY
|
gokhlayeh@239
|
3157 if [ "$2" ]; then
|
gokhlayeh@239
|
3158 case $2 in
|
gokhlayeh@239
|
3159 commit|cooklist|incoming|broken|blocked)
|
gokhlayeh@239
|
3160 show="$2"
|
gokhlayeh@239
|
3161 ;;
|
gokhlayeh@239
|
3162 *)
|
gokhlayeh@239
|
3163 echo "usage : tazwok report [commit|cooklist|incoming|broken|blocked]" >&2
|
gokhlayeh@239
|
3164 exit 1
|
gokhlayeh@239
|
3165 ;;
|
gokhlayeh@239
|
3166 esac
|
gokhlayeh@239
|
3167 else
|
gokhlayeh@239
|
3168 show="commit cooklist incoming broken blocked"
|
gokhlayeh@239
|
3169 fi
|
gokhlayeh@239
|
3170 for i in $show; do
|
gokhlayeh@186
|
3171 if [ -s $i ]; then
|
gokhlayeh@239
|
3172 echo ""
|
gokhlayeh@239
|
3173 echo -e "\033[1m$i\033[0m"
|
gokhlayeh@239
|
3174 echo "================================================================================"
|
gokhlayeh@239
|
3175 cat $i
|
gokhlayeh@239
|
3176 echo "================================================================================"
|
gokhlayeh@239
|
3177 echo ""
|
gokhlayeh@186
|
3178 fi
|
gokhlayeh@186
|
3179 done
|
gokhlayeh@186
|
3180 ;;
|
gokhlayeh@186
|
3181 check-incoming)
|
gokhlayeh@186
|
3182 check_root
|
gokhlayeh@214
|
3183 get_options_list="forced"
|
gokhlayeh@186
|
3184 get_tazwok_config
|
gokhlayeh@186
|
3185 source_lib report
|
gokhlayeh@186
|
3186 report start
|
gokhlayeh@307
|
3187 [ -f $LOCAL_RESOSITORY/incoming ] && rm [ -f $LOCAL_REPOSITORY/incoming ]
|
gokhlayeh@307
|
3188 report step "Checking $INCOMING_REPOSITORY"
|
gokhlayeh@307
|
3189 report open-bloc
|
gokhlayeh@313
|
3190 [ -f $LOCAL_REPOSITORY/log/incoming.html ] && rm $LOCAL_REPOSITORY/log/incoming.html
|
gokhlayeh@307
|
3191 report sublog $LOCAL_REPOSITORY/log/incoming.html
|
gokhlayeh@352
|
3192 echo "incoming" > $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
3193 check_for_incoming
|
gokhlayeh@307
|
3194 report end-sublog
|
gokhlayeh@307
|
3195 report close-bloc
|
gokhlayeh@186
|
3196 ;;
|
gokhlayeh@190
|
3197 configure-chroot)
|
gokhlayeh@190
|
3198 check_root
|
gokhlayeh@190
|
3199 get_tazwok_config
|
gokhlayeh@190
|
3200 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@190
|
3201 cd $LOCAL_REPOSITORY
|
gokhlayeh@190
|
3202 configure_tazchroot
|
gokhlayeh@190
|
3203 else
|
paul@430
|
3204 echo "The package tazchroot needs to be installed" >&2
|
gokhlayeh@190
|
3205 exit 1
|
gokhlayeh@190
|
3206 fi
|
gokhlayeh@190
|
3207 ;;
|
gokhlayeh@186
|
3208 chroot)
|
gokhlayeh@186
|
3209 check_root
|
gokhlayeh@186
|
3210 get_tazwok_config
|
gokhlayeh@186
|
3211 # Merge this and the other chroot function ?.
|
gokhlayeh@186
|
3212 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
3213 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
3214 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
3215 tazchroot
|
gokhlayeh@186
|
3216 else
|
paul@430
|
3217 echo "The package tazchroot needs to be installed" >&2
|
gokhlayeh@186
|
3218 exit 1
|
gokhlayeh@186
|
3219 fi
|
gokhlayeh@186
|
3220 ;;
|
gokhlayeh@186
|
3221 cook-toolchain)
|
gokhlayeh@186
|
3222 check_root
|
gokhlayeh@186
|
3223 get_tazwok_config
|
gokhlayeh@186
|
3224 echo -n "" > $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
3225 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
3226 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
3227 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
3228 tazchroot cook-toolchain
|
gokhlayeh@186
|
3229 # Buggy : chroot can be elsewhere.
|
gokhlayeh@186
|
3230 rm -r $LOCAL_REPOSITORY/chroot
|
paul@430
|
3231 # /!\ to be written :
|
gokhlayeh@186
|
3232 # next rm chroot and plan cook-all by pushing all packages
|
gokhlayeh@186
|
3233 # in cooklist.
|
gokhlayeh@186
|
3234 else
|
paul@430
|
3235 echo "The package tazchroot needs to be installed" >&2
|
gokhlayeh@186
|
3236 exit 1
|
gokhlayeh@186
|
3237 fi
|
gokhlayeh@186
|
3238 ;;
|
gokhlayeh@235
|
3239 webserver)
|
gokhlayeh@235
|
3240 check_root
|
gokhlayeh@235
|
3241 get_tazwok_config
|
gokhlayeh@235
|
3242 if [ "$ARG" = on ]; then
|
gokhlayeh@235
|
3243 if [ "$WEBSERVER" ] && [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3244 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3245 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3246 exit 1
|
gokhlayeh@235
|
3247 fi
|
gokhlayeh@235
|
3248 if ! [ -f $LOCAL_REPOSITORY/tazchroot.conf ]; then
|
gokhlayeh@235
|
3249 tazwok configure-chroot ${undigest:+--undigest=$undigest} --SLITAZ_VERSION=$SLITAZ_VERSION --SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@235
|
3250 fi
|
gokhlayeh@235
|
3251 for pkg in php lighttpd; do
|
gokhlayeh@235
|
3252 [ -d $INSTALLED/$pkg ] || missing="$missing $pkg"
|
gokhlayeh@235
|
3253 done
|
gokhlayeh@235
|
3254 if [ "$missing" ]; then
|
paul@430
|
3255 echo "You need to install these packages to start webserver: $missing." >&2
|
gokhlayeh@235
|
3256 exit 1
|
gokhlayeh@235
|
3257 fi
|
gokhlayeh@235
|
3258 if [ ! -f "$LOCAL_REPOSITORY/tazwok.conf" ]; then
|
gokhlayeh@235
|
3259 echo "Copying /etc/slitaz/tazwok.conf to $LOCAL_REPOSITORY/tazwok.conf: webserver is configured repository-by-repository."
|
gokhlayeh@235
|
3260 cp /etc/slitaz/tazwok.conf $LOCAL_REPOSITORY
|
gokhlayeh@235
|
3261 fi
|
gokhlayeh@235
|
3262 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3263 echo -n "Where to store php pages (default: /var/www/vhosts/bb)? "
|
gokhlayeh@235
|
3264 read WEBSERVER
|
gokhlayeh@235
|
3265 [ "$WEBSERVER" ] || WEBSERVER="/var/www/vhosts/bb"
|
gokhlayeh@235
|
3266 fi
|
gokhlayeh@235
|
3267 if [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3268 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3269 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3270 exit 1
|
gokhlayeh@235
|
3271 fi
|
gokhlayeh@235
|
3272 mkdir -p $WEBSERVER
|
gokhlayeh@235
|
3273 echo "${undigest:-$SLITAZ_VERSION}" >> $WEBSERVER/repositories.list
|
gokhlayeh@267
|
3274 for file in index.php log.php download.php; do
|
gokhlayeh@235
|
3275 [ -f "$WEBSERVER/$file" ] || ln -s /usr/share/slitaz/web-bb/$file $WEBSERVER
|
gokhlayeh@235
|
3276 done
|
gokhlayeh@267
|
3277 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3278 ln -s $dir $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3279 done
|
gokhlayeh@235
|
3280 source $LOCAL_REPOSITORY/tazchroot.conf
|
gokhlayeh@235
|
3281 echo "<?php
|
gokhlayeh@235
|
3282
|
gokhlayeh@235
|
3283 // Web interface configuration
|
gokhlayeh@235
|
3284
|
gokhlayeh@235
|
3285 \$version=\"${undigest:-$SLITAZ_VERSION}\";
|
gokhlayeh@235
|
3286 \$chroot=\"$chroot_dir\";
|
pascal@360
|
3287 \$lockfile=\"\$chroot/proc/1/status\";
|
gokhlayeh@235
|
3288 \$db_dir=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3289 \$log_dir=\"$LOCAL_REPOSITORY/log\";
|
gokhlayeh@235
|
3290 \$packages=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3291 \$incoming=\"$INCOMING_REPOSITORY\";
|
gokhlayeh@251
|
3292 \$wok=\"$WOK\";
|
gokhlayeh@235
|
3293
|
gokhlayeh@235
|
3294 ?>" > $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@235
|
3295 [ -L "$WEBSERVER/web" ] || ln -s /usr/share/slitaz/web $WEBSERVER
|
gokhlayeh@235
|
3296 echo "WEBSERVER=\"$WEBSERVER\"" >> $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3297 if [ -L "$WEBSERVER/conf.php" ]; then
|
paul@430
|
3298 echo "Do you want to make ${undigest:-$SLITAZ_VERSION} the default page (y/N) ? "
|
gokhlayeh@235
|
3299 read answer
|
gokhlayeh@235
|
3300 if [ "$answer" = y ]; then
|
gokhlayeh@235
|
3301 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3302 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3303 fi
|
gokhlayeh@235
|
3304 else
|
gokhlayeh@235
|
3305 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3306 fi
|
gokhlayeh@235
|
3307 elif [ "$ARG" = off ]; then
|
gokhlayeh@235
|
3308 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3309 echo "No webserver running for ${undigest:-$SLITAZ_VERSION}" >&2
|
gokhlayeh@235
|
3310 exit 1
|
gokhlayeh@235
|
3311 fi
|
gokhlayeh@235
|
3312 sed '/^WEBSERVER/d' -i $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3313 sed "/^${undigest:-$SLITAZ_VERSION}$/d" -i $WEBSERVER/repositories.list
|
gokhlayeh@235
|
3314 rm $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@267
|
3315 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3316 rm $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3317 done
|
gokhlayeh@235
|
3318 if ! [ -s "$WEBSERVER/repositories.list" ]; then
|
paul@430
|
3319 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
|
3320 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3321 elif [ "$(readlink $WEBSERVER/conf.php)" = "$WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php" ]; then
|
gokhlayeh@235
|
3322 echo "${undigest:-$SLITAZ_VERSION} was the default version to use; switched to : $(sed 1!d $WEBSERVER/repositories.list)"
|
gokhlayeh@235
|
3323 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3324 ln -s $WEBSERVER/conf-$(sed 1!d $WEBSERVER/repositories.list).php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3325 fi
|
gokhlayeh@235
|
3326 else
|
gokhlayeh@235
|
3327 echo "Usage: tazwok webserver on/off" >&2
|
gokhlayeh@235
|
3328 exit 1
|
gokhlayeh@235
|
3329 fi
|
gokhlayeh@235
|
3330 ;;
|
pankso@354
|
3331 block)
|
pankso@354
|
3332 # Add a pkg name to the list of blocked packages.
|
gokhlayeh@367
|
3333 get_tazwok_config
|
gokhlayeh@367
|
3334 check_root
|
gokhlayeh@367
|
3335 check_for_package_on_cmdline
|
gokhlayeh@367
|
3336 if ! [ -f $WOK/$PACKAGE/receipt ]; then
|
paul@430
|
3337 echo "Can't find $PACKAGE in wok." >&2
|
gokhlayeh@367
|
3338 echo ""
|
gokhlayeh@367
|
3339 exit 1
|
gokhlayeh@367
|
3340 fi
|
pankso@354
|
3341 echo ""
|
gokhlayeh@367
|
3342 if grep -qs "^$PACKAGE$" $PACKAGES_REPOSITORY/blocked; then
|
gokhlayeh@367
|
3343 echo "$PACKAGE is already in the blocked packages list." >&2
|
gokhlayeh@367
|
3344 echo ""
|
gokhlayeh@367
|
3345 exit 1
|
pankso@354
|
3346 else
|
gokhlayeh@367
|
3347 echo -n "Adding $PACKAGE to : $PACKAGES_REPOSITORY/blocked... "
|
gokhlayeh@367
|
3348 echo "$PACKAGE" >> $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@367
|
3349 status
|
gokhlayeh@367
|
3350 if grep -q "^$PACKAGE$" $PACKAGES_REPOSITORY/cooklist; then
|
gokhlayeh@367
|
3351 echo -n "Removing $PACKAGE from : $PACKAGES_REPOSITORY/cooklist... "
|
gokhlayeh@367
|
3352 sed -i /"^$PACKAGE$"/d $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@367
|
3353 status
|
pankso@354
|
3354 fi
|
pankso@354
|
3355 fi
|
pankso@354
|
3356 echo "" ;;
|
pankso@354
|
3357 unblock)
|
pankso@354
|
3358 # Remove a pkg name from the list of blocked packages.
|
gokhlayeh@367
|
3359 get_tazwok_config
|
gokhlayeh@367
|
3360 check_root
|
gokhlayeh@367
|
3361 check_for_package_on_cmdline
|
gokhlayeh@367
|
3362 if ! [ -f $WOK/$PACKAGE/receipt ]; then
|
paul@430
|
3363 echo "Can't find $PACKAGE in wok." >&2
|
gokhlayeh@367
|
3364 echo ""
|
gokhlayeh@367
|
3365 exit 1
|
gokhlayeh@367
|
3366 fi
|
pankso@354
|
3367 echo ""
|
gokhlayeh@367
|
3368 if grep -qs "^$PACKAGE$" $PACKAGES_REPOSITORY/blocked; then
|
gokhlayeh@367
|
3369 echo -n "Removing $PACKAGE from : $PACKAGES_REPOSITORY/blocked... "
|
gokhlayeh@367
|
3370 sed -i /"^$PACKAGE$"/d $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@367
|
3371 sed -i '/^$/d' $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@367
|
3372 status
|
pankso@354
|
3373 else
|
gokhlayeh@367
|
3374 echo "$PACKAGE is not in the blocked packages list." >&2
|
gokhlayeh@367
|
3375 echo ""
|
gokhlayeh@367
|
3376 exit 1
|
pankso@354
|
3377 fi
|
pankso@354
|
3378 echo "" ;;
|
pankso@7
|
3379 usage|*)
|
MikeDSmith25@82
|
3380 # Print usage also for all unknown commands.
|
pankso@7
|
3381 #
|
pankso@7
|
3382 usage
|
gokhlayeh@186
|
3383 ;;
|
pankso@7
|
3384 esac
|
pankso@7
|
3385
|
gokhlayeh@313
|
3386 report stop 2>/dev/null
|
pankso@7
|
3387 exit 0
|