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