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