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