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