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@383
|
939 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/commit
|
gokhlayeh@381
|
940
|
gokhlayeh@381
|
941 gen_cookmd5
|
gokhlayeh@381
|
942
|
gokhlayeh@381
|
943 # Return 1 to make report know that's mother-function failed.
|
gokhlayeh@381
|
944 return 1
|
gokhlayeh@381
|
945 }
|
gokhlayeh@381
|
946
|
MikeDSmith25@82
|
947 # Create a package tree and build the gziped cpio archive
|
pankso@7
|
948 # to make a SliTaz (.tazpkg) package.
|
pankso@7
|
949 gen_package()
|
pankso@7
|
950 {
|
pankso@7
|
951 check_root
|
pankso@7
|
952 check_for_package_on_cmdline
|
pankso@7
|
953 check_for_receipt
|
gokhlayeh@381
|
954 source_receipt
|
gokhlayeh@186
|
955
|
pascal@86
|
956 # May compute VERSION
|
pascal@86
|
957 if grep -q ^get_version $RECEIPT; then
|
pascal@86
|
958 get_version
|
pascal@86
|
959 fi
|
pankso@7
|
960 check_for_wanted
|
pankso@7
|
961 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
962
|
pankso@7
|
963 # Remove old Tazwok package files.
|
gokhlayeh@186
|
964 [ -d "taz" ] && rm -rf taz
|
gokhlayeh@186
|
965
|
MikeDSmith25@82
|
966 # Create the package tree and set useful variables.
|
gokhlayeh@266
|
967 fs=$WOK/$PACKAGE/taz/$PACKAGE-$VERSION/fs
|
gokhlayeh@381
|
968 mkdir -p $fs
|
gokhlayeh@186
|
969
|
MikeDSmith25@82
|
970 # Set $src for standard package and $_pkg variables.
|
gokhlayeh@302
|
971 set_src_path
|
gokhlayeh@302
|
972 set_pkg_path
|
gokhlayeh@186
|
973
|
pankso@135
|
974 # Execute genpkg_rules, check package and copy generic files to build
|
pankso@135
|
975 # the package.
|
gokhlayeh@186
|
976 report step "Building $PACKAGE with the receipt"
|
gokhlayeh@186
|
977 report open-bloc
|
gokhlayeh@381
|
978 if look_for_cookopt !fs; then
|
gokhlayeh@381
|
979 :
|
gokhlayeh@381
|
980 elif grep -q ^genpkg_rules $RECEIPT; then
|
gokhlayeh@186
|
981
|
pankso@7
|
982 # Log process.
|
pankso@7
|
983 echo "executing genpkg_rules" >> $LOG
|
gokhlayeh@186
|
984 report step "Executing genpkg_rules"
|
gokhlayeh@381
|
985 ( set -e; genpkg_rules ) || { set_pkg_broken; report close-bloc; return 1; }
|
gokhlayeh@381
|
986 check_fsh || { set_pkg_broken; report close-bloc; return 1; }
|
gokhlayeh@381
|
987 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
988 report end-step
|
gokhlayeh@381
|
989
|
pankso@133
|
990 # Skip generic files for packages with a WANTED variable
|
pankso@24
|
991 # (dev and splited pkgs).
|
gokhlayeh@186
|
992 if [ ! "$WANTED" ]; then
|
pankso@24
|
993 copy_generic_files
|
pankso@24
|
994 fi
|
gokhlayeh@204
|
995 look_for_cookopt !strip || strip_package
|
slaxemulator@183
|
996 py_compiled_files_remove
|
pankso@7
|
997 else
|
gokhlayeh@186
|
998 echo "No package rules to gen $PACKAGE..." >&2
|
gokhlayeh@381
|
999 set_pkg_broken
|
gokhlayeh@381
|
1000 report close-bloc
|
gokhlayeh@381
|
1001 return 1
|
pankso@7
|
1002 fi
|
gokhlayeh@186
|
1003
|
paul@154
|
1004 # Copy the receipt and description (if exists) into the binary package tree.
|
pankso@7
|
1005 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1006 report step "Copying the receipt"
|
pankso@7
|
1007 cp receipt taz/$PACKAGE-$VERSION
|
gokhlayeh@186
|
1008 report end-step
|
pascal@89
|
1009 if grep -q ^get_version $RECEIPT; then
|
gokhlayeh@186
|
1010 report step "Updating version in receipt"
|
pascal@89
|
1011 sed -i "s/^VERSION=.*/VERSION=\"$VERSION\"/" \
|
pascal@89
|
1012 taz/$PACKAGE-$VERSION/receipt
|
gokhlayeh@186
|
1013 report end-step
|
pascal@89
|
1014 fi
|
pankso@7
|
1015 if [ -f "description.txt" ]; then
|
gokhlayeh@186
|
1016 report step "Copying the description file"
|
pankso@7
|
1017 cp description.txt taz/$PACKAGE-$VERSION
|
gokhlayeh@186
|
1018 report end-step
|
pankso@7
|
1019 fi
|
gokhlayeh@186
|
1020
|
gokhlayeh@186
|
1021 # Generate md5 of cooking stuff to look for commit later.
|
gokhlayeh@186
|
1022 gen_cookmd5
|
gokhlayeh@186
|
1023 echo -e "\n# md5sum of cooking stuff :" >> taz/$PACKAGE-$VERSION/receipt
|
gokhlayeh@186
|
1024 cat md5 | sed 's/^/# /' >> taz/$PACKAGE-$VERSION/receipt
|
gokhlayeh@186
|
1025
|
MikeDSmith25@82
|
1026 # Create the files.list by redirecting find output.
|
gokhlayeh@186
|
1027 report step "Creating the list of files"
|
pascal@15
|
1028 cd taz/$PACKAGE-$VERSION
|
pascal@13
|
1029 LAST_FILE=""
|
gokhlayeh@195
|
1030 { find fs -print; echo; } | while read file; do
|
gokhlayeh@186
|
1031 if [ "$LAST_FILE" ]; then
|
pascal@15
|
1032 case "$file" in
|
pascal@13
|
1033 $LAST_FILE/*)
|
pankso@133
|
1034 case "$(ls -ld "$LAST_FILE")" in
|
pascal@15
|
1035 drwxr-xr-x\ *\ root\ *\ root\ *);;
|
pascal@15
|
1036 *) echo ${LAST_FILE#fs};;
|
pascal@13
|
1037 esac;;
|
pascal@15
|
1038 *) echo ${LAST_FILE#fs};;
|
pascal@13
|
1039 esac
|
pascal@13
|
1040 fi
|
pascal@15
|
1041 LAST_FILE="$file"
|
pascal@15
|
1042 done > files.list
|
gokhlayeh@186
|
1043
|
gokhlayeh@186
|
1044 # Next, check if something has changed in lib files.
|
gokhlayeh@215
|
1045 if fgrep -q '.so' files.list; then
|
gokhlayeh@215
|
1046 for rep in $INCOMING_REPOSITORY $PACKAGES_REPOSITORY \
|
gokhlayeh@295
|
1047 $([ "$undigest" ] && echo $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming && \
|
gokhlayeh@215
|
1048 echo $SLITAZ_DIR/$SLITAZ_VERSION/packages); do
|
gokhlayeh@215
|
1049 prev_VERSION=$(get_pkg_version $rep)
|
gokhlayeh@215
|
1050 [ "$prev_VERSION" ] && pkg_file=$rep/$PACKAGE-$prev_VERSION.tazpkg && break
|
gokhlayeh@215
|
1051 done
|
gokhlayeh@215
|
1052 if [ "$pkg_file" ]; then
|
gokhlayeh@295
|
1053 report step "Look for major/minor update in libraries"
|
gokhlayeh@215
|
1054 get_pkg_files $pkg_file
|
gokhlayeh@215
|
1055 cd $WOK/$PACKAGE/taz/$PACKAGE-$VERSION
|
gokhlayeh@215
|
1056 fgrep ".so" files.list | egrep -v "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" | \
|
gokhlayeh@215
|
1057 while read lib; do
|
gokhlayeh@215
|
1058 fgrep -q "$lib" $pkg_files_dir/files.list && continue
|
gokhlayeh@215
|
1059 echo "A minor/major update in libraries is detected, planning re-cook of reverse-depends of $PACKAGE."
|
gokhlayeh@215
|
1060 for rdep in $(scan $PACKAGE --look_for=rdep | use_wanted); do
|
gokhlayeh@215
|
1061 [ "$rdep" = "${WANTED:-$PACKAGE}" ] && continue
|
gokhlayeh@215
|
1062 grep -q ^$rdep$ $PACKAGES_REPOSITORY/blocked \
|
gokhlayeh@215
|
1063 $PACKAGES_REPOSITORY/cooklist && continue
|
gokhlayeh@215
|
1064 echo $rdep >> $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@215
|
1065 done
|
gokhlayeh@215
|
1066 regen_cooklist=yes
|
gokhlayeh@215
|
1067 break
|
gokhlayeh@215
|
1068 done
|
gokhlayeh@215
|
1069 rm -r $pkg_files_dir
|
gokhlayeh@295
|
1070 unset pkg_file
|
gokhlayeh@295
|
1071 report end-step
|
gokhlayeh@295
|
1072 fi
|
gokhlayeh@295
|
1073 fi
|
gokhlayeh@186
|
1074 if [ ! "$EXTRAVERSION" ]; then
|
pascal@84
|
1075 case "$PACKAGE" in
|
pascal@84
|
1076 linux*);;
|
pascal@85
|
1077 *) EXTRAVERSION="$(grep '/lib/modules/.*-slitaz/' files.list |\
|
pascal@84
|
1078 head -1 | sed 's|/lib/modules/\(.*\)-slitaz/.*|_\1|')";;
|
pascal@84
|
1079 esac
|
pascal@84
|
1080 fi
|
gokhlayeh@186
|
1081 rm -f $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg 2> /dev/null
|
gokhlayeh@186
|
1082 report step "Creating md5sum of files"
|
pascal@70
|
1083 while read file; do
|
pascal@71
|
1084 [ -L "fs$file" ] && continue
|
pascal@71
|
1085 [ -f "fs$file" ] || continue
|
pascal@71
|
1086 md5sum "fs$file" | sed 's/ fs/ /'
|
pascal@70
|
1087 done < files.list > md5sum
|
gokhlayeh@204
|
1088 report end-step
|
pascal@84
|
1089 UNPACKED_SIZE=$(du -chs fs receipt files.list md5sum description.txt \
|
pascal@84
|
1090 2> /dev/null | awk '{ sz=$1 } END { print sz }')
|
gokhlayeh@186
|
1091
|
pankso@7
|
1092 # Build cpio archives. Find, cpio and gzip the fs, finish by
|
pankso@7
|
1093 # removing the fs tree.
|
gokhlayeh@186
|
1094 # Don't log this because compression always output error messages.
|
pascal@150
|
1095 find fs -print | cpio -o -H newc | case "$PACKAGE-$COMPRESSION" in
|
pascal@150
|
1096 tazpkg-lzma) gzip > fs.cpio.gz;;
|
pascal@150
|
1097 *-lzma) lzma e fs.cpio.lzma -si;;
|
pascal@150
|
1098 *) gzip > fs.cpio.gz;;
|
pascal@150
|
1099 esac && rm -rf fs
|
pascal@150
|
1100 PACKED_SIZE=$(du -chs fs.cpio.* receipt files.list md5sum \
|
pascal@84
|
1101 description.txt 2> /dev/null | awk '{ sz=$1 } END { print sz }')
|
gokhlayeh@186
|
1102 report step "Updating receipt sizes"
|
pascal@138
|
1103 sed -i '/^PACKED_SIZE/d' receipt
|
pascal@138
|
1104 sed -i '/^UNPACKED_SIZE/d' receipt
|
pascal@59
|
1105 sed -i "s/^PACKAGE=/PACKED_SIZE=\"$PACKED_SIZE\"\nUNPACKED_SIZE=\"$UNPACKED_SIZE\"\nPACKAGE=/" receipt
|
pascal@86
|
1106 sed -i "s/^VERSION=$/VERSION=\"$VERSION\"/" receipt
|
gokhlayeh@212
|
1107 report end-step
|
gokhlayeh@212
|
1108 if [ "$EXTRAVERSION" ]; then
|
gokhlayeh@186
|
1109 report step "Updating receipt EXTRAVERSION"
|
pascal@72
|
1110 sed -i s/^EXTRAVERSION.*$// receipt
|
pascal@72
|
1111 sed -i "s/^VERSION=/EXTRAVERSION=\"$EXTRAVERSION\"\nVERSION=/" receipt
|
pascal@72
|
1112 fi
|
gokhlayeh@186
|
1113 prev_VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
|
gokhlayeh@186
|
1114 remove_previous_package $INCOMING_REPOSITORY
|
gokhlayeh@186
|
1115 report step "Creating full cpio archive"
|
gokhlayeh@186
|
1116 find . -print | cpio -o -H newc > $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg
|
gokhlayeh@186
|
1117
|
paul@154
|
1118 # Restore package tree in case we want to browse it.
|
gokhlayeh@186
|
1119 report step "Restoring original package tree"
|
gokhlayeh@195
|
1120 { zcat fs.cpio.gz 2> /dev/null || unlzma -c fs.cpio.lzma; } | cpio --quiet -id
|
pascal@150
|
1121 rm fs.cpio.* && cd ..
|
gokhlayeh@383
|
1122
|
gokhlayeh@383
|
1123 # Recook of reverse-depends if package was broken.
|
gokhlayeh@383
|
1124 if grep -q "^$PACKAGE$" $PACKAGES_REPOSITORY/broken; then
|
gokhlayeh@383
|
1125 report step "Planning re-try a cook of reverse depends"
|
gokhlayeh@383
|
1126 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/broken
|
gokhlayeh@383
|
1127 for rdep in $(look_for_rdep); do
|
gokhlayeh@383
|
1128 grep -q "^$rdep$" $PACKAGES_REPOSITORY/broken || continue
|
gokhlayeh@383
|
1129 grep -q "^$rdep$" $PACKAGES_REPOSITORY/cooklist && continue
|
gokhlayeh@383
|
1130 echo "Adding $rdep to the cooklist"
|
gokhlayeh@383
|
1131 echo $rdep >> $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@383
|
1132 regen_cooklist=t
|
gokhlayeh@383
|
1133 done
|
gokhlayeh@383
|
1134 report end-step
|
gokhlayeh@383
|
1135 fi
|
gokhlayeh@383
|
1136 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/commit
|
gokhlayeh@383
|
1137 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
1138
|
pankso@7
|
1139 # Log process.
|
pascal@69
|
1140 echo "$PACKAGE-$VERSION$EXTRAVERSION.tazpkg (done)" >> $LOG
|
gokhlayeh@186
|
1141 report close-bloc
|
pascal@68
|
1142 echo "Package $PACKAGE ($VERSION$EXTRAVERSION) generated."
|
gokhlayeh@186
|
1143 echo "Size : `du -sh $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg`"
|
pankso@7
|
1144 echo ""
|
pankso@7
|
1145 }
|
pankso@7
|
1146
|
gokhlayeh@186
|
1147 ########################################################################
|
gokhlayeh@186
|
1148 # This section contains functions used by several other functions
|
gokhlayeh@186
|
1149 # bellow.
|
gokhlayeh@186
|
1150 ########################
|
gokhlayeh@186
|
1151
|
gokhlayeh@186
|
1152 # Look for receipt/files.list in wok. If they can't be found, get them
|
gokhlayeh@186
|
1153 # from package. Accept one argument : absolute path to package.
|
gokhlayeh@186
|
1154 get_pkg_files()
|
pankso@28
|
1155 {
|
gokhlayeh@186
|
1156 pkg_files_dir=$tmp/$(basename ${1%.tazpkg})
|
gokhlayeh@186
|
1157 mkdir -p $pkg_files_dir && \
|
gokhlayeh@186
|
1158 cd $pkg_files_dir && \
|
gokhlayeh@186
|
1159 cpio --quiet -idm receipt < $1 && \
|
gokhlayeh@186
|
1160 cpio --quiet -idm files.list < $1
|
gokhlayeh@186
|
1161 }
|
gokhlayeh@170
|
1162
|
gokhlayeh@186
|
1163 ########################################################################
|
gokhlayeh@204
|
1164 # This section contains functions to generate packages databases.
|
gokhlayeh@186
|
1165 ########################
|
gokhlayeh@186
|
1166
|
gokhlayeh@186
|
1167
|
gokhlayeh@186
|
1168 gen_packages_db()
|
gokhlayeh@186
|
1169 {
|
gokhlayeh@186
|
1170 # pkg_repository can be $PACKAGES_REPOSITORY or $INCOMING_REPOSITORY.
|
gokhlayeh@204
|
1171 [ "$pkg_repository" ] || pkg_repository=$PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1172 cd $pkg_repository
|
gokhlayeh@204
|
1173 report step "Generating packages lists: $pkg_repository"
|
gokhlayeh@204
|
1174 report open-bloc
|
gokhlayeh@204
|
1175 report step "Removing old files"
|
gokhlayeh@204
|
1176 for file in files.list.lzma packages.list packages.txt \
|
gokhlayeh@204
|
1177 packages.desc packages.equiv packages.md5; do
|
gokhlayeh@204
|
1178 [ -f $file ] && rm $file
|
gokhlayeh@204
|
1179 done
|
gokhlayeh@204
|
1180 touch files.list
|
gokhlayeh@204
|
1181
|
gokhlayeh@186
|
1182 packages_db_start
|
gokhlayeh@186
|
1183 unset RECEIPT
|
gokhlayeh@186
|
1184 report step "Reading datas from all packages"
|
gokhlayeh@195
|
1185 for pkg in $(echo $pkg_repository/*.tazpkg | fgrep -v '*'); do
|
gokhlayeh@186
|
1186 get_packages_info
|
gokhlayeh@186
|
1187 done
|
gokhlayeh@186
|
1188 report end-step
|
gokhlayeh@186
|
1189 packages_db_end
|
gokhlayeh@204
|
1190 report close-bloc
|
gokhlayeh@186
|
1191 }
|
gokhlayeh@186
|
1192
|
gokhlayeh@186
|
1193 update_packages_db()
|
gokhlayeh@186
|
1194 {
|
gokhlayeh@204
|
1195 [ "$pkg_repository" ] || pkg_repository=$PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1196 cd $pkg_repository
|
gokhlayeh@204
|
1197 for file in packages.list packages.equiv packages.md5 packages.desc \
|
gokhlayeh@204
|
1198 packages.txt; do
|
gokhlayeh@186
|
1199 if [ ! -f "$file" ]; then
|
gokhlayeh@204
|
1200 gen_packages_db
|
gokhlayeh@186
|
1201 return
|
gokhlayeh@170
|
1202 fi
|
gokhlayeh@170
|
1203 done
|
gokhlayeh@186
|
1204 if [ -f files.list.lzma ]; then
|
gokhlayeh@186
|
1205 lzma d files.list.lzma files.list
|
gokhlayeh@186
|
1206 else
|
gokhlayeh@204
|
1207 gen_packages_db
|
gokhlayeh@186
|
1208 fi
|
gokhlayeh@204
|
1209 report step "Updating packages lists: $pkg_repository"
|
gokhlayeh@186
|
1210 packages_db_start
|
gokhlayeh@170
|
1211
|
gokhlayeh@186
|
1212 # Look for removed/update packages.
|
gokhlayeh@186
|
1213 for PACKAGE in $(grep ^[0-9,a-z,A-Z] packages.txt); do
|
gokhlayeh@202
|
1214 pkg="$pkg_repository/$(grep -m1 ^$PACKAGE- packages.list).tazpkg"
|
gokhlayeh@195
|
1215 if ! [ -f "$pkg" ]; then
|
gokhlayeh@186
|
1216 erase_package_info
|
gokhlayeh@186
|
1217 else
|
gokhlayeh@186
|
1218 if [ "$pkg" -nt "packages.list" ]; then
|
gokhlayeh@215
|
1219 updated_pkg="$updated_pkg
|
gokhlayeh@215
|
1220 $PACKAGE $pkg"
|
gokhlayeh@266
|
1221 elif [ ! -f $WOK/$PACKAGE/receipt ] && \
|
gokhlayeh@266
|
1222 [ "$COMMAND" = check-incoming -o "$pkg_repository" = "$INCOMING_REPOSITORY" ]; then
|
gokhlayeh@266
|
1223 erase_package_info
|
gokhlayeh@266
|
1224 echo "Removing $PACKAGE from $pkg_repository."
|
gokhlayeh@266
|
1225 rm $pkg
|
gokhlayeh@266
|
1226 [ -d $WOK/$PACKAGE ] && rm -r $WOK/$PACKAGE
|
gokhlayeh@282
|
1227 sed "/^$PACKAGE\t/d" -i $wan_db $dep_db
|
gokhlayeh@282
|
1228 for i in cookorder.txt cooklist commit blocked broken; do
|
gokhlayeh@282
|
1229 sed "/^$PACKAGE$/d" -i $PACKAGES_REPOSITORY/$i
|
gokhlayeh@282
|
1230 done
|
gokhlayeh@282
|
1231 rm -f $LOCAL_REPOSITORY/log/$PACKAGE.html
|
gokhlayeh@352
|
1232 if [ "$pkg_repository" = "$INCOMING_REPOSITORY" ] && \
|
gokhlayeh@352
|
1233 [ "$(sed 1!d $PACKAGES_REPOSITORY/cookorder.txt)" != "#PlanSort" ] ; then
|
gokhlayeh@266
|
1234 sed 1i"#PlanSort" -i $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@266
|
1235 regen_cooklist=yes
|
gokhlayeh@266
|
1236 else
|
gokhlayeh@266
|
1237 echo "$PACKAGE" >> $PACKAGES_REPOSITORY/removed
|
gokhlayeh@266
|
1238 sed -n '1,10p' -i $PACKAGES_REPOSITORY/removed
|
gokhlayeh@266
|
1239 fi
|
gokhlayeh@186
|
1240 fi
|
pascal@178
|
1241 fi
|
pascal@178
|
1242 done
|
gokhlayeh@215
|
1243 echo "$updated_pkg" | sed 1d | while read PACKAGE pkg; do
|
gokhlayeh@202
|
1244 erase_package_info
|
gokhlayeh@202
|
1245 get_packages_info
|
gokhlayeh@202
|
1246 done
|
gokhlayeh@204
|
1247 unset updated_pkg
|
gokhlayeh@202
|
1248
|
gokhlayeh@186
|
1249 # Look for new packages.
|
gokhlayeh@195
|
1250 for pkg in $(echo $pkg_repository/*.tazpkg | fgrep -v '*'); do
|
gokhlayeh@199
|
1251 if ! fgrep -q " ${pkg##*/}" $pkg_repository/packages.md5; then
|
gokhlayeh@186
|
1252 get_packages_info
|
gokhlayeh@186
|
1253 fi
|
gokhlayeh@186
|
1254 done
|
gokhlayeh@186
|
1255 report end-step
|
gokhlayeh@186
|
1256 packages_db_end
|
gokhlayeh@186
|
1257 }
|
gokhlayeh@186
|
1258
|
gokhlayeh@186
|
1259 packages_db_start()
|
gokhlayeh@186
|
1260 {
|
gokhlayeh@186
|
1261 if [ ! -s packages.txt ]; then
|
gokhlayeh@186
|
1262 echo "# SliTaz GNU/Linux - Packages list
|
gokhlayeh@186
|
1263 #
|
gokhlayeh@186
|
1264 # Packages : unknow
|
gokhlayeh@186
|
1265 # Date : $(date +%Y-%m-%d\ \%H:%M:%S)
|
gokhlayeh@215
|
1266 #
|
gokhlayeh@215
|
1267 " > packages.txt
|
pascal@62
|
1268 else
|
gokhlayeh@186
|
1269 sed -e 's/^# Packages :.*/# Packages : unknow/' \
|
gokhlayeh@186
|
1270 -e "s/# Date :.*/# Date : $(date +%Y-%m-%d\ \%H:%M:%S)/" \
|
gokhlayeh@186
|
1271 -i packages.txt
|
pascal@60
|
1272 fi
|
gokhlayeh@186
|
1273
|
gokhlayeh@186
|
1274 # Needed in some case as tazwok define RECEIPT at configuration time
|
gokhlayeh@186
|
1275 # in this particular case it can broke the script.
|
gokhlayeh@186
|
1276 unset RECEIPT
|
gokhlayeh@186
|
1277 }
|
pankso@28
|
1278
|
gokhlayeh@186
|
1279 erase_package_info()
|
gokhlayeh@186
|
1280 {
|
gokhlayeh@186
|
1281 cd $pkg_repository
|
gokhlayeh@186
|
1282 sed "/^$PACKAGE$/,/^$/d" -i packages.txt
|
gokhlayeh@186
|
1283 sed "/^$PACKAGE /d" -i packages.desc
|
gokhlayeh@186
|
1284 sed -e "s/=$PACKAGE /= /" -e "s/ $PACKAGE / /" -e "s/ $PACKAGE$//" \
|
gokhlayeh@186
|
1285 -e "/=$PACKAGE$/d" -e "s/=[0-9,a-z,A-Z]:$PACKAGE /= /" \
|
gokhlayeh@186
|
1286 -e "s/ [0-9,a-z,A-Z]:$PACKAGE / /" -e "s/ [0-9,a-z,A-Z]:$PACKAGE$/ /" \
|
gokhlayeh@186
|
1287 -e "/=[0-9,a-z,A-Z]:$PACKAGE$/d" \
|
gokhlayeh@186
|
1288 -i packages.equiv
|
gokhlayeh@186
|
1289 sed "/^$PACKAGE:/d" -i files.list
|
gokhlayeh@186
|
1290 sed "/^$(basename ${pkg%.tazpkg})$/d" -i packages.list
|
gokhlayeh@186
|
1291 sed "/ $(basename $pkg)$/d" -i packages.md5
|
gokhlayeh@186
|
1292 }
|
gokhlayeh@186
|
1293
|
gokhlayeh@186
|
1294 get_packages_info()
|
gokhlayeh@186
|
1295 {
|
gokhlayeh@186
|
1296 # If there's no taz folder in the wok, extract infos from the
|
gokhlayeh@186
|
1297 # package.
|
gokhlayeh@186
|
1298 get_pkg_files $pkg
|
gokhlayeh@186
|
1299 source_receipt
|
gokhlayeh@186
|
1300 echo "Getting datas from $PACKAGE"
|
gokhlayeh@186
|
1301
|
gokhlayeh@186
|
1302 cat >> $pkg_repository/packages.txt << _EOT_
|
pankso@28
|
1303 $PACKAGE
|
gokhlayeh@186
|
1304 $VERSION$EXTRAVERSION
|
pankso@28
|
1305 $SHORT_DESC
|
pankso@28
|
1306 _EOT_
|
gokhlayeh@215
|
1307 if [ "$PACKED_SIZE" ]; then
|
gokhlayeh@215
|
1308 cat >> $pkg_repository/packages.txt << _EOT_
|
pankso@133
|
1309 $PACKED_SIZE ($UNPACKED_SIZE installed)
|
gokhlayeh@215
|
1310
|
pascal@60
|
1311 _EOT_
|
gokhlayeh@215
|
1312 else
|
gokhlayeh@215
|
1313 echo "" >> $pkg_repository/packages.txt
|
pascal@60
|
1314 fi
|
gokhlayeh@186
|
1315
|
paul@121
|
1316 # Packages.desc is used by Tazpkgbox <tree>.
|
gokhlayeh@186
|
1317 echo "$PACKAGE | $VERSION$EXTRAVERSION | $SHORT_DESC | $CATEGORY | $WEB_SITE" >> $pkg_repository/packages.desc
|
gokhlayeh@186
|
1318
|
paul@121
|
1319 # Packages.equiv is used by tazpkg install to check depends
|
pascal@99
|
1320 for i in $PROVIDE; do
|
pascal@99
|
1321 DEST=""
|
gokhlayeh@195
|
1322 echo $i | fgrep -q : && DEST="${i#*:}:"
|
gokhlayeh@186
|
1323 if grep -qs ^${i%:*}= $pkg_repository/packages.equiv; then
|
gokhlayeh@186
|
1324 sed -i "s/^${i%:*}=/${i%:*}=$DEST$PACKAGE /" $pkg_repository/packages.equiv
|
pascal@99
|
1325 else
|
gokhlayeh@186
|
1326 echo "${i%:*}=$DEST$PACKAGE" >> $pkg_repository/packages.equiv
|
gokhlayeh@186
|
1327 fi
|
gokhlayeh@186
|
1328 done
|
gokhlayeh@186
|
1329
|
gokhlayeh@186
|
1330 if [ -f files.list ]; then
|
gokhlayeh@186
|
1331 { echo "$PACKAGE"; cat files.list; } | awk '
|
gokhlayeh@186
|
1332 BEGIN { name="" } { if (name == "") name=$0; else printf("%s: %s\n",name,$0); }' >> $pkg_repository/files.list
|
gokhlayeh@186
|
1333 fi
|
gokhlayeh@186
|
1334
|
gokhlayeh@186
|
1335 cd .. && rm -r "$pkg_files_dir"
|
gokhlayeh@186
|
1336
|
gokhlayeh@186
|
1337 cd $pkg_repository
|
gokhlayeh@186
|
1338 echo $(basename ${pkg%.tazpkg}) >> packages.list
|
gokhlayeh@186
|
1339 [ ! "$package_md5" ] && package_md5=$(md5sum $(basename $pkg))
|
gokhlayeh@186
|
1340 echo "$package_md5" >> packages.md5
|
gokhlayeh@186
|
1341 unset package_md5
|
gokhlayeh@186
|
1342 }
|
gokhlayeh@186
|
1343
|
gokhlayeh@186
|
1344 source_receipt()
|
gokhlayeh@186
|
1345 {
|
gokhlayeh@186
|
1346 unset PACKAGE SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \
|
gokhlayeh@186
|
1347 MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED \
|
gokhlayeh@186
|
1348 PACKED_SIZE UNPACKED_SIZE COOK_OPT PROVIDE CONFIG_FILES TAGS \
|
gokhlayeh@298
|
1349 src _pkg DESTDIR CONFIG_SITE BRANCH TARBALL stuff wanted_stuff
|
gokhlayeh@186
|
1350 . ${RECEIPT:-$PWD/receipt}
|
gokhlayeh@186
|
1351 }
|
gokhlayeh@186
|
1352
|
gokhlayeh@186
|
1353 packages_db_end()
|
gokhlayeh@186
|
1354 {
|
gokhlayeh@186
|
1355 cd $pkg_repository
|
gokhlayeh@186
|
1356 pkgs=$(wc -l packages.list | sed 's/ .*//')
|
gokhlayeh@186
|
1357 sed "s/# Packages : .*/# Packages : $pkgs/" -i packages.txt
|
gokhlayeh@186
|
1358
|
gokhlayeh@186
|
1359 # If lists was updated it's generally needed to sort them well.
|
gokhlayeh@186
|
1360 if ! sort -c packages.list 2> /dev/null; then
|
gokhlayeh@186
|
1361 report step "Sorting packages lists"
|
gokhlayeh@186
|
1362 for file in packages.list packages.desc packages.equiv; do
|
gokhlayeh@186
|
1363 [ -f $file ] || continue
|
gokhlayeh@186
|
1364 sort -o $file $file
|
gokhlayeh@186
|
1365 done
|
gokhlayeh@186
|
1366 report end-step
|
gokhlayeh@186
|
1367 fi
|
gokhlayeh@186
|
1368
|
gokhlayeh@186
|
1369 # Dont log this because lzma always output error.
|
gokhlayeh@186
|
1370 lzma e files.list files.list.lzma
|
gokhlayeh@204
|
1371 rm -f files.list
|
gokhlayeh@204
|
1372 [ -f packages.equiv ] || touch packages.equiv
|
gokhlayeh@186
|
1373 }
|
gokhlayeh@186
|
1374
|
gokhlayeh@186
|
1375 ########################################################################
|
gokhlayeh@186
|
1376 # This section contains functions to generate wok database.
|
gokhlayeh@186
|
1377 ########################
|
gokhlayeh@186
|
1378
|
gokhlayeh@186
|
1379 gen_wok_db()
|
gokhlayeh@186
|
1380 {
|
gokhlayeh@204
|
1381 report step "Generating wok database"
|
gokhlayeh@186
|
1382 report open-bloc
|
gokhlayeh@204
|
1383 report step "Removing old files"
|
gokhlayeh@204
|
1384 for file in $wan_db $dep_db $PACKAGES_REPOSITORY/cookorder.txt; do
|
gokhlayeh@204
|
1385 [ -f $file ] && rm $file
|
gokhlayeh@204
|
1386 done
|
gokhlayeh@186
|
1387 report step "Generating wok-wanted.txt"
|
gokhlayeh@204
|
1388 gen_wan_db
|
gokhlayeh@186
|
1389 report step "Generating wok-depends.txt"
|
gokhlayeh@204
|
1390 for PACKAGE in $(cut -f1 -d '|' $PACKAGES_REPOSITORY/packages.desc \
|
gokhlayeh@204
|
1391 $INCOMING_REPOSITORY/packages.desc | sort -u); do
|
gokhlayeh@186
|
1392 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
1393 if [ -s $RECEIPT ]; then
|
gokhlayeh@186
|
1394 source_receipt
|
gokhlayeh@186
|
1395 echo -e $PACKAGE"\t "$DEPENDS" \t "$BUILD_DEPENDS' ' >> $dep_db
|
pankso@133
|
1396 fi
|
pascal@99
|
1397 done
|
gokhlayeh@215
|
1398 sort_db
|
gokhlayeh@204
|
1399 report close-bloc
|
pankso@28
|
1400 }
|
pankso@28
|
1401
|
gokhlayeh@204
|
1402 gen_wan_db()
|
pascal@91
|
1403 {
|
gokhlayeh@204
|
1404 for RECEIPT in $(fgrep -l WANTED $WOK/*/receipt); do
|
gokhlayeh@204
|
1405 WANTED=
|
gokhlayeh@204
|
1406 source $RECEIPT
|
gokhlayeh@204
|
1407 [ "$WANTED" ] || continue
|
gokhlayeh@204
|
1408 echo -e $PACKAGE"\t"$WANTED >> $tmp/wan_db
|
gokhlayeh@204
|
1409 done
|
gokhlayeh@215
|
1410 if ! [ -f $wan_db ] || [ "$(diff -q $tmp/wan_db $wan_db)" ]; then
|
gokhlayeh@204
|
1411 mv -f $tmp/wan_db $wan_db
|
gokhlayeh@204
|
1412 plan_regen_cookorder=yes
|
gokhlayeh@204
|
1413 else
|
gokhlayeh@204
|
1414 rm $tmp/wan_db
|
gokhlayeh@204
|
1415 fi
|
pascal@91
|
1416 }
|
pascal@91
|
1417
|
gokhlayeh@215
|
1418 update_wan_db()
|
gokhlayeh@215
|
1419 {
|
slaxemulator@326
|
1420 local PACKAGE=$PACKAGE
|
gokhlayeh@215
|
1421 for RECEIPT in $(fgrep WANTED $WOK/*/receipt | \
|
gokhlayeh@215
|
1422 fgrep $PACKAGE | cut -f1 -d ':'); do
|
gokhlayeh@215
|
1423 WANTED=
|
gokhlayeh@215
|
1424 source $RECEIPT
|
gokhlayeh@215
|
1425 [ "$WANTED" ] || continue
|
gokhlayeh@219
|
1426 wan_info=$(echo -e $PACKAGE"\t"$WANTED)
|
gokhlayeh@215
|
1427 [ "$wan_info" = "$(grep -m1 ^$PACKAGE$'\t' $wan_db 2>/dev/null)" ] && return
|
gokhlayeh@215
|
1428 sed "/^$PACKAGE\t/d" -i $wan_db
|
gokhlayeh@220
|
1429 echo "$wan_info" >> $wan_db
|
gokhlayeh@215
|
1430 plan_regen_cookorder=yes
|
gokhlayeh@215
|
1431 plan_sort_wandb=yes
|
gokhlayeh@215
|
1432 done
|
gokhlayeh@215
|
1433 }
|
gokhlayeh@215
|
1434
|
gokhlayeh@204
|
1435 update_dep_db()
|
gokhlayeh@204
|
1436 {
|
gokhlayeh@204
|
1437 dep_info=$(echo -e $PACKAGE"\t "$DEPENDS" \t "$BUILD_DEPENDS' ')
|
gokhlayeh@215
|
1438 [ "$dep_info" = "$(grep -m1 ^$PACKAGE$'\t' $dep_db 2>/dev/null)" ] && return
|
gokhlayeh@204
|
1439 sed "/^$PACKAGE\t/d" -i $dep_db
|
gokhlayeh@204
|
1440 echo "$dep_info" >> $dep_db
|
gokhlayeh@204
|
1441 plan_regen_cookorder=yes
|
gokhlayeh@204
|
1442 plan_sort_depdb=yes
|
pascal@178
|
1443 }
|
pascal@178
|
1444
|
gokhlayeh@186
|
1445 sort_db()
|
pascal@178
|
1446 {
|
gokhlayeh@186
|
1447 report step "Generating cookorder.txt"
|
gokhlayeh@186
|
1448 cat $dep_db | sed 's/ \t / /' | while read PACKAGE BUILD_DEPENDS; do
|
gokhlayeh@186
|
1449 grep -q ^$PACKAGE$'\t' $wan_db && continue
|
gokhlayeh@186
|
1450
|
gokhlayeh@186
|
1451 # Replace each BUILD_DEPENDS with a WANTED package by it's
|
gokhlayeh@186
|
1452 # WANTED package.
|
gokhlayeh@186
|
1453 replace_by_wanted()
|
gokhlayeh@186
|
1454 {
|
gokhlayeh@186
|
1455 for p in $BUILD_DEPENDS; do
|
gokhlayeh@186
|
1456 if grep -q ^$p$'\t' $wan_db; then
|
gokhlayeh@186
|
1457 echo -n $(grep ^$p$'\t' $wan_db | cut -f 2)' '
|
gokhlayeh@186
|
1458 else
|
gokhlayeh@186
|
1459 echo -n $p' '
|
gokhlayeh@186
|
1460 fi
|
gokhlayeh@186
|
1461 done | tr ' ' '\n' | sort -u | sed "/^$PACKAGE$/d" | tr '\n' ' '
|
gokhlayeh@186
|
1462 }
|
gokhlayeh@186
|
1463 echo -e $PACKAGE"\t $(replace_by_wanted) "
|
gokhlayeh@186
|
1464 done > $tmp/db
|
gokhlayeh@186
|
1465 while [ -s "$tmp/db" ]; do
|
gokhlayeh@186
|
1466 status=start
|
gokhlayeh@186
|
1467 for pkg in $(cut -f 1 $tmp/db); do
|
gokhlayeh@195
|
1468 if ! fgrep -q ' '$pkg' ' $tmp/db; then
|
gokhlayeh@186
|
1469 echo $pkg >> $tmp/cookorder
|
gokhlayeh@186
|
1470 sed -e "/^$pkg\t/d" -e "s/ $pkg / /g" -i $tmp/db
|
gokhlayeh@186
|
1471 status=proceed
|
gokhlayeh@186
|
1472 fi
|
gokhlayeh@186
|
1473 done
|
gokhlayeh@186
|
1474 if [ "$status" = start ]; then
|
gokhlayeh@186
|
1475 cp -f $tmp/db /tmp/remain-depends.txt
|
gokhlayeh@186
|
1476 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
|
1477 for blocked in $(cut -f 1 $tmp/db); do
|
gokhlayeh@186
|
1478 echo "$blocked" >> $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@186
|
1479 done
|
gokhlayeh@186
|
1480 break
|
gokhlayeh@186
|
1481 fi
|
gokhlayeh@186
|
1482 done
|
gokhlayeh@186
|
1483 [ -s $tmp/cookorder ] || touch $tmp/cookorder
|
gokhlayeh@186
|
1484
|
gokhlayeh@186
|
1485 # The toolchain packages are moved in first position.
|
gokhlayeh@186
|
1486 grep $(for pkg in `scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
1487 --look_for=all --with_args`; do echo " -e ^$pkg$"; done) \
|
gokhlayeh@186
|
1488 $tmp/cookorder | tac > $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@186
|
1489 for pkg in $(cat $PACKAGES_REPOSITORY/cookorder.txt); do
|
gokhlayeh@186
|
1490 sed "/^$pkg$/d" -i $tmp/cookorder
|
gokhlayeh@186
|
1491 done
|
gokhlayeh@186
|
1492
|
gokhlayeh@186
|
1493 tac $tmp/cookorder >> $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@204
|
1494 unset plan_regen_cookorder
|
gokhlayeh@186
|
1495 report end-step
|
pascal@178
|
1496 }
|
pascal@178
|
1497
|
gokhlayeh@186
|
1498 ########################################################################
|
gokhlayeh@186
|
1499 # SCAN CORE
|
gokhlayeh@186
|
1500 ########################
|
gokhlayeh@186
|
1501 # Include various scan core-functions. It's not intended to be used
|
gokhlayeh@186
|
1502 # directly : prefer scan wrappers in next section.
|
gokhlayeh@186
|
1503
|
gokhlayeh@186
|
1504 look_for_dep()
|
gokhlayeh@186
|
1505 {
|
gokhlayeh@186
|
1506 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@280
|
1507 grep -m1 ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-depends.txt \
|
gokhlayeh@186
|
1508 | cut -f 2
|
gokhlayeh@186
|
1509 else
|
gokhlayeh@280
|
1510 grep -m1 ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1511 cut -f 2
|
gokhlayeh@186
|
1512 fi
|
gokhlayeh@186
|
1513 }
|
gokhlayeh@186
|
1514
|
gokhlayeh@186
|
1515 look_for_bdep()
|
gokhlayeh@186
|
1516 {
|
gokhlayeh@186
|
1517 look_for_all
|
gokhlayeh@186
|
1518 }
|
gokhlayeh@186
|
1519
|
gokhlayeh@186
|
1520 look_for_all()
|
gokhlayeh@186
|
1521 {
|
gokhlayeh@186
|
1522 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@280
|
1523 grep -m1 ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-depends.txt \
|
gokhlayeh@186
|
1524 | cut -f 2,3 | sed 's/ / /'
|
gokhlayeh@186
|
1525 else
|
gokhlayeh@280
|
1526 grep -m1 ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@186
|
1527 cut -f 2,3 | sed 's/ / /'
|
gokhlayeh@186
|
1528 fi
|
gokhlayeh@186
|
1529 }
|
gokhlayeh@186
|
1530
|
gokhlayeh@186
|
1531 look_for_rdep()
|
gokhlayeh@186
|
1532 {
|
gokhlayeh@195
|
1533 fgrep ' '$PACKAGE' ' $INCOMING_REPOSITORY/wok-depends.txt | 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 | cut -f 1); do
|
gokhlayeh@186
|
1536 if [ ! -f "WOK$/$rdep/receipt" ]; then
|
gokhlayeh@186
|
1537 echo "$rdep"
|
gokhlayeh@186
|
1538 fi
|
gokhlayeh@186
|
1539 done
|
gokhlayeh@186
|
1540 fi
|
gokhlayeh@186
|
1541 }
|
gokhlayeh@186
|
1542
|
gokhlayeh@186
|
1543 look_for_rbdep()
|
gokhlayeh@186
|
1544 {
|
gokhlayeh@195
|
1545 fgrep ' '$PACKAGE' ' $INCOMING_REPOSITORY/wok-depends.txt | \
|
gokhlayeh@195
|
1546 cut -f 1,3 | fgrep ' '$PACKAGE' ' | cut -f 1
|
gokhlayeh@186
|
1547 if [ "$undigest" ]; then
|
gokhlayeh@240
|
1548 for rdep in $(fgrep ' '$PACKAGE' ' $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-depends.txt \
|
gokhlayeh@195
|
1549 | cut -f 1,3 | fgrep ' '$PACKAGE' ' | cut -f 1); do
|
gokhlayeh@186
|
1550 if [ ! -f "WOK$/$rdep/receipt" ]; then
|
gokhlayeh@186
|
1551 echo "$rdep"
|
gokhlayeh@186
|
1552 fi
|
gokhlayeh@186
|
1553 done
|
gokhlayeh@186
|
1554 fi
|
gokhlayeh@186
|
1555 }
|
gokhlayeh@186
|
1556
|
gokhlayeh@186
|
1557 # Return WANTED if it exists.
|
gokhlayeh@186
|
1558 look_for_wanted()
|
gokhlayeh@186
|
1559 {
|
gokhlayeh@186
|
1560 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@280
|
1561 grep -m1 ^$PACKAGE$'\t' $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-wanted.txt | cut -f 2
|
gokhlayeh@186
|
1562 else
|
gokhlayeh@280
|
1563 grep -m1 ^$PACKAGE$'\t' $INCOMING_REPOSITORY/wok-wanted.txt | cut -f 2
|
gokhlayeh@186
|
1564 fi
|
gokhlayeh@186
|
1565 }
|
gokhlayeh@186
|
1566
|
gokhlayeh@186
|
1567 # Return packages which wants PACKAGE.
|
gokhlayeh@186
|
1568 look_for_rwanted()
|
gokhlayeh@186
|
1569 {
|
gokhlayeh@186
|
1570 grep $'\t'$PACKAGE$ $INCOMING_REPOSITORY/wok-wanted.txt | cut -f 1
|
gokhlayeh@186
|
1571 if [ "$undigest" ]; then
|
gokhlayeh@240
|
1572 for rwanted in $(grep $'\t'$PACKAGE$ $SLITAZ_DIR/$SLITAZ_VERSION/packages-incoming/wok-wanted.txt | cut -f 1); do
|
gokhlayeh@186
|
1573 if [ ! -f "$WOK/$rwanted/receipt" ]; then
|
gokhlayeh@186
|
1574 echo "$rwanted"
|
gokhlayeh@186
|
1575 fi
|
gokhlayeh@186
|
1576 done
|
gokhlayeh@186
|
1577 fi
|
gokhlayeh@186
|
1578 }
|
gokhlayeh@186
|
1579
|
gokhlayeh@186
|
1580 look_for_dev()
|
gokhlayeh@186
|
1581 {
|
gokhlayeh@223
|
1582 WANTED=$(look_for_wanted)
|
gokhlayeh@223
|
1583 if [ "$WANTED" ]; then
|
gokhlayeh@223
|
1584 if [ "$undigest" ] && [ ! -f "$WOK/$WANTED/receipt" ]; then
|
gokhlayeh@223
|
1585 [ -f "$SLITAZ_DIR/$SLITAZ_VERSION/wok/$WANTED-dev/receipt" ] && echo $WANTED-dev
|
gokhlayeh@223
|
1586 else
|
gokhlayeh@223
|
1587 [ -f "$WOK/$WANTED-dev/receipt" ] && echo $WANTED-dev
|
gokhlayeh@223
|
1588 fi
|
gokhlayeh@223
|
1589 fi
|
gokhlayeh@223
|
1590 if [ "$undigest" ] && [ ! -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@223
|
1591 [ -f "$SLITAZ_DIR/$SLITAZ_VERSION/wok/$PACKAGE-dev/receipt" ] && echo $PACKAGE-dev
|
gokhlayeh@223
|
1592 else
|
gokhlayeh@223
|
1593 [ -f "$WOK/$PACKAGE-dev/receipt" ] && echo $PACKAGE-dev
|
gokhlayeh@223
|
1594 fi
|
gokhlayeh@186
|
1595 }
|
gokhlayeh@186
|
1596
|
gokhlayeh@215
|
1597 with_dev()
|
gokhlayeh@215
|
1598 {
|
gokhlayeh@215
|
1599 for PACKAGE in $(cat); do
|
gokhlayeh@215
|
1600 echo $PACKAGE
|
gokhlayeh@215
|
1601 look_for_dev
|
gokhlayeh@215
|
1602 done
|
gokhlayeh@215
|
1603 }
|
gokhlayeh@215
|
1604
|
gokhlayeh@215
|
1605 with_wanted()
|
gokhlayeh@215
|
1606 {
|
gokhlayeh@215
|
1607 for PACKAGE in $(cat); do
|
gokhlayeh@215
|
1608 echo $PACKAGE
|
gokhlayeh@215
|
1609 look_for_wanted
|
gokhlayeh@215
|
1610 done
|
gokhlayeh@215
|
1611 }
|
gokhlayeh@215
|
1612
|
gokhlayeh@215
|
1613 use_wanted()
|
gokhlayeh@215
|
1614 {
|
gokhlayeh@215
|
1615 for input in $(cat); do
|
gokhlayeh@215
|
1616 { grep ^$input$'\t' $wan_db || echo $input
|
gokhlayeh@215
|
1617 } | sed 's/.*\t//'
|
gokhlayeh@215
|
1618 done
|
gokhlayeh@215
|
1619 }
|
gokhlayeh@215
|
1620
|
gokhlayeh@186
|
1621 ########################################################################
|
gokhlayeh@186
|
1622 # SCAN
|
gokhlayeh@186
|
1623 ########################
|
gokhlayeh@186
|
1624 # Use wok-wanted.txt and wok-depeds.txt to scan depends.
|
gokhlayeh@186
|
1625 # Option in command line (must be first arg) :
|
gokhlayeh@186
|
1626 # --look_for=bdep/rbdep - Look for depends or reverse depends.
|
gokhlayeh@186
|
1627 # --with_dev - Add development packages (*-dev) in the result.
|
gokhlayeh@186
|
1628 # --with_wanted - Add package+reverse wanted in the result.
|
gokhlayeh@186
|
1629 # --with_args - Include packages in argument in the result.
|
gokhlayeh@186
|
1630
|
gokhlayeh@186
|
1631 scan()
|
gokhlayeh@186
|
1632 {
|
gokhlayeh@186
|
1633 # Get packages in argument.
|
slaxemulator@326
|
1634 local PACKAGE=$PACKAGE WANTED=$WANTED pkg_list=
|
gokhlayeh@186
|
1635 for arg in $@; do
|
gokhlayeh@186
|
1636 [ "$arg" = "${arg#--}" ] || continue
|
gokhlayeh@186
|
1637 pkg_list="$pkg_list $arg"
|
gokhlayeh@186
|
1638 done
|
gokhlayeh@204
|
1639
|
gokhlayeh@186
|
1640 # Get options.
|
gokhlayeh@186
|
1641 [ "$pkg_list" ] || return
|
gokhlayeh@186
|
1642 local cooklist= look_for= with_dev= with_wanted= with_args= log_command="$0 $@" \
|
gokhlayeh@215
|
1643 get_options_list="look_for with_dev with_wanted with_args cooklist use_wanted"
|
gokhlayeh@186
|
1644 get_options
|
gokhlayeh@186
|
1645
|
gokhlayeh@186
|
1646 # Cooklist is a special case where we need to modify a little
|
gokhlayeh@186
|
1647 # scan behavior
|
gokhlayeh@186
|
1648 if [ "$cooklist" ]; then
|
gokhlayeh@204
|
1649 gen_wan_db
|
gokhlayeh@204
|
1650 look_for=all && with_args=yes && with_dev= && with_wanted=
|
gokhlayeh@204
|
1651 filter=use_wanted
|
gokhlayeh@241
|
1652 if [ "$COMMAND" = gen-cooklist ]; then
|
gokhlayeh@241
|
1653 for PACKAGE in $pkg_list; do
|
gokhlayeh@241
|
1654 grep -q ^$PACKAGE$'\t' $dep_db && continue
|
gokhlayeh@241
|
1655 [ -d "$WOK/$p" ] || continue
|
gokhlayeh@241
|
1656 check_for_missing
|
gokhlayeh@241
|
1657 done
|
gokhlayeh@241
|
1658 append_to_dep()
|
gokhlayeh@241
|
1659 {
|
gokhlayeh@241
|
1660 if ! grep -q ^$PACKAGE$'\t' $dep_db; then
|
gokhlayeh@241
|
1661 check_for_missing && echo $PACKAGE >> $tmp/dep
|
gokhlayeh@241
|
1662 else
|
gokhlayeh@241
|
1663 echo $PACKAGE >> $tmp/dep
|
gokhlayeh@241
|
1664 fi
|
gokhlayeh@241
|
1665 }
|
gokhlayeh@241
|
1666 else
|
gokhlayeh@241
|
1667 append_to_dep()
|
gokhlayeh@241
|
1668 {
|
gokhlayeh@241
|
1669 check_for_commit && echo $PACKAGE >> $tmp/dep
|
gokhlayeh@241
|
1670 }
|
gokhlayeh@241
|
1671 fi
|
gokhlayeh@204
|
1672 else
|
gokhlayeh@204
|
1673 append_to_dep()
|
gokhlayeh@204
|
1674 {
|
gokhlayeh@204
|
1675 echo $PACKAGE >> $tmp/dep
|
gokhlayeh@204
|
1676 }
|
gokhlayeh@240
|
1677 # If requested packages are not in dep_db, partial generation of this db is needed.
|
gokhlayeh@241
|
1678 for PACKAGE in $pkg_list; do
|
gokhlayeh@241
|
1679 grep -q ^$PACKAGE$'\t' $dep_db && continue
|
gokhlayeh@240
|
1680 [ -d "$WOK/$p" ] || continue
|
gokhlayeh@240
|
1681 plan_check_for_missing=yes
|
gokhlayeh@240
|
1682 check_for_missing
|
gokhlayeh@240
|
1683 done
|
gokhlayeh@240
|
1684 if [ "$plan_check_for_missing" ]; then
|
gokhlayeh@240
|
1685 append_to_dep()
|
gokhlayeh@240
|
1686 {
|
gokhlayeh@240
|
1687 if ! grep -q ^$PACKAGE$'\t' $dep_db; then
|
gokhlayeh@240
|
1688 check_for_missing && echo $PACKAGE >> $tmp/dep
|
gokhlayeh@240
|
1689 else
|
gokhlayeh@240
|
1690 echo $PACKAGE >> $tmp/dep
|
gokhlayeh@240
|
1691 fi
|
gokhlayeh@240
|
1692 }
|
gokhlayeh@240
|
1693 check_db_status=yes
|
gokhlayeh@240
|
1694 unset plan_check_for_missing
|
gokhlayeh@240
|
1695 fi
|
gokhlayeh@186
|
1696 fi
|
gokhlayeh@215
|
1697
|
gokhlayeh@204
|
1698 [ "$with_dev" ] && filter=with_dev
|
gokhlayeh@204
|
1699 [ "$with_wanted" ] && filter=with_wanted
|
gokhlayeh@204
|
1700 if [ "$filter" ]; then
|
gokhlayeh@291
|
1701 pkg_list=$(echo $pkg_list | $filter | sort -u)
|
gokhlayeh@204
|
1702 scan_pkg()
|
gokhlayeh@204
|
1703 {
|
gokhlayeh@204
|
1704 look_for_$look_for | $filter
|
gokhlayeh@204
|
1705 }
|
gokhlayeh@204
|
1706 else
|
gokhlayeh@204
|
1707 scan_pkg()
|
gokhlayeh@204
|
1708 {
|
gokhlayeh@204
|
1709 look_for_$look_for
|
gokhlayeh@204
|
1710 }
|
gokhlayeh@204
|
1711 fi
|
gokhlayeh@215
|
1712 touch $tmp/dep
|
gokhlayeh@204
|
1713 for PACKAGE in $pkg_list; do
|
gokhlayeh@204
|
1714 [ "$with_args" ] && append_to_dep
|
gokhlayeh@204
|
1715 scan_pkg
|
gokhlayeh@186
|
1716 done | tr ' ' '\n' | sort -u > $tmp/list
|
gokhlayeh@186
|
1717 [ "$look_for" = bdep ] && look_for=dep
|
gokhlayeh@186
|
1718 while [ -s $tmp/list ]; do
|
gokhlayeh@186
|
1719 PACKAGE=$(sed 1!d $tmp/list)
|
gokhlayeh@186
|
1720 sed 1d -i $tmp/list
|
gokhlayeh@204
|
1721 append_to_dep
|
gokhlayeh@204
|
1722 for pkg in $(scan_pkg); do
|
gokhlayeh@204
|
1723 if ! grep -q ^$pkg$ $tmp/list $tmp/dep; then
|
gokhlayeh@204
|
1724 echo $pkg >> $tmp/list
|
gokhlayeh@186
|
1725 fi
|
gokhlayeh@186
|
1726 done
|
gokhlayeh@186
|
1727 done
|
gokhlayeh@204
|
1728 if [ "$cooklist" ]; then
|
gokhlayeh@204
|
1729 mv $tmp/dep $tmp/cooklist
|
gokhlayeh@215
|
1730 else
|
gokhlayeh@204
|
1731 cat $tmp/dep | sort -u
|
gokhlayeh@186
|
1732 fi
|
gokhlayeh@204
|
1733 rm -f $tmp/dep $tmp/list
|
gokhlayeh@240
|
1734 if [ "$check_db_status" ]; then
|
gokhlayeh@240
|
1735 [ "$plan_sort_depdb" ] && sort -o $dep_db $dep_db && unset plan_sort_depdb
|
gokhlayeh@240
|
1736 [ "$plan_sort_wandb" ] && sort -o $wan_db $wan_db && unset plan_sort_wandb
|
gokhlayeh@352
|
1737 if [ "$plan_regen_cookorder" ] && \
|
gokhlayeh@352
|
1738 [ "$(sed 1!d $PACKAGES_REPOSITORY/cookorder.txt)" != "#PlanSort" ]; then
|
gokhlayeh@240
|
1739 grep -q "^#" $PACKAGES_REPOSITORY/cookorder.txt || \
|
gokhlayeh@240
|
1740 sed 1i"#PlanSort" -i $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@240
|
1741 fi
|
gokhlayeh@240
|
1742 fi
|
gokhlayeh@186
|
1743 }
|
gokhlayeh@186
|
1744
|
gokhlayeh@186
|
1745 ########################################################################
|
gokhlayeh@186
|
1746 # This section contains functions to check package repository and
|
gokhlayeh@186
|
1747 # find which packages to cook.
|
gokhlayeh@186
|
1748 ########################
|
gokhlayeh@186
|
1749
|
gokhlayeh@240
|
1750 check_for_missing()
|
gokhlayeh@240
|
1751 {
|
slaxemulator@326
|
1752 local PACKAGE=$PACKAGE
|
gokhlayeh@240
|
1753 if ! check_for_pkg_in_wok; then
|
gokhlayeh@240
|
1754 [ "$?" = 2 ] && return 1
|
gokhlayeh@240
|
1755 return
|
gokhlayeh@240
|
1756 fi
|
gokhlayeh@241
|
1757 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@240
|
1758 source_receipt
|
gokhlayeh@240
|
1759 PACKAGE=${WANTED:-$PACKAGE}
|
gokhlayeh@240
|
1760 update_wan_db
|
gokhlayeh@240
|
1761 for PACKAGE in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@240
|
1762 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@240
|
1763 source_receipt
|
gokhlayeh@240
|
1764 update_dep_db
|
gokhlayeh@240
|
1765 done
|
gokhlayeh@240
|
1766 }
|
gokhlayeh@240
|
1767
|
gokhlayeh@186
|
1768 check_for_commit()
|
gokhlayeh@186
|
1769 {
|
gokhlayeh@204
|
1770 if ! check_for_pkg_in_wok; then
|
gokhlayeh@204
|
1771 [ "$?" = 2 ] && return 1
|
gokhlayeh@204
|
1772 return
|
gokhlayeh@204
|
1773 fi
|
gokhlayeh@204
|
1774 for PACKAGE in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@204
|
1775 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
1776 source_receipt
|
gokhlayeh@204
|
1777
|
gokhlayeh@186
|
1778 # We use md5 of cooking stuff in the packaged receipt to check
|
gokhlayeh@186
|
1779 # commit. We look consecutively in 3 different locations :
|
gokhlayeh@204
|
1780 # - in the wok/PACKAGE/taz/* folder
|
gokhlayeh@186
|
1781 # - in the receipt in the package in incoming repository
|
gokhlayeh@186
|
1782 # - in the receipt in the package in packages repository
|
gokhlayeh@186
|
1783 # If md5sum match, there's no commit.
|
gokhlayeh@186
|
1784 check_for_commit_using_md5sum()
|
gokhlayeh@186
|
1785 {
|
gokhlayeh@186
|
1786 if [ ! -f $WOK/$PACKAGE/md5 ]; then
|
gokhlayeh@186
|
1787 sed -n '/# md5sum of cooking stuff :/,$p' receipt | \
|
gokhlayeh@186
|
1788 sed -e 1d -e 's/^# //' > $WOK/$PACKAGE/md5
|
gokhlayeh@186
|
1789 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1790 fi
|
gokhlayeh@204
|
1791
|
gokhlayeh@186
|
1792 if [ -s md5 ]; then
|
gokhlayeh@186
|
1793 if md5sum -cs md5; then
|
gokhlayeh@204
|
1794
|
gokhlayeh@204
|
1795 # If md5sum check if ok, check for new/missing files in
|
gokhlayeh@204
|
1796 # cooking stuff.
|
gokhlayeh@204
|
1797 for file in $([ -f receipt ] && echo receipt; \
|
gokhlayeh@204
|
1798 [ -f description.txt ] && echo description.txt; \
|
gokhlayeh@204
|
1799 [ -d stuff ] && find stuff); do
|
gokhlayeh@204
|
1800 if ! fgrep -q " $file" md5; then
|
gokhlayeh@186
|
1801 set_commited
|
gokhlayeh@186
|
1802 fi
|
gokhlayeh@186
|
1803 done
|
gokhlayeh@186
|
1804 else
|
gokhlayeh@186
|
1805 set_commited
|
gokhlayeh@186
|
1806 fi
|
gokhlayeh@186
|
1807 else
|
gokhlayeh@204
|
1808 set_commited
|
gokhlayeh@186
|
1809 fi
|
gokhlayeh@186
|
1810 }
|
gokhlayeh@186
|
1811 set_commited()
|
gokhlayeh@186
|
1812 {
|
gokhlayeh@204
|
1813 ! grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/commit &&
|
gokhlayeh@204
|
1814 echo $PACKAGE >> $PACKAGES_REPOSITORY/commit
|
gokhlayeh@186
|
1815 gen_cookmd5
|
gokhlayeh@204
|
1816 update_dep_db
|
gokhlayeh@186
|
1817 }
|
gokhlayeh@195
|
1818 taz_dir=$(echo $WOK/$PACKAGE/taz/$PACKAGE-* | fgrep -v '*')
|
gokhlayeh@186
|
1819 if [ -f $WOK/$PACKAGE/md5 ]; then
|
gokhlayeh@186
|
1820 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1821 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1822 elif [ "$taz_dir" ]; then
|
gokhlayeh@186
|
1823 cd $taz_dir
|
gokhlayeh@186
|
1824 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1825 else
|
gokhlayeh@195
|
1826 pkg=$(echo $INCOMING_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | fgrep -v '*')
|
gokhlayeh@195
|
1827 [ "$pkg" ] || pkg=$(echo $PACKAGES_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | fgrep -v '*')
|
gokhlayeh@186
|
1828 if [ "$pkg" ]; then
|
gokhlayeh@186
|
1829 get_pkg_files $pkg
|
gokhlayeh@186
|
1830 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1831 rm -r $pkg_files_dir
|
gokhlayeh@204
|
1832 else
|
gokhlayeh@204
|
1833 set_commited
|
gokhlayeh@186
|
1834 fi
|
gokhlayeh@186
|
1835 fi
|
gokhlayeh@204
|
1836 [ "$forced" ] || echo $PACKAGE >> $tmp/checked
|
gokhlayeh@186
|
1837 done
|
gokhlayeh@204
|
1838 return
|
gokhlayeh@186
|
1839 }
|
gokhlayeh@186
|
1840
|
gokhlayeh@186
|
1841 gen_cook_list()
|
gokhlayeh@186
|
1842 {
|
gokhlayeh@204
|
1843 report step "Scanning wok"
|
gokhlayeh@204
|
1844 if [ "$pkg" ]; then
|
gokhlayeh@204
|
1845 scan $pkg --cooklist
|
gokhlayeh@204
|
1846 else
|
gokhlayeh@204
|
1847 scan `cat $cooklist` --cooklist
|
gokhlayeh@204
|
1848 fi
|
gokhlayeh@204
|
1849 report end-step
|
gokhlayeh@209
|
1850
|
gokhlayeh@209
|
1851 [ -s $tmp/checked ] || [ -s $tmp/cooklist ] || return
|
gokhlayeh@209
|
1852
|
gokhlayeh@209
|
1853 # Core toolchain should not be cooked unless cook-toolchain is used.
|
gokhlayeh@209
|
1854 if ! [ -f /etc/config.site.tmptoolchain ] ; then
|
gokhlayeh@209
|
1855 for PACKAGE in $(scan gcc --look_for=all --with_args --with_wanted); do
|
gokhlayeh@209
|
1856 grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/blocked || \
|
gokhlayeh@209
|
1857 echo $PACKAGE >> $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@209
|
1858 done
|
gokhlayeh@209
|
1859 fi
|
gokhlayeh@313
|
1860
|
gokhlayeh@241
|
1861 if [ -s $PACKAGES_REPOSITORY/commit ] && [ "$COMMAND" != gen-cooklist ]; then
|
gokhlayeh@186
|
1862 cd $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1863 for PACKAGE in $(cat commit); do
|
gokhlayeh@186
|
1864 WANTED="$(look_for_wanted)"
|
gokhlayeh@186
|
1865 if [ "$WANTED" ]; then
|
gokhlayeh@204
|
1866 grep -q ^$WANTED$ broken cooklist blocked commit && continue
|
gokhlayeh@186
|
1867 fi
|
gokhlayeh@204
|
1868 grep -q ^$PACKAGE$ blocked cooklist && continue
|
gokhlayeh@204
|
1869 echo $PACKAGE >> cooklist
|
gokhlayeh@186
|
1870 done
|
gokhlayeh@186
|
1871 fi
|
gokhlayeh@186
|
1872 sort_cooklist
|
gokhlayeh@186
|
1873 }
|
gokhlayeh@186
|
1874
|
gokhlayeh@186
|
1875 sort_cooklist()
|
gokhlayeh@186
|
1876 {
|
gokhlayeh@266
|
1877 if [ "$(sed 1!d $PACKAGES_REPOSITORY/cookorder.txt)" = "#PlanSort" ]; then
|
gokhlayeh@266
|
1878 sed 1d -i $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@266
|
1879 plan_regen_cookorder=yes
|
gokhlayeh@266
|
1880 fi
|
gokhlayeh@266
|
1881 [ "$plan_sort_depdb" ] && sort -o $dep_db $dep_db && unset plan_sort_depdb
|
gokhlayeh@266
|
1882 [ "$plan_regen_cookorder" ] && sort_db
|
gokhlayeh@313
|
1883 report step "Generating cooklist"
|
gokhlayeh@204
|
1884 if [ -f "$tmp/checked" ]; then
|
gokhlayeh@204
|
1885 rm -f $tmp/cooklist
|
gokhlayeh@204
|
1886 cat $tmp/checked | while read PACKAGE; do
|
gokhlayeh@204
|
1887 grep -q ^$PACKAGE$ $PACKAGES_REPOSITORY/cooklist && \
|
gokhlayeh@204
|
1888 echo $PACKAGE >> $tmp/cooklist
|
gokhlayeh@204
|
1889 done
|
gokhlayeh@209
|
1890 elif ! [ "$COMMAND" = gen-cooklist ]; then
|
gokhlayeh@209
|
1891 cat $PACKAGES_REPOSITORY/blocked | while read PACKAGE; do
|
gokhlayeh@209
|
1892 sed "/^$PACKAGE/d" -i $tmp/cooklist
|
gokhlayeh@209
|
1893 done
|
gokhlayeh@204
|
1894 fi
|
gokhlayeh@313
|
1895 report end-step
|
gokhlayeh@313
|
1896 [ -s $tmp/cooklist ] || return
|
gokhlayeh@215
|
1897
|
gokhlayeh@313
|
1898 report step "Sorting cooklist"
|
gokhlayeh@204
|
1899 for PACKAGE in $(cat $tmp/cooklist); do
|
gokhlayeh@204
|
1900 WANTED="$(look_for_wanted)"
|
gokhlayeh@204
|
1901 [ "$WANTED" ] || continue
|
gokhlayeh@297
|
1902 if grep -q ^$WANTED$ $PACKAGES_REPOSITORY/broken $tmp/cooklist; then
|
gokhlayeh@186
|
1903 sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@204
|
1904 elif [ ! -d $WOK/$WANTED/install ]; then
|
gokhlayeh@204
|
1905 sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@204
|
1906 echo $WANTED >> $tmp/cooklist
|
gokhlayeh@186
|
1907 fi
|
gokhlayeh@186
|
1908 done
|
gokhlayeh@186
|
1909
|
gokhlayeh@204
|
1910 # Use cookorder.txt to sort cooklist.
|
gokhlayeh@204
|
1911 if [ -s $tmp/cooklist ]; then
|
gokhlayeh@204
|
1912 cat $PACKAGES_REPOSITORY/cookorder.txt | while read PACKAGE; do
|
gokhlayeh@204
|
1913 if grep -q ^$PACKAGE$ $tmp/cooklist; then
|
gokhlayeh@204
|
1914 sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@204
|
1915 echo $PACKAGE >> $tmp/cooklist.tmp
|
gokhlayeh@204
|
1916 fi
|
gokhlayeh@204
|
1917 done
|
gokhlayeh@204
|
1918
|
gokhlayeh@204
|
1919 # Remaining packages in cooklist are thoses without compile_rules.
|
gokhlayeh@204
|
1920 # They can be cooked first in any order.
|
gokhlayeh@204
|
1921 if [ -f $tmp/cooklist.tmp ]; then
|
gokhlayeh@204
|
1922 cat $tmp/cooklist.tmp >> $tmp/cooklist
|
gokhlayeh@204
|
1923 rm $tmp/cooklist.tmp
|
gokhlayeh@204
|
1924 fi
|
gokhlayeh@204
|
1925
|
gokhlayeh@204
|
1926 cat $tmp/cooklist
|
gokhlayeh@204
|
1927 [ "$cooklist" = "$PACKAGES_REPOSITORY/cooklist" ] && \
|
gokhlayeh@204
|
1928 cat $tmp/cooklist > $cooklist
|
gokhlayeh@204
|
1929 fi
|
gokhlayeh@204
|
1930
|
gokhlayeh@186
|
1931 report end-step
|
gokhlayeh@186
|
1932 }
|
gokhlayeh@186
|
1933
|
gokhlayeh@284
|
1934 look_for_missing_pkg()
|
gokhlayeh@284
|
1935 {
|
gokhlayeh@284
|
1936 for pkg in $(cat $PACKAGES_REPOSITORY/$1); do
|
gokhlayeh@284
|
1937 grep -q ^$pkg$ $INCOMING_REPOSITORY/packages.txt \
|
gokhlayeh@284
|
1938 $PACKAGES_REPOSITORY/packages.txt || \
|
gokhlayeh@284
|
1939 continue
|
gokhlayeh@284
|
1940 echo $pkg
|
gokhlayeh@284
|
1941 done
|
gokhlayeh@284
|
1942 }
|
gokhlayeh@284
|
1943
|
gokhlayeh@186
|
1944 check_for_incoming()
|
gokhlayeh@186
|
1945 {
|
gokhlayeh@307
|
1946 report step "Check that all packages were cooked fine"
|
gokhlayeh@204
|
1947 [ -s $INCOMING_REPOSITORY/packages.desc ] || {
|
gokhlayeh@204
|
1948 echo "No packages in $INCOMING_REPOSITORY."
|
gokhlayeh@307
|
1949 report end-step; return; }
|
gokhlayeh@204
|
1950 if [ -s $PACKAGES_REPOSITORY/broken ]; then
|
gokhlayeh@290
|
1951 missingpkg=$(look_for_missing_pkg broken)
|
gokhlayeh@290
|
1952 if [ "$missingpkg" ]; then
|
gokhlayeh@290
|
1953 echo "Don't move incoming packages to main repository because theses ones are broken:" >&2
|
gokhlayeh@290
|
1954 echo "$missingpkg"
|
gokhlayeh@307
|
1955 report end-step
|
gokhlayeh@307
|
1956 return 1
|
gokhlayeh@290
|
1957 fi
|
gokhlayeh@186
|
1958 fi
|
gokhlayeh@204
|
1959 if [ -s $PACKAGES_REPOSITORY/cooklist ]; then
|
gokhlayeh@290
|
1960 missingpkg=$(look_for_missing_pkg cooklist)
|
gokhlayeh@290
|
1961 if [ "$missingpkg" ]; then
|
gokhlayeh@290
|
1962 echo "Don't move incoming packages to main repository because theses ones needs to be cooked:" >&2
|
gokhlayeh@290
|
1963 echo "$missingpkg"
|
gokhlayeh@307
|
1964 report end-step
|
gokhlayeh@307
|
1965 return 1
|
gokhlayeh@290
|
1966 fi
|
gokhlayeh@204
|
1967 fi
|
gokhlayeh@306
|
1968 incoming_pkgs="$(cut -f 1 -d '|' $INCOMING_REPOSITORY/packages.desc)"
|
gokhlayeh@214
|
1969 if ! [ "$forced" ]; then
|
gokhlayeh@214
|
1970 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@313
|
1971 pkg="$incoming_pkgs"
|
gokhlayeh@214
|
1972 gen_cook_list
|
gokhlayeh@214
|
1973 if [ -s $PACKAGES_REPOSITORY/cooklist ]; then
|
gokhlayeh@290
|
1974 missingpkg=$(look_for_missing_pkg cooklist)
|
gokhlayeh@290
|
1975 if [ "$missingpkg" ]; then
|
gokhlayeh@290
|
1976 echo "Don't move incoming packages to main repository because theses ones needs to be cooked:" >&2
|
gokhlayeh@290
|
1977 echo "$missingpkg"
|
gokhlayeh@307
|
1978 report end-step
|
gokhlayeh@307
|
1979 return 1
|
gokhlayeh@290
|
1980 fi
|
gokhlayeh@214
|
1981 fi
|
gokhlayeh@204
|
1982 fi
|
gokhlayeh@313
|
1983
|
gokhlayeh@204
|
1984 report step "Moving incoming packages to main repository"
|
gokhlayeh@204
|
1985 unset EXTRAVERSION
|
gokhlayeh@306
|
1986 for PACKAGE in $incoming_pkgs; do
|
gokhlayeh@186
|
1987 prev_VERSION=$(get_pkg_version $PACKAGES_REPOSITORY)
|
gokhlayeh@204
|
1988 VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
|
gokhlayeh@186
|
1989 remove_previous_package $PACKAGES_REPOSITORY
|
gokhlayeh@204
|
1990 echo "Moving $PACKAGE..."
|
gokhlayeh@204
|
1991 mv -f $INCOMING_REPOSITORY/$PACKAGE-$VERSION.tazpkg $PACKAGES_REPOSITORY
|
gokhlayeh@204
|
1992 touch $PACKAGES_REPOSITORY/$PACKAGE-$VERSION.tazpkg
|
gokhlayeh@266
|
1993 previous_tarball=$(grep ^$PACKAGE:main $SOURCES_REPOSITORY/sources.list | cut -f2)
|
gokhlayeh@266
|
1994 sed -e "/^$PACKAGE:main/d" \
|
slaxemulator@275
|
1995 -e "s/^$PACKAGE:incoming/$PACKAGE:main/" \
|
gokhlayeh@266
|
1996 -i $SOURCES_REPOSITORY/sources.list
|
gokhlayeh@266
|
1997 if [ "$previous_tarball" ]; then
|
gokhlayeh@266
|
1998 grep -q $'\t'$previous_tarball$ $SOURCES_REPOSITORY/sources.list || \
|
gokhlayeh@266
|
1999 rm -f $SOURCES_REPOSITORY/$previous_tarball
|
gokhlayeh@266
|
2000 fi
|
gokhlayeh@204
|
2001 done
|
gokhlayeh@204
|
2002 for file in packages.list packages.equiv packages.md5 packages.desc \
|
gokhlayeh@204
|
2003 packages.txt; do
|
gokhlayeh@204
|
2004 echo -n "" > $INCOMING_REPOSITORY/$file
|
gokhlayeh@204
|
2005 done
|
gokhlayeh@204
|
2006 rm -r $INCOMING_REPOSITORY/files.list.lzma
|
gokhlayeh@186
|
2007 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@313
|
2008
|
gokhlayeh@313
|
2009 report step "Updating flavors"
|
gokhlayeh@313
|
2010 if [ -x /usr/bin/tazlito ] || [ -x /usr/bin/clean-chroot ]; then
|
gokhlayeh@313
|
2011 if ! [ -x /usr/bin/tazlito ]; then
|
gokhlayeh@313
|
2012 tazpkg get-install tazlito
|
gokhlayeh@313
|
2013 fi
|
gokhlayeh@313
|
2014
|
gokhlayeh@313
|
2015 # Handle cases where tazwok is used into main system;
|
gokhlayeh@313
|
2016 # Handle cases where SLITAZ_DIR is not /home/slitaz.
|
gokhlayeh@313
|
2017 [ -L /home/slitaz/flavors ] && rm /home/slitaz/flavors
|
gokhlayeh@313
|
2018 mkdir -p /home/slitaz
|
gokhlayeh@313
|
2019 ln -s $LOCAL_REPOSITORY/flavors /home/slitaz/flavors
|
gokhlayeh@313
|
2020
|
gokhlayeh@313
|
2021 cd $LOCAL_REPOSITORY/packages
|
gokhlayeh@313
|
2022 for i in $LOCAL_REPOSITORY/flavors/*; do
|
gokhlayeh@331
|
2023 [ -d "$i" ] || continue
|
gokhlayeh@313
|
2024 tazlito pack-flavor ${i##*/}
|
gokhlayeh@313
|
2025 done
|
gokhlayeh@313
|
2026
|
gokhlayeh@313
|
2027 noheader=""
|
gokhlayeh@313
|
2028 for i in *.flavor; do
|
gokhlayeh@313
|
2029 tazlito show-flavor $i --brief $noheader
|
gokhlayeh@313
|
2030 noheader="--noheader"
|
gokhlayeh@313
|
2031 done > flavors.list
|
gokhlayeh@313
|
2032 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@313
|
2033 else
|
gokhlayeh@313
|
2034 echo "Can't create up-to-date flavors because tazlito package is missing." >&2
|
gokhlayeh@313
|
2035 fi
|
gokhlayeh@313
|
2036 report end-step
|
gokhlayeh@186
|
2037 }
|
gokhlayeh@186
|
2038
|
gokhlayeh@186
|
2039 ########################################################################
|
gokhlayeh@186
|
2040 # TAZWOK MAIN FUNCTIONS
|
gokhlayeh@186
|
2041 ########################
|
gokhlayeh@186
|
2042
|
gokhlayeh@186
|
2043 clean()
|
gokhlayeh@186
|
2044 {
|
gokhlayeh@186
|
2045 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
2046 ls -A $WOK/$PACKAGE | grep -q -v -e ^receipt$ -e ^description.txt$ \
|
gokhlayeh@186
|
2047 -e ^stuff$ || return
|
gokhlayeh@186
|
2048
|
gokhlayeh@249
|
2049 [ "$COMMAND" = clean-wok ] || report step "Cleaning $PACKAGE"
|
gokhlayeh@186
|
2050 # Check for clean_wok function.
|
gokhlayeh@186
|
2051 if grep -q ^clean_wok $RECEIPT; then
|
gokhlayeh@186
|
2052 clean_wok
|
gokhlayeh@186
|
2053 fi
|
gokhlayeh@186
|
2054 # Clean should only have a receipt, stuff and optional desc.
|
gokhlayeh@186
|
2055 for f in `ls .`
|
gokhlayeh@186
|
2056 do
|
gokhlayeh@186
|
2057 case $f in
|
gokhlayeh@250
|
2058 receipt|stuff|description.txt|md5)
|
gokhlayeh@186
|
2059 continue ;;
|
gokhlayeh@186
|
2060 *)
|
gokhlayeh@263
|
2061 rm -rf $f ;;
|
gokhlayeh@186
|
2062 esac
|
gokhlayeh@186
|
2063 done
|
gokhlayeh@262
|
2064 [ "$COMMAND" != clean-wok ] && report end-step
|
gokhlayeh@186
|
2065 }
|
gokhlayeh@186
|
2066
|
gokhlayeh@186
|
2067 # Configure and make a package with the receipt.
|
gokhlayeh@186
|
2068 compile_package()
|
gokhlayeh@186
|
2069 {
|
gokhlayeh@186
|
2070 check_for_package_on_cmdline
|
gokhlayeh@186
|
2071
|
gokhlayeh@186
|
2072 # Include the receipt to get all needed variables and functions
|
gokhlayeh@186
|
2073 # and cd into the work directory to start the work.
|
gokhlayeh@186
|
2074 check_for_receipt
|
gokhlayeh@186
|
2075 source_receipt
|
gokhlayeh@186
|
2076
|
gokhlayeh@186
|
2077 # Log the package name and date.
|
gokhlayeh@186
|
2078 echo "date `date +%Y%m%d\ \%H:%M:%S`" >> $LOG
|
gokhlayeh@186
|
2079 echo "package $PACKAGE (compile)" >> $LOG
|
gokhlayeh@186
|
2080
|
gokhlayeh@186
|
2081 # Set wanted $src variable to help compiling.
|
gokhlayeh@186
|
2082 [ ! "$src" ] && set_src_path
|
gokhlayeh@186
|
2083 check_for_build_depends || return 1
|
gokhlayeh@186
|
2084 check_for_wanted
|
gokhlayeh@186
|
2085 unset target
|
gokhlayeh@186
|
2086 check_for_tarball && check_for_compile_rules
|
gokhlayeh@186
|
2087 }
|
gokhlayeh@186
|
2088
|
gokhlayeh@186
|
2089 # Cook command also include all features to manage lists which keep
|
gokhlayeh@186
|
2090 # track of wok/packages state.
|
gokhlayeh@186
|
2091 cook()
|
gokhlayeh@186
|
2092 {
|
gokhlayeh@186
|
2093 cook_code=
|
gokhlayeh@186
|
2094 set_common_path
|
gokhlayeh@186
|
2095 check_for_receipt
|
gokhlayeh@186
|
2096 source_receipt
|
gokhlayeh@186
|
2097
|
gokhlayeh@186
|
2098 # Define log path and start report.
|
gokhlayeh@186
|
2099 [ -f $LOCAL_REPOSITORY/log/$PACKAGE.html ] && rm $LOCAL_REPOSITORY/log/$PACKAGE.html
|
gokhlayeh@186
|
2100 report sublog $LOCAL_REPOSITORY/log/$PACKAGE.html
|
pascal@349
|
2101 echo "$PACKAGE" > $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
2102 report step "Cooking $PACKAGE"
|
gokhlayeh@186
|
2103 report open-bloc
|
gokhlayeh@186
|
2104
|
gokhlayeh@186
|
2105 clean $PACKAGE
|
gokhlayeh@186
|
2106 [ -s $tmp/cooklist ] && sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@381
|
2107
|
gokhlayeh@186
|
2108 if compile_package; then
|
gokhlayeh@215
|
2109 remove_src
|
gokhlayeh@186
|
2110 refresh_packages_from_compile
|
gokhlayeh@186
|
2111 gen_package
|
gokhlayeh@186
|
2112
|
gokhlayeh@186
|
2113 # Update packages-incoming repository.
|
gokhlayeh@186
|
2114 store_pkgname=$PACKAGE
|
gokhlayeh@186
|
2115 pkg_repository=$INCOMING_REPOSITORY
|
gokhlayeh@186
|
2116 update_packages_db
|
gokhlayeh@186
|
2117
|
gokhlayeh@186
|
2118 PACKAGE=$store_pkgname
|
gokhlayeh@186
|
2119 unset store_pkgname
|
gokhlayeh@186
|
2120
|
gokhlayeh@186
|
2121 # Upgrade to cooked packages if it was previously installed.
|
gokhlayeh@186
|
2122 report step "Look for package(s) to upgrade"
|
gokhlayeh@186
|
2123 for pkg in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@186
|
2124 if [ -d $INSTALLED/$pkg ]; then
|
gokhlayeh@186
|
2125 tazpkg get-install $pkg --forced
|
gokhlayeh@186
|
2126 fi
|
gokhlayeh@186
|
2127 done
|
gokhlayeh@186
|
2128 report end-step
|
gokhlayeh@186
|
2129 else
|
gokhlayeh@381
|
2130 set_pkg_broken
|
gokhlayeh@186
|
2131 cook_code=1
|
gokhlayeh@186
|
2132 fi
|
gokhlayeh@186
|
2133
|
gokhlayeh@186
|
2134 # Remove build_depends in cook mode (if in cooklist, it's done when
|
gokhlayeh@186
|
2135 # checking build_depends of next package and we remove only unneeded
|
gokhlayeh@186
|
2136 # packages to keep chroot minimal and gain some time).
|
gokhlayeh@210
|
2137 if [ "$COMMAND" = cook ]; then
|
gokhlayeh@210
|
2138 remove_build_depends $MISSING_PACKAGE
|
gokhlayeh@210
|
2139 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@210
|
2140 fi
|
gokhlayeh@210
|
2141
|
gokhlayeh@186
|
2142 # Regen the cooklist if it was planned and command is not cook.
|
gokhlayeh@186
|
2143 [ "$regen_cooklist" ] && unset regen_cooklist && \
|
gokhlayeh@186
|
2144 [ "$COMMAND" != cook ] && sort_cooklist
|
gokhlayeh@186
|
2145
|
gokhlayeh@186
|
2146 # Some hacks to set the bloc & function status as failed if cook was
|
gokhlayeh@186
|
2147 # failed.
|
gokhlayeh@186
|
2148 report_return_code=$cook_code
|
gokhlayeh@186
|
2149 report close-bloc
|
gokhlayeh@186
|
2150 report end-sublog
|
pascal@351
|
2151 rm -f $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
2152 return $cook_code
|
gokhlayeh@186
|
2153 }
|
gokhlayeh@186
|
2154
|
gokhlayeh@186
|
2155 cook_list()
|
gokhlayeh@186
|
2156 {
|
gokhlayeh@204
|
2157 if [ -s $tmp/cooklist ]; then
|
gokhlayeh@204
|
2158 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@204
|
2159 # Note : options -main variables- are automatically keeped by
|
gokhlayeh@204
|
2160 # the sub-applications tazchroot/tazwok; as well as report data.
|
gokhlayeh@204
|
2161 cd $LOCAL_REPOSITORY
|
gokhlayeh@204
|
2162 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@204
|
2163 tazchroot tazwok cook-list --SLITAZ_DIR=$SLITAZ_DIR --SLITAZ_VERSION=$SLITAZ_VERSION ${undigest:+ --undigest=$undigest}
|
gokhlayeh@204
|
2164 return
|
gokhlayeh@204
|
2165 fi
|
gokhlayeh@204
|
2166 while [ -s $tmp/cooklist ]; do
|
gokhlayeh@204
|
2167 PACKAGE=$(sed 1!d $tmp/cooklist)
|
gokhlayeh@204
|
2168 cook
|
gokhlayeh@204
|
2169 done
|
gokhlayeh@204
|
2170 remove_build_depends $MISSING_PACKAGE $remove_later
|
gokhlayeh@210
|
2171 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@204
|
2172 else
|
gokhlayeh@186
|
2173 echo "Nothing to cook."
|
gokhlayeh@186
|
2174 return
|
gokhlayeh@186
|
2175 fi
|
gokhlayeh@186
|
2176 }
|
gokhlayeh@186
|
2177
|
gokhlayeh@186
|
2178 configure_tazchroot()
|
gokhlayeh@186
|
2179 {
|
gokhlayeh@190
|
2180 cat > $LOCAL_REPOSITORY/tazchroot.conf << EOF
|
gokhlayeh@186
|
2181 # Tazchroot configuration file - created by tazwok.
|
gokhlayeh@186
|
2182
|
gokhlayeh@186
|
2183 # Default chroot path
|
gokhlayeh@186
|
2184 SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@186
|
2185 SLITAZ_VERSION=$SLITAZ_VERSION
|
gokhlayeh@186
|
2186 $( [ "$undigest" ] && echo "undigest=$undigest" )
|
gokhlayeh@186
|
2187 LOCAL_REPOSITORY=$SLITAZ_DIR/$(if [ "$undigest" ]; then echo '$undigest'; else echo '$SLITAZ_VERSION'; fi)
|
gokhlayeh@186
|
2188 chroot_dir=\$LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
2189
|
gokhlayeh@186
|
2190 # Default scripts path (theses scripts are added in the
|
gokhlayeh@186
|
2191 # $chroot_dir/usr/bin and can be called with tazchroot script)
|
gokhlayeh@314
|
2192 script_dir=/usr/lib/slitaz/chroot-scripts/tazwok
|
gokhlayeh@186
|
2193
|
gokhlayeh@186
|
2194 # List of directories to mount.
|
gokhlayeh@318
|
2195 list_dir="$(for dir in packages wok src packages-incoming log flavors iso clean-wok; do echo $LOCAL_REPOSITORY/$dir; done)
|
gokhlayeh@186
|
2196 $SLITAZ_LOG$( [ "$undigest" ] && echo -e "\n$SLITAZ_DIR/$SLITAZ_VERSION/packages" )"
|
gokhlayeh@186
|
2197
|
gokhlayeh@186
|
2198 create_chroot()
|
gokhlayeh@186
|
2199 {
|
gokhlayeh@186
|
2200 mkdir -p \$chroot_dir
|
gokhlayeh@186
|
2201 for pkg in \$(tazwok build-depends toolchain --SLITAZ_DIR=\$SLITAZ_DIR --SLITAZ_VERSION=\$SLITAZ_VERSION${undigest:+ --undigest=\$undigest}); do
|
gokhlayeh@186
|
2202 tazpkg get-install \$pkg --root="\$chroot_dir"
|
gokhlayeh@186
|
2203 done
|
gokhlayeh@186
|
2204
|
gokhlayeh@186
|
2205 # Store list of installed packages needed by cleanchroot.
|
gokhlayeh@194
|
2206 ls -1 \$chroot_dir/\$INSTALLED > \$chroot_dir/\$LOCALSTATE/chroot-pkgs
|
gokhlayeh@186
|
2207
|
gokhlayeh@186
|
2208 sed -e "s~^SLITAZ_DIR=.*~SLITAZ_DIR=\$SLITAZ_DIR~" \\
|
gokhlayeh@186
|
2209 -e "s/^SLITAZ_VERSION=.*/SLITAZ_VERSION=\$SLITAZ_VERSION/" \\
|
gokhlayeh@186
|
2210 -i \$chroot_dir/etc/slitaz/slitaz.conf
|
gokhlayeh@186
|
2211 $( [ "$undigest" ] && echo ' echo "undigest='"$undigest"'" >> $chroot_dir/etc/slitaz/tazwok.conf')
|
gokhlayeh@186
|
2212 sed 's/LC_ALL/LC_ALL=POSIX/' -i \$chroot_dir/etc/profile
|
pascal@368
|
2213 # The build bot may run in a sandbox: link sandbox lockfile
|
pascal@368
|
2214 ln -s \$LOCAL_REPOSITORY/sandbox/proc/1 \$chroot_dir/proc/1
|
gokhlayeh@186
|
2215 }
|
gokhlayeh@186
|
2216
|
gokhlayeh@186
|
2217 mount_chroot()
|
gokhlayeh@186
|
2218 {
|
gokhlayeh@186
|
2219 cp -a /etc/resolv.conf \$chroot_dir/etc/resolv.conf
|
gokhlayeh@194
|
2220 echo "\$LOCAL_REPOSITORY/packages" > \$chroot_dir\$LOCALSTATE/mirror
|
gokhlayeh@194
|
2221 mkdir -p \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming
|
gokhlayeh@194
|
2222 echo "\$LOCAL_REPOSITORY/packages-incoming" > \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming/mirror
|
gokhlayeh@194
|
2223 $( [ "$undigest" ] && echo ' mkdir -p $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION
|
gokhlayeh@194
|
2224 echo "$SLITAZ_DIR/$SLITAZ_VERSION/packages" > $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION/mirror' )
|
gokhlayeh@194
|
2225 echo -e "\${LOCAL_REPOSITORY##*/}-incoming\nmain" > \$chroot_dir\$LOCALSTATE/priority
|
gokhlayeh@186
|
2226 mount -t proc proc \$chroot_dir/proc
|
gokhlayeh@186
|
2227 mount -t sysfs sysfs \$chroot_dir/sys
|
gokhlayeh@186
|
2228 mount -t devpts devpts \$chroot_dir/dev/pts
|
gokhlayeh@186
|
2229 mount -t tmpfs shm \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2230 for dir in \$list_dir; do
|
gokhlayeh@186
|
2231 mkdir -p \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2232 mount \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2233 done
|
gokhlayeh@186
|
2234 }
|
gokhlayeh@186
|
2235
|
gokhlayeh@186
|
2236 umount_chroot()
|
gokhlayeh@186
|
2237 {
|
gokhlayeh@186
|
2238 for dir in \$list_dir; do
|
gokhlayeh@186
|
2239 umount \$chroot_dir\$dir
|
gokhlayeh@186
|
2240 done
|
gokhlayeh@186
|
2241 umount \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2242 umount \$chroot_dir/dev/pts
|
gokhlayeh@186
|
2243 umount \$chroot_dir/sys
|
gokhlayeh@186
|
2244 umount \$chroot_dir/proc
|
gokhlayeh@186
|
2245 }
|
gokhlayeh@186
|
2246 EOF
|
gokhlayeh@186
|
2247 }
|
gokhlayeh@186
|
2248
|
gokhlayeh@186
|
2249 ########################################################################
|
gokhlayeh@186
|
2250 ######################### END OF NEW FUNCTIONS #########################
|
gokhlayeh@186
|
2251 ########################################################################
|
gokhlayeh@186
|
2252
|
pascal@111
|
2253 # List packages providing a virtual package
|
pascal@111
|
2254 whoprovide()
|
pascal@111
|
2255 {
|
pascal@111
|
2256 local i;
|
gokhlayeh@195
|
2257 for i in $(fgrep -l PROVIDE $WOK/*/receipt); do
|
pascal@111
|
2258 . $i
|
pascal@111
|
2259 case " $PROVIDE " in
|
pascal@111
|
2260 *\ $1\ *|*\ $1:*) echo $(basename $(dirname $i));;
|
pascal@111
|
2261 esac
|
pascal@111
|
2262 done
|
pascal@111
|
2263 }
|
pascal@111
|
2264
|
gokhlayeh@186
|
2265 ########################################################################
|
gokhlayeh@186
|
2266 # TAZWOK COMMANDS
|
gokhlayeh@186
|
2267 ########################
|
pankso@7
|
2268
|
pankso@7
|
2269 case "$COMMAND" in
|
pankso@7
|
2270 stats)
|
paul@166
|
2271 # Tazwok general statistics from the wok config file.
|
pankso@7
|
2272 #
|
gokhlayeh@186
|
2273 get_tazwok_config
|
gokhlayeh@186
|
2274 echo -e "\n\033[1mTazwok configuration statistics\033[0m
|
pankso@7
|
2275 ================================================================================
|
pankso@7
|
2276 Wok directory : $WOK
|
pankso@7
|
2277 Packages repository : $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
2278 Incoming repository : $INCOMING_REPOSITORY
|
pankso@7
|
2279 Sources repository : $SOURCES_REPOSITORY
|
gokhlayeh@186
|
2280 Log directory : $LOCAL_REPOSITORY/log
|
pankso@7
|
2281 Packages in the wok : `ls -1 $WOK | wc -l`
|
pankso@16
|
2282 Cooked packages : `ls -1 $PACKAGES_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2283 Incoming packages : `ls -1 $INCOMING_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2284 ================================================================================\n"
|
gokhlayeh@186
|
2285 ;;
|
pankso@133
|
2286 edit)
|
gokhlayeh@186
|
2287 get_tazwok_config
|
pankso@133
|
2288 check_for_package_on_cmdline
|
pankso@133
|
2289 check_for_receipt
|
gokhlayeh@186
|
2290 $EDITOR $WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
2291 ;;
|
pascal@98
|
2292 build-depends)
|
gokhlayeh@186
|
2293 # List dependencies to rebuild wok, or only a package
|
gokhlayeh@186
|
2294 get_tazwok_config
|
gokhlayeh@215
|
2295 report(){ : ; }
|
gokhlayeh@242
|
2296 if [ ! "$PACKAGE" ] || [ "$PACKAGE" = toolchain ]; then
|
gokhlayeh@186
|
2297 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
2298 --look_for=dep --with_dev --with_args
|
gokhlayeh@186
|
2299 else
|
gokhlayeh@186
|
2300 check_for_package_on_cmdline
|
gokhlayeh@186
|
2301 scan $PACKAGE --look_for=bdep --with_dev
|
gokhlayeh@186
|
2302 fi
|
gokhlayeh@186
|
2303 ;;
|
gokhlayeh@186
|
2304 gen-cooklist)
|
gokhlayeh@215
|
2305 check_root
|
gokhlayeh@204
|
2306 get_options_list="pkg"
|
gokhlayeh@186
|
2307 get_tazwok_config
|
gokhlayeh@215
|
2308 report(){ : ; }
|
gokhlayeh@204
|
2309 if ! [ "$pkg" ]; then
|
gokhlayeh@242
|
2310 if [ ! "$LIST" ] || [ "$LIST" = toolchain ]; then
|
gokhlayeh@242
|
2311 pkg="$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA"
|
gokhlayeh@242
|
2312 else
|
gokhlayeh@242
|
2313 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
|
gokhlayeh@242
|
2314 fi
|
gokhlayeh@186
|
2315 fi
|
gokhlayeh@204
|
2316 gen_cook_list
|
gokhlayeh@186
|
2317 ;;
|
pascal@119
|
2318 check-depends)
|
gokhlayeh@186
|
2319 # Check package depends /!\
|
gokhlayeh@186
|
2320 get_tazwok_config
|
pascal@119
|
2321 echo ""
|
paul@121
|
2322 echo -e "\033[1mCheck every receipt for DEPENDS - doesn't scan ELF files\033[0m
|
pascal@119
|
2323 ================================================================================"
|
pascal@119
|
2324 TMPDIR=/tmp/tazwok$$
|
pascal@119
|
2325 DEFAULT_DEPENDS="glibc-base gcc-lib-base"
|
pascal@119
|
2326
|
pascal@119
|
2327 # Build ALL_DEPENDS variable
|
pascal@119
|
2328 scan_dep()
|
pascal@119
|
2329 {
|
pascal@119
|
2330 local i
|
pascal@119
|
2331 ALL_DEPENDS="$ALL_DEPENDS$PACKAGE "
|
pascal@128
|
2332 for i in $DEPENDS $SUGGESTED ; do
|
pascal@119
|
2333 case " $ALL_DEPENDS " in
|
pascal@119
|
2334 *\ $i\ *) continue;;
|
pascal@119
|
2335 esac
|
pascal@120
|
2336 [ -d $WOK/$i ] || {
|
pascal@120
|
2337 ALL_DEPENDS="$ALL_DEPENDS$i "
|
pascal@120
|
2338 continue
|
pascal@120
|
2339 }
|
pascal@128
|
2340 DEPENDS=""
|
pascal@128
|
2341 SUGGESTED=""
|
pascal@119
|
2342 . $WOK/$i/receipt
|
pascal@119
|
2343 scan_dep
|
pascal@119
|
2344 done
|
pascal@119
|
2345 }
|
pankso@133
|
2346
|
pascal@119
|
2347 # Check for ELF file
|
pascal@119
|
2348 is_elf()
|
pascal@119
|
2349 {
|
slaxemulator@323
|
2350 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ]
|
pascal@119
|
2351 }
|
pascal@119
|
2352
|
pascal@119
|
2353 # Print shared library dependencies
|
pascal@119
|
2354 ldd()
|
pascal@119
|
2355 {
|
pascal@130
|
2356 LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
|
pascal@119
|
2357 }
|
pascal@119
|
2358
|
pascal@119
|
2359 mkdir $TMPDIR
|
pascal@119
|
2360 cd $TMPDIR
|
pascal@140
|
2361 for i in $LOCALSTATE/files.list.lzma \
|
pascal@140
|
2362 $LOCALSTATE/undigest/*/files.list.lzma ; do
|
pascal@119
|
2363 [ -f $i ] && lzma d $i -so >> files.list
|
pascal@119
|
2364 done
|
pascal@119
|
2365 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
|
pascal@119
|
2366 tazpkg extract $pkg > /dev/null 2>&1
|
pascal@119
|
2367 . */receipt
|
pascal@119
|
2368 ALL_DEPENDS="$DEFAULT_DEPENDS "
|
pascal@119
|
2369 scan_dep
|
pascal@119
|
2370 find */fs -type f | while read file ; do
|
pascal@119
|
2371 is_elf $file || continue
|
pascal@119
|
2372 case "$file" in
|
pascal@119
|
2373 *.o|*.ko|*.ko.gz) continue;;
|
pascal@119
|
2374 esac
|
pascal@119
|
2375 ldd $file | while read lib rem; do
|
pascal@119
|
2376 case "$lib" in
|
pascal@128
|
2377 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
|
pascal@119
|
2378 continue;;
|
pascal@119
|
2379 esac
|
gokhlayeh@195
|
2380 for dep in $(fgrep $lib files.list | cut -d: -f1); do
|
pascal@119
|
2381 case " $ALL_DEPENDS " in
|
pascal@119
|
2382 *\ $dep\ *) continue 2;;
|
pascal@119
|
2383 esac
|
gokhlayeh@195
|
2384 for vdep in $(fgrep $dep $LOCALSTATE/packages.equiv | cut -d= -f1); do
|
pascal@128
|
2385 case " $ALL_DEPENDS " in
|
pascal@129
|
2386 *\ $vdep\ *) continue 3;;
|
pascal@128
|
2387 esac
|
pascal@128
|
2388 done
|
pascal@119
|
2389 done
|
pascal@128
|
2390 [ -n "$dep" ] || dep="UNKNOWN"
|
pascal@119
|
2391 echo "$(basename $pkg): ${file#*fs} depends on package $dep for the shared library $lib"
|
pascal@119
|
2392 done
|
pascal@119
|
2393 done
|
pascal@119
|
2394 rm -rf */
|
pascal@119
|
2395 done
|
pascal@119
|
2396 cd /tmp
|
pascal@119
|
2397 rm -rf $TMPDIR
|
gokhlayeh@186
|
2398 ;;
|
pascal@76
|
2399 check)
|
paul@154
|
2400 # Check wok consistency
|
gokhlayeh@186
|
2401 get_tazwok_config
|
pascal@76
|
2402 echo ""
|
pascal@76
|
2403 echo -e "\033[1mWok and packages checking\033[0m
|
pascal@76
|
2404 ================================================================================"
|
pascal@77
|
2405 cd $WOK
|
pascal@77
|
2406 for pkg in $(ls)
|
pascal@76
|
2407 do
|
pascal@76
|
2408 [ -f $pkg/receipt ] || continue
|
gokhlayeh@186
|
2409 RECEIPT= $pkg/receipt
|
gokhlayeh@186
|
2410 source_receipt
|
gokhlayeh@186
|
2411 [ "$PACKAGE" = "$pkg" ] || echo "Package $PACKAGE should be $pkg" >&2
|
gokhlayeh@186
|
2412 [ -n "$VERSION" ] || echo "Package $PACKAGE has no VERSION" >&2
|
gokhlayeh@186
|
2413 [ -n "$PACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded PACKED_SIZE" >&2
|
gokhlayeh@186
|
2414 [ -n "$UNPACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded UNPACKED_SIZE" >&2
|
gokhlayeh@186
|
2415 [ -n "$EXTRAVERSION" ] && echo "Package $PACKAGE has hardcoded EXTRAVERSION" >&2
|
pascal@97
|
2416 if [ -n "$WANTED" ]; then
|
pascal@97
|
2417 if [ ! -f $WANTED/receipt ]; then
|
gokhlayeh@186
|
2418 echo "Package $PACKAGE wants unknown $WANTED package" >&2
|
pascal@97
|
2419 else
|
pascal@97
|
2420 BASEVERSION=$(. $WANTED/receipt ; echo $VERSION)
|
pascal@103
|
2421 if [ "$VERSION" = "$WANTED" ]; then
|
pascal@103
|
2422 # BASEVERSION is computed in receipt
|
gokhlayeh@195
|
2423 fgrep -q '_pkg=' $pkg/receipt &&
|
pascal@103
|
2424 BASEVERSION=$VERSION
|
pascal@103
|
2425 fi
|
pascal@97
|
2426 if [ "$VERSION" != "$BASEVERSION" ]; then
|
gokhlayeh@186
|
2427 echo "Package $PACKAGE ($VERSION) wants $WANTED ($BASEVERSION)" >&2
|
pascal@97
|
2428 fi
|
pascal@97
|
2429 fi
|
pascal@97
|
2430 fi
|
pascal@97
|
2431
|
pascal@94
|
2432 if [ -n "$CATEGORY" ]; then
|
pascal@94
|
2433 case " $(echo $CATEGORIES) " in
|
pascal@94
|
2434 *\ $CATEGORY\ *);;
|
gokhlayeh@186
|
2435 *) echo "Package $PACKAGE has an invalid CATEGORY" >&2;;
|
pascal@94
|
2436 esac
|
pascal@94
|
2437 else
|
gokhlayeh@186
|
2438 echo"Package $PACKAGE has no CATEGORY" >&2
|
pascal@94
|
2439 fi
|
gokhlayeh@186
|
2440 [ -n "$SHORT_DESC" ] || echo "Package $PACKAGE has no SHORT_DESC" >&2
|
gokhlayeh@186
|
2441 [ -n "$MAINTAINER" ] || echo "Package $PACKAGE has no MAINTAINER" >&2
|
pascal@122
|
2442 case "$WGET_URL" in
|
pascal@178
|
2443 ftp*|http*) busybox wget -s $WGET_URL 2> /dev/null ||
|
gokhlayeh@186
|
2444 echo "Package $PACKAGE has a wrong WGET_URL" >&2;;
|
pascal@122
|
2445 '') ;;
|
gokhlayeh@186
|
2446 *) echo "Package $PACKAGE has an invalid WGET_URL" >&2;;
|
pascal@122
|
2447 esac
|
pascal@112
|
2448 case "$WEB_SITE" in
|
pascal@125
|
2449 ftp*|http*);;
|
gokhlayeh@186
|
2450 '') echo "Package $PACKAGE has no WEB_SITE" >&2;;
|
gokhlayeh@186
|
2451 *) echo "Package $PACKAGE has an invalid WEB_SITE" >&2;;
|
pascal@112
|
2452 esac
|
pascal@78
|
2453 case "$MAINTAINER" in
|
gokhlayeh@186
|
2454 *\<*|*\>*) echo "Package $PACKAGE has an invalid MAINTAINER: $MAINTAINER" >&2;;
|
pascal@78
|
2455 esac
|
pascal@78
|
2456 case "$MAINTAINER" in
|
pascal@78
|
2457 *@*);;
|
gokhlayeh@186
|
2458 *) echo "Package $PACKAGE MAINTAINER is not an email address" >&2;;
|
pascal@78
|
2459 esac
|
gokhlayeh@186
|
2460 MSG="Missing dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@76
|
2461 for i in $DEPENDS; do
|
pascal@76
|
2462 [ -d $i ] && continue
|
pascal@111
|
2463 [ -n "$(whoprovide $i)" ] && continue
|
pascal@76
|
2464 echo -e "$MSG $i"
|
pascal@76
|
2465 MSG=""
|
pascal@76
|
2466 done
|
gokhlayeh@186
|
2467 MSG="Missing build dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@92
|
2468 for i in $BUILD_DEPENDS; do
|
pascal@92
|
2469 [ -d $i ] && continue
|
pascal@111
|
2470 [ -n "$(whoprovide $i)" ] && continue
|
pascal@92
|
2471 echo -e "$MSG $i"
|
pascal@92
|
2472 MSG=""
|
pascal@92
|
2473 done
|
pascal@76
|
2474 MSG="Dependencies loop between $PACKAGE and :\n"
|
pascal@76
|
2475 ALL_DEPS=""
|
pascal@76
|
2476 check_for_deps_loop $PACKAGE $DEPENDS
|
pascal@140
|
2477 [ -d $WOK/$pkg/taz ] && for i in $BUILD_DEPENDS; do
|
pascal@141
|
2478 [ $WOK/$pkg/taz -nt $INSTALLED/$i/files.list ] && continue
|
paul@154
|
2479 echo "$pkg should be rebuilt after $i installation"
|
pascal@140
|
2480 done
|
pascal@76
|
2481 done
|
gokhlayeh@186
|
2482 ;;
|
pankso@7
|
2483 list)
|
paul@166
|
2484 # List packages in wok directory. User can specify a category.
|
pankso@7
|
2485 #
|
gokhlayeh@186
|
2486 get_tazwok_config
|
pankso@7
|
2487 if [ "$2" = "category" ]; then
|
pankso@7
|
2488 echo -e "\033[1m\nPackages categories :\033[0m $CATEGORIES\n"
|
pankso@7
|
2489 exit 0
|
pankso@7
|
2490 fi
|
pankso@7
|
2491 # Check for an asked category.
|
pankso@7
|
2492 if [ -n "$2" ]; then
|
pankso@7
|
2493 ASKED_CATEGORY=$2
|
pankso@7
|
2494 echo ""
|
pankso@7
|
2495 echo -e "\033[1mPackages in category :\033[0m $ASKED_CATEGORY"
|
pankso@7
|
2496 echo "================================================================================"
|
pankso@7
|
2497 for pkg in $WOK/*
|
pankso@7
|
2498 do
|
erjo@168
|
2499 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2500 . $pkg/receipt
|
pankso@7
|
2501 if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then
|
pankso@7
|
2502 echo -n "$PACKAGE"
|
pankso@28
|
2503 echo -e "\033[28G $VERSION"
|
pankso@7
|
2504 packages=$(($packages+1))
|
pankso@7
|
2505 fi
|
pankso@7
|
2506 done
|
pankso@7
|
2507 echo "================================================================================"
|
pankso@7
|
2508 echo -e "$packages packages in category $ASKED_CATEGORY.\n"
|
pankso@7
|
2509 else
|
pankso@7
|
2510 # By default list all packages and version.
|
pankso@7
|
2511 echo ""
|
pankso@7
|
2512 echo -e "\033[1mList of packages in the wok\033[0m"
|
pankso@7
|
2513 echo "================================================================================"
|
pankso@7
|
2514 for pkg in $WOK/*
|
pankso@7
|
2515 do
|
erjo@168
|
2516 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2517 . $pkg/receipt
|
pankso@7
|
2518 echo -n "$PACKAGE"
|
pankso@28
|
2519 echo -en "\033[28G $VERSION"
|
pankso@7
|
2520 echo -e "\033[42G $CATEGORY"
|
pankso@7
|
2521 packages=$(($packages+1))
|
pankso@7
|
2522 done
|
pankso@7
|
2523 echo "================================================================================"
|
MikeDSmith25@82
|
2524 echo -e "$packages packages available in the wok.\n"
|
pankso@7
|
2525 fi
|
pankso@7
|
2526 ;;
|
pankso@7
|
2527 info)
|
MikeDSmith25@82
|
2528 # Information about a package.
|
pankso@7
|
2529 #
|
gokhlayeh@186
|
2530 get_tazwok_config
|
pankso@7
|
2531 check_for_package_on_cmdline
|
pankso@7
|
2532 check_for_receipt
|
pankso@7
|
2533 . $WOK/$PACKAGE/receipt
|
pankso@7
|
2534 echo ""
|
MikeDSmith25@82
|
2535 echo -e "\033[1mTazwok package information\033[0m
|
pankso@7
|
2536 ================================================================================
|
pankso@7
|
2537 Package : $PACKAGE
|
pankso@7
|
2538 Version : $VERSION
|
pankso@7
|
2539 Category : $CATEGORY
|
pankso@7
|
2540 Short desc : $SHORT_DESC
|
pankso@7
|
2541 Maintainer : $MAINTAINER"
|
pankso@7
|
2542 if [ ! "$WEB_SITE" = "" ]; then
|
pankso@7
|
2543 echo "Web site : $WEB_SITE"
|
pankso@7
|
2544 fi
|
pankso@7
|
2545 if [ ! "$DEPENDS" = "" ]; then
|
pankso@7
|
2546 echo "Depends : $DEPENDS"
|
pankso@7
|
2547 fi
|
pankso@7
|
2548 if [ ! "$WANTED" = "" ]; then
|
pankso@7
|
2549 echo "Wanted src : $WANTED"
|
pankso@7
|
2550 fi
|
pankso@7
|
2551 echo "================================================================================"
|
pankso@7
|
2552 echo ""
|
gokhlayeh@186
|
2553 ;;
|
pankso@7
|
2554 check-log)
|
pankso@7
|
2555 # We just cat the file log to view process info.
|
pankso@7
|
2556 #
|
gokhlayeh@186
|
2557 get_tazwok_config
|
pankso@7
|
2558 if [ ! -f "$LOG" ]; then
|
gokhlayeh@186
|
2559 echo -e "\nNo process log found. The package is probably not cooked.\n" >&2
|
gokhlayeh@186
|
2560 exit 1
|
pankso@7
|
2561 else
|
pankso@7
|
2562 echo ""
|
pankso@7
|
2563 echo -e "\033[1mPackage process log for :\033[0m $PACKAGE"
|
pankso@7
|
2564 echo "================================================================================"
|
pankso@7
|
2565 cat $LOG
|
pankso@7
|
2566 echo "================================================================================"
|
pankso@7
|
2567 echo ""
|
gokhlayeh@237
|
2568 if [ -s "$WOK/$PACKAGE/warning.txt" ]; then
|
gokhlayeh@237
|
2569 echo -e "\033[1mCook warning(s) for :\033[0m $PACKAGE"
|
gokhlayeh@237
|
2570 echo "================================================================================"
|
gokhlayeh@237
|
2571 cat "$WOK/$PACKAGE/warning.txt"
|
gokhlayeh@237
|
2572 echo "================================================================================"
|
gokhlayeh@237
|
2573 echo ""
|
gokhlayeh@237
|
2574 fi
|
pankso@7
|
2575 fi
|
gokhlayeh@186
|
2576 ;;
|
pankso@7
|
2577 search)
|
pankso@7
|
2578 # Search for a package by pattern or name.
|
pankso@7
|
2579 #
|
gokhlayeh@186
|
2580 get_tazwok_config
|
pankso@7
|
2581 if [ -z "$2" ]; then
|
gokhlayeh@186
|
2582 echo -e "\nPlease specify a pattern or a package name to search." >&2
|
gokhlayeh@186
|
2583 echo -e "Example : 'tazwok search gcc'.\n" >&2
|
gokhlayeh@186
|
2584 exit 1
|
pankso@7
|
2585 fi
|
pankso@7
|
2586 echo ""
|
pankso@7
|
2587 echo -e "\033[1mSearch result for :\033[0m $2"
|
pankso@7
|
2588 echo "================================================================================"
|
gokhlayeh@195
|
2589 list=`ls -1 $WOK | fgrep $2`
|
pankso@7
|
2590 for pkg in $list
|
pankso@7
|
2591 do
|
pankso@7
|
2592 . $WOK/$pkg/receipt
|
pankso@7
|
2593 echo -n "$PACKAGE "
|
pankso@7
|
2594 echo -en "\033[24G $VERSION"
|
pankso@7
|
2595 echo -e "\033[42G $CATEGORY"
|
gokhlayeh@186
|
2596 packages=$(($PACKAGEs+1))
|
pankso@7
|
2597 done
|
pankso@7
|
2598 echo "================================================================================"
|
pankso@7
|
2599 echo "$packages packages found for : $2"
|
pankso@7
|
2600 echo ""
|
gokhlayeh@186
|
2601 ;;
|
pankso@7
|
2602 compile)
|
pankso@7
|
2603 # Configure and make a package with the receipt.
|
pankso@7
|
2604 #
|
gokhlayeh@186
|
2605 get_tazwok_config
|
gokhlayeh@186
|
2606 source_lib report
|
gokhlayeh@186
|
2607 report start
|
pankso@7
|
2608 compile_package
|
gokhlayeh@186
|
2609 ;;
|
pankso@7
|
2610 genpkg)
|
paul@121
|
2611 # Generate a package.
|
pankso@7
|
2612 #
|
gokhlayeh@186
|
2613 get_tazwok_config
|
gokhlayeh@186
|
2614 source_lib report
|
gokhlayeh@186
|
2615 report start
|
pankso@7
|
2616 gen_package
|
gokhlayeh@186
|
2617 ;;
|
pankso@7
|
2618 cook)
|
pankso@7
|
2619 # Compile and generate a package. Just execute tazwok with
|
pankso@7
|
2620 # the good commands.
|
pankso@7
|
2621 #
|
pankso@7
|
2622 check_root
|
gokhlayeh@186
|
2623 get_tazwok_config
|
gokhlayeh@186
|
2624 source_lib report
|
gokhlayeh@186
|
2625 report start
|
gokhlayeh@215
|
2626 update_wan_db
|
gokhlayeh@215
|
2627 check_for_commit
|
gokhlayeh@215
|
2628 [ "$plan_sort_depdb" ] && sort -o $dep_db $dep_db && unset plan_sort_depdb
|
gokhlayeh@215
|
2629 [ "$plan_sort_wandb" ] && sort -o $wan_db $wan_db && unset plan_sort_wandb
|
gokhlayeh@215
|
2630 if [ "$plan_regen_cookorder" ]; then
|
gokhlayeh@352
|
2631 [ "$(sed 1!d $PACKAGES_REPOSITORY/cookorder.txt)" = "#PlanSort" ] || \
|
gokhlayeh@215
|
2632 sed 1i"#PlanSort" -i $PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@215
|
2633 fi
|
gokhlayeh@186
|
2634 cook
|
gokhlayeh@186
|
2635 ;;
|
gokhlayeh@186
|
2636 sort-cooklist)
|
gokhlayeh@297
|
2637 if [ ! -f "$LIST" ]; then
|
gokhlayeh@297
|
2638 echo "Usage : tazwok sort-cooklist cooklist" >&2
|
gokhlayeh@186
|
2639 exit 1
|
gokhlayeh@186
|
2640 fi
|
gokhlayeh@297
|
2641 check_root
|
gokhlayeh@186
|
2642 get_tazwok_config
|
gokhlayeh@297
|
2643 report(){ : ; }
|
gokhlayeh@297
|
2644 # When using sort-cooklist, the script should behave as for gen-cooklist
|
gokhlayeh@297
|
2645 # The only difference between theses two is where the output is sended.
|
gokhlayeh@297
|
2646 COMMAND=gen-cooklist
|
gokhlayeh@186
|
2647 cooklist=$LIST
|
gokhlayeh@297
|
2648 gen_cook_list
|
gokhlayeh@300
|
2649 cp -af $tmp/cooklist $cooklist
|
gokhlayeh@186
|
2650 ;;
|
pankso@7
|
2651 cook-list)
|
gokhlayeh@204
|
2652 # Cook all packages listed in a file or in default cooklist.
|
gokhlayeh@186
|
2653 check_root
|
gokhlayeh@204
|
2654 get_options_list="pkg forced"
|
gokhlayeh@186
|
2655 get_tazwok_config
|
gokhlayeh@186
|
2656 source_lib report
|
gokhlayeh@186
|
2657 report start
|
gokhlayeh@204
|
2658 if ! [ "$pkg" ]; then
|
gokhlayeh@204
|
2659 cooklist=${LIST:-$PACKAGES_REPOSITORY/cooklist}
|
gokhlayeh@186
|
2660 fi
|
gokhlayeh@204
|
2661 gen_cook_list
|
gokhlayeh@186
|
2662 cook_list
|
gokhlayeh@186
|
2663 ;;
|
gokhlayeh@186
|
2664 clean)
|
gokhlayeh@186
|
2665 # Clean up a package work directory + thoses which want it.
|
pankso@7
|
2666 #
|
gokhlayeh@186
|
2667 get_tazwok_config
|
pankso@7
|
2668 check_for_package_on_cmdline
|
pankso@7
|
2669 check_for_receipt
|
gokhlayeh@186
|
2670 source_lib report
|
gokhlayeh@186
|
2671 report start
|
pankso@7
|
2672 . $RECEIPT
|
gokhlayeh@186
|
2673 clean
|
gokhlayeh@186
|
2674 ;;
|
pankso@7
|
2675 gen-clean-wok)
|
paul@121
|
2676 # Generate a clean wok from the current wok by copying all receipts
|
pankso@7
|
2677 # and stuff directory.
|
pankso@7
|
2678 #
|
gokhlayeh@186
|
2679 get_tazwok_config
|
gokhlayeh@186
|
2680 source_lib report
|
gokhlayeh@186
|
2681 report start
|
gokhlayeh@186
|
2682 if [ -z "$ARG" ]; then
|
gokhlayeh@186
|
2683 echo -e "\nPlease specify the destination for the new clean wok.\n" >&2
|
gokhlayeh@186
|
2684 exit 1
|
pankso@7
|
2685 else
|
gokhlayeh@186
|
2686 dest=$ARG
|
pankso@7
|
2687 mkdir -p $dest
|
pankso@7
|
2688 fi
|
gokhlayeh@186
|
2689 report step "Creating clean wok in : $dest"
|
pankso@7
|
2690 for pkg in `ls -1 $WOK`
|
pankso@7
|
2691 do
|
pankso@7
|
2692 mkdir -p $dest/$pkg
|
pankso@7
|
2693 cp -a $WOK/$pkg/receipt $dest/$pkg
|
gokhlayeh@186
|
2694 [ -f $WOK/$pkg/description.txt ] && \
|
gokhlayeh@186
|
2695 cp -a $WOK/$pkg/description.txt $dest/$pkg
|
pankso@7
|
2696 if [ -d "$WOK/$pkg/stuff" ]; then
|
pankso@7
|
2697 cp -a $WOK/$pkg/stuff $dest/$pkg
|
pankso@7
|
2698 fi
|
pankso@7
|
2699 done
|
gokhlayeh@186
|
2700 [ -d $WOK/.hg ] && cp -a $WOK/.hg $dest
|
gokhlayeh@186
|
2701 report end-step
|
pankso@7
|
2702 echo "Packages cleaned : `ls -1 $dest | wc -l`"
|
pankso@7
|
2703 echo ""
|
gokhlayeh@186
|
2704 ;;
|
pankso@7
|
2705 clean-wok)
|
pankso@7
|
2706 # Clean all packages in the work directory
|
pankso@7
|
2707 #
|
gokhlayeh@186
|
2708 get_tazwok_config
|
gokhlayeh@186
|
2709 source_lib report
|
gokhlayeh@186
|
2710 report start
|
gokhlayeh@186
|
2711 report step "Cleaning wok"
|
gokhlayeh@186
|
2712 for PACKAGE in `ls -1 $WOK`
|
pankso@7
|
2713 do
|
gokhlayeh@186
|
2714 set_common_path
|
gokhlayeh@186
|
2715 source_receipt
|
gokhlayeh@186
|
2716 clean
|
pankso@7
|
2717 done
|
pankso@7
|
2718 echo "`ls -1 $WOK | wc -l` packages cleaned."
|
gokhlayeh@186
|
2719 ;;
|
gokhlayeh@266
|
2720 clean-src)
|
gokhlayeh@266
|
2721 # Remove tarball unrelated to wok receipts from src repo.
|
gokhlayeh@266
|
2722 check_root
|
gokhlayeh@266
|
2723 get_options_list="forced"
|
gokhlayeh@266
|
2724 get_tazwok_config
|
gokhlayeh@266
|
2725 cd $SOURCES_REPOSITORY
|
gokhlayeh@266
|
2726 echo -n "Checking $SOURCES_REPOSITORY..."
|
gokhlayeh@266
|
2727 for TARBALL in *; do
|
gokhlayeh@266
|
2728 [ "$TARBALL" = sources.list ] && continue
|
gokhlayeh@266
|
2729 grep -q $'\t'$TARBALL$ $SOURCES_REPOSITORY/sources.list || \
|
gokhlayeh@266
|
2730 echo $TARBALL >> $tmp/obsolete
|
gokhlayeh@266
|
2731 done
|
gokhlayeh@266
|
2732 status
|
slaxemulator@273
|
2733 if ! [ -f $tmp/obsolete ]; then
|
slaxemulator@273
|
2734 echo "No sources need to be removed."
|
slaxemulator@273
|
2735 exit 1
|
slaxemulator@273
|
2736 fi
|
gokhlayeh@266
|
2737 echo ""
|
gokhlayeh@266
|
2738 echo -e "\033[1mObsolete/unrelated-to-wok sourcess :\033[0m"
|
gokhlayeh@266
|
2739 horizontal_line
|
gokhlayeh@266
|
2740 cat $tmp/obsolete
|
gokhlayeh@266
|
2741 horizontal_line
|
gokhlayeh@266
|
2742 echo "$(wc -l $tmp/obsolete | cut -f1 -d' ') tarballs to remove."
|
pankso@7
|
2743 echo ""
|
gokhlayeh@266
|
2744 echo -n "Please confirm removing (type uppercase YES): "
|
gokhlayeh@266
|
2745 read answer
|
gokhlayeh@266
|
2746 if [ "$answer" = YES ]; then
|
gokhlayeh@266
|
2747 echo -n "Removing old sources..."
|
gokhlayeh@266
|
2748 cat $tmp/obsolete | while read i; do
|
gokhlayeh@266
|
2749 rm -f $SOURCES_REPOSITORY/$i
|
gokhlayeh@266
|
2750 done
|
gokhlayeh@266
|
2751 status
|
gokhlayeh@266
|
2752 fi
|
gokhlayeh@266
|
2753 ;;
|
pankso@7
|
2754 gen-list)
|
gokhlayeh@186
|
2755 get_tazwok_config
|
gokhlayeh@204
|
2756 if [ "$2" ]; then
|
pankso@7
|
2757 if [ -d "$2" ]; then
|
gokhlayeh@204
|
2758 pkg_repository=$2
|
pankso@7
|
2759 else
|
gokhlayeh@204
|
2760 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@204
|
2761 exit 1
|
pankso@7
|
2762 fi
|
pankso@7
|
2763 fi
|
gokhlayeh@204
|
2764
|
gokhlayeh@186
|
2765 source_lib report
|
gokhlayeh@186
|
2766 report start
|
gokhlayeh@204
|
2767 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
2768 gen_packages_db
|
gokhlayeh@204
|
2769 else
|
gokhlayeh@204
|
2770 pkg_repository=$PACKAGES_REPOSITORY && gen_packages_db
|
gokhlayeh@204
|
2771 pkg_repository=$INCOMING_REPOSITORY && gen_packages_db
|
pankso@28
|
2772 fi
|
gokhlayeh@186
|
2773 ;;
|
gokhlayeh@186
|
2774 check-list)
|
gokhlayeh@186
|
2775 # The directory to move into by default is the repository,
|
gokhlayeh@186
|
2776 # if $2 is not empty cd into $2.
|
pascal@178
|
2777 #
|
gokhlayeh@186
|
2778 get_tazwok_config
|
gokhlayeh@204
|
2779 if [ "$2" ]; then
|
pascal@178
|
2780 if [ -d "$2" ]; then
|
gokhlayeh@204
|
2781 pkg_repository=$2
|
pascal@178
|
2782 else
|
gokhlayeh@186
|
2783 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@186
|
2784 exit 1
|
pascal@178
|
2785 fi
|
pascal@178
|
2786 fi
|
gokhlayeh@186
|
2787
|
gokhlayeh@186
|
2788 source_lib report
|
gokhlayeh@204
|
2789 report start
|
gokhlayeh@204
|
2790 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
2791 update_packages_db
|
gokhlayeh@204
|
2792 else
|
gokhlayeh@204
|
2793 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
2794 pkg_repository=$INCOMING_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
2795 fi
|
gokhlayeh@186
|
2796 ;;
|
pankso@7
|
2797 new-tree)
|
MikeDSmith25@82
|
2798 # Just create a few directories and generate an empty receipt to prepare
|
pankso@7
|
2799 # the creation of a new package.
|
pankso@7
|
2800 #
|
gokhlayeh@186
|
2801 get_tazwok_config
|
pankso@7
|
2802 check_for_package_on_cmdline
|
slaxemulator@362
|
2803 clean_wok=$LOCAL_REPOSITORY/clean-wok
|
slaxemulator@362
|
2804 if [ -d $clean_wok/$PACKAGE ]; then
|
gokhlayeh@186
|
2805 echo -e "\n$PACKAGE package tree already exists.\n" >&2
|
gokhlayeh@186
|
2806 exit 1
|
pankso@7
|
2807 fi
|
pankso@7
|
2808 echo "Creating : $WOK/$PACKAGE"
|
slaxemulator@362
|
2809 mkdir $clean_wok/$PACKAGE
|
slaxemulator@362
|
2810 cd $clean_wok/$PACKAGE
|
pankso@7
|
2811 echo -n "Preparing the receipt..."
|
pankso@7
|
2812 #
|
pankso@7
|
2813 # Default receipt begin.
|
pankso@7
|
2814 #
|
pankso@7
|
2815 echo "# SliTaz package receipt." > receipt
|
pankso@7
|
2816 echo "" >> receipt
|
pankso@7
|
2817 echo "PACKAGE=\"$PACKAGE\"" >> receipt
|
pankso@7
|
2818 # Finish the empty receipt.
|
pankso@7
|
2819 cat >> receipt << "EOF"
|
pankso@7
|
2820 VERSION=""
|
pankso@7
|
2821 CATEGORY=""
|
pankso@7
|
2822 SHORT_DESC=""
|
pankso@7
|
2823 MAINTAINER=""
|
pankso@7
|
2824 DEPENDS=""
|
pankso@7
|
2825 TARBALL="$PACKAGE-$VERSION.tar.gz"
|
pankso@7
|
2826 WEB_SITE=""
|
pankso@7
|
2827 WGET_URL=""
|
pankso@7
|
2828
|
pankso@7
|
2829 # Rules to configure and make the package.
|
pankso@7
|
2830 compile_rules()
|
pankso@7
|
2831 {
|
pankso@7
|
2832 cd $src
|
gokhlayeh@204
|
2833 ./configure && make && make install
|
pankso@7
|
2834 }
|
pankso@7
|
2835
|
pankso@7
|
2836 # Rules to gen a SliTaz package suitable for Tazpkg.
|
pankso@7
|
2837 genpkg_rules()
|
pankso@7
|
2838 {
|
pankso@7
|
2839 mkdir -p $fs/usr
|
pankso@7
|
2840 cp -a $_pkg/usr/bin $fs/usr
|
pankso@7
|
2841 }
|
pankso@7
|
2842
|
pankso@7
|
2843 EOF
|
pankso@7
|
2844 #
|
pankso@7
|
2845 # Default receipt end.
|
pankso@7
|
2846 #
|
pankso@7
|
2847 status
|
pankso@7
|
2848 # Interactive mode, asking and seding.
|
pankso@7
|
2849 if [ "$3" = "--interactive" ]; then
|
paul@154
|
2850 echo "Entering into interactive mode..."
|
pankso@7
|
2851 echo "================================================================================"
|
pankso@7
|
2852 echo "Package : $PACKAGE"
|
pankso@7
|
2853 # Version.
|
pankso@7
|
2854 echo -n "Version : " ; read anser
|
pankso@7
|
2855 sed -i s/'VERSION=\"\"'/"VERSION=\"$anser\""/ receipt
|
pankso@7
|
2856 # Category.
|
pankso@7
|
2857 echo -n "Category : " ; read anser
|
pankso@7
|
2858 sed -i s/'CATEGORY=\"\"'/"CATEGORY=\"$anser\""/ receipt
|
pankso@7
|
2859 # Short description.
|
pankso@7
|
2860 echo -n "Short desc : " ; read anser
|
pankso@7
|
2861 sed -i s/'SHORT_DESC=\"\"'/"SHORT_DESC=\"$anser\""/ receipt
|
pankso@7
|
2862 # Maintainer.
|
pankso@7
|
2863 echo -n "Maintainer : " ; read anser
|
pankso@7
|
2864 sed -i s/'MAINTAINER=\"\"'/"MAINTAINER=\"$anser\""/ receipt
|
pankso@7
|
2865 # Web site.
|
pankso@7
|
2866 echo -n "Web site : " ; read anser
|
pankso@133
|
2867 sed -i s#'WEB_SITE=\"\"'#"WEB_SITE=\"$anser\""# receipt
|
pankso@7
|
2868 echo ""
|
pankso@7
|
2869 # Wget URL.
|
pankso@7
|
2870 echo "Wget URL to download source tarball."
|
pankso@7
|
2871 echo "Example : \$GNU_MIRROR/\$PACKAGE/\$TARBALL"
|
pankso@7
|
2872 echo -n "Wget url : " ; read anser
|
pankso@7
|
2873 sed -i s#'WGET_URL=\"\"'#"WGET_URL=\"$anser\""# receipt
|
pankso@7
|
2874 # Ask for a stuff dir.
|
pankso@7
|
2875 echo -n "Do you need a stuff directory ? (y/N) : " ; read anser
|
pankso@7
|
2876 if [ "$anser" = "y" ]; then
|
pankso@7
|
2877 echo -n "Creating the stuff directory..."
|
pankso@7
|
2878 mkdir stuff && status
|
pankso@7
|
2879 fi
|
pankso@7
|
2880 # Ask for a description file.
|
pankso@7
|
2881 echo -n "Are you going to write a description ? (y/N) : " ; read anser
|
pankso@7
|
2882 if [ "$anser" = "y" ]; then
|
pankso@7
|
2883 echo -n "Creating the description.txt file..."
|
pankso@7
|
2884 echo "" > description.txt && status
|
pankso@7
|
2885 fi
|
pankso@7
|
2886 echo "================================================================================"
|
pankso@7
|
2887 echo ""
|
pankso@7
|
2888 fi
|
gokhlayeh@186
|
2889 ;;
|
pankso@7
|
2890 remove)
|
pankso@7
|
2891 # Remove a package from the wok.
|
pankso@7
|
2892 #
|
gokhlayeh@186
|
2893 get_tazwok_config
|
pankso@7
|
2894 check_for_package_on_cmdline
|
pankso@7
|
2895 echo ""
|
pascal@83
|
2896 echo -n "Please confirm deletion (y/N) : "; read anser
|
pascal@83
|
2897 if [ "$anser" = "y" ]; then
|
pascal@83
|
2898 echo -n "Removing $PACKAGE..."
|
pascal@83
|
2899 rm -rf $WOK/$PACKAGE && status
|
pascal@83
|
2900 echo ""
|
pascal@83
|
2901 fi
|
gokhlayeh@186
|
2902 ;;
|
gokhlayeh@304
|
2903 update-wok)
|
paul@166
|
2904 # Pull and update a Hg wok.
|
gokhlayeh@304
|
2905 get_options_list="local"
|
gokhlayeh@186
|
2906 get_tazwok_config
|
gokhlayeh@309
|
2907 source_lib report
|
gokhlayeh@310
|
2908 report start
|
gokhlayeh@304
|
2909 clean_wok=$LOCAL_REPOSITORY/clean-wok
|
gokhlayeh@304
|
2910 cd $clean_wok
|
gokhlayeh@304
|
2911 if ! [ "$local" ]; then
|
gokhlayeh@304
|
2912 if [ "$WOK_UPDATE_METHOD" = hg ]; then
|
gokhlayeh@304
|
2913 if ! [ -f "$INSTALLED/mercurial/receipt" ]; then
|
gokhlayeh@304
|
2914
|
gokhlayeh@304
|
2915 # Auto-install only if we are in a cook chroot.
|
gokhlayeh@304
|
2916 if [ -x /usr/bin/clean-chroot ]; then
|
gokhlayeh@304
|
2917 echo "" >&2
|
slaxemulator@327
|
2918 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
|
2919 echo "">&2
|
gokhlayeh@330
|
2920 exit 1
|
gokhlayeh@304
|
2921 else
|
gokhlayeh@304
|
2922 tazpkg get-install mercurial
|
gokhlayeh@304
|
2923 fi
|
gokhlayeh@330
|
2924 fi
|
gokhlayeh@304
|
2925
|
gokhlayeh@330
|
2926 report step "Getting wok changes using hg"
|
gokhlayeh@330
|
2927 if [ -d .hg ]; then
|
gokhlayeh@330
|
2928 hg pull -u || exit 1
|
gokhlayeh@304
|
2929 else
|
gokhlayeh@330
|
2930 hg clone $HG_WOK . || exit 1
|
gokhlayeh@304
|
2931 fi
|
gokhlayeh@309
|
2932 report end-step
|
gokhlayeh@304
|
2933 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@304
|
2934 else
|
gokhlayeh@309
|
2935 report step "Getting wok changes using tarball"
|
gokhlayeh@304
|
2936 { mkdir .tmp && cd .tmp
|
gokhlayeh@304
|
2937 wget "$TARBALL_WOK" &&
|
gokhlayeh@304
|
2938 case $TARBALL_WOK in
|
gokhlayeh@304
|
2939 *bz2) tar xjf *.bz2 -C wok; rm *.bz2;;
|
gokhlayeh@304
|
2940 *lzma) unlzma -c *.lzma | tar xf - -C wok; rm *.lzma ;;
|
gokhlayeh@304
|
2941 *gz) tar xzf *.gz -C wok; rm*.gz ;;
|
gokhlayeh@304
|
2942 esac &&
|
gokhlayeh@304
|
2943 rm -r $(ls -d $clean_wok/*) &&
|
gokhlayeh@304
|
2944 cp -a wok/* $clean_wok &&
|
gokhlayeh@304
|
2945 cd .. &&
|
gokhlayeh@304
|
2946 rm -r .tmp
|
gokhlayeh@304
|
2947 } || { echo "That's not cool: it fails!" >&2
|
gokhlayeh@309
|
2948 report end-step
|
gokhlayeh@304
|
2949 exit 1; }
|
gokhlayeh@309
|
2950 report end-step
|
gokhlayeh@304
|
2951 fi
|
pankso@106
|
2952 fi
|
gokhlayeh@309
|
2953 report step "Appending changes to wok"
|
gokhlayeh@304
|
2954
|
gokhlayeh@308
|
2955 # Handle removed files/dir.
|
gokhlayeh@308
|
2956 cd $WOK
|
gokhlayeh@313
|
2957 for dir in *; do
|
slaxemulator@329
|
2958 [ -d "$clean_wok/$dir" ] || rm -rf $dir
|
gokhlayeh@308
|
2959 done
|
gokhlayeh@308
|
2960 for file in */receipt */description.txt; do
|
slaxemulator@329
|
2961 [ -f "$clean_wok/$file" ] || rm -rf $file
|
gokhlayeh@308
|
2962 done
|
gokhlayeh@330
|
2963 for i in $(find */stuff 2>/dev/null); do
|
slaxemulator@329
|
2964 [ -e "$clean_wok/$i" ] || rm -rf $i
|
gokhlayeh@304
|
2965 done
|
gokhlayeh@304
|
2966
|
gokhlayeh@308
|
2967 cp -a $clean_wok/* $WOK
|
gokhlayeh@309
|
2968 report end-step
|
gokhlayeh@186
|
2969 ;;
|
pankso@108
|
2970 maintainers)
|
gokhlayeh@186
|
2971 get_tazwok_config
|
pankso@108
|
2972 echo ""
|
pankso@108
|
2973 echo "List of maintainers for: $WOK"
|
pankso@108
|
2974 echo "================================================================================"
|
pankso@108
|
2975 touch /tmp/slitaz-maintainers
|
pankso@108
|
2976 for pkg in $WOK/*
|
pankso@108
|
2977 do
|
pankso@108
|
2978 . $pkg/receipt
|
gokhlayeh@195
|
2979 if ! fgrep -q "$MAINTAINER" /tmp/slitaz-maintainers; then
|
pankso@108
|
2980 echo "$MAINTAINER" >> /tmp/slitaz-maintainers
|
pankso@108
|
2981 echo "$MAINTAINER"
|
pankso@108
|
2982 fi
|
pankso@108
|
2983 done
|
pankso@108
|
2984 echo "================================================================================"
|
pankso@108
|
2985 echo "Maintainers: `cat /tmp/slitaz-maintainers | wc -l`"
|
pankso@108
|
2986 echo ""
|
pankso@108
|
2987 # Remove tmp files
|
gokhlayeh@186
|
2988 rm -f /tmp/slitaz-maintainers
|
gokhlayeh@186
|
2989 ;;
|
pankso@107
|
2990 maintained-by)
|
paul@166
|
2991 # Search for packages maintained by a contributor.
|
gokhlayeh@186
|
2992 get_tazwok_config
|
pankso@107
|
2993 if [ ! -n "$2" ]; then
|
gokhlayeh@186
|
2994 echo "Specify a name or email of a maintainer." >&2
|
gokhlayeh@186
|
2995 exit 1
|
pankso@107
|
2996 fi
|
pankso@107
|
2997 echo "Maintainer packages"
|
pankso@107
|
2998 echo "================================================================================"
|
pankso@107
|
2999 for pkg in $WOK/*
|
pankso@107
|
3000 do
|
pankso@107
|
3001 . $pkg/receipt
|
gokhlayeh@195
|
3002 if echo "$MAINTAINER" | fgrep -q "$2"; then
|
pankso@107
|
3003 echo "$PACKAGE"
|
gokhlayeh@186
|
3004 packages=$(($PACKAGEs+1))
|
pankso@107
|
3005 fi
|
pankso@107
|
3006 done
|
pankso@107
|
3007 echo "================================================================================"
|
gokhlayeh@186
|
3008 echo "Packages maintained by $2: $PACKAGEs"
|
gokhlayeh@186
|
3009 echo ""
|
gokhlayeh@186
|
3010 ;;
|
gokhlayeh@268
|
3011 tags)
|
gokhlayeh@268
|
3012 get_tazwok_config
|
gokhlayeh@268
|
3013 echo -e "\n\033[1mTags list :\033[0m"
|
gokhlayeh@268
|
3014 horizontal_line
|
gokhlayeh@268
|
3015 cd $WOK
|
gokhlayeh@268
|
3016 for i in */receipt; do
|
gokhlayeh@268
|
3017 unset TAGS
|
gokhlayeh@268
|
3018 source $i
|
gokhlayeh@268
|
3019 for t in $TAGS; do
|
gokhlayeh@268
|
3020 grep -q ^$t$ $tmp/tags && continue
|
gokhlayeh@268
|
3021 echo $t | tee -a $tmp/tags
|
gokhlayeh@268
|
3022 done
|
gokhlayeh@268
|
3023 done
|
gokhlayeh@268
|
3024 horizontal_line
|
gokhlayeh@268
|
3025 echo "$(wc -l $tmp/tags | cut -f1 -d ' ') tags listed."
|
gokhlayeh@268
|
3026 ;;
|
erjo@159
|
3027 check-src)
|
erjo@159
|
3028 # Verify if upstream package is still available
|
erjo@159
|
3029 #
|
gokhlayeh@186
|
3030 get_tazwok_config
|
erjo@159
|
3031 check_for_package_on_cmdline
|
erjo@159
|
3032 check_for_receipt
|
gokhlayeh@186
|
3033 source_receipt
|
erjo@159
|
3034 check_src()
|
erjo@159
|
3035 {
|
erjo@159
|
3036 for url in $@; do
|
pascal@178
|
3037 busybox wget -s $url 2>/dev/null && break
|
erjo@159
|
3038 done
|
erjo@159
|
3039 }
|
gokhlayeh@186
|
3040 if [ "$WGET_URL" ];then
|
erjo@159
|
3041 echo -n "$PACKAGE : "
|
erjo@159
|
3042 check_src $WGET_URL
|
erjo@159
|
3043 status
|
erjo@159
|
3044 else
|
erjo@159
|
3045 echo "No tarball to check for $PACKAGE"
|
erjo@159
|
3046 fi
|
gokhlayeh@186
|
3047 ;;
|
gokhlayeh@186
|
3048 get-src)
|
gokhlayeh@186
|
3049 check_root
|
gokhlayeh@225
|
3050 get_options_list="target nounpack"
|
gokhlayeh@186
|
3051 get_tazwok_config
|
gokhlayeh@186
|
3052 check_for_package_on_cmdline
|
gokhlayeh@186
|
3053 check_for_receipt
|
gokhlayeh@186
|
3054 source_receipt
|
gokhlayeh@186
|
3055 if [ "$WGET_URL" ];then
|
gokhlayeh@186
|
3056 source_lib report
|
gokhlayeh@186
|
3057 report start
|
gokhlayeh@225
|
3058 check_for_tarball
|
gokhlayeh@186
|
3059 else
|
gokhlayeh@186
|
3060 echo "No tarball to download for $PACKAGE"
|
gokhlayeh@186
|
3061 fi
|
gokhlayeh@186
|
3062 ;;
|
gokhlayeh@204
|
3063 check-commit)
|
gokhlayeh@186
|
3064 check_root
|
gokhlayeh@204
|
3065 get_options_list="missing forced"
|
gokhlayeh@186
|
3066 get_tazwok_config
|
gokhlayeh@186
|
3067 source_lib report
|
gokhlayeh@186
|
3068 report start
|
gokhlayeh@204
|
3069 if [ "$forced" ]; then
|
gokhlayeh@204
|
3070 rm -f $WOK/*/md5
|
gokhlayeh@204
|
3071 unset forced
|
gokhlayeh@204
|
3072 fi
|
gokhlayeh@204
|
3073 if [ "$missing" ]; then
|
gokhlayeh@204
|
3074 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3075 else
|
gokhlayeh@204
|
3076 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3077 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3078 } | sort -u)"
|
gokhlayeh@204
|
3079 fi
|
gokhlayeh@204
|
3080 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
3081 gen_cook_list
|
gokhlayeh@186
|
3082 ;;
|
gokhlayeh@186
|
3083 cook-commit)
|
gokhlayeh@186
|
3084 check_root
|
gokhlayeh@204
|
3085 get_options_list="missing forced"
|
gokhlayeh@186
|
3086 get_tazwok_config
|
gokhlayeh@186
|
3087 source_lib report
|
gokhlayeh@186
|
3088 report start
|
gokhlayeh@204
|
3089 if [ "$forced" ]; then
|
gokhlayeh@204
|
3090 rm -f $WOK/*/md5
|
gokhlayeh@204
|
3091 unset forced
|
gokhlayeh@204
|
3092 fi
|
gokhlayeh@204
|
3093 if [ "$missing" ]; then
|
gokhlayeh@204
|
3094 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3095 else
|
gokhlayeh@204
|
3096 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3097 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3098 } | sort -u)"
|
gokhlayeh@204
|
3099 fi
|
gokhlayeh@204
|
3100 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@186
|
3101 gen_cook_list
|
gokhlayeh@186
|
3102 cook_list
|
gokhlayeh@186
|
3103 ;;
|
gokhlayeh@186
|
3104 cook-all)
|
gokhlayeh@186
|
3105 check_root
|
gokhlayeh@204
|
3106 get_options_list="forced missing"
|
gokhlayeh@186
|
3107 get_tazwok_config
|
gokhlayeh@186
|
3108 source_lib report
|
gokhlayeh@186
|
3109 report start
|
gokhlayeh@204
|
3110 if [ "$missing" ]; then
|
gokhlayeh@204
|
3111 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3112 else
|
gokhlayeh@204
|
3113 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3114 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3115 } | sort -u)"
|
gokhlayeh@204
|
3116 fi
|
gokhlayeh@204
|
3117 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@204
|
3118 gen_cook_list
|
gokhlayeh@186
|
3119 cook_list
|
gokhlayeh@186
|
3120 ;;
|
gokhlayeh@186
|
3121 gen-wok-db)
|
gokhlayeh@186
|
3122 check_root
|
gokhlayeh@186
|
3123 get_tazwok_config
|
gokhlayeh@186
|
3124 source_lib report
|
gokhlayeh@186
|
3125 report start
|
gokhlayeh@204
|
3126 gen_wok_db
|
gokhlayeh@186
|
3127 ;;
|
gokhlayeh@186
|
3128 report)
|
gokhlayeh@186
|
3129 get_tazwok_config
|
gokhlayeh@186
|
3130 cd $PACKAGES_REPOSITORY
|
gokhlayeh@239
|
3131 if [ "$2" ]; then
|
gokhlayeh@239
|
3132 case $2 in
|
gokhlayeh@239
|
3133 commit|cooklist|incoming|broken|blocked)
|
gokhlayeh@239
|
3134 show="$2"
|
gokhlayeh@239
|
3135 ;;
|
gokhlayeh@239
|
3136 *)
|
gokhlayeh@239
|
3137 echo "usage : tazwok report [commit|cooklist|incoming|broken|blocked]" >&2
|
gokhlayeh@239
|
3138 exit 1
|
gokhlayeh@239
|
3139 ;;
|
gokhlayeh@239
|
3140 esac
|
gokhlayeh@239
|
3141 else
|
gokhlayeh@239
|
3142 show="commit cooklist incoming broken blocked"
|
gokhlayeh@239
|
3143 fi
|
gokhlayeh@239
|
3144 for i in $show; do
|
gokhlayeh@186
|
3145 if [ -s $i ]; then
|
gokhlayeh@239
|
3146 echo ""
|
gokhlayeh@239
|
3147 echo -e "\033[1m$i\033[0m"
|
gokhlayeh@239
|
3148 echo "================================================================================"
|
gokhlayeh@239
|
3149 cat $i
|
gokhlayeh@239
|
3150 echo "================================================================================"
|
gokhlayeh@239
|
3151 echo ""
|
gokhlayeh@186
|
3152 fi
|
gokhlayeh@186
|
3153 done
|
gokhlayeh@186
|
3154 ;;
|
gokhlayeh@186
|
3155 check-incoming)
|
gokhlayeh@186
|
3156 check_root
|
gokhlayeh@214
|
3157 get_options_list="forced"
|
gokhlayeh@186
|
3158 get_tazwok_config
|
gokhlayeh@186
|
3159 source_lib report
|
gokhlayeh@186
|
3160 report start
|
gokhlayeh@307
|
3161 [ -f $LOCAL_RESOSITORY/incoming ] && rm [ -f $LOCAL_REPOSITORY/incoming ]
|
gokhlayeh@307
|
3162 report step "Checking $INCOMING_REPOSITORY"
|
gokhlayeh@307
|
3163 report open-bloc
|
gokhlayeh@313
|
3164 [ -f $LOCAL_REPOSITORY/log/incoming.html ] && rm $LOCAL_REPOSITORY/log/incoming.html
|
gokhlayeh@307
|
3165 report sublog $LOCAL_REPOSITORY/log/incoming.html
|
gokhlayeh@352
|
3166 echo "incoming" > $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
3167 check_for_incoming
|
gokhlayeh@307
|
3168 report end-sublog
|
gokhlayeh@307
|
3169 report close-bloc
|
gokhlayeh@186
|
3170 ;;
|
gokhlayeh@190
|
3171 configure-chroot)
|
gokhlayeh@190
|
3172 check_root
|
gokhlayeh@190
|
3173 get_tazwok_config
|
gokhlayeh@190
|
3174 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@190
|
3175 cd $LOCAL_REPOSITORY
|
gokhlayeh@190
|
3176 configure_tazchroot
|
gokhlayeh@190
|
3177 else
|
gokhlayeh@190
|
3178 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@190
|
3179 exit 1
|
gokhlayeh@190
|
3180 fi
|
gokhlayeh@190
|
3181 ;;
|
gokhlayeh@186
|
3182 chroot)
|
gokhlayeh@186
|
3183 check_root
|
gokhlayeh@186
|
3184 get_tazwok_config
|
gokhlayeh@186
|
3185 # Merge this and the other chroot function ?.
|
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
|
gokhlayeh@186
|
3190 else
|
gokhlayeh@186
|
3191 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@186
|
3192 exit 1
|
gokhlayeh@186
|
3193 fi
|
gokhlayeh@186
|
3194 ;;
|
gokhlayeh@186
|
3195 cook-toolchain)
|
gokhlayeh@186
|
3196 check_root
|
gokhlayeh@186
|
3197 get_tazwok_config
|
gokhlayeh@186
|
3198 echo -n "" > $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
3199 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
3200 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
3201 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
3202 tazchroot cook-toolchain
|
gokhlayeh@186
|
3203 # Buggy : chroot can be elsewhere.
|
gokhlayeh@186
|
3204 rm -r $LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
3205 # /!\ to be writed :
|
gokhlayeh@186
|
3206 # next rm chroot and plan cook-all by pushing all packages
|
gokhlayeh@186
|
3207 # in cooklist.
|
gokhlayeh@186
|
3208 else
|
gokhlayeh@186
|
3209 echo "The packages tazchroot need to be installed" >&2
|
gokhlayeh@186
|
3210 exit 1
|
gokhlayeh@186
|
3211 fi
|
gokhlayeh@186
|
3212 ;;
|
gokhlayeh@235
|
3213 webserver)
|
gokhlayeh@235
|
3214 check_root
|
gokhlayeh@235
|
3215 get_tazwok_config
|
gokhlayeh@235
|
3216 if [ "$ARG" = on ]; then
|
gokhlayeh@235
|
3217 if [ "$WEBSERVER" ] && [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3218 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3219 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3220 exit 1
|
gokhlayeh@235
|
3221 fi
|
gokhlayeh@235
|
3222 if ! [ -f $LOCAL_REPOSITORY/tazchroot.conf ]; then
|
gokhlayeh@235
|
3223 tazwok configure-chroot ${undigest:+--undigest=$undigest} --SLITAZ_VERSION=$SLITAZ_VERSION --SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@235
|
3224 fi
|
gokhlayeh@235
|
3225 for pkg in php lighttpd; do
|
gokhlayeh@235
|
3226 [ -d $INSTALLED/$pkg ] || missing="$missing $pkg"
|
gokhlayeh@235
|
3227 done
|
gokhlayeh@235
|
3228 if [ "$missing" ]; then
|
gokhlayeh@235
|
3229 echo "You need to install those packages to start webserver: $missing." >&2
|
gokhlayeh@235
|
3230 exit 1
|
gokhlayeh@235
|
3231 fi
|
gokhlayeh@235
|
3232 if [ ! -f "$LOCAL_REPOSITORY/tazwok.conf" ]; then
|
gokhlayeh@235
|
3233 echo "Copying /etc/slitaz/tazwok.conf to $LOCAL_REPOSITORY/tazwok.conf: webserver is configured repository-by-repository."
|
gokhlayeh@235
|
3234 cp /etc/slitaz/tazwok.conf $LOCAL_REPOSITORY
|
gokhlayeh@235
|
3235 fi
|
gokhlayeh@235
|
3236 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3237 echo -n "Where to store php pages (default: /var/www/vhosts/bb)? "
|
gokhlayeh@235
|
3238 read WEBSERVER
|
gokhlayeh@235
|
3239 [ "$WEBSERVER" ] || WEBSERVER="/var/www/vhosts/bb"
|
gokhlayeh@235
|
3240 fi
|
gokhlayeh@235
|
3241 if [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3242 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3243 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3244 exit 1
|
gokhlayeh@235
|
3245 fi
|
gokhlayeh@235
|
3246 mkdir -p $WEBSERVER
|
gokhlayeh@235
|
3247 echo "${undigest:-$SLITAZ_VERSION}" >> $WEBSERVER/repositories.list
|
gokhlayeh@267
|
3248 for file in index.php log.php download.php; do
|
gokhlayeh@235
|
3249 [ -f "$WEBSERVER/$file" ] || ln -s /usr/share/slitaz/web-bb/$file $WEBSERVER
|
gokhlayeh@235
|
3250 done
|
gokhlayeh@267
|
3251 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3252 ln -s $dir $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3253 done
|
gokhlayeh@235
|
3254 source $LOCAL_REPOSITORY/tazchroot.conf
|
gokhlayeh@235
|
3255 echo "<?php
|
gokhlayeh@235
|
3256
|
gokhlayeh@235
|
3257 // Web interface configuration
|
gokhlayeh@235
|
3258
|
gokhlayeh@235
|
3259 \$version=\"${undigest:-$SLITAZ_VERSION}\";
|
gokhlayeh@235
|
3260 \$chroot=\"$chroot_dir\";
|
pascal@360
|
3261 \$lockfile=\"\$chroot/proc/1/status\";
|
gokhlayeh@235
|
3262 \$db_dir=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3263 \$log_dir=\"$LOCAL_REPOSITORY/log\";
|
gokhlayeh@235
|
3264 \$packages=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3265 \$incoming=\"$INCOMING_REPOSITORY\";
|
gokhlayeh@251
|
3266 \$wok=\"$WOK\";
|
gokhlayeh@235
|
3267
|
gokhlayeh@235
|
3268 ?>" > $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@235
|
3269 [ -L "$WEBSERVER/web" ] || ln -s /usr/share/slitaz/web $WEBSERVER
|
gokhlayeh@235
|
3270 echo "WEBSERVER=\"$WEBSERVER\"" >> $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3271 if [ -L "$WEBSERVER/conf.php" ]; then
|
gokhlayeh@235
|
3272 echo "Do yo want to make ${undigest:-$SLITAZ_VERSION} the default page (y/N) ? "
|
gokhlayeh@235
|
3273 read answer
|
gokhlayeh@235
|
3274 if [ "$answer" = y ]; then
|
gokhlayeh@235
|
3275 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3276 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3277 fi
|
gokhlayeh@235
|
3278 else
|
gokhlayeh@235
|
3279 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3280 fi
|
gokhlayeh@235
|
3281 elif [ "$ARG" = off ]; then
|
gokhlayeh@235
|
3282 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3283 echo "No webserver running for ${undigest:-$SLITAZ_VERSION}" >&2
|
gokhlayeh@235
|
3284 exit 1
|
gokhlayeh@235
|
3285 fi
|
gokhlayeh@235
|
3286 sed '/^WEBSERVER/d' -i $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3287 sed "/^${undigest:-$SLITAZ_VERSION}$/d" -i $WEBSERVER/repositories.list
|
gokhlayeh@235
|
3288 rm $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@267
|
3289 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3290 rm $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3291 done
|
gokhlayeh@235
|
3292 if ! [ -s "$WEBSERVER/repositories.list" ]; then
|
gokhlayeh@235
|
3293 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
|
3294 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3295 elif [ "$(readlink $WEBSERVER/conf.php)" = "$WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php" ]; then
|
gokhlayeh@235
|
3296 echo "${undigest:-$SLITAZ_VERSION} was the default version to use; switched to : $(sed 1!d $WEBSERVER/repositories.list)"
|
gokhlayeh@235
|
3297 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3298 ln -s $WEBSERVER/conf-$(sed 1!d $WEBSERVER/repositories.list).php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3299 fi
|
gokhlayeh@235
|
3300 else
|
gokhlayeh@235
|
3301 echo "Usage: tazwok webserver on/off" >&2
|
gokhlayeh@235
|
3302 exit 1
|
gokhlayeh@235
|
3303 fi
|
gokhlayeh@235
|
3304 ;;
|
pankso@354
|
3305 block)
|
pankso@354
|
3306 # Add a pkg name to the list of blocked packages.
|
gokhlayeh@367
|
3307 get_tazwok_config
|
gokhlayeh@367
|
3308 check_root
|
gokhlayeh@367
|
3309 check_for_package_on_cmdline
|
gokhlayeh@367
|
3310 if ! [ -f $WOK/$PACKAGE/receipt ]; then
|
gokhlayeh@367
|
3311 echo "Can't find $PACKAGE into wok." >&2
|
gokhlayeh@367
|
3312 echo ""
|
gokhlayeh@367
|
3313 exit 1
|
gokhlayeh@367
|
3314 fi
|
pankso@354
|
3315 echo ""
|
gokhlayeh@367
|
3316 if grep -qs "^$PACKAGE$" $PACKAGES_REPOSITORY/blocked; then
|
gokhlayeh@367
|
3317 echo "$PACKAGE is already in the blocked packages list." >&2
|
gokhlayeh@367
|
3318 echo ""
|
gokhlayeh@367
|
3319 exit 1
|
pankso@354
|
3320 else
|
gokhlayeh@367
|
3321 echo -n "Adding $PACKAGE to : $PACKAGES_REPOSITORY/blocked... "
|
gokhlayeh@367
|
3322 echo "$PACKAGE" >> $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@367
|
3323 status
|
gokhlayeh@367
|
3324 if grep -q "^$PACKAGE$" $PACKAGES_REPOSITORY/cooklist; then
|
gokhlayeh@367
|
3325 echo -n "Removing $PACKAGE from : $PACKAGES_REPOSITORY/cooklist... "
|
gokhlayeh@367
|
3326 sed -i /"^$PACKAGE$"/d $PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@367
|
3327 status
|
pankso@354
|
3328 fi
|
pankso@354
|
3329 fi
|
pankso@354
|
3330 echo "" ;;
|
pankso@354
|
3331 unblock)
|
pankso@354
|
3332 # Remove a pkg name from the list of blocked packages.
|
gokhlayeh@367
|
3333 get_tazwok_config
|
gokhlayeh@367
|
3334 check_root
|
gokhlayeh@367
|
3335 check_for_package_on_cmdline
|
gokhlayeh@367
|
3336 if ! [ -f $WOK/$PACKAGE/receipt ]; then
|
gokhlayeh@367
|
3337 echo "Can't find $PACKAGE into wok." >&2
|
gokhlayeh@367
|
3338 echo ""
|
gokhlayeh@367
|
3339 exit 1
|
gokhlayeh@367
|
3340 fi
|
pankso@354
|
3341 echo ""
|
gokhlayeh@367
|
3342 if grep -qs "^$PACKAGE$" $PACKAGES_REPOSITORY/blocked; then
|
gokhlayeh@367
|
3343 echo -n "Removing $PACKAGE from : $PACKAGES_REPOSITORY/blocked... "
|
gokhlayeh@367
|
3344 sed -i /"^$PACKAGE$"/d $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@367
|
3345 sed -i '/^$/d' $PACKAGES_REPOSITORY/blocked
|
gokhlayeh@367
|
3346 status
|
pankso@354
|
3347 else
|
gokhlayeh@367
|
3348 echo "$PACKAGE is not in the blocked packages list." >&2
|
gokhlayeh@367
|
3349 echo ""
|
gokhlayeh@367
|
3350 exit 1
|
pankso@354
|
3351 fi
|
pankso@354
|
3352 echo "" ;;
|
pankso@7
|
3353 usage|*)
|
MikeDSmith25@82
|
3354 # Print usage also for all unknown commands.
|
pankso@7
|
3355 #
|
pankso@7
|
3356 usage
|
gokhlayeh@186
|
3357 ;;
|
pankso@7
|
3358 esac
|
pankso@7
|
3359
|
gokhlayeh@313
|
3360 report stop 2>/dev/null
|
pankso@7
|
3361 exit 0
|