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@204
|
1894 [ -s $INCOMING_REPOSITORY/packages.desc ] || {
|
gokhlayeh@204
|
1895 echo "No packages in $INCOMING_REPOSITORY."
|
gokhlayeh@204
|
1896 return; }
|
gokhlayeh@204
|
1897 if [ -s $PACKAGES_REPOSITORY/broken ]; then
|
gokhlayeh@290
|
1898 missingpkg=$(look_for_missing_pkg broken)
|
gokhlayeh@290
|
1899 if [ "$missingpkg" ]; then
|
gokhlayeh@290
|
1900 echo "Don't move incoming packages to main repository because theses ones are broken:" >&2
|
gokhlayeh@290
|
1901 echo "$missingpkg"
|
gokhlayeh@290
|
1902 return 1
|
gokhlayeh@290
|
1903 fi
|
gokhlayeh@186
|
1904 fi
|
gokhlayeh@204
|
1905 if [ -s $PACKAGES_REPOSITORY/cooklist ]; then
|
gokhlayeh@290
|
1906 missingpkg=$(look_for_missing_pkg cooklist)
|
gokhlayeh@290
|
1907 if [ "$missingpkg" ]; then
|
gokhlayeh@290
|
1908 echo "Don't move incoming packages to main repository because theses ones needs to be cooked:" >&2
|
gokhlayeh@290
|
1909 echo "$missingpkg"
|
gokhlayeh@290
|
1910 return 1
|
gokhlayeh@290
|
1911 fi
|
gokhlayeh@204
|
1912 fi
|
gokhlayeh@215
|
1913 pkg="$(cut -f 1 -d '|' $INCOMING_REPOSITORY/packages.desc)"
|
gokhlayeh@214
|
1914 if ! [ "$forced" ]; then
|
gokhlayeh@214
|
1915 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@214
|
1916 gen_cook_list
|
gokhlayeh@214
|
1917 if [ -s $PACKAGES_REPOSITORY/cooklist ]; then
|
gokhlayeh@290
|
1918 missingpkg=$(look_for_missing_pkg cooklist)
|
gokhlayeh@290
|
1919 if [ "$missingpkg" ]; then
|
gokhlayeh@290
|
1920 echo "Don't move incoming packages to main repository because theses ones needs to be cooked:" >&2
|
gokhlayeh@290
|
1921 echo "$missingpkg"
|
gokhlayeh@290
|
1922 return 1
|
gokhlayeh@290
|
1923 fi
|
gokhlayeh@214
|
1924 fi
|
gokhlayeh@204
|
1925 fi
|
gokhlayeh@204
|
1926 report step "Moving incoming packages to main repository"
|
gokhlayeh@204
|
1927 unset EXTRAVERSION
|
gokhlayeh@215
|
1928 for PACKAGE in $pkg; do
|
gokhlayeh@186
|
1929 prev_VERSION=$(get_pkg_version $PACKAGES_REPOSITORY)
|
gokhlayeh@204
|
1930 VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
|
gokhlayeh@186
|
1931 remove_previous_package $PACKAGES_REPOSITORY
|
gokhlayeh@204
|
1932 echo "Moving $PACKAGE..."
|
gokhlayeh@204
|
1933 mv -f $INCOMING_REPOSITORY/$PACKAGE-$VERSION.tazpkg $PACKAGES_REPOSITORY
|
gokhlayeh@204
|
1934 touch $PACKAGES_REPOSITORY/$PACKAGE-$VERSION.tazpkg
|
gokhlayeh@266
|
1935 previous_tarball=$(grep ^$PACKAGE:main $SOURCES_REPOSITORY/sources.list | cut -f2)
|
gokhlayeh@266
|
1936 sed -e "/^$PACKAGE:main/d" \
|
slaxemulator@275
|
1937 -e "s/^$PACKAGE:incoming/$PACKAGE:main/" \
|
gokhlayeh@266
|
1938 -i $SOURCES_REPOSITORY/sources.list
|
gokhlayeh@266
|
1939 if [ "$previous_tarball" ]; then
|
gokhlayeh@266
|
1940 grep -q $'\t'$previous_tarball$ $SOURCES_REPOSITORY/sources.list || \
|
gokhlayeh@266
|
1941 rm -f $SOURCES_REPOSITORY/$previous_tarball
|
gokhlayeh@266
|
1942 fi
|
gokhlayeh@204
|
1943 done
|
gokhlayeh@204
|
1944 report end-step
|
gokhlayeh@204
|
1945 for file in packages.list packages.equiv packages.md5 packages.desc \
|
gokhlayeh@204
|
1946 packages.txt; do
|
gokhlayeh@204
|
1947 echo -n "" > $INCOMING_REPOSITORY/$file
|
gokhlayeh@204
|
1948 done
|
gokhlayeh@204
|
1949 rm -r $INCOMING_REPOSITORY/files.list.lzma
|
gokhlayeh@186
|
1950 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@186
|
1951 }
|
gokhlayeh@186
|
1952
|
gokhlayeh@186
|
1953 ########################################################################
|
gokhlayeh@186
|
1954 # TAZWOK MAIN FUNCTIONS
|
gokhlayeh@186
|
1955 ########################
|
gokhlayeh@186
|
1956
|
gokhlayeh@186
|
1957 clean()
|
gokhlayeh@186
|
1958 {
|
gokhlayeh@186
|
1959 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1960 ls -A $WOK/$PACKAGE | grep -q -v -e ^receipt$ -e ^description.txt$ \
|
gokhlayeh@186
|
1961 -e ^stuff$ || return
|
gokhlayeh@186
|
1962
|
gokhlayeh@249
|
1963 [ "$COMMAND" = clean-wok ] || report step "Cleaning $PACKAGE"
|
gokhlayeh@186
|
1964 # Check for clean_wok function.
|
gokhlayeh@186
|
1965 if grep -q ^clean_wok $RECEIPT; then
|
gokhlayeh@186
|
1966 clean_wok
|
gokhlayeh@186
|
1967 fi
|
gokhlayeh@186
|
1968 # Clean should only have a receipt, stuff and optional desc.
|
gokhlayeh@186
|
1969 for f in `ls .`
|
gokhlayeh@186
|
1970 do
|
gokhlayeh@186
|
1971 case $f in
|
gokhlayeh@250
|
1972 receipt|stuff|description.txt|md5)
|
gokhlayeh@186
|
1973 continue ;;
|
gokhlayeh@186
|
1974 *)
|
gokhlayeh@263
|
1975 rm -rf $f ;;
|
gokhlayeh@186
|
1976 esac
|
gokhlayeh@186
|
1977 done
|
gokhlayeh@262
|
1978 [ "$COMMAND" != clean-wok ] && report end-step
|
gokhlayeh@186
|
1979 }
|
gokhlayeh@186
|
1980
|
gokhlayeh@186
|
1981 # Configure and make a package with the receipt.
|
gokhlayeh@186
|
1982 compile_package()
|
gokhlayeh@186
|
1983 {
|
gokhlayeh@186
|
1984 check_for_package_on_cmdline
|
gokhlayeh@186
|
1985
|
gokhlayeh@186
|
1986 # Include the receipt to get all needed variables and functions
|
gokhlayeh@186
|
1987 # and cd into the work directory to start the work.
|
gokhlayeh@186
|
1988 check_for_receipt
|
gokhlayeh@186
|
1989 source_receipt
|
gokhlayeh@186
|
1990
|
gokhlayeh@186
|
1991 # Log the package name and date.
|
gokhlayeh@186
|
1992 echo "date `date +%Y%m%d\ \%H:%M:%S`" >> $LOG
|
gokhlayeh@186
|
1993 echo "package $PACKAGE (compile)" >> $LOG
|
gokhlayeh@186
|
1994
|
gokhlayeh@186
|
1995 # Set wanted $src variable to help compiling.
|
gokhlayeh@186
|
1996 [ ! "$src" ] && set_src_path
|
gokhlayeh@186
|
1997 check_for_build_depends || return 1
|
gokhlayeh@186
|
1998 check_for_wanted
|
gokhlayeh@186
|
1999 unset target
|
gokhlayeh@186
|
2000 check_for_tarball && check_for_compile_rules
|
gokhlayeh@186
|
2001 }
|
gokhlayeh@186
|
2002
|
gokhlayeh@186
|
2003 # Cook command also include all features to manage lists which keep
|
gokhlayeh@186
|
2004 # track of wok/packages state.
|
gokhlayeh@186
|
2005 cook()
|
gokhlayeh@186
|
2006 {
|
gokhlayeh@186
|
2007 cook_code=
|
gokhlayeh@186
|
2008 set_common_path
|
gokhlayeh@186
|
2009 check_for_receipt
|
gokhlayeh@186
|
2010 source_receipt
|
gokhlayeh@186
|
2011
|
gokhlayeh@186
|
2012 # Define log path and start report.
|
gokhlayeh@186
|
2013 [ -f $LOCAL_REPOSITORY/log/$PACKAGE.html ] && rm $LOCAL_REPOSITORY/log/$PACKAGE.html
|
gokhlayeh@186
|
2014 report sublog $LOCAL_REPOSITORY/log/$PACKAGE.html
|
gokhlayeh@186
|
2015 report step "Cooking $PACKAGE"
|
gokhlayeh@186
|
2016 report open-bloc
|
gokhlayeh@186
|
2017
|
gokhlayeh@186
|
2018 clean $PACKAGE
|
gokhlayeh@186
|
2019 [ -s $tmp/cooklist ] && sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@186
|
2020
|
gokhlayeh@186
|
2021 if compile_package; then
|
gokhlayeh@215
|
2022 remove_src
|
gokhlayeh@186
|
2023 refresh_packages_from_compile
|
gokhlayeh@186
|
2024 gen_package
|
gokhlayeh@186
|
2025
|
gokhlayeh@186
|
2026 # Update packages-incoming repository.
|
gokhlayeh@186
|
2027 store_pkgname=$PACKAGE
|
gokhlayeh@186
|
2028 pkg_repository=$INCOMING_REPOSITORY
|
gokhlayeh@186
|
2029 update_packages_db
|
gokhlayeh@186
|
2030
|
gokhlayeh@186
|
2031 PACKAGE=$store_pkgname
|
gokhlayeh@186
|
2032 unset store_pkgname
|
gokhlayeh@186
|
2033
|
gokhlayeh@186
|
2034 # Upgrade to cooked packages if it was previously installed.
|
gokhlayeh@186
|
2035 report step "Look for package(s) to upgrade"
|
gokhlayeh@186
|
2036 for pkg in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@186
|
2037 if [ -d $INSTALLED/$pkg ]; then
|
gokhlayeh@186
|
2038 tazpkg get-install $pkg --forced
|
gokhlayeh@186
|
2039 fi
|
gokhlayeh@186
|
2040 done
|
gokhlayeh@186
|
2041 report end-step
|
gokhlayeh@186
|
2042 else
|
gokhlayeh@186
|
2043
|
gokhlayeh@186
|
2044 # Set package as broken.
|
gokhlayeh@186
|
2045 if ! grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/broken; then
|
gokhlayeh@186
|
2046 echo $PACKAGE >> $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
2047 fi
|
gokhlayeh@186
|
2048 gen_cookmd5
|
gokhlayeh@186
|
2049 cook_code=1
|
gokhlayeh@186
|
2050 fi
|
gokhlayeh@186
|
2051
|
gokhlayeh@186
|
2052 # Remove build_depends in cook mode (if in cooklist, it's done when
|
gokhlayeh@186
|
2053 # checking build_depends of next package and we remove only unneeded
|
gokhlayeh@186
|
2054 # packages to keep chroot minimal and gain some time).
|
gokhlayeh@210
|
2055 if [ "$COMMAND" = cook ]; then
|
gokhlayeh@210
|
2056 remove_build_depends $MISSING_PACKAGE
|
gokhlayeh@210
|
2057 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@210
|
2058 fi
|
gokhlayeh@210
|
2059
|
gokhlayeh@186
|
2060 # Regen the cooklist if it was planned and command is not cook.
|
gokhlayeh@186
|
2061 [ "$regen_cooklist" ] && unset regen_cooklist && \
|
gokhlayeh@186
|
2062 [ "$COMMAND" != cook ] && sort_cooklist
|
gokhlayeh@186
|
2063
|
gokhlayeh@186
|
2064 # Some hacks to set the bloc & function status as failed if cook was
|
gokhlayeh@186
|
2065 # failed.
|
gokhlayeh@186
|
2066 report_return_code=$cook_code
|
gokhlayeh@186
|
2067 report close-bloc
|
gokhlayeh@186
|
2068 report end-sublog
|
gokhlayeh@186
|
2069 return $cook_code
|
gokhlayeh@186
|
2070 }
|
gokhlayeh@186
|
2071
|
gokhlayeh@186
|
2072 cook_list()
|
gokhlayeh@186
|
2073 {
|
gokhlayeh@204
|
2074 if [ -s $tmp/cooklist ]; then
|
gokhlayeh@204
|
2075 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@204
|
2076 # Note : options -main variables- are automatically keeped by
|
gokhlayeh@204
|
2077 # the sub-applications tazchroot/tazwok; as well as report data.
|
gokhlayeh@204
|
2078 cd $LOCAL_REPOSITORY
|
gokhlayeh@204
|
2079 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@204
|
2080 tazchroot tazwok cook-list --SLITAZ_DIR=$SLITAZ_DIR --SLITAZ_VERSION=$SLITAZ_VERSION ${undigest:+ --undigest=$undigest}
|
gokhlayeh@204
|
2081 return
|
gokhlayeh@204
|
2082 fi
|
gokhlayeh@204
|
2083 while [ -s $tmp/cooklist ]; do
|
gokhlayeh@204
|
2084 PACKAGE=$(sed 1!d $tmp/cooklist)
|
gokhlayeh@204
|
2085 cook
|
gokhlayeh@204
|
2086 done
|
gokhlayeh@204
|
2087 remove_build_depends $MISSING_PACKAGE $remove_later
|
gokhlayeh@210
|
2088 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@204
|
2089 else
|
gokhlayeh@186
|
2090 echo "Nothing to cook."
|
gokhlayeh@186
|
2091 return
|
gokhlayeh@186
|
2092 fi
|
gokhlayeh@186
|
2093 }
|
gokhlayeh@186
|
2094
|
gokhlayeh@186
|
2095 configure_tazchroot()
|
gokhlayeh@186
|
2096 {
|
gokhlayeh@190
|
2097 cat > $LOCAL_REPOSITORY/tazchroot.conf << EOF
|
gokhlayeh@186
|
2098 # Tazchroot configuration file - created by tazwok.
|
gokhlayeh@186
|
2099
|
gokhlayeh@186
|
2100 # Default chroot path
|
gokhlayeh@186
|
2101 SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@186
|
2102 SLITAZ_VERSION=$SLITAZ_VERSION
|
gokhlayeh@186
|
2103 $( [ "$undigest" ] && echo "undigest=$undigest" )
|
gokhlayeh@186
|
2104 LOCAL_REPOSITORY=$SLITAZ_DIR/$(if [ "$undigest" ]; then echo '$undigest'; else echo '$SLITAZ_VERSION'; fi)
|
gokhlayeh@186
|
2105 chroot_dir=\$LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
2106
|
gokhlayeh@186
|
2107 # Default scripts path (theses scripts are added in the
|
gokhlayeh@186
|
2108 # $chroot_dir/usr/bin and can be called with tazchroot script)
|
gokhlayeh@186
|
2109 script_dir=/var/lib/tazchroot
|
gokhlayeh@186
|
2110
|
gokhlayeh@186
|
2111 # List of directories to mount.
|
gokhlayeh@192
|
2112 list_dir="$(for dir in packages wok src packages-incoming log flavors iso; do echo $LOCAL_REPOSITORY/$dir; done)
|
gokhlayeh@186
|
2113 $SLITAZ_LOG$( [ "$undigest" ] && echo -e "\n$SLITAZ_DIR/$SLITAZ_VERSION/packages" )"
|
gokhlayeh@186
|
2114
|
gokhlayeh@186
|
2115 create_chroot()
|
gokhlayeh@186
|
2116 {
|
gokhlayeh@186
|
2117 mkdir -p \$chroot_dir
|
gokhlayeh@186
|
2118 for pkg in \$(tazwok build-depends toolchain --SLITAZ_DIR=\$SLITAZ_DIR --SLITAZ_VERSION=\$SLITAZ_VERSION${undigest:+ --undigest=\$undigest}); do
|
gokhlayeh@186
|
2119 tazpkg get-install \$pkg --root="\$chroot_dir"
|
gokhlayeh@186
|
2120 done
|
gokhlayeh@186
|
2121
|
gokhlayeh@186
|
2122 # Store list of installed packages needed by cleanchroot.
|
gokhlayeh@194
|
2123 ls -1 \$chroot_dir/\$INSTALLED > \$chroot_dir/\$LOCALSTATE/chroot-pkgs
|
gokhlayeh@186
|
2124
|
gokhlayeh@186
|
2125 sed -e "s~^SLITAZ_DIR=.*~SLITAZ_DIR=\$SLITAZ_DIR~" \\
|
gokhlayeh@186
|
2126 -e "s/^SLITAZ_VERSION=.*/SLITAZ_VERSION=\$SLITAZ_VERSION/" \\
|
gokhlayeh@186
|
2127 -i \$chroot_dir/etc/slitaz/slitaz.conf
|
gokhlayeh@186
|
2128 $( [ "$undigest" ] && echo ' echo "undigest='"$undigest"'" >> $chroot_dir/etc/slitaz/tazwok.conf')
|
gokhlayeh@186
|
2129 sed 's/LC_ALL/LC_ALL=POSIX/' -i \$chroot_dir/etc/profile
|
gokhlayeh@186
|
2130 }
|
gokhlayeh@186
|
2131
|
gokhlayeh@186
|
2132 mount_chroot()
|
gokhlayeh@186
|
2133 {
|
gokhlayeh@186
|
2134 cp -a /etc/resolv.conf \$chroot_dir/etc/resolv.conf
|
gokhlayeh@194
|
2135 echo "\$LOCAL_REPOSITORY/packages" > \$chroot_dir\$LOCALSTATE/mirror
|
gokhlayeh@194
|
2136 mkdir -p \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming
|
gokhlayeh@194
|
2137 echo "\$LOCAL_REPOSITORY/packages-incoming" > \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming/mirror
|
gokhlayeh@194
|
2138 $( [ "$undigest" ] && echo ' mkdir -p $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION
|
gokhlayeh@194
|
2139 echo "$SLITAZ_DIR/$SLITAZ_VERSION/packages" > $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION/mirror' )
|
gokhlayeh@194
|
2140 echo -e "\${LOCAL_REPOSITORY##*/}-incoming\nmain" > \$chroot_dir\$LOCALSTATE/priority
|
gokhlayeh@186
|
2141 mount -t proc proc \$chroot_dir/proc
|
gokhlayeh@186
|
2142 mount -t sysfs sysfs \$chroot_dir/sys
|
gokhlayeh@186
|
2143 mount -t devpts devpts \$chroot_dir/dev/pts
|
gokhlayeh@186
|
2144 mount -t tmpfs shm \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2145 for dir in \$list_dir; do
|
gokhlayeh@186
|
2146 mkdir -p \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2147 mount \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2148 done
|
gokhlayeh@186
|
2149 }
|
gokhlayeh@186
|
2150
|
gokhlayeh@186
|
2151 umount_chroot()
|
gokhlayeh@186
|
2152 {
|
gokhlayeh@186
|
2153 for dir in \$list_dir; do
|
gokhlayeh@186
|
2154 umount \$chroot_dir\$dir
|
gokhlayeh@186
|
2155 done
|
gokhlayeh@186
|
2156 umount \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2157 umount \$chroot_dir/dev/pts
|
gokhlayeh@186
|
2158 umount \$chroot_dir/sys
|
gokhlayeh@186
|
2159 umount \$chroot_dir/proc
|
gokhlayeh@186
|
2160 }
|
gokhlayeh@186
|
2161 EOF
|
gokhlayeh@186
|
2162 }
|
gokhlayeh@186
|
2163
|
gokhlayeh@186
|
2164 ########################################################################
|
gokhlayeh@186
|
2165 ######################### END OF NEW FUNCTIONS #########################
|
gokhlayeh@186
|
2166 ########################################################################
|
gokhlayeh@186
|
2167
|
pascal@111
|
2168 # List packages providing a virtual package
|
pascal@111
|
2169 whoprovide()
|
pascal@111
|
2170 {
|
pascal@111
|
2171 local i;
|
gokhlayeh@195
|
2172 for i in $(fgrep -l PROVIDE $WOK/*/receipt); do
|
pascal@111
|
2173 . $i
|
pascal@111
|
2174 case " $PROVIDE " in
|
pascal@111
|
2175 *\ $1\ *|*\ $1:*) echo $(basename $(dirname $i));;
|
pascal@111
|
2176 esac
|
pascal@111
|
2177 done
|
pascal@111
|
2178 }
|
pascal@111
|
2179
|
gokhlayeh@186
|
2180 ########################################################################
|
gokhlayeh@186
|
2181 # TAZWOK COMMANDS
|
gokhlayeh@186
|
2182 ########################
|
pankso@7
|
2183
|
pankso@7
|
2184 case "$COMMAND" in
|
pankso@7
|
2185 stats)
|
paul@166
|
2186 # Tazwok general statistics from the wok config file.
|
pankso@7
|
2187 #
|
gokhlayeh@186
|
2188 get_tazwok_config
|
gokhlayeh@186
|
2189 echo -e "\n\033[1mTazwok configuration statistics\033[0m
|
pankso@7
|
2190 ================================================================================
|
pankso@7
|
2191 Wok directory : $WOK
|
pankso@7
|
2192 Packages repository : $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
2193 Incoming repository : $INCOMING_REPOSITORY
|
pankso@7
|
2194 Sources repository : $SOURCES_REPOSITORY
|
gokhlayeh@186
|
2195 Log directory : $LOCAL_REPOSITORY/log
|
pankso@7
|
2196 Packages in the wok : `ls -1 $WOK | wc -l`
|
pankso@16
|
2197 Cooked packages : `ls -1 $PACKAGES_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2198 Incoming packages : `ls -1 $INCOMING_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2199 ================================================================================\n"
|
gokhlayeh@186
|
2200 ;;
|
pankso@133
|
2201 edit)
|
gokhlayeh@186
|
2202 get_tazwok_config
|
pankso@133
|
2203 check_for_package_on_cmdline
|
pankso@133
|
2204 check_for_receipt
|
gokhlayeh@186
|
2205 $EDITOR $WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
2206 ;;
|
pascal@98
|
2207 build-depends)
|
gokhlayeh@186
|
2208 # List dependencies to rebuild wok, or only a package
|
gokhlayeh@186
|
2209 get_tazwok_config
|
gokhlayeh@215
|
2210 report(){ : ; }
|
gokhlayeh@242
|
2211 if [ ! "$PACKAGE" ] || [ "$PACKAGE" = toolchain ]; then
|
gokhlayeh@186
|
2212 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
2213 --look_for=dep --with_dev --with_args
|
gokhlayeh@186
|
2214 else
|
gokhlayeh@186
|
2215 check_for_package_on_cmdline
|
gokhlayeh@186
|
2216 scan $PACKAGE --look_for=bdep --with_dev
|
gokhlayeh@186
|
2217 fi
|
gokhlayeh@186
|
2218 ;;
|
gokhlayeh@186
|
2219 gen-cooklist)
|
gokhlayeh@215
|
2220 check_root
|
gokhlayeh@204
|
2221 get_options_list="pkg"
|
gokhlayeh@186
|
2222 get_tazwok_config
|
gokhlayeh@215
|
2223 report(){ : ; }
|
gokhlayeh@204
|
2224 if ! [ "$pkg" ]; then
|
gokhlayeh@242
|
2225 if [ ! "$LIST" ] || [ "$LIST" = toolchain ]; then
|
gokhlayeh@242
|
2226 pkg="$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA"
|
gokhlayeh@242
|
2227 else
|
gokhlayeh@242
|
2228 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
|
gokhlayeh@242
|
2229 fi
|
gokhlayeh@186
|
2230 fi
|
gokhlayeh@204
|
2231 gen_cook_list
|
gokhlayeh@186
|
2232 ;;
|
pascal@119
|
2233 check-depends)
|
gokhlayeh@186
|
2234 # Check package depends /!\
|
gokhlayeh@186
|
2235 get_tazwok_config
|
pascal@119
|
2236 echo ""
|
paul@121
|
2237 echo -e "\033[1mCheck every receipt for DEPENDS - doesn't scan ELF files\033[0m
|
pascal@119
|
2238 ================================================================================"
|
pascal@119
|
2239 TMPDIR=/tmp/tazwok$$
|
pascal@119
|
2240 DEFAULT_DEPENDS="glibc-base gcc-lib-base"
|
pascal@119
|
2241
|
pascal@119
|
2242 # Build ALL_DEPENDS variable
|
pascal@119
|
2243 scan_dep()
|
pascal@119
|
2244 {
|
pascal@119
|
2245 local i
|
pascal@119
|
2246 ALL_DEPENDS="$ALL_DEPENDS$PACKAGE "
|
pascal@128
|
2247 for i in $DEPENDS $SUGGESTED ; do
|
pascal@119
|
2248 case " $ALL_DEPENDS " in
|
pascal@119
|
2249 *\ $i\ *) continue;;
|
pascal@119
|
2250 esac
|
pascal@120
|
2251 [ -d $WOK/$i ] || {
|
pascal@120
|
2252 ALL_DEPENDS="$ALL_DEPENDS$i "
|
pascal@120
|
2253 continue
|
pascal@120
|
2254 }
|
pascal@128
|
2255 DEPENDS=""
|
pascal@128
|
2256 SUGGESTED=""
|
pascal@119
|
2257 . $WOK/$i/receipt
|
pascal@119
|
2258 scan_dep
|
pascal@119
|
2259 done
|
pascal@119
|
2260 }
|
pankso@133
|
2261
|
pascal@119
|
2262 # Check for ELF file
|
pascal@119
|
2263 is_elf()
|
pascal@119
|
2264 {
|
pascal@119
|
2265 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" \
|
pascal@119
|
2266 = "ELF" ]
|
pascal@119
|
2267 }
|
pascal@119
|
2268
|
pascal@119
|
2269 # Print shared library dependencies
|
pascal@119
|
2270 ldd()
|
pascal@119
|
2271 {
|
pascal@130
|
2272 LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
|
pascal@119
|
2273 }
|
pascal@119
|
2274
|
pascal@119
|
2275 mkdir $TMPDIR
|
pascal@119
|
2276 cd $TMPDIR
|
pascal@140
|
2277 for i in $LOCALSTATE/files.list.lzma \
|
pascal@140
|
2278 $LOCALSTATE/undigest/*/files.list.lzma ; do
|
pascal@119
|
2279 [ -f $i ] && lzma d $i -so >> files.list
|
pascal@119
|
2280 done
|
pascal@119
|
2281 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
|
pascal@119
|
2282 tazpkg extract $pkg > /dev/null 2>&1
|
pascal@119
|
2283 . */receipt
|
pascal@119
|
2284 ALL_DEPENDS="$DEFAULT_DEPENDS "
|
pascal@119
|
2285 scan_dep
|
pascal@119
|
2286 find */fs -type f | while read file ; do
|
pascal@119
|
2287 is_elf $file || continue
|
pascal@119
|
2288 case "$file" in
|
pascal@119
|
2289 *.o|*.ko|*.ko.gz) continue;;
|
pascal@119
|
2290 esac
|
pascal@119
|
2291 ldd $file | while read lib rem; do
|
pascal@119
|
2292 case "$lib" in
|
pascal@128
|
2293 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
|
pascal@119
|
2294 continue;;
|
pascal@119
|
2295 esac
|
gokhlayeh@195
|
2296 for dep in $(fgrep $lib files.list | cut -d: -f1); do
|
pascal@119
|
2297 case " $ALL_DEPENDS " in
|
pascal@119
|
2298 *\ $dep\ *) continue 2;;
|
pascal@119
|
2299 esac
|
gokhlayeh@195
|
2300 for vdep in $(fgrep $dep $LOCALSTATE/packages.equiv | cut -d= -f1); do
|
pascal@128
|
2301 case " $ALL_DEPENDS " in
|
pascal@129
|
2302 *\ $vdep\ *) continue 3;;
|
pascal@128
|
2303 esac
|
pascal@128
|
2304 done
|
pascal@119
|
2305 done
|
pascal@128
|
2306 [ -n "$dep" ] || dep="UNKNOWN"
|
pascal@119
|
2307 echo "$(basename $pkg): ${file#*fs} depends on package $dep for the shared library $lib"
|
pascal@119
|
2308 done
|
pascal@119
|
2309 done
|
pascal@119
|
2310 rm -rf */
|
pascal@119
|
2311 done
|
pascal@119
|
2312 cd /tmp
|
pascal@119
|
2313 rm -rf $TMPDIR
|
gokhlayeh@186
|
2314 ;;
|
pascal@76
|
2315 check)
|
paul@154
|
2316 # Check wok consistency
|
gokhlayeh@186
|
2317 get_tazwok_config
|
pascal@76
|
2318 echo ""
|
pascal@76
|
2319 echo -e "\033[1mWok and packages checking\033[0m
|
pascal@76
|
2320 ================================================================================"
|
pascal@77
|
2321 cd $WOK
|
pascal@77
|
2322 for pkg in $(ls)
|
pascal@76
|
2323 do
|
pascal@76
|
2324 [ -f $pkg/receipt ] || continue
|
gokhlayeh@186
|
2325 RECEIPT= $pkg/receipt
|
gokhlayeh@186
|
2326 source_receipt
|
gokhlayeh@186
|
2327 [ "$PACKAGE" = "$pkg" ] || echo "Package $PACKAGE should be $pkg" >&2
|
gokhlayeh@186
|
2328 [ -n "$VERSION" ] || echo "Package $PACKAGE has no VERSION" >&2
|
gokhlayeh@186
|
2329 [ -n "$PACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded PACKED_SIZE" >&2
|
gokhlayeh@186
|
2330 [ -n "$UNPACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded UNPACKED_SIZE" >&2
|
gokhlayeh@186
|
2331 [ -n "$EXTRAVERSION" ] && echo "Package $PACKAGE has hardcoded EXTRAVERSION" >&2
|
pascal@97
|
2332 if [ -n "$WANTED" ]; then
|
pascal@97
|
2333 if [ ! -f $WANTED/receipt ]; then
|
gokhlayeh@186
|
2334 echo "Package $PACKAGE wants unknown $WANTED package" >&2
|
pascal@97
|
2335 else
|
pascal@97
|
2336 BASEVERSION=$(. $WANTED/receipt ; echo $VERSION)
|
pascal@103
|
2337 if [ "$VERSION" = "$WANTED" ]; then
|
pascal@103
|
2338 # BASEVERSION is computed in receipt
|
gokhlayeh@195
|
2339 fgrep -q '_pkg=' $pkg/receipt &&
|
pascal@103
|
2340 BASEVERSION=$VERSION
|
pascal@103
|
2341 fi
|
pascal@97
|
2342 if [ "$VERSION" != "$BASEVERSION" ]; then
|
gokhlayeh@186
|
2343 echo "Package $PACKAGE ($VERSION) wants $WANTED ($BASEVERSION)" >&2
|
pascal@97
|
2344 fi
|
pascal@97
|
2345 fi
|
pascal@97
|
2346 fi
|
pascal@97
|
2347
|
pascal@94
|
2348 if [ -n "$CATEGORY" ]; then
|
pascal@94
|
2349 case " $(echo $CATEGORIES) " in
|
pascal@94
|
2350 *\ $CATEGORY\ *);;
|
gokhlayeh@186
|
2351 *) echo "Package $PACKAGE has an invalid CATEGORY" >&2;;
|
pascal@94
|
2352 esac
|
pascal@94
|
2353 else
|
gokhlayeh@186
|
2354 echo"Package $PACKAGE has no CATEGORY" >&2
|
pascal@94
|
2355 fi
|
gokhlayeh@186
|
2356 [ -n "$SHORT_DESC" ] || echo "Package $PACKAGE has no SHORT_DESC" >&2
|
gokhlayeh@186
|
2357 [ -n "$MAINTAINER" ] || echo "Package $PACKAGE has no MAINTAINER" >&2
|
pascal@122
|
2358 case "$WGET_URL" in
|
pascal@178
|
2359 ftp*|http*) busybox wget -s $WGET_URL 2> /dev/null ||
|
gokhlayeh@186
|
2360 echo "Package $PACKAGE has a wrong WGET_URL" >&2;;
|
pascal@122
|
2361 '') ;;
|
gokhlayeh@186
|
2362 *) echo "Package $PACKAGE has an invalid WGET_URL" >&2;;
|
pascal@122
|
2363 esac
|
pascal@112
|
2364 case "$WEB_SITE" in
|
pascal@125
|
2365 ftp*|http*);;
|
gokhlayeh@186
|
2366 '') echo "Package $PACKAGE has no WEB_SITE" >&2;;
|
gokhlayeh@186
|
2367 *) echo "Package $PACKAGE has an invalid WEB_SITE" >&2;;
|
pascal@112
|
2368 esac
|
pascal@78
|
2369 case "$MAINTAINER" in
|
gokhlayeh@186
|
2370 *\<*|*\>*) echo "Package $PACKAGE has an invalid MAINTAINER: $MAINTAINER" >&2;;
|
pascal@78
|
2371 esac
|
pascal@78
|
2372 case "$MAINTAINER" in
|
pascal@78
|
2373 *@*);;
|
gokhlayeh@186
|
2374 *) echo "Package $PACKAGE MAINTAINER is not an email address" >&2;;
|
pascal@78
|
2375 esac
|
gokhlayeh@186
|
2376 MSG="Missing dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@76
|
2377 for i in $DEPENDS; do
|
pascal@76
|
2378 [ -d $i ] && continue
|
pascal@111
|
2379 [ -n "$(whoprovide $i)" ] && continue
|
pascal@76
|
2380 echo -e "$MSG $i"
|
pascal@76
|
2381 MSG=""
|
pascal@76
|
2382 done
|
gokhlayeh@186
|
2383 MSG="Missing build dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@92
|
2384 for i in $BUILD_DEPENDS; do
|
pascal@92
|
2385 [ -d $i ] && continue
|
pascal@111
|
2386 [ -n "$(whoprovide $i)" ] && continue
|
pascal@92
|
2387 echo -e "$MSG $i"
|
pascal@92
|
2388 MSG=""
|
pascal@92
|
2389 done
|
pascal@76
|
2390 MSG="Dependencies loop between $PACKAGE and :\n"
|
pascal@76
|
2391 ALL_DEPS=""
|
pascal@76
|
2392 check_for_deps_loop $PACKAGE $DEPENDS
|
pascal@140
|
2393 [ -d $WOK/$pkg/taz ] && for i in $BUILD_DEPENDS; do
|
pascal@141
|
2394 [ $WOK/$pkg/taz -nt $INSTALLED/$i/files.list ] && continue
|
paul@154
|
2395 echo "$pkg should be rebuilt after $i installation"
|
pascal@140
|
2396 done
|
pascal@76
|
2397 done
|
gokhlayeh@186
|
2398 ;;
|
pankso@7
|
2399 list)
|
paul@166
|
2400 # List packages in wok directory. User can specify a category.
|
pankso@7
|
2401 #
|
gokhlayeh@186
|
2402 get_tazwok_config
|
pankso@7
|
2403 if [ "$2" = "category" ]; then
|
pankso@7
|
2404 echo -e "\033[1m\nPackages categories :\033[0m $CATEGORIES\n"
|
pankso@7
|
2405 exit 0
|
pankso@7
|
2406 fi
|
pankso@7
|
2407 # Check for an asked category.
|
pankso@7
|
2408 if [ -n "$2" ]; then
|
pankso@7
|
2409 ASKED_CATEGORY=$2
|
pankso@7
|
2410 echo ""
|
pankso@7
|
2411 echo -e "\033[1mPackages in category :\033[0m $ASKED_CATEGORY"
|
pankso@7
|
2412 echo "================================================================================"
|
pankso@7
|
2413 for pkg in $WOK/*
|
pankso@7
|
2414 do
|
erjo@168
|
2415 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2416 . $pkg/receipt
|
pankso@7
|
2417 if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then
|
pankso@7
|
2418 echo -n "$PACKAGE"
|
pankso@28
|
2419 echo -e "\033[28G $VERSION"
|
pankso@7
|
2420 packages=$(($packages+1))
|
pankso@7
|
2421 fi
|
pankso@7
|
2422 done
|
pankso@7
|
2423 echo "================================================================================"
|
gokhlayeh@236
|
2424 echo -e "$packages packages in category $ASKED_CATEGORY.\n"
|
pankso@7
|
2425 else
|
pankso@7
|
2426 # By default list all packages and version.
|
pankso@7
|
2427 echo ""
|
pankso@7
|
2428 echo -e "\033[1mList of packages in the wok\033[0m"
|
pankso@7
|
2429 echo "================================================================================"
|
pankso@7
|
2430 for pkg in $WOK/*
|
pankso@7
|
2431 do
|
erjo@168
|
2432 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2433 . $pkg/receipt
|
pankso@7
|
2434 echo -n "$PACKAGE"
|
pankso@28
|
2435 echo -en "\033[28G $VERSION"
|
pankso@7
|
2436 echo -e "\033[42G $CATEGORY"
|
pankso@7
|
2437 packages=$(($packages+1))
|
pankso@7
|
2438 done
|
pankso@7
|
2439 echo "================================================================================"
|
gokhlayeh@236
|
2440 echo -e "$packages packages available in the wok.\n"
|
pankso@7
|
2441 fi
|
pankso@7
|
2442 ;;
|
pankso@7
|
2443 info)
|
MikeDSmith25@82
|
2444 # Information about a package.
|
pankso@7
|
2445 #
|
gokhlayeh@186
|
2446 get_tazwok_config
|
pankso@7
|
2447 check_for_package_on_cmdline
|
pankso@7
|
2448 check_for_receipt
|
pankso@7
|
2449 . $WOK/$PACKAGE/receipt
|
pankso@7
|
2450 echo ""
|
MikeDSmith25@82
|
2451 echo -e "\033[1mTazwok package information\033[0m
|
pankso@7
|
2452 ================================================================================
|
pankso@7
|
2453 Package : $PACKAGE
|
pankso@7
|
2454 Version : $VERSION
|
pankso@7
|
2455 Category : $CATEGORY
|
pankso@7
|
2456 Short desc : $SHORT_DESC
|
pankso@7
|
2457 Maintainer : $MAINTAINER"
|
pankso@7
|
2458 if [ ! "$WEB_SITE" = "" ]; then
|
pankso@7
|
2459 echo "Web site : $WEB_SITE"
|
pankso@7
|
2460 fi
|
pankso@7
|
2461 if [ ! "$DEPENDS" = "" ]; then
|
pankso@7
|
2462 echo "Depends : $DEPENDS"
|
pankso@7
|
2463 fi
|
pankso@7
|
2464 if [ ! "$WANTED" = "" ]; then
|
pankso@7
|
2465 echo "Wanted src : $WANTED"
|
pankso@7
|
2466 fi
|
pankso@7
|
2467 echo "================================================================================"
|
pankso@7
|
2468 echo ""
|
gokhlayeh@186
|
2469 ;;
|
pankso@7
|
2470 check-log)
|
pankso@7
|
2471 # We just cat the file log to view process info.
|
pankso@7
|
2472 #
|
gokhlayeh@186
|
2473 get_tazwok_config
|
pankso@7
|
2474 if [ ! -f "$LOG" ]; then
|
gokhlayeh@186
|
2475 echo -e "\nNo process log found. The package is probably not cooked.\n" >&2
|
gokhlayeh@186
|
2476 exit 1
|
pankso@7
|
2477 else
|
pankso@7
|
2478 echo ""
|
pankso@7
|
2479 echo -e "\033[1mPackage process log for :\033[0m $PACKAGE"
|
pankso@7
|
2480 echo "================================================================================"
|
pankso@7
|
2481 cat $LOG
|
pankso@7
|
2482 echo "================================================================================"
|
pankso@7
|
2483 echo ""
|
gokhlayeh@237
|
2484 if [ -s "$WOK/$PACKAGE/warning.txt" ]; then
|
gokhlayeh@237
|
2485 echo -e "\033[1mCook warning(s) for :\033[0m $PACKAGE"
|
gokhlayeh@237
|
2486 echo "================================================================================"
|
gokhlayeh@237
|
2487 cat "$WOK/$PACKAGE/warning.txt"
|
gokhlayeh@237
|
2488 echo "================================================================================"
|
gokhlayeh@237
|
2489 echo ""
|
gokhlayeh@237
|
2490 fi
|
pankso@7
|
2491 fi
|
gokhlayeh@186
|
2492 ;;
|
pankso@7
|
2493 search)
|
pankso@7
|
2494 # Search for a package by pattern or name.
|
pankso@7
|
2495 #
|
gokhlayeh@186
|
2496 get_tazwok_config
|
pankso@7
|
2497 if [ -z "$2" ]; then
|
gokhlayeh@186
|
2498 echo -e "\nPlease specify a pattern or a package name to search." >&2
|
gokhlayeh@186
|
2499 echo -e "Example : 'tazwok search gcc'.\n" >&2
|
gokhlayeh@186
|
2500 exit 1
|
pankso@7
|
2501 fi
|
pankso@7
|
2502 echo ""
|
pankso@7
|
2503 echo -e "\033[1mSearch result for :\033[0m $2"
|
pankso@7
|
2504 echo "================================================================================"
|
gokhlayeh@195
|
2505 list=`ls -1 $WOK | fgrep $2`
|
pankso@7
|
2506 for pkg in $list
|
pankso@7
|
2507 do
|
pankso@7
|
2508 . $WOK/$pkg/receipt
|
pankso@7
|
2509 echo -n "$PACKAGE "
|
pankso@7
|
2510 echo -en "\033[24G $VERSION"
|
pankso@7
|
2511 echo -e "\033[42G $CATEGORY"
|
gokhlayeh@186
|
2512 packages=$(($PACKAGEs+1))
|
pankso@7
|
2513 done
|
pankso@7
|
2514 echo "================================================================================"
|
gokhlayeh@238
|
2515 echo "$packages packages found for : $2"
|
pankso@7
|
2516 echo ""
|
gokhlayeh@186
|
2517 ;;
|
pankso@7
|
2518 compile)
|
pankso@7
|
2519 # Configure and make a package with the receipt.
|
pankso@7
|
2520 #
|
gokhlayeh@186
|
2521 get_tazwok_config
|
gokhlayeh@186
|
2522 source_lib report
|
gokhlayeh@186
|
2523 report start
|
pankso@7
|
2524 compile_package
|
gokhlayeh@186
|
2525 ;;
|
pankso@7
|
2526 genpkg)
|
paul@121
|
2527 # Generate a package.
|
pankso@7
|
2528 #
|
gokhlayeh@186
|
2529 get_tazwok_config
|
gokhlayeh@186
|
2530 source_lib report
|
gokhlayeh@186
|
2531 report start
|
pankso@7
|
2532 gen_package
|
gokhlayeh@186
|
2533 ;;
|
pankso@7
|
2534 cook)
|
pankso@7
|
2535 # Compile and generate a package. Just execute tazwok with
|
pankso@7
|
2536 # the good commands.
|
pankso@7
|
2537 #
|
pankso@7
|
2538 check_root
|
gokhlayeh@186
|
2539 get_tazwok_config
|
gokhlayeh@186
|
2540 source_lib report
|
gokhlayeh@186
|
2541 report start
|
gokhlayeh@215
|
2542 update_wan_db
|
gokhlayeh@215
|
2543 check_for_commit
|
gokhlayeh@215
|
2544 [ "$plan_sort_depdb" ] && sort -o $dep_db $dep_db && unset plan_sort_depdb
|
gokhlayeh@215
|
2545 [ "$plan_sort_wandb" ] && sort -o $wan_db $wan_db && unset plan_sort_wandb
|
gokhlayeh@215
|
2546 if [ "$plan_regen_cookorder" ]; then
|
gokhlayeh@215
|
2547 grep -q "^#" $PACKAGES_REPOSITORY/cookorder.txt || \
|
gokhlayeh@215
|
2548 sed 1i"#PlanSort" -i $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@215
|
2549 fi
|
gokhlayeh@186
|
2550 cook
|
gokhlayeh@186
|
2551 ;;
|
gokhlayeh@186
|
2552 sort-cooklist)
|
gokhlayeh@297
|
2553 if [ ! -f "$LIST" ]; then
|
gokhlayeh@297
|
2554 echo "Usage : tazwok sort-cooklist cooklist" >&2
|
gokhlayeh@186
|
2555 exit 1
|
gokhlayeh@186
|
2556 fi
|
gokhlayeh@297
|
2557 check_root
|
gokhlayeh@186
|
2558 get_tazwok_config
|
gokhlayeh@297
|
2559 report(){ : ; }
|
gokhlayeh@297
|
2560 # When using sort-cooklist, the script should behave as for gen-cooklist
|
gokhlayeh@297
|
2561 # The only difference between theses two is where the output is sended.
|
gokhlayeh@297
|
2562 COMMAND=gen-cooklist
|
gokhlayeh@186
|
2563 cooklist=$LIST
|
gokhlayeh@297
|
2564 gen_cook_list
|
gokhlayeh@300
|
2565 cp -af $tmp/cooklist $cooklist
|
gokhlayeh@186
|
2566 ;;
|
pankso@7
|
2567 cook-list)
|
gokhlayeh@204
|
2568 # Cook all packages listed in a file or in default cooklist.
|
gokhlayeh@186
|
2569 check_root
|
gokhlayeh@204
|
2570 get_options_list="pkg forced"
|
gokhlayeh@186
|
2571 get_tazwok_config
|
gokhlayeh@186
|
2572 source_lib report
|
gokhlayeh@186
|
2573 report start
|
gokhlayeh@204
|
2574 if ! [ "$pkg" ]; then
|
gokhlayeh@204
|
2575 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
|
gokhlayeh@186
|
2576 fi
|
gokhlayeh@204
|
2577 gen_cook_list
|
gokhlayeh@186
|
2578 cook_list
|
gokhlayeh@186
|
2579 ;;
|
gokhlayeh@186
|
2580 clean)
|
gokhlayeh@186
|
2581 # Clean up a package work directory + thoses which want it.
|
pankso@7
|
2582 #
|
gokhlayeh@186
|
2583 get_tazwok_config
|
pankso@7
|
2584 check_for_package_on_cmdline
|
pankso@7
|
2585 check_for_receipt
|
gokhlayeh@186
|
2586 source_lib report
|
gokhlayeh@186
|
2587 report start
|
pankso@7
|
2588 . $RECEIPT
|
gokhlayeh@186
|
2589 clean
|
gokhlayeh@186
|
2590 ;;
|
pankso@7
|
2591 gen-clean-wok)
|
paul@121
|
2592 # Generate a clean wok from the current wok by copying all receipts
|
pankso@7
|
2593 # and stuff directory.
|
pankso@7
|
2594 #
|
gokhlayeh@186
|
2595 get_tazwok_config
|
gokhlayeh@186
|
2596 source_lib report
|
gokhlayeh@186
|
2597 report start
|
gokhlayeh@186
|
2598 if [ -z "$ARG" ]; then
|
gokhlayeh@186
|
2599 echo -e "\nPlease specify the destination for the new clean wok.\n" >&2
|
gokhlayeh@186
|
2600 exit 1
|
pankso@7
|
2601 else
|
gokhlayeh@186
|
2602 dest=$ARG
|
pankso@7
|
2603 mkdir -p $dest
|
pankso@7
|
2604 fi
|
gokhlayeh@186
|
2605 report step "Creating clean wok in : $dest"
|
pankso@7
|
2606 for pkg in `ls -1 $WOK`
|
pankso@7
|
2607 do
|
pankso@7
|
2608 mkdir -p $dest/$pkg
|
pankso@7
|
2609 cp -a $WOK/$pkg/receipt $dest/$pkg
|
gokhlayeh@186
|
2610 [ -f $WOK/$pkg/description.txt ] && \
|
gokhlayeh@186
|
2611 cp -a $WOK/$pkg/description.txt $dest/$pkg
|
pankso@7
|
2612 if [ -d "$WOK/$pkg/stuff" ]; then
|
pankso@7
|
2613 cp -a $WOK/$pkg/stuff $dest/$pkg
|
pankso@7
|
2614 fi
|
pankso@7
|
2615 done
|
gokhlayeh@186
|
2616 [ -d $WOK/.hg ] && cp -a $WOK/.hg $dest
|
gokhlayeh@186
|
2617 report end-step
|
pankso@7
|
2618 echo "Packages cleaned : `ls -1 $dest | wc -l`"
|
pankso@7
|
2619 echo ""
|
gokhlayeh@186
|
2620 ;;
|
pankso@7
|
2621 clean-wok)
|
pankso@7
|
2622 # Clean all packages in the work directory
|
pankso@7
|
2623 #
|
gokhlayeh@186
|
2624 get_tazwok_config
|
gokhlayeh@186
|
2625 source_lib report
|
gokhlayeh@186
|
2626 report start
|
gokhlayeh@186
|
2627 report step "Cleaning wok"
|
gokhlayeh@186
|
2628 for PACKAGE in `ls -1 $WOK`
|
pankso@7
|
2629 do
|
gokhlayeh@186
|
2630 set_common_path
|
gokhlayeh@186
|
2631 source_receipt
|
gokhlayeh@186
|
2632 clean
|
pankso@7
|
2633 done
|
pankso@7
|
2634 echo "`ls -1 $WOK | wc -l` packages cleaned."
|
gokhlayeh@186
|
2635 ;;
|
gokhlayeh@266
|
2636 clean-src)
|
gokhlayeh@266
|
2637 # Remove tarball unrelated to wok receipts from src repo.
|
gokhlayeh@266
|
2638 check_root
|
gokhlayeh@266
|
2639 get_options_list="forced"
|
gokhlayeh@266
|
2640 get_tazwok_config
|
gokhlayeh@266
|
2641 cd $SOURCES_REPOSITORY
|
gokhlayeh@266
|
2642 echo -n "Checking $SOURCES_REPOSITORY..."
|
gokhlayeh@266
|
2643 for TARBALL in *; do
|
gokhlayeh@266
|
2644 [ "$TARBALL" = sources.list ] && continue
|
gokhlayeh@266
|
2645 grep -q $'\t'$TARBALL$ $SOURCES_REPOSITORY/sources.list || \
|
gokhlayeh@266
|
2646 echo $TARBALL >> $tmp/obsolete
|
gokhlayeh@266
|
2647 done
|
gokhlayeh@266
|
2648 status
|
slaxemulator@273
|
2649 if ! [ -f $tmp/obsolete ]; then
|
slaxemulator@273
|
2650 echo "No sources need to be removed."
|
slaxemulator@273
|
2651 exit 1
|
slaxemulator@273
|
2652 fi
|
gokhlayeh@266
|
2653 echo ""
|
gokhlayeh@266
|
2654 echo -e "\033[1mObsolete/unrelated-to-wok sourcess :\033[0m"
|
gokhlayeh@266
|
2655 horizontal_line
|
gokhlayeh@266
|
2656 cat $tmp/obsolete
|
gokhlayeh@266
|
2657 horizontal_line
|
gokhlayeh@266
|
2658 echo "$(wc -l $tmp/obsolete | cut -f1 -d' ') tarballs to remove."
|
gokhlayeh@266
|
2659 echo ""
|
gokhlayeh@266
|
2660 echo -n "Please confirm removing (type uppercase YES): "
|
gokhlayeh@266
|
2661 read answer
|
gokhlayeh@266
|
2662 if [ "$answer" = YES ]; then
|
gokhlayeh@266
|
2663 echo -n "Removing old sources..."
|
gokhlayeh@266
|
2664 cat $tmp/obsolete | while read i; do
|
gokhlayeh@266
|
2665 rm -f $SOURCES_REPOSITORY/$i
|
gokhlayeh@266
|
2666 done
|
gokhlayeh@266
|
2667 status
|
gokhlayeh@266
|
2668 fi
|
gokhlayeh@266
|
2669 ;;
|
pankso@7
|
2670 gen-list)
|
gokhlayeh@186
|
2671 get_tazwok_config
|
gokhlayeh@204
|
2672 if [ "$2" ]; then
|
gokhlayeh@204
|
2673 if [ -d "$2" ]; then
|
gokhlayeh@204
|
2674 pkg_repository=$2
|
gokhlayeh@204
|
2675 else
|
gokhlayeh@204
|
2676 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@204
|
2677 exit 1
|
gokhlayeh@204
|
2678 fi
|
gokhlayeh@204
|
2679 fi
|
gokhlayeh@204
|
2680
|
gokhlayeh@186
|
2681 source_lib report
|
gokhlayeh@186
|
2682 report start
|
gokhlayeh@204
|
2683 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
2684 gen_packages_db
|
gokhlayeh@204
|
2685 else
|
gokhlayeh@204
|
2686 pkg_repository=$PACKAGES_REPOSITORY && gen_packages_db
|
gokhlayeh@204
|
2687 pkg_repository=$INCOMING_REPOSITORY && gen_packages_db
|
gokhlayeh@204
|
2688 fi
|
gokhlayeh@186
|
2689 ;;
|
gokhlayeh@186
|
2690 check-list)
|
gokhlayeh@186
|
2691 # The directory to move into by default is the repository,
|
gokhlayeh@186
|
2692 # if $2 is not empty cd into $2.
|
pankso@7
|
2693 #
|
gokhlayeh@186
|
2694 get_tazwok_config
|
gokhlayeh@204
|
2695 if [ "$2" ]; then
|
pankso@7
|
2696 if [ -d "$2" ]; then
|
gokhlayeh@204
|
2697 pkg_repository=$2
|
pankso@7
|
2698 else
|
gokhlayeh@186
|
2699 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@186
|
2700 exit 1
|
pankso@7
|
2701 fi
|
pankso@7
|
2702 fi
|
gokhlayeh@186
|
2703
|
gokhlayeh@186
|
2704 source_lib report
|
gokhlayeh@204
|
2705 report start
|
gokhlayeh@204
|
2706 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
2707 update_packages_db
|
gokhlayeh@204
|
2708 else
|
gokhlayeh@204
|
2709 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
2710 pkg_repository=$INCOMING_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
2711 fi
|
gokhlayeh@186
|
2712 ;;
|
pankso@7
|
2713 new-tree)
|
MikeDSmith25@82
|
2714 # Just create a few directories and generate an empty receipt to prepare
|
pankso@7
|
2715 # the creation of a new package.
|
pankso@7
|
2716 #
|
gokhlayeh@186
|
2717 get_tazwok_config
|
pankso@7
|
2718 check_for_package_on_cmdline
|
pankso@7
|
2719 if [ -d $WOK/$PACKAGE ]; then
|
gokhlayeh@186
|
2720 echo -e "\n$PACKAGE package tree already exists.\n" >&2
|
gokhlayeh@186
|
2721 exit 1
|
pankso@7
|
2722 fi
|
pankso@7
|
2723 echo "Creating : $WOK/$PACKAGE"
|
pankso@7
|
2724 mkdir $WOK/$PACKAGE
|
pankso@7
|
2725 cd $WOK/$PACKAGE
|
pankso@7
|
2726 echo -n "Preparing the receipt..."
|
pankso@7
|
2727 #
|
pankso@7
|
2728 # Default receipt begin.
|
pankso@7
|
2729 #
|
pankso@7
|
2730 echo "# SliTaz package receipt." > receipt
|
pankso@7
|
2731 echo "" >> receipt
|
pankso@7
|
2732 echo "PACKAGE=\"$PACKAGE\"" >> receipt
|
pankso@7
|
2733 # Finish the empty receipt.
|
pankso@7
|
2734 cat >> receipt << "EOF"
|
pankso@7
|
2735 VERSION=""
|
pankso@7
|
2736 CATEGORY=""
|
pankso@7
|
2737 SHORT_DESC=""
|
pankso@7
|
2738 MAINTAINER=""
|
pankso@7
|
2739 DEPENDS=""
|
pankso@7
|
2740 TARBALL="$PACKAGE-$VERSION.tar.gz"
|
pankso@7
|
2741 WEB_SITE=""
|
pankso@7
|
2742 WGET_URL=""
|
pankso@7
|
2743
|
pankso@7
|
2744 # Rules to configure and make the package.
|
pankso@7
|
2745 compile_rules()
|
pankso@7
|
2746 {
|
pankso@7
|
2747 cd $src
|
gokhlayeh@204
|
2748 ./configure && make && make install
|
pankso@7
|
2749 }
|
pankso@7
|
2750
|
pankso@7
|
2751 # Rules to gen a SliTaz package suitable for Tazpkg.
|
pankso@7
|
2752 genpkg_rules()
|
pankso@7
|
2753 {
|
pankso@7
|
2754 mkdir -p $fs/usr
|
pankso@7
|
2755 cp -a $_pkg/usr/bin $fs/usr
|
pankso@7
|
2756 }
|
pankso@7
|
2757
|
pankso@7
|
2758 EOF
|
pankso@7
|
2759 #
|
pankso@7
|
2760 # Default receipt end.
|
pankso@7
|
2761 #
|
pankso@7
|
2762 status
|
pankso@7
|
2763 # Interactive mode, asking and seding.
|
pankso@7
|
2764 if [ "$3" = "--interactive" ]; then
|
paul@154
|
2765 echo "Entering into interactive mode..."
|
pankso@7
|
2766 echo "================================================================================"
|
pankso@7
|
2767 echo "Package : $PACKAGE"
|
pankso@7
|
2768 # Version.
|
pankso@7
|
2769 echo -n "Version : " ; read anser
|
pankso@7
|
2770 sed -i s/'VERSION=\"\"'/"VERSION=\"$anser\""/ receipt
|
pankso@7
|
2771 # Category.
|
pankso@7
|
2772 echo -n "Category : " ; read anser
|
pankso@7
|
2773 sed -i s/'CATEGORY=\"\"'/"CATEGORY=\"$anser\""/ receipt
|
pankso@7
|
2774 # Short description.
|
pankso@7
|
2775 echo -n "Short desc : " ; read anser
|
pankso@7
|
2776 sed -i s/'SHORT_DESC=\"\"'/"SHORT_DESC=\"$anser\""/ receipt
|
pankso@7
|
2777 # Maintainer.
|
pankso@7
|
2778 echo -n "Maintainer : " ; read anser
|
pankso@7
|
2779 sed -i s/'MAINTAINER=\"\"'/"MAINTAINER=\"$anser\""/ receipt
|
pankso@7
|
2780 # Web site.
|
pankso@7
|
2781 echo -n "Web site : " ; read anser
|
pankso@133
|
2782 sed -i s#'WEB_SITE=\"\"'#"WEB_SITE=\"$anser\""# receipt
|
pankso@7
|
2783 echo ""
|
pankso@7
|
2784 # Wget URL.
|
pankso@7
|
2785 echo "Wget URL to download source tarball."
|
pankso@7
|
2786 echo "Example : \$GNU_MIRROR/\$PACKAGE/\$TARBALL"
|
pankso@7
|
2787 echo -n "Wget url : " ; read anser
|
pankso@7
|
2788 sed -i s#'WGET_URL=\"\"'#"WGET_URL=\"$anser\""# receipt
|
pankso@7
|
2789 # Ask for a stuff dir.
|
pankso@7
|
2790 echo -n "Do you need a stuff directory ? (y/N) : " ; read anser
|
pankso@7
|
2791 if [ "$anser" = "y" ]; then
|
pankso@7
|
2792 echo -n "Creating the stuff directory..."
|
pankso@7
|
2793 mkdir stuff && status
|
pankso@7
|
2794 fi
|
pankso@7
|
2795 # Ask for a description file.
|
pankso@7
|
2796 echo -n "Are you going to write a description ? (y/N) : " ; read anser
|
pankso@7
|
2797 if [ "$anser" = "y" ]; then
|
pankso@7
|
2798 echo -n "Creating the description.txt file..."
|
pankso@7
|
2799 echo "" > description.txt && status
|
pankso@7
|
2800 fi
|
pankso@7
|
2801 echo "================================================================================"
|
pankso@7
|
2802 echo ""
|
pankso@7
|
2803 fi
|
gokhlayeh@186
|
2804 ;;
|
pankso@7
|
2805 remove)
|
pankso@7
|
2806 # Remove a package from the wok.
|
pankso@7
|
2807 #
|
gokhlayeh@186
|
2808 get_tazwok_config
|
pankso@7
|
2809 check_for_package_on_cmdline
|
pankso@7
|
2810 echo ""
|
pascal@83
|
2811 echo -n "Please confirm deletion (y/N) : "; read anser
|
pascal@83
|
2812 if [ "$anser" = "y" ]; then
|
pascal@83
|
2813 echo -n "Removing $PACKAGE..."
|
pascal@83
|
2814 rm -rf $WOK/$PACKAGE && status
|
pascal@83
|
2815 echo ""
|
pascal@83
|
2816 fi
|
gokhlayeh@186
|
2817 ;;
|
gokhlayeh@304
|
2818 update-wok)
|
paul@166
|
2819 # Pull and update a Hg wok.
|
gokhlayeh@304
|
2820 get_options_list="local"
|
gokhlayeh@186
|
2821 get_tazwok_config
|
gokhlayeh@304
|
2822 clean_wok=$LOCAL_REPOSITORY/clean-wok
|
gokhlayeh@304
|
2823 cd $clean_wok
|
gokhlayeh@304
|
2824 if ! [ "$local" ]; then
|
gokhlayeh@304
|
2825 if [ "$WOK_UPDATE_METHOD" = hg ]; then
|
gokhlayeh@304
|
2826 if ! [ -f "$INSTALLED/mercurial/receipt" ]; then
|
gokhlayeh@304
|
2827
|
gokhlayeh@304
|
2828 # Auto-install only if we are in a cook chroot.
|
gokhlayeh@304
|
2829 if [ -x /usr/bin/clean-chroot ]; then
|
gokhlayeh@304
|
2830 echo "" >&2
|
gokhlayeh@304
|
2831 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
|
2832 echo "">&2
|
gokhlayeh@304
|
2833 else
|
gokhlayeh@304
|
2834 tazpkg get-install mercurial
|
gokhlayeh@304
|
2835 fi
|
gokhlayeh@304
|
2836
|
gokhlayeh@304
|
2837 fi
|
gokhlayeh@304
|
2838 if [ -d .hg ]; then
|
gokhlayeh@304
|
2839 hg pull -u || exit 1
|
gokhlayeh@304
|
2840 else
|
gokhlayeh@304
|
2841 hg clone $HG_WOK . || exit 1
|
gokhlayeh@304
|
2842 fi
|
gokhlayeh@304
|
2843 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@304
|
2844 else
|
gokhlayeh@304
|
2845 { mkdir .tmp && cd .tmp
|
gokhlayeh@304
|
2846 wget "$TARBALL_WOK" &&
|
gokhlayeh@304
|
2847 case $TARBALL_WOK in
|
gokhlayeh@304
|
2848 *bz2) tar xjf *.bz2 -C wok; rm *.bz2;;
|
gokhlayeh@304
|
2849 *lzma) unlzma -c *.lzma | tar xf - -C wok; rm *.lzma ;;
|
gokhlayeh@304
|
2850 *gz) tar xzf *.gz -C wok; rm*.gz ;;
|
gokhlayeh@304
|
2851 esac &&
|
gokhlayeh@304
|
2852 rm -r $(ls -d $clean_wok/*) &&
|
gokhlayeh@304
|
2853 cp -a wok/* $clean_wok &&
|
gokhlayeh@304
|
2854 cd .. &&
|
gokhlayeh@304
|
2855 rm -r .tmp
|
gokhlayeh@304
|
2856 } || { echo "That's not cool: it fails!" >&2
|
gokhlayeh@304
|
2857 exit 1; }
|
gokhlayeh@304
|
2858 fi
|
pankso@106
|
2859 fi
|
gokhlayeh@304
|
2860
|
gokhlayeh@304
|
2861 # Handle removed packages (removing receipt from wok is enough).
|
gokhlayeh@304
|
2862 for dir in $(ls -d $WOK/*); do
|
gokhlayeh@304
|
2863 [ -d "$dir" ] || rm $WOK/$dir/receipt
|
gokhlayeh@304
|
2864 done
|
gokhlayeh@304
|
2865
|
gokhlayeh@304
|
2866 cp -a * $WOK
|
gokhlayeh@186
|
2867 ;;
|
pankso@108
|
2868 maintainers)
|
gokhlayeh@186
|
2869 get_tazwok_config
|
pankso@108
|
2870 echo ""
|
pankso@108
|
2871 echo "List of maintainers for: $WOK"
|
pankso@108
|
2872 echo "================================================================================"
|
pankso@108
|
2873 touch /tmp/slitaz-maintainers
|
pankso@108
|
2874 for pkg in $WOK/*
|
pankso@108
|
2875 do
|
pankso@108
|
2876 . $pkg/receipt
|
gokhlayeh@195
|
2877 if ! fgrep -q "$MAINTAINER" /tmp/slitaz-maintainers; then
|
pankso@108
|
2878 echo "$MAINTAINER" >> /tmp/slitaz-maintainers
|
pankso@108
|
2879 echo "$MAINTAINER"
|
pankso@108
|
2880 fi
|
pankso@108
|
2881 done
|
pankso@108
|
2882 echo "================================================================================"
|
pankso@108
|
2883 echo "Maintainers: `cat /tmp/slitaz-maintainers | wc -l`"
|
pankso@108
|
2884 echo ""
|
pankso@108
|
2885 # Remove tmp files
|
gokhlayeh@186
|
2886 rm -f /tmp/slitaz-maintainers
|
gokhlayeh@186
|
2887 ;;
|
pankso@107
|
2888 maintained-by)
|
paul@166
|
2889 # Search for packages maintained by a contributor.
|
gokhlayeh@186
|
2890 get_tazwok_config
|
pankso@107
|
2891 if [ ! -n "$2" ]; then
|
gokhlayeh@186
|
2892 echo "Specify a name or email of a maintainer." >&2
|
gokhlayeh@186
|
2893 exit 1
|
pankso@107
|
2894 fi
|
pankso@107
|
2895 echo "Maintainer packages"
|
pankso@107
|
2896 echo "================================================================================"
|
pankso@107
|
2897 for pkg in $WOK/*
|
pankso@107
|
2898 do
|
pankso@107
|
2899 . $pkg/receipt
|
gokhlayeh@195
|
2900 if echo "$MAINTAINER" | fgrep -q "$2"; then
|
pankso@107
|
2901 echo "$PACKAGE"
|
gokhlayeh@186
|
2902 packages=$(($PACKAGEs+1))
|
pankso@107
|
2903 fi
|
pankso@107
|
2904 done
|
pankso@107
|
2905 echo "================================================================================"
|
gokhlayeh@186
|
2906 echo "Packages maintained by $2: $PACKAGEs"
|
gokhlayeh@186
|
2907 echo ""
|
gokhlayeh@186
|
2908 ;;
|
gokhlayeh@268
|
2909 tags)
|
gokhlayeh@268
|
2910 get_tazwok_config
|
gokhlayeh@268
|
2911 echo -e "\n\033[1mTags list :\033[0m"
|
gokhlayeh@268
|
2912 horizontal_line
|
gokhlayeh@268
|
2913 cd $WOK
|
gokhlayeh@268
|
2914 for i in */receipt; do
|
gokhlayeh@268
|
2915 unset TAGS
|
gokhlayeh@268
|
2916 source $i
|
gokhlayeh@268
|
2917 for t in $TAGS; do
|
gokhlayeh@268
|
2918 grep -q ^$t$ $tmp/tags && continue
|
gokhlayeh@268
|
2919 echo $t | tee -a $tmp/tags
|
gokhlayeh@268
|
2920 done
|
gokhlayeh@268
|
2921 done
|
gokhlayeh@268
|
2922 horizontal_line
|
gokhlayeh@268
|
2923 echo "$(wc -l $tmp/tags | cut -f1 -d ' ') tags listed."
|
gokhlayeh@268
|
2924 ;;
|
erjo@159
|
2925 check-src)
|
erjo@159
|
2926 # Verify if upstream package is still available
|
erjo@159
|
2927 #
|
gokhlayeh@186
|
2928 get_tazwok_config
|
erjo@159
|
2929 check_for_package_on_cmdline
|
erjo@159
|
2930 check_for_receipt
|
gokhlayeh@186
|
2931 source_receipt
|
erjo@159
|
2932 check_src()
|
erjo@159
|
2933 {
|
erjo@159
|
2934 for url in $@; do
|
pascal@178
|
2935 busybox wget -s $url 2>/dev/null && break
|
erjo@159
|
2936 done
|
erjo@159
|
2937 }
|
gokhlayeh@186
|
2938 if [ "$WGET_URL" ];then
|
erjo@159
|
2939 echo -n "$PACKAGE : "
|
erjo@159
|
2940 check_src $WGET_URL
|
erjo@159
|
2941 status
|
erjo@159
|
2942 else
|
erjo@159
|
2943 echo "No tarball to check for $PACKAGE"
|
erjo@159
|
2944 fi
|
gokhlayeh@186
|
2945 ;;
|
gokhlayeh@186
|
2946 get-src)
|
gokhlayeh@186
|
2947 check_root
|
gokhlayeh@225
|
2948 get_options_list="target nounpack"
|
gokhlayeh@186
|
2949 get_tazwok_config
|
gokhlayeh@186
|
2950 check_for_package_on_cmdline
|
gokhlayeh@186
|
2951 check_for_receipt
|
gokhlayeh@186
|
2952 source_receipt
|
gokhlayeh@186
|
2953 if [ "$WGET_URL" ];then
|
gokhlayeh@186
|
2954 source_lib report
|
gokhlayeh@186
|
2955 report start
|
gokhlayeh@225
|
2956 check_for_tarball
|
gokhlayeh@186
|
2957 else
|
gokhlayeh@186
|
2958 echo "No tarball to download for $PACKAGE"
|
gokhlayeh@186
|
2959 fi
|
gokhlayeh@186
|
2960 ;;
|
gokhlayeh@204
|
2961 check-commit)
|
gokhlayeh@186
|
2962 check_root
|
gokhlayeh@204
|
2963 get_options_list="missing forced"
|
gokhlayeh@186
|
2964 get_tazwok_config
|
gokhlayeh@186
|
2965 source_lib report
|
gokhlayeh@186
|
2966 report start
|
gokhlayeh@204
|
2967 if [ "$forced" ]; then
|
gokhlayeh@204
|
2968 rm -f $WOK/*/md5
|
gokhlayeh@204
|
2969 unset forced
|
gokhlayeh@204
|
2970 fi
|
gokhlayeh@204
|
2971 if [ "$missing" ]; then
|
gokhlayeh@204
|
2972 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
2973 else
|
gokhlayeh@204
|
2974 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
2975 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
2976 } | sort -u)"
|
gokhlayeh@204
|
2977 fi
|
gokhlayeh@204
|
2978 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
2979 gen_cook_list
|
gokhlayeh@186
|
2980 ;;
|
gokhlayeh@186
|
2981 cook-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 cook_list
|
gokhlayeh@186
|
3001 ;;
|
gokhlayeh@186
|
3002 cook-all)
|
gokhlayeh@186
|
3003 check_root
|
gokhlayeh@204
|
3004 get_options_list="forced missing"
|
gokhlayeh@186
|
3005 get_tazwok_config
|
gokhlayeh@186
|
3006 source_lib report
|
gokhlayeh@186
|
3007 report start
|
gokhlayeh@204
|
3008 if [ "$missing" ]; then
|
gokhlayeh@204
|
3009 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3010 else
|
gokhlayeh@204
|
3011 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3012 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3013 } | sort -u)"
|
gokhlayeh@204
|
3014 fi
|
gokhlayeh@204
|
3015 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@204
|
3016 gen_cook_list
|
gokhlayeh@186
|
3017 cook_list
|
gokhlayeh@186
|
3018 ;;
|
gokhlayeh@186
|
3019 gen-wok-db)
|
gokhlayeh@186
|
3020 check_root
|
gokhlayeh@186
|
3021 get_tazwok_config
|
gokhlayeh@186
|
3022 source_lib report
|
gokhlayeh@186
|
3023 report start
|
gokhlayeh@204
|
3024 gen_wok_db
|
gokhlayeh@186
|
3025 ;;
|
gokhlayeh@186
|
3026 report)
|
gokhlayeh@186
|
3027 get_tazwok_config
|
gokhlayeh@186
|
3028 cd $PACKAGES_REPOSITORY
|
gokhlayeh@239
|
3029 if [ "$2" ]; then
|
gokhlayeh@239
|
3030 case $2 in
|
gokhlayeh@239
|
3031 commit|cooklist|incoming|broken|blocked)
|
gokhlayeh@239
|
3032 show="$2"
|
gokhlayeh@239
|
3033 ;;
|
gokhlayeh@239
|
3034 *)
|
gokhlayeh@239
|
3035 echo "usage : tazwok report [commit|cooklist|incoming|broken|blocked]" >&2
|
gokhlayeh@239
|
3036 exit 1
|
gokhlayeh@239
|
3037 ;;
|
gokhlayeh@239
|
3038 esac
|
gokhlayeh@239
|
3039 else
|
gokhlayeh@239
|
3040 show="commit cooklist incoming broken blocked"
|
gokhlayeh@239
|
3041 fi
|
gokhlayeh@239
|
3042 for i in $show; do
|
gokhlayeh@186
|
3043 if [ -s $i ]; then
|
gokhlayeh@239
|
3044 echo ""
|
gokhlayeh@239
|
3045 echo -e "\033[1m$i\033[0m"
|
gokhlayeh@239
|
3046 echo "================================================================================"
|
gokhlayeh@239
|
3047 cat $i
|
gokhlayeh@239
|
3048 echo "================================================================================"
|
gokhlayeh@239
|
3049 echo ""
|
gokhlayeh@186
|
3050 fi
|
gokhlayeh@186
|
3051 done
|
gokhlayeh@186
|
3052 ;;
|
gokhlayeh@186
|
3053 check-incoming)
|
gokhlayeh@186
|
3054 check_root
|
gokhlayeh@214
|
3055 get_options_list="forced"
|
gokhlayeh@186
|
3056 get_tazwok_config
|
gokhlayeh@186
|
3057 source_lib report
|
gokhlayeh@186
|
3058 report start
|
gokhlayeh@186
|
3059 check_for_incoming
|
gokhlayeh@186
|
3060 ;;
|
gokhlayeh@190
|
3061 configure-chroot)
|
gokhlayeh@190
|
3062 check_root
|
gokhlayeh@190
|
3063 get_tazwok_config
|
gokhlayeh@190
|
3064 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@190
|
3065 cd $LOCAL_REPOSITORY
|
gokhlayeh@190
|
3066 configure_tazchroot
|
gokhlayeh@190
|
3067 else
|
gokhlayeh@190
|
3068 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@190
|
3069 exit 1
|
gokhlayeh@190
|
3070 fi
|
gokhlayeh@190
|
3071 ;;
|
gokhlayeh@186
|
3072 chroot)
|
gokhlayeh@186
|
3073 check_root
|
gokhlayeh@186
|
3074 get_tazwok_config
|
gokhlayeh@186
|
3075 # Merge this and the other chroot function ?.
|
gokhlayeh@186
|
3076 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
3077 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
3078 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
3079 tazchroot
|
gokhlayeh@186
|
3080 else
|
gokhlayeh@186
|
3081 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@186
|
3082 exit 1
|
gokhlayeh@186
|
3083 fi
|
gokhlayeh@186
|
3084 ;;
|
gokhlayeh@186
|
3085 cook-toolchain)
|
gokhlayeh@186
|
3086 check_root
|
gokhlayeh@186
|
3087 get_tazwok_config
|
gokhlayeh@186
|
3088 echo -n "" > $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
3089 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
3090 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
3091 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
3092 tazchroot cook-toolchain
|
gokhlayeh@186
|
3093 # Buggy : chroot can be elsewhere.
|
gokhlayeh@186
|
3094 rm -r $LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
3095 # /!\ to be writed :
|
gokhlayeh@186
|
3096 # next rm chroot and plan cook-all by pushing all packages
|
gokhlayeh@186
|
3097 # in cooklist.
|
gokhlayeh@186
|
3098 else
|
gokhlayeh@186
|
3099 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@186
|
3100 exit 1
|
gokhlayeh@186
|
3101 fi
|
gokhlayeh@186
|
3102 ;;
|
gokhlayeh@235
|
3103 webserver)
|
gokhlayeh@235
|
3104 check_root
|
gokhlayeh@235
|
3105 get_tazwok_config
|
gokhlayeh@235
|
3106 if [ "$ARG" = on ]; then
|
gokhlayeh@235
|
3107 if [ "$WEBSERVER" ] && [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3108 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3109 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3110 exit 1
|
gokhlayeh@235
|
3111 fi
|
gokhlayeh@235
|
3112 if ! [ -f $LOCAL_REPOSITORY/tazchroot.conf ]; then
|
gokhlayeh@235
|
3113 tazwok configure-chroot ${undigest:+--undigest=$undigest} --SLITAZ_VERSION=$SLITAZ_VERSION --SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@235
|
3114 fi
|
gokhlayeh@235
|
3115 for pkg in php lighttpd; do
|
gokhlayeh@235
|
3116 [ -d $INSTALLED/$pkg ] || missing="$missing $pkg"
|
gokhlayeh@235
|
3117 done
|
gokhlayeh@235
|
3118 if [ "$missing" ]; then
|
gokhlayeh@235
|
3119 echo "You need to install those packages to start webserver: $missing." >&2
|
gokhlayeh@235
|
3120 exit 1
|
gokhlayeh@235
|
3121 fi
|
gokhlayeh@235
|
3122 if [ ! -f "$LOCAL_REPOSITORY/tazwok.conf" ]; then
|
gokhlayeh@235
|
3123 echo "Copying /etc/slitaz/tazwok.conf to $LOCAL_REPOSITORY/tazwok.conf: webserver is configured repository-by-repository."
|
gokhlayeh@235
|
3124 cp /etc/slitaz/tazwok.conf $LOCAL_REPOSITORY
|
gokhlayeh@235
|
3125 fi
|
gokhlayeh@235
|
3126 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3127 echo -n "Where to store php pages (default: /var/www/vhosts/bb)? "
|
gokhlayeh@235
|
3128 read WEBSERVER
|
gokhlayeh@235
|
3129 [ "$WEBSERVER" ] || WEBSERVER="/var/www/vhosts/bb"
|
gokhlayeh@235
|
3130 fi
|
gokhlayeh@235
|
3131 if [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3132 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3133 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3134 exit 1
|
gokhlayeh@235
|
3135 fi
|
gokhlayeh@235
|
3136 mkdir -p $WEBSERVER
|
gokhlayeh@235
|
3137 echo "${undigest:-$SLITAZ_VERSION}" >> $WEBSERVER/repositories.list
|
gokhlayeh@267
|
3138 for file in index.php log.php download.php; do
|
gokhlayeh@235
|
3139 [ -f "$WEBSERVER/$file" ] || ln -s /usr/share/slitaz/web-bb/$file $WEBSERVER
|
gokhlayeh@235
|
3140 done
|
gokhlayeh@267
|
3141 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3142 ln -s $dir $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3143 done
|
gokhlayeh@235
|
3144 source $LOCAL_REPOSITORY/tazchroot.conf
|
gokhlayeh@235
|
3145 echo "<?php
|
gokhlayeh@235
|
3146
|
gokhlayeh@235
|
3147 // Web interface configuration
|
gokhlayeh@235
|
3148
|
gokhlayeh@235
|
3149 \$version=\"${undigest:-$SLITAZ_VERSION}\";
|
gokhlayeh@235
|
3150 \$chroot=\"$chroot_dir\";
|
gokhlayeh@235
|
3151 \$lockfile=\"\$chroot/proc/1\";
|
gokhlayeh@235
|
3152 \$db_dir=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3153 \$log_dir=\"$LOCAL_REPOSITORY/log\";
|
gokhlayeh@235
|
3154 \$packages=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3155 \$incoming=\"$INCOMING_REPOSITORY\";
|
gokhlayeh@251
|
3156 \$wok=\"$WOK\";
|
gokhlayeh@235
|
3157
|
gokhlayeh@235
|
3158 ?>" > $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@235
|
3159 [ -L "$WEBSERVER/web" ] || ln -s /usr/share/slitaz/web $WEBSERVER
|
gokhlayeh@235
|
3160 echo "WEBSERVER=\"$WEBSERVER\"" >> $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3161 if [ -L "$WEBSERVER/conf.php" ]; then
|
gokhlayeh@235
|
3162 echo "Do yo want to make ${undigest:-$SLITAZ_VERSION} the default page (y/N) ? "
|
gokhlayeh@235
|
3163 read answer
|
gokhlayeh@235
|
3164 if [ "$answer" = y ]; then
|
gokhlayeh@235
|
3165 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3166 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3167 fi
|
gokhlayeh@235
|
3168 else
|
gokhlayeh@235
|
3169 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3170 fi
|
gokhlayeh@235
|
3171 elif [ "$ARG" = off ]; then
|
gokhlayeh@235
|
3172 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3173 echo "No webserver running for ${undigest:-$SLITAZ_VERSION}" >&2
|
gokhlayeh@235
|
3174 exit 1
|
gokhlayeh@235
|
3175 fi
|
gokhlayeh@235
|
3176 sed '/^WEBSERVER/d' -i $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3177 sed "/^${undigest:-$SLITAZ_VERSION}$/d" -i $WEBSERVER/repositories.list
|
gokhlayeh@235
|
3178 rm $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@267
|
3179 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3180 rm $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3181 done
|
gokhlayeh@235
|
3182 if ! [ -s "$WEBSERVER/repositories.list" ]; then
|
gokhlayeh@235
|
3183 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
|
3184 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3185 elif [ "$(readlink $WEBSERVER/conf.php)" = "$WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php" ]; then
|
gokhlayeh@235
|
3186 echo "${undigest:-$SLITAZ_VERSION} was the default version to use; switched to : $(sed 1!d $WEBSERVER/repositories.list)"
|
gokhlayeh@235
|
3187 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3188 ln -s $WEBSERVER/conf-$(sed 1!d $WEBSERVER/repositories.list).php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3189 fi
|
gokhlayeh@235
|
3190 else
|
gokhlayeh@235
|
3191 echo "Usage: tazwok webserver on/off" >&2
|
gokhlayeh@235
|
3192 exit 1
|
gokhlayeh@235
|
3193 fi
|
gokhlayeh@235
|
3194 ;;
|
pankso@7
|
3195 usage|*)
|
MikeDSmith25@82
|
3196 # Print usage also for all unknown commands.
|
pankso@7
|
3197 #
|
pankso@7
|
3198 usage
|
gokhlayeh@186
|
3199 ;;
|
pankso@7
|
3200 esac
|
pankso@7
|
3201
|
gokhlayeh@186
|
3202 report stop 2>/dev/null || exit 0
|