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