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