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