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