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