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