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