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