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