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