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