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