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