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@396
|
12 VERSION=4.3
|
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
|
gokhlayeh@237
|
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.
|
pankso@7
|
34 list List all packages in the wok tree or by category.
|
MikeDSmith25@82
|
35 info Get information about a package in the wok.
|
gokhlayeh@283
|
36 report Display commit/cooklist/broken/blocked.
|
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.
|
paul@430
|
47 cook-all Cook all packages except toolchain.
|
gokhlayeh@186
|
48 cook-toolchain Cook the toolchain packages.
|
gokhlayeh@240
|
49 gen-cooklist Generate a sorted cooklist using packages or list.
|
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.
|
slaxemulator@456
|
52 gen-src Rebuild sources.list in $SOURCES_REPOSITORY folder.
|
pankso@7
|
53 clean Clean all generated files in the package tree.
|
pankso@7
|
54 new-tree Prepare a new package tree and receipt (--interactive).
|
gokhlayeh@186
|
55 gen-list (Re-)Generate a packages list for a repository.
|
gokhlayeh@240
|
56 check-list Update packages lists for a repository.
|
paul@430
|
57 gen-wok-db (Re-)Generate wok lists with depends and wanted data.
|
gokhlayeh@240
|
58 gen-clean-wok Generate a clean wok in a dir.
|
gokhlayeh@186
|
59 clean-wok Clean entirely the wok.
|
paul@430
|
60 clean-src Remove old/unrelated-to-wok sources.
|
pankso@107
|
61 remove Remove a package from the wok.
|
gokhlayeh@240
|
62 webserver Enable/disable webserver on localhost.
|
gokhlayeh@304
|
63 update-wok Update the wok.
|
pankso@108
|
64 maintainers List all maintainers in the wok.
|
gokhlayeh@281
|
65 maintained-by List packages maintained by a contributor.
|
pankso@355
|
66 tags List all tags used in wok receipts.
|
pankso@355
|
67 block Add package from the blocked list to prevent cooking it.
|
pankso@355
|
68 unblock Remove package from the blocked list.\n
|
gokhlayeh@186
|
69
|
paul@430
|
70 You can use `basename $0` command --help to list available options.
|
gokhlayeh@186
|
71 \033[1mImportant - *: \033[0m Commands which need a rewrite."
|
pankso@7
|
72 }
|
pankso@7
|
73
|
paul@430
|
74 # This function displays an error message without returning any error code.
|
paul@430
|
75 # It also logs the message in source package's warnings.txt; this file can be
|
gokhlayeh@186
|
76 # used on an eventual package page on website to display cooking warnings.
|
gokhlayeh@186
|
77 tazwok_warning()
|
pankso@7
|
78 {
|
gokhlayeh@186
|
79 echo -e "tazwok: $1" >&2
|
gokhlayeh@186
|
80 echo -e "$1" >> $WOK/${WANTED:-$PACKAGE}/warning.txt
|
gokhlayeh@186
|
81 return
|
pankso@7
|
82 }
|
pankso@7
|
83
|
gokhlayeh@186
|
84 ########################################################################
|
gokhlayeh@186
|
85 # TAZWOK VARIABLES & INITIAL CONFIGURATION
|
gokhlayeh@186
|
86 ########################
|
gokhlayeh@186
|
87
|
gokhlayeh@398
|
88 # Check if all packages are up to date into build environnement
|
gokhlayeh@398
|
89 check_env_status()
|
gokhlayeh@398
|
90 {
|
gokhlayeh@453
|
91 { [ "${COMMAND#cook}" = "$COMMAND" ] ||
|
gokhlayeh@453
|
92 [ "$COMMAND" = cook-toolchain ] ||
|
gokhlayeh@453
|
93 [ -f /etc/config.site.tmptoolchain ]; } && return
|
gokhlayeh@398
|
94 MIRROR_path=$(grep -l "^$1$" $LOCALSTATE/mirror $LOCALSTATE/undigest/*/mirror)
|
gokhlayeh@398
|
95
|
gokhlayeh@398
|
96 if [ ! "$MIRROR_path" ]; then
|
gokhlayeh@398
|
97 echo "You are trying to cook something but you don't use $1 repository, which is \
|
gokhlayeh@398
|
98 needed for this operation." | fold -s >&2
|
gokhlayeh@398
|
99 exit 1
|
gokhlayeh@398
|
100 fi
|
gokhlayeh@398
|
101
|
gokhlayeh@398
|
102 LOCALSTATE_path=${MIRROR_path%/mirror}
|
gokhlayeh@398
|
103
|
gokhlayeh@398
|
104 # Check is possible only if repository use ID.
|
gokhlayeh@398
|
105 if [ "${MIRROR_path:0:1}" = '/' ]; then
|
gokhlayeh@398
|
106 [ -f "$MIRROR_path/ID" ] || return
|
gokhlayeh@398
|
107 else
|
gokhlayeh@398
|
108 wget -a -s $MIRROR_path/ID 2>/dev/null || return
|
gokhlayeh@398
|
109 fi
|
gokhlayeh@398
|
110
|
gokhlayeh@398
|
111 [ -f $LOCALSTATE_path/ID ] && ID=$(cat $LOCALSATE_path/ID)
|
gokhlayeh@398
|
112
|
gokhlayeh@398
|
113 if [ "$LOCALSTATE_path" = "$LOCALSTATE" ]; then
|
gokhlayeh@398
|
114 tazpkg recharge main
|
gokhlayeh@398
|
115 else
|
gokhlayeh@398
|
116 tazpkg recharge ${LOCALSTATE_path##*/}
|
gokhlayeh@398
|
117 fi
|
gokhlayeh@398
|
118
|
gokhlayeh@398
|
119 [ "$(cat $LOCALSTATE_path/ID)" = "$ID" ] || env_status=1
|
gokhlayeh@398
|
120 }
|
gokhlayeh@398
|
121
|
gokhlayeh@186
|
122 get_tazwok_config()
|
pankso@7
|
123 {
|
gokhlayeh@186
|
124 # Get configuration file.
|
gokhlayeh@186
|
125 get_config
|
gokhlayeh@186
|
126
|
gokhlayeh@186
|
127 # Define & get options.
|
slaxemulator@457
|
128 get_options_list="$get_options_list WOK SLITAZ_DIR SLITAZ_VERSION undigest"
|
gokhlayeh@186
|
129 get_options
|
gokhlayeh@186
|
130
|
gokhlayeh@364
|
131 LOCAL_REPOSITORY=$SLITAZ_DIR/${undigest:-$SLITAZ_VERSION}
|
gokhlayeh@235
|
132
|
gokhlayeh@235
|
133 if ! [ "$save_dir" ]; then
|
gokhlayeh@235
|
134 if [ -f $LOCAL_REPOSITORY/tazwok.conf ] || [ -f $LOCAL_REPOSITORY/slitaz.conf ]; then
|
gokhlayeh@235
|
135 save_dir=$LOCAL_REPOSITORY
|
gokhlayeh@235
|
136 [ -f $LOCAL_REPOSITORY/slitaz.conf ] && source $LOCAL_REPOSITORY/slitaz.conf
|
gokhlayeh@235
|
137 cd $save_dir
|
gokhlayeh@235
|
138 get_tazwok_config
|
gokhlayeh@235
|
139 unset save_dir
|
gokhlayeh@235
|
140 return
|
gokhlayeh@235
|
141 fi
|
gokhlayeh@235
|
142 fi
|
gokhlayeh@405
|
143
|
gokhlayeh@186
|
144 set_common_path
|
gokhlayeh@186
|
145
|
gokhlayeh@398
|
146 # Check that packages are up to date if user intend to cook.
|
gokhlayeh@398
|
147 check_env_status ${USE_ONLINE_PKG:-$PACKAGES_REPOSITORY}
|
gokhlayeh@398
|
148 check_env_status $INCOMING_REPOSITORY
|
gokhlayeh@398
|
149
|
gokhlayeh@398
|
150 # In case undigest is used, we need to upgrade system.
|
gokhlayeh@398
|
151 if [ "$undigest" ]; then
|
gokhlayeh@410
|
152 use_undigest_scan_core
|
gokhlayeh@398
|
153 ref_PACKAGES_REPOSITORY=$SLITAZ_DIR/$SLITAZ_VERSION/packages
|
gokhlayeh@398
|
154 if [ -f $SLITAZ_DIR/$SLITAZ_VERSION/tazwok.conf ] && \
|
gokhlayeh@398
|
155 grep -q ^USE_ONLINE_PKG $SLITAZ_DIR/$SLITAZ_VERSION/tazwok.conf; then
|
gokhlayeh@398
|
156 ref_USE_ONLINE_PKG=$(source $SLITAZ_DIR/$SLITAZ_VERSION/tazwok.conf && \
|
gokhlayeh@398
|
157 echo $USE_ONLINE_PKG)
|
gokhlayeh@398
|
158 fi
|
gokhlayeh@398
|
159
|
gokhlayeh@398
|
160 check_env_status ${ref_USE_ONLINE_PKG:-$ref_PACKAGES_REPOSITORY}
|
gokhlayeh@398
|
161 cd $ref_PACKAGES_REPOSITORY
|
gokhlayeh@398
|
162 if [ "$ref_USE_ONLINE_PKG" ]; then
|
gokhlayeh@398
|
163 ref_dep_db=$LOCALSTATE_path/wok-depends.txt
|
gokhlayeh@398
|
164 ref_wan_db=$LOCALSTATE_path/wok-wanted.txt
|
gokhlayeh@450
|
165 ref_lib_db=$LOCALSTATE_path/libraries.txt
|
gokhlayeh@398
|
166 else
|
gokhlayeh@398
|
167 ref_dep_db=$ref_PACKAGES_REPOSITORY/wok-depends.txt
|
gokhlayeh@398
|
168 ref_wan_db=$ref_PACKAGES_REPOSITORY/wok-wanted.txt
|
gokhlayeh@450
|
169 ref_lib_db=$ref_PACKAGES_REPOSITORY/libraries.txt
|
gokhlayeh@398
|
170 fi
|
gokhlayeh@398
|
171
|
gokhlayeh@450
|
172 for file in $ref_dep_db $ref_wan_db $ref_lib_db; do
|
gokhlayeh@398
|
173 [ -f "$file" ] && continue
|
gokhlayeh@398
|
174 missing_file=t
|
gokhlayeh@398
|
175 echo "$file is missing." >&2
|
gokhlayeh@398
|
176 done
|
gokhlayeh@398
|
177 if [ "$missing_file" ]; then
|
gokhlayeh@398
|
178 echo "
|
gokhlayeh@398
|
179 Theses files are needed to get datas about packages from the reference repository $SLITAZ_VERSION. \
|
gokhlayeh@398
|
180 If you don't intend to build this reference repository yourself, you should set USE_ONLINE_PKG variable \
|
gokhlayeh@398
|
181 into tazwok.conf of this reference repository. How-to:" | fold -s >&2
|
gokhlayeh@398
|
182 echo "echo 'USE_ONLINE_PKG=\"packages_repository_url\"' >> $SLITAZ_DIR/$SLITAZ_VERSION/tazwok.conf"
|
gokhlayeh@398
|
183 echo ""
|
gokhlayeh@398
|
184 exit 1
|
gokhlayeh@398
|
185 fi
|
gokhlayeh@398
|
186 fi
|
gokhlayeh@398
|
187
|
gokhlayeh@398
|
188 # If $env_status exists, it means an upgrade may be needed.
|
gokhlayeh@398
|
189 if [ "$env_status" ]; then
|
gokhlayeh@398
|
190 if [ -x /usr/bin/clean-chroot ]; then
|
gokhlayeh@398
|
191 echo y | tazpkg upgrade
|
gokhlayeh@398
|
192 else
|
gokhlayeh@398
|
193 echo "\e[0;31mWarning: \e[m"
|
gokhlayeh@398
|
194 echo "You're environnement may need a package upgrade."
|
gokhlayeh@398
|
195 echo "Upgrading is highly recommanded to ensure repository consistency."
|
gokhlayeh@398
|
196 echo "You can (E)xit, (U)pgrade, or (C)ontinue."
|
gokhlayeh@398
|
197 echo -n "What do you want to do ?"
|
gokhlayeh@398
|
198 read answer
|
gokhlayeh@398
|
199 case $answer in
|
gokhlayeh@398
|
200 [Cc]*) ;;
|
gokhlayeh@398
|
201 [Uu]*) echo y | tazpkg upgrade ;;
|
gokhlayeh@398
|
202 *) exit
|
gokhlayeh@398
|
203 esac
|
gokhlayeh@398
|
204 fi
|
gokhlayeh@398
|
205 fi
|
gokhlayeh@186
|
206
|
gokhlayeh@186
|
207 # Check commons directories, create them if user is root.
|
gokhlayeh@186
|
208 if test $(id -u) = 0 ; then
|
gokhlayeh@186
|
209 check_dir $WOK || chmod 777 $WOK
|
gokhlayeh@304
|
210 check_dir $LOCAL_REPOSITORY/clean-wok || chmod 777 $LOCAL_REPOSITORY/clean-wok
|
gokhlayeh@186
|
211 check_dir $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
212 check_dir $SOURCES_REPOSITORY
|
gokhlayeh@186
|
213 check_dir $INCOMING_REPOSITORY
|
gokhlayeh@186
|
214 check_dir $LOCAL_REPOSITORY/log
|
gokhlayeh@405
|
215 for file in $dep_db $wan_db $cookorder $commit $cooklist \
|
gokhlayeh@450
|
216 $broken $blocked $SOURCES_REPOSITORY/sources.list $lib_db
|
gokhlayeh@405
|
217 do
|
gokhlayeh@405
|
218 [ -f $file ] || touch $file
|
gokhlayeh@293
|
219 done
|
gokhlayeh@186
|
220 fi
|
gokhlayeh@235
|
221
|
gokhlayeh@186
|
222 # Limit memory usage.
|
pascal@386
|
223 ulimit -v $(awk '/MemTotal|SwapTotal/ { n+=$2 } END { print int((n*80)/100) }' < /proc/meminfo)
|
gokhlayeh@405
|
224 }
|
gokhlayeh@405
|
225
|
gokhlayeh@405
|
226 # The path to the most important files/dir used by Tazwok.
|
gokhlayeh@405
|
227 set_common_path()
|
gokhlayeh@405
|
228 {
|
gokhlayeh@405
|
229 PACKAGES_REPOSITORY=$LOCAL_REPOSITORY/packages
|
gokhlayeh@461
|
230 [ "$WOK" ] || WOK=$LOCAL_REPOSITORY/wok
|
gokhlayeh@405
|
231 INCOMING_REPOSITORY=$LOCAL_REPOSITORY/packages-incoming
|
gokhlayeh@405
|
232 SOURCES_REPOSITORY=$LOCAL_REPOSITORY/src
|
gokhlayeh@405
|
233 RECEIPT="$WOK/$PACKAGE/receipt"
|
gokhlayeh@405
|
234 LOG="$WOK/$PACKAGE/process.log"
|
gokhlayeh@405
|
235 dep_db=$INCOMING_REPOSITORY/wok-depends.txt
|
gokhlayeh@405
|
236 wan_db=$INCOMING_REPOSITORY/wok-wanted.txt
|
gokhlayeh@450
|
237 lib_db=$INCOMING_REPOSITORY/libraries.txt
|
gokhlayeh@405
|
238 cookorder=$PACKAGES_REPOSITORY/cookorder.txt
|
gokhlayeh@405
|
239 commit=$PACKAGES_REPOSITORY/commit
|
gokhlayeh@405
|
240 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@405
|
241 broken=$PACKAGES_REPOSITORY/broken
|
gokhlayeh@405
|
242 blocked=$PACKAGES_REPOSITORY/blocked
|
gokhlayeh@352
|
243
|
gokhlayeh@352
|
244 # log steps for webserver.
|
gokhlayeh@352
|
245 log_step="$LOCAL_REPOSITORY/log/step"
|
gokhlayeh@352
|
246 run_on_exit="$run_on_exit
|
gokhlayeh@352
|
247 rm -f $LOCAL_REPOSITORY/log/step
|
gokhlayeh@352
|
248 rm -f $LOCAL_REPOSITORY/log/package"
|
pankso@7
|
249 }
|
pankso@7
|
250
|
gokhlayeh@186
|
251 ########################################################################
|
gokhlayeh@186
|
252 # TAZWOK CHECK FUNCTIONS
|
gokhlayeh@186
|
253 ########################
|
gokhlayeh@186
|
254
|
pankso@7
|
255 # Check for a package name on cmdline.
|
pankso@7
|
256 check_for_package_on_cmdline()
|
pankso@7
|
257 {
|
gokhlayeh@186
|
258 if [ ! "$PACKAGE" ]; then
|
gokhlayeh@186
|
259 echo -e "\nYou must specify a package name on the command line." >&2
|
gokhlayeh@186
|
260 echo -e "Example : tazwok $COMMAND package\n" >&2
|
gokhlayeh@186
|
261 exit 1
|
pankso@7
|
262 fi
|
pankso@7
|
263 }
|
pankso@7
|
264
|
pankso@7
|
265 # Check for the receipt of a package used to cook.
|
pankso@7
|
266 check_for_receipt()
|
pankso@7
|
267 {
|
pankso@7
|
268 if [ ! -f "$RECEIPT" ]; then
|
gokhlayeh@186
|
269 echo -e "\nUnable to find the receipt : $RECEIPT\n" >&2
|
gokhlayeh@186
|
270 exit 1
|
pankso@7
|
271 fi
|
pankso@7
|
272 }
|
pankso@7
|
273
|
pankso@7
|
274 # Check for a specified file list on cmdline.
|
pankso@7
|
275 check_for_list()
|
pankso@7
|
276 {
|
gokhlayeh@186
|
277 if [ ! "$LIST" ]; then
|
gokhlayeh@186
|
278 echo -e "\nPlease specify the path to the list of packages to cook.\n" >&2
|
gokhlayeh@186
|
279 exit 1
|
gokhlayeh@405
|
280 elif ! [ -f "$LIST" ]; then
|
gokhlayeh@186
|
281 echo -e "\nUnable to find $LIST packages list.\n" >&2
|
gokhlayeh@186
|
282 exit 1
|
gokhlayeh@405
|
283 elif ! [ -s "$LIST" ]; then
|
gokhlayeh@186
|
284 echo -e "\nList is empty.\n" >&2
|
gokhlayeh@186
|
285 exit 1
|
gokhlayeh@186
|
286 fi
|
gokhlayeh@186
|
287 }
|
gokhlayeh@186
|
288
|
gokhlayeh@186
|
289 ########################################################################
|
gokhlayeh@186
|
290 # TAZWOK CORE FUNCTIONS
|
gokhlayeh@186
|
291 ########################
|
gokhlayeh@186
|
292
|
gokhlayeh@186
|
293 remove_src()
|
gokhlayeh@186
|
294 {
|
gokhlayeh@204
|
295 [ "$WANTED" ] && return
|
gokhlayeh@186
|
296 look_for_cookopt !remove_src && return
|
gokhlayeh@215
|
297 if [ ! -d $WOK/$PACKAGE/install ] && [ "$src" ] && [ -d "$src/_pkg" ]; then
|
gokhlayeh@186
|
298 check_for_var_modification _pkg src || return
|
gokhlayeh@215
|
299 mv "$src/_pkg" $WOK/$PACKAGE/install
|
gokhlayeh@186
|
300 fi
|
gokhlayeh@186
|
301
|
paul@430
|
302 # Don't remove sources if a package uses src variable in its
|
paul@431
|
303 # genpkg_rules: it maybe needs something inside.
|
gokhlayeh@186
|
304 for i in $PACKAGE $(look_for_rwanted); do
|
gokhlayeh@186
|
305 sed -n '/^genpkg_rules\(\)/','/}/'p $WOK/$i/receipt | \
|
gokhlayeh@195
|
306 fgrep -q '$src' && tazwok_warning "Sources will not be removed \
|
paul@431
|
307 because $i uses \$src in its receipt." && return
|
gokhlayeh@186
|
308 done
|
gokhlayeh@186
|
309
|
gokhlayeh@186
|
310 report step "Removing sources directory"
|
gokhlayeh@186
|
311 rm -fr "$src"
|
gokhlayeh@186
|
312 report end-step
|
gokhlayeh@186
|
313 }
|
gokhlayeh@186
|
314
|
gokhlayeh@186
|
315 # Check $COOK_OPT; usage : get_cookopt particular_opt
|
paul@430
|
316 # Return error if not found
|
gokhlayeh@186
|
317 # Return args if the opt is in the format opt=arg1:arg2:etc
|
gokhlayeh@186
|
318 look_for_cookopt()
|
gokhlayeh@186
|
319 {
|
gokhlayeh@186
|
320 for arg in $COOK_OPT; do
|
gokhlayeh@186
|
321 case $arg in
|
gokhlayeh@186
|
322 $1=*)
|
gokhlayeh@186
|
323 arg=${arg#$1=}
|
gokhlayeh@186
|
324 while [ "$arg" ]; do
|
gokhlayeh@186
|
325 echo "${arg%%:*}"
|
gokhlayeh@186
|
326 [ "${arg/:}" = "$arg" ] && return
|
gokhlayeh@186
|
327 arg=${arg#*:}
|
gokhlayeh@186
|
328 done
|
gokhlayeh@186
|
329 ;;
|
gokhlayeh@186
|
330 $1)
|
gokhlayeh@186
|
331 return
|
gokhlayeh@186
|
332 ;;
|
gokhlayeh@186
|
333 esac
|
gokhlayeh@186
|
334 done
|
gokhlayeh@186
|
335 return 1
|
pankso@7
|
336 }
|
pankso@7
|
337
|
pankso@7
|
338 # Check for the wanted package if specified in WANTED
|
paul@166
|
339 # receipt variable. Set the $src/$_pkg variable to help compile
|
paul@166
|
340 # and generate packages.
|
pankso@7
|
341 check_for_wanted()
|
pankso@7
|
342 {
|
gokhlayeh@186
|
343 if [ "$WANTED" ]; then
|
gokhlayeh@186
|
344 report "Checking for the wanted package"
|
pankso@7
|
345 if [ ! -d "$WOK/$WANTED" ]; then
|
gokhlayeh@186
|
346 report exit "\nWanted package is missing in the work directory.\n"
|
pankso@7
|
347 fi
|
gokhlayeh@186
|
348
|
erjo@38
|
349 # Checking for buildtree of Wanted package
|
pankso@39
|
350 if [ ! -d "$WOK/$WANTED/taz" ]; then
|
erjo@38
|
351 echo -e "\n\nSource files of wanted package is missing in the work directory."
|
erjo@38
|
352 echo -n "Would you like to build the missing package (y/N) ? " ; read anser
|
erjo@38
|
353 if [ "$anser" == "y" ]; then
|
erjo@38
|
354 tazwok cook $WANTED
|
erjo@38
|
355 else
|
gokhlayeh@186
|
356 report exit "\nWanted package source tree is missing in the work directory.\n"
|
erjo@38
|
357 fi
|
erjo@38
|
358 fi
|
gokhlayeh@186
|
359 report end-step
|
gokhlayeh@186
|
360
|
pankso@7
|
361 # Set wanted src path.
|
gokhlayeh@186
|
362 set_src_path && set_pkg_path
|
gokhlayeh@186
|
363
|
pascal@178
|
364 fi
|
pascal@178
|
365 }
|
pascal@178
|
366
|
pascal@178
|
367 # Check for build dependencies, notify user and install if specified.
|
pascal@178
|
368 check_for_build_depends()
|
pascal@178
|
369 {
|
gokhlayeh@204
|
370 [ "$WANTED" ] && return
|
gokhlayeh@213
|
371 [ "$CATEGORY" = meta ] && ! fgrep -q compile_rules $RECEIPT && return
|
gokhlayeh@272
|
372 [ ! "$BUILD_DEPENDS" ] && ! fgrep -q compile_rules $RECEIPT && return
|
gokhlayeh@186
|
373 report step "Looking for build dependencies"
|
gokhlayeh@186
|
374
|
gokhlayeh@186
|
375 # Keep the list of previously installed build_depends then compare
|
gokhlayeh@186
|
376 # it with new build_depends to know what to install and what to
|
gokhlayeh@186
|
377 # what to remove.
|
gokhlayeh@186
|
378 plan_remove=" $MISSING_PACKAGE $remove_later "
|
gokhlayeh@186
|
379 [ ! "${plan_remove// }" ] && unset plan_remove
|
gokhlayeh@186
|
380 unset MISSING_PACKAGE remove_later
|
gokhlayeh@186
|
381 rwanted=$(look_for_rwanted)
|
gokhlayeh@186
|
382
|
gokhlayeh@215
|
383 for pkg in $(scan $PACKAGE --look_for=bdep --with_dev | \
|
gokhlayeh@394
|
384 grep -v $(for i in $(look_for_rwanted) $PACKAGE; do echo " -e ^$i$"; done))
|
pascal@178
|
385 do
|
gokhlayeh@186
|
386
|
gokhlayeh@186
|
387 # Delay the removing of previous cook depends if they are needed
|
gokhlayeh@186
|
388 # for next cook too.
|
gokhlayeh@186
|
389 if [ ! -d "$INSTALLED/$pkg" ] ; then
|
gokhlayeh@186
|
390 MISSING_PACKAGE="$MISSING_PACKAGE $pkg"
|
gokhlayeh@186
|
391 fi
|
gokhlayeh@186
|
392 if [ "$plan_remove" != "${plan_remove/ $pkg }" ]; then
|
gokhlayeh@186
|
393 plan_remove="${plan_remove/ $pkg / }"
|
gokhlayeh@186
|
394 remove_later="$remove_later $pkg"
|
gokhlayeh@186
|
395 fi
|
gokhlayeh@405
|
396 grep -q ^$pkg$ $broken && broken_pkg="$broken_pkg$pkg "
|
pascal@178
|
397 done
|
gokhlayeh@186
|
398
|
gokhlayeh@186
|
399 # Don't cook if a depend is broken.
|
gokhlayeh@405
|
400 if [ "$broken_pkg" ]; then
|
gokhlayeh@186
|
401 MISSING_PACKAGE=$plan_remove
|
gokhlayeh@466
|
402 echo "Can't cook $PACKAGE because of broken depend(s) : $broken_pkg" >&2
|
gokhlayeh@468
|
403 unset plan_remove broken_pkg
|
gokhlayeh@186
|
404
|
gokhlayeh@186
|
405 # Set report step to failed.
|
gokhlayeh@186
|
406 report_return_code=1
|
gokhlayeh@186
|
407 report end-step
|
gokhlayeh@186
|
408 return 1
|
gokhlayeh@186
|
409 fi
|
gokhlayeh@186
|
410 if [ "$MISSING_PACKAGE" ]; then
|
gokhlayeh@186
|
411 install_missing()
|
gokhlayeh@186
|
412 {
|
gokhlayeh@186
|
413 echo "Installing missing packages : $MISSING_PACKAGE"
|
gokhlayeh@186
|
414 for pkg in $MISSING_PACKAGE; do
|
gokhlayeh@186
|
415 [ -d "$INSTALLED/$pkg" ] || tazpkg get-install $pkg
|
gokhlayeh@186
|
416 done
|
gokhlayeh@186
|
417 }
|
gokhlayeh@186
|
418 if [ "$auto_install" = yes ]; then
|
gokhlayeh@186
|
419 install_missing
|
gokhlayeh@186
|
420 else
|
gokhlayeh@186
|
421 echo "================================================================================"
|
gokhlayeh@186
|
422 for pkg in $MISSING_PACKAGE
|
gokhlayeh@186
|
423 do
|
pascal@178
|
424 echo "Missing : $pkg"
|
gokhlayeh@186
|
425 done
|
gokhlayeh@186
|
426 echo "================================================================================"
|
gokhlayeh@186
|
427 echo "You can continue, exit or install missing dependencies."
|
gokhlayeh@186
|
428 echo -n "Install, continue or exit (install/y/N) ? "; read answer
|
gokhlayeh@186
|
429 case $answer in
|
gokhlayeh@186
|
430 install)
|
gokhlayeh@186
|
431 install_missing ;;
|
gokhlayeh@186
|
432 y|yes)
|
gokhlayeh@186
|
433 unset MISSING_PACKAGE;;
|
gokhlayeh@186
|
434 *)
|
gokhlayeh@186
|
435 report stop
|
gokhlayeh@186
|
436 exit 0 ;;
|
gokhlayeh@186
|
437 esac
|
gokhlayeh@186
|
438 fi
|
gokhlayeh@186
|
439 fi
|
gokhlayeh@186
|
440 report end-step
|
gokhlayeh@186
|
441 remove_build_depends $plan_remove
|
gokhlayeh@186
|
442 unset plan_remove
|
gokhlayeh@186
|
443 }
|
gokhlayeh@186
|
444
|
gokhlayeh@186
|
445 remove_build_depends()
|
gokhlayeh@186
|
446 {
|
gokhlayeh@186
|
447 [ "$1" ] || return
|
gokhlayeh@186
|
448 report step "Removing previous build dependencies"
|
paul@430
|
449 echo "Removing these packages : $@"
|
gokhlayeh@186
|
450 for pkg in $@; do
|
gokhlayeh@382
|
451 [ -f "$INSTALLED/$pkg/receipt" ] && tazpkg remove $pkg --auto
|
gokhlayeh@186
|
452 done
|
gokhlayeh@382
|
453 cd $PWD
|
gokhlayeh@186
|
454 report end-step
|
gokhlayeh@186
|
455 }
|
gokhlayeh@186
|
456
|
gokhlayeh@186
|
457 # Check if we can use the new way to handle tarball
|
paul@430
|
458 # or if we keep the previous method by checking for
|
gokhlayeh@186
|
459 # _pkg=/src= in receipt and reverse-wanted.
|
gokhlayeh@186
|
460 check_for_var_modification()
|
gokhlayeh@186
|
461 {
|
gokhlayeh@186
|
462 for var in $@; do
|
gokhlayeh@186
|
463 for pkg in $PACKAGE $(look_for_wanted) $(look_for_rwanted); do
|
gokhlayeh@186
|
464 [ -f $WOK/$pkg/receipt ] || continue
|
gokhlayeh@195
|
465 fgrep -q "$var=" $WOK/$pkg/receipt && return 1
|
pascal@178
|
466 done
|
gokhlayeh@186
|
467 done
|
gokhlayeh@186
|
468
|
gokhlayeh@186
|
469 # Tweak to make if; then...; fi function working with this one.
|
gokhlayeh@186
|
470 echo -n ""
|
gokhlayeh@186
|
471 }
|
gokhlayeh@186
|
472
|
gokhlayeh@186
|
473 set_src_path()
|
gokhlayeh@186
|
474 {
|
gokhlayeh@186
|
475 if check_for_var_modification src _pkg; then
|
gokhlayeh@186
|
476 src=$WOK/${WANTED:-$PACKAGE}/${WANTED:-$PACKAGE}-$VERSION
|
gokhlayeh@186
|
477 else
|
paul@430
|
478 tazwok_warning "Use original name or tarball root directory because src/_pkg is defined in the receipt (this is no longer needed!)."
|
gokhlayeh@186
|
479 src=$WOK/${WANTED:-$PACKAGE}/${SOURCE:-${WANTED:-$PACKAGE}}-$VERSION
|
pascal@178
|
480 fi
|
gokhlayeh@298
|
481 stuff=$WOK/$PACKAGE/stuff
|
gokhlayeh@298
|
482 [ "$WANTED" ] && wanted_stuff=$WOK/$WANTED/stuff
|
pascal@178
|
483 }
|
pascal@178
|
484
|
gokhlayeh@186
|
485 set_pkg_path()
|
gokhlayeh@186
|
486 {
|
slaxemulator@269
|
487 if [ -d $WOK/${WANTED:-$PACKAGE}/install ] ; then
|
gokhlayeh@186
|
488 _pkg=$WOK/${WANTED:-$PACKAGE}/install
|
gokhlayeh@186
|
489 else
|
pankso@7
|
490 _pkg=$src/_pkg
|
pankso@7
|
491 fi
|
pankso@7
|
492 }
|
pankso@7
|
493
|
gokhlayeh@186
|
494 # Output $VERSION-$EXTRAVERSION using packages.txt
|
gokhlayeh@186
|
495 get_pkg_version()
|
gokhlayeh@186
|
496 {
|
gokhlayeh@186
|
497 [ "$PACKAGE" ] || return
|
gokhlayeh@204
|
498 grep -m1 -A1 -sh ^$PACKAGE$ $1/packages.txt | tail -1 | sed 's/ *//'
|
gokhlayeh@186
|
499 }
|
erjo@38
|
500
|
gokhlayeh@186
|
501 remove_previous_package()
|
pankso@18
|
502 {
|
gokhlayeh@186
|
503 [ "$prev_VERSION" ] || return
|
gokhlayeh@186
|
504 if [ "$VERSION$EXTRAVERSION" != "$prev_VERSION" ]; then
|
gokhlayeh@186
|
505 rm -f $1/$PACKAGE-$prev_VERSION.tazpkg
|
gokhlayeh@186
|
506 fi
|
gokhlayeh@382
|
507 return 0
|
gokhlayeh@186
|
508 }
|
gokhlayeh@186
|
509
|
gokhlayeh@186
|
510 # Check for src tarball and wget if needed.
|
gokhlayeh@186
|
511 check_for_tarball()
|
gokhlayeh@186
|
512 {
|
gokhlayeh@258
|
513 [ "$WGET_URL" ] || return 0
|
gokhlayeh@364
|
514 look_for_cookopt !unpack && nounpack=yes
|
gokhlayeh@290
|
515 report step "Checking for source tarball: $PACKAGE"
|
slaxemulator@326
|
516 local repack_src=$repack_src TARBALL=$TARBALL
|
gokhlayeh@266
|
517 if [ "$repack_src" = yes ] && look_for_cookopt !repack_src; then
|
gokhlayeh@266
|
518 repack_src=no
|
gokhlayeh@266
|
519 fi
|
gokhlayeh@266
|
520 if [ "$target" ]; then
|
gokhlayeh@266
|
521 src="$target"
|
gokhlayeh@266
|
522 else
|
gokhlayeh@266
|
523 set_src_path
|
gokhlayeh@266
|
524 fi
|
gokhlayeh@266
|
525 tmp_src=$tmp/tarball-$$
|
gokhlayeh@253
|
526 if [ ! -f "$SOURCES_REPOSITORY/$TARBALL" ] && \
|
gokhlayeh@253
|
527 [ ! -f "$SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" ] ; then
|
gokhlayeh@253
|
528 cd $SOURCES_REPOSITORY
|
gokhlayeh@266
|
529 if [ "$SOURCE" ]; then
|
gokhlayeh@266
|
530 alt_url="http://mirror.slitaz.org/sources/packages/${SOURCE:0:1}/$SOURCE-$VERSION.tar.lzma"
|
gokhlayeh@266
|
531 else
|
gokhlayeh@266
|
532 alt_url="http://mirror.slitaz.org/sources/packages/${PACKAGE:0:1}/$PACKAGE-$VERSION.tar.lzma"
|
pankso@18
|
533 fi
|
gokhlayeh@420
|
534 download $WGET_URL $alt_url http://mirror.slitaz.org/sources/packages/${TARBALL:0:1}/$TARBALL
|
gokhlayeh@266
|
535 unset alt_url
|
gokhlayeh@253
|
536 if [ ! -f "$SOURCES_REPOSITORY/$TARBALL" ] && \
|
gokhlayeh@266
|
537 [ ! -f "$SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" ] && \
|
gokhlayeh@266
|
538 [ ! -d $tmp_src ]; then
|
gokhlayeh@253
|
539 echo -e "\nDownload failed, exiting. Please check WGET_URL variable.\n" >&2
|
gokhlayeh@253
|
540 report end-step
|
gokhlayeh@253
|
541 return 1
|
gokhlayeh@253
|
542 fi
|
slaxemulator@232
|
543 fi
|
gokhlayeh@253
|
544 report end-step
|
gokhlayeh@364
|
545 if { [ -f "$SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" ] && [ "$nounpack" ] ; } || \
|
gokhlayeh@364
|
546 { [ -f "$SOURCES_REPOSITORY/$TARBALL" ] && [ "$repack_src" != yes ] && [ "$nounpack" ] ; }; then
|
gokhlayeh@266
|
547 [ -d "$tmp_src" ] && rm -r $tmp_src
|
gokhlayeh@364
|
548 return 0
|
slaxemulator@232
|
549 fi
|
slaxemulator@232
|
550
|
slaxemulator@232
|
551 # Untaring source if necessary. We don't need to extract source if
|
slaxemulator@232
|
552 # the package is built with a wanted source package.
|
slaxemulator@232
|
553 if [ "$WANTED" ]; then
|
gokhlayeh@266
|
554 [ -d "$tmp_src" ] && rm -r $tmp_src
|
slaxemulator@232
|
555 return
|
slaxemulator@232
|
556 fi
|
slaxemulator@232
|
557
|
slaxemulator@232
|
558 report step "Untaring source tarball"
|
slaxemulator@232
|
559
|
slaxemulator@232
|
560 # Log process.
|
slaxemulator@232
|
561 echo "untaring source tarball" >> $LOG
|
gokhlayeh@266
|
562
|
paul@430
|
563 # If $tmp_src exists, there's already a unpacked tarball in it.
|
gokhlayeh@266
|
564 if ! [ -d $tmp_src ]; then
|
gokhlayeh@266
|
565 mkdir $tmp_src
|
gokhlayeh@266
|
566 if [ -f "$SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" ] && [ "$repack_src" = yes ]; then
|
gokhlayeh@266
|
567 lzma d $SOURCES_REPOSITORY/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma -so | \
|
gokhlayeh@266
|
568 tar xf - -C $tmp_src
|
gokhlayeh@266
|
569 repack_src=no
|
gokhlayeh@266
|
570 TARBALL=${SOURCE:-$PACKAGE}-$VERSION.tar.lzma
|
gokhlayeh@266
|
571 elif [ -f "$SOURCES_REPOSITORY/$TARBALL" ]; then
|
gokhlayeh@266
|
572 case "$TARBALL" in
|
gokhlayeh@266
|
573 *zip|*xpi) cd $tmp_src && unzip -o $SOURCES_REPOSITORY/$TARBALL ;;
|
gokhlayeh@266
|
574 *bz2|*tbz|*gem) tar xjf $SOURCES_REPOSITORY/$TARBALL -C $tmp_src;;
|
gokhlayeh@266
|
575 *tar) tar xf $SOURCES_REPOSITORY/$TARBALL -C $tmp_src;;
|
gokhlayeh@266
|
576 *lzma|*lz) unlzma -c $SOURCES_REPOSITORY/$TARBALL | tar xf - -C $tmp_src;;
|
gokhlayeh@266
|
577 *xz) unxz -c $SOURCES_REPOSITORY/$TARBALL | tar xf - -C $tmp_src;;
|
gokhlayeh@266
|
578 *Z|*taz) uncompress -c $SOURCES_REPOSITORY/$TARBALL | tar xf - -C $tmp_src;;
|
gokhlayeh@266
|
579 *gz) tar xzf $SOURCES_REPOSITORY/$TARBALL -C $tmp_src;;
|
gokhlayeh@266
|
580 *rpm) cd $tmp_src && rpm2cpio $SOURCES_REPOSITORY/$TARBALL | cpio -idm --quiet;;
|
gokhlayeh@266
|
581
|
gokhlayeh@266
|
582 # It's a plain file or something receipt unpack itself.
|
gokhlayeh@266
|
583 *)
|
gokhlayeh@266
|
584 mkdir $tmp_src/${SOURCE:-$PACKAGE}-$VERSION
|
gokhlayeh@266
|
585 cp $SOURCES_REPOSITORY/$TARBALL $tmp_src/${src##*/}
|
gokhlayeh@266
|
586 ;;
|
gokhlayeh@266
|
587
|
gokhlayeh@271
|
588 esac || { report end-step
|
gokhlayeh@271
|
589 rm -f $SOURCES_REPOSITORY/$TARBALL
|
gokhlayeh@271
|
590 rm -r $tmp_src
|
gokhlayeh@271
|
591 return 1
|
gokhlayeh@271
|
592 }
|
gokhlayeh@266
|
593 fi
|
gokhlayeh@266
|
594
|
slaxemulator@232
|
595 # Check if uncompressed tarball is in a root dir or not.
|
gokhlayeh@266
|
596 if [ "$(ls -A $tmp_src | wc -l)" -gt 1 ] || [ -f $(echo $tmp_src/*) ]; then
|
slaxemulator@232
|
597 if check_for_var_modification src _pkg; then
|
slaxemulator@232
|
598 mv $tmp_src $tmp_src-1
|
slaxemulator@232
|
599 mkdir $tmp_src
|
gokhlayeh@233
|
600 mv $tmp_src-1 $tmp_src/${SOURCE:-$PACKAGE}-$VERSION
|
slaxemulator@232
|
601 else
|
slaxemulator@232
|
602 mv $tmp_src/* $WOK/$PACKAGE
|
slaxemulator@232
|
603 repack_src=no
|
slaxemulator@232
|
604 rm -r $tmp_src
|
paul@430
|
605 tazwok_warning "Putting all files in $WOK/$PACKAGE; not sure about how to handle this tarball (no root dir)... Please try to remove src/_pkg definition from the receipt if you encounter any problems."
|
pankso@18
|
606 fi
|
slaxemulator@232
|
607 fi
|
gokhlayeh@266
|
608 fi
|
gokhlayeh@266
|
609
|
gokhlayeh@266
|
610 if [ "$repack_src" = yes ]; then
|
slaxemulator@232
|
611 report step "Repacking sources in .tar.lzma format"
|
gokhlayeh@266
|
612 [ "$TARBALL" ] && rm -f $SOURCES_REPOSITORY/$TARBALL
|
gokhlayeh@266
|
613 TARBALL=${SOURCE:-$PACKAGE}-$VERSION.tar.lzma
|
slaxemulator@232
|
614 cd $tmp_src
|
gokhlayeh@266
|
615 tar -c * | lzma e $SOURCES_REPOSITORY/$TARBALL -si
|
gokhlayeh@266
|
616 fi
|
slaxemulator@232
|
617
|
gokhlayeh@266
|
618 # Remove previous tarball if no other package needs it. We take care to
|
paul@430
|
619 # keep tarball if the same package uses it in the main repository.
|
gokhlayeh@266
|
620 if [ "$TARBALL" ]; then
|
gokhlayeh@266
|
621 previous_tarball=$(grep ^$PACKAGE:incoming $SOURCES_REPOSITORY/sources.list | cut -f2)
|
gokhlayeh@266
|
622 if [ "$previous_tarball" ]; then
|
gokhlayeh@266
|
623 sed "/^$PACKAGE:incoming/ s/.*/$PACKAGE:incoming\t$TARBALL/" \
|
gokhlayeh@266
|
624 -i $SOURCES_REPOSITORY/sources.list
|
gokhlayeh@266
|
625 grep -q $'\t'$previous_tarball$ $SOURCES_REPOSITORY/sources.list || \
|
gokhlayeh@266
|
626 rm -f $SOURCES_REPOSITORY/$previous_tarball
|
gokhlayeh@266
|
627 else
|
gokhlayeh@266
|
628 echo -e "$PACKAGE:incoming\t$TARBALL" >> $SOURCES_REPOSITORY/sources.list
|
slaxemulator@232
|
629 fi
|
slaxemulator@232
|
630 fi
|
gokhlayeh@266
|
631
|
slaxemulator@232
|
632 if [ "$nounpack" ]; then
|
slaxemulator@232
|
633 [ -d "$tmp_src" ] && rm -r $tmp_src
|
gokhlayeh@285
|
634 report end-step
|
slaxemulator@232
|
635 return
|
slaxemulator@232
|
636 fi
|
gokhlayeh@285
|
637 if [ ! -d "$src" ]|| [ "$target" ]; then
|
gokhlayeh@285
|
638 # Permissions settings.
|
gokhlayeh@285
|
639 chown -R root.root "$tmp_src"
|
gokhlayeh@285
|
640 if [ -d "$src" ]; then
|
gokhlayeh@285
|
641 mkdir -p $src
|
gokhlayeh@285
|
642 for f in $tmp_src/*/*; do
|
gokhlayeh@285
|
643 cp -a $f $src || { report end-step; rm -r $tmp_src; return 1; }
|
gokhlayeh@285
|
644 done
|
gokhlayeh@285
|
645 else
|
gokhlayeh@285
|
646 if ! check_for_var_modification src _pkg && ! [ "$target" ]; then
|
gokhlayeh@285
|
647 src="${src%/*}/$(ls $tmp_src)"
|
gokhlayeh@285
|
648 fi
|
gokhlayeh@285
|
649 mv $(echo $tmp_src/*) "$src" || { report end-step; rm -r $tmp_src; return 1; }
|
gokhlayeh@186
|
650 fi
|
gokhlayeh@266
|
651 rm -r $tmp_src
|
gokhlayeh@266
|
652 else
|
gokhlayeh@266
|
653 [ -d "$tmp_src" ] && rm -r $tmp_src
|
gokhlayeh@266
|
654 echo "There's already something at $src. Abort." >&2
|
gokhlayeh@186
|
655 fi
|
gokhlayeh@285
|
656 report end-step
|
gokhlayeh@186
|
657 }
|
gokhlayeh@186
|
658
|
slaxemulator@456
|
659 # help gen sources.list file from scranch
|
slaxemulator@456
|
660 gen_sources_list()
|
slaxemulator@456
|
661 {
|
slaxemulator@456
|
662 local src_repository=$1
|
slaxemulator@456
|
663 [ -f $src_repository/sources.list ] && rm -f $src_repository/sources.list
|
slaxemulator@456
|
664 for i in $WOK/*; do
|
slaxemulator@456
|
665 unset PACKAGE SOURCE VERSION WGET_URL TARBALL WANTED
|
slaxemulator@456
|
666 [ -f $i/receipt ] && source $i/receipt
|
slaxemulator@456
|
667 [ "$WGET_URL" ] || continue
|
slaxemulator@456
|
668 if grep -q "^$PACKAGE | $VERSION" $PACKAGES_REPOSITORY/packages.desc; then
|
slaxemulator@456
|
669 main_version="$VERSION"
|
slaxemulator@456
|
670 if [ -f $src_repository/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma ]; then
|
slaxemulator@456
|
671 echo -e "$PACKAGE:main\t${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" >> $src_repository/sources.list
|
slaxemulator@456
|
672 elif [ -f "$src_repository/$TARBALL" ]; then
|
slaxemulator@456
|
673 echo -e "$PACKAGE:main\t$TARBALL" >> $src_repository/sources.list
|
slaxemulator@456
|
674 fi
|
slaxemulator@456
|
675 else
|
slaxemulator@456
|
676 # May not works if package use extraversion.
|
slaxemulator@456
|
677 main_version=$(grep -m1 -A1 -sh ^$PACKAGE$ $PACKAGES_REPOSITORY/packages.txt | tail -1 | sed 's/ *//')
|
slaxemulator@456
|
678 if [ -f $src_repository/${SOURCE:-$PACKAGE}-$main_version.tar.lzma ]; then
|
slaxemulator@456
|
679 echo -e "$PACKAGE:main\t${SOURCE:-$PACKAGE}-$main_version.tar.lzma" >> $src_repository/sources.list
|
slaxemulator@456
|
680 else
|
slaxemulator@456
|
681 unset main_version
|
slaxemulator@456
|
682 fi
|
slaxemulator@456
|
683 fi
|
slaxemulator@457
|
684 if [ ! "$main_version" ] || [ $(grep -q "^$PACKAGE | $VERSION" $INCOMING_REPOSITORY/packages.desc 2>/dev/null) ]; then
|
slaxemulator@456
|
685 if [ -f $src_repository/${SOURCE:-$PACKAGE}-$VERSION.tar.lzma ]; then
|
slaxemulator@456
|
686 echo -e "$PACKAGE:incoming\t${SOURCE:-$PACKAGE}-$VERSION.tar.lzma" >> $src_repository/sources.list
|
slaxemulator@456
|
687 elif [ -f "$src_repository/$TARBALL" ]; then
|
slaxemulator@456
|
688 echo -e "$PACKAGE:incoming\t$TARBALL" >> $src_repository/sources.list
|
slaxemulator@456
|
689 fi
|
slaxemulator@456
|
690 fi
|
slaxemulator@456
|
691 done
|
slaxemulator@456
|
692 }
|
slaxemulator@456
|
693
|
gokhlayeh@186
|
694 # Log and execute compile_rules function if it exists, to configure and
|
gokhlayeh@186
|
695 # make the package if it exists.
|
gokhlayeh@186
|
696 check_for_compile_rules()
|
gokhlayeh@186
|
697 {
|
gokhlayeh@186
|
698 if grep -q ^compile_rules $RECEIPT; then
|
gokhlayeh@186
|
699 echo "executing compile_rules" >> $LOG
|
gokhlayeh@186
|
700 report step "Executing compile_rules"
|
gokhlayeh@186
|
701 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
702 rm -f /tmp/config.site
|
pascal@385
|
703 ulimit -d unlimited
|
pascal@385
|
704 ulimit -m unlimited
|
gokhlayeh@186
|
705
|
gokhlayeh@186
|
706 # Free some RAM by cleaning cache if option is enabled.
|
slaxemulator@200
|
707 freeram=$(free | fgrep '/+ buffers' | tr -s ' ' | cut -f 4 -d ' ')
|
gokhlayeh@186
|
708
|
gokhlayeh@186
|
709 # Disable -pipe in CFLAGS/CXXFLAGS if less than 512Mb of free
|
gokhlayeh@186
|
710 # RAM are available.
|
gokhlayeh@195
|
711 if [ "$freeram" -lt 524288 ] && [ "$CFLAGS" != "${CFLAGS/-pipe}" -o \
|
gokhlayeh@195
|
712 "$CXXFLAGS" != "${CXXFLAGS/-pipe}" ]; then
|
paul@430
|
713 tazwok_warning "Disabling -pipe compile flag because only ${freeram}b of RAM is available."
|
gokhlayeh@186
|
714 CFLAGS="${CFLAGS/-pipe}"
|
gokhlayeh@186
|
715 CXXFLAGS="${CXXFLAGS/-pipe}"
|
gokhlayeh@186
|
716 fi
|
gokhlayeh@186
|
717 unset freeram
|
gokhlayeh@186
|
718
|
paul@430
|
719 # Set cook environement variables.
|
gokhlayeh@186
|
720 [ "$src" ] || set_src_path
|
gokhlayeh@186
|
721 [ "$DESTDIR" ] || DESTDIR="$WOK/$PACKAGE/install"
|
gokhlayeh@186
|
722 [ "$CONFIG_SITE" ] || CONFIG_SITE=/etc/config.site
|
gokhlayeh@469
|
723 export CFLAGS=$(echo "$CFLAGS" | tr -s ' ') \
|
gokhlayeh@469
|
724 CXXFLAGS=$(echo "$CXXFLAGS" | tr -s ' ') \
|
gokhlayeh@469
|
725 MAKEFLAGS DESTDIR BUILD_HOST CONFIG_SITE default_prefix \
|
gokhlayeh@186
|
726 default_datarootdir default_datadir default_localedir \
|
gokhlayeh@186
|
727 default_infodir default_mandir default_build default_host
|
gokhlayeh@186
|
728 local LC_ALL=POSIX LANG=POSIX
|
gokhlayeh@186
|
729 compile_rules
|
gokhlayeh@465
|
730 return_code=$?
|
gokhlayeh@186
|
731
|
gokhlayeh@465
|
732 if [ -f /tmp/config.site ]; then
|
gokhlayeh@465
|
733 rm /tmp/config.site
|
gokhlayeh@465
|
734 else
|
gokhlayeh@465
|
735 tazwok_warning "config.site hasn't been used during \
|
gokhlayeh@465
|
736 the configuration process."
|
gokhlayeh@465
|
737 fi
|
gokhlayeh@465
|
738
|
gokhlayeh@465
|
739 # Return the proper status to step.
|
gokhlayeh@465
|
740 (exit $return_code)
|
gokhlayeh@186
|
741 report end-step
|
pankso@18
|
742 fi
|
pankso@18
|
743 }
|
pascal@76
|
744
|
paul@430
|
745 # Check for loop in deps tree. /!\ can be removed.
|
pascal@76
|
746 check_for_deps_loop()
|
pascal@76
|
747 {
|
pascal@76
|
748 local list
|
pascal@76
|
749 local pkg
|
pascal@76
|
750 local deps
|
pascal@76
|
751 pkg=$1
|
pascal@76
|
752 shift
|
pascal@76
|
753 [ -n "$1" ] || return
|
pascal@76
|
754 list=""
|
gokhlayeh@204
|
755
|
paul@430
|
756 # Filter out already processed deps.
|
pascal@76
|
757 for i in $@; do
|
pascal@76
|
758 case " $ALL_DEPS" in
|
pascal@76
|
759 *\ $i\ *);;
|
pascal@76
|
760 *) list="$list $i";;
|
pascal@76
|
761 esac
|
pascal@76
|
762 done
|
pascal@76
|
763 ALL_DEPS="$ALL_DEPS$list "
|
pascal@76
|
764 for i in $list; do
|
pascal@76
|
765 [ -f $i/receipt ] || continue
|
pascal@76
|
766 deps="$(DEPENDS=""; . $i/receipt; echo $DEPENDS)"
|
pascal@76
|
767 case " $deps " in
|
pascal@76
|
768 *\ $pkg\ *) echo -e "$MSG $i"; MSG="";;
|
pascal@76
|
769 *) check_for_deps_loop $pkg $deps;;
|
pascal@76
|
770 esac
|
pascal@76
|
771 done
|
pascal@76
|
772 }
|
pascal@76
|
773
|
gokhlayeh@266
|
774 # Function used by download().
|
gokhlayeh@266
|
775 revert_vcs_failure()
|
gokhlayeh@266
|
776 {
|
gokhlayeh@266
|
777 cd $SOURCES_REPOSITORY
|
gokhlayeh@266
|
778 rm -r $tmp_src
|
gokhlayeh@266
|
779 }
|
gokhlayeh@266
|
780
|
erjo@53
|
781 download()
|
erjo@53
|
782 {
|
gokhlayeh@278
|
783 if [ "$COMMAND" = get-src ]; then
|
gokhlayeh@278
|
784 if [ "${DEPENDS/tar}" != "$DEPENDS" ] || [ "${BUILD_DEPENDS/tar}" != "$BUILD_DEPENDS" ]; then
|
slaxemulator@287
|
785 [ -f $INSTALLED/tar/receipt ] || tazpkg get-install tar --forced
|
pankso@7
|
786 fi
|
pankso@7
|
787 fi
|
pascal@178
|
788 for file in $@; do
|
gokhlayeh@266
|
789 echo "Downloading from ${file#*|}..."
|
gokhlayeh@255
|
790 case "$file" in
|
gokhlayeh@266
|
791 git\|*)
|
gokhlayeh@266
|
792 file=${file#git|}
|
gokhlayeh@278
|
793 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/git/receipt ] && tazpkg get-install git --forced
|
slaxemulator@274
|
794 if [ -f $INSTALLED/git/receipt ]; then
|
gokhlayeh@266
|
795 mkdir $tmp_src
|
gokhlayeh@266
|
796 cd $tmp_src
|
gokhlayeh@266
|
797 if [ "$BRANCH" ]; then
|
slaxemulator@426
|
798 git clone $file ${src##*/} && cd ${src##*/} && \
|
gokhlayeh@266
|
799 git checkout $BRANCH && rm -rf .git* && break
|
gokhlayeh@266
|
800 else
|
gokhlayeh@266
|
801 git clone $file ${src##*/} && rm -rf ${src##*/}/.git* && break
|
gokhlayeh@266
|
802 fi
|
gokhlayeh@266
|
803 revert_vcs_failure
|
gokhlayeh@266
|
804 else
|
paul@430
|
805 tazwok_warning "Needs git to download the source tarball from $file, please add it as a build-depend."
|
gokhlayeh@266
|
806 continue
|
gokhlayeh@266
|
807 fi
|
gokhlayeh@266
|
808 ;;
|
slaxemulator@426
|
809 bazaar\|*)
|
slaxemulator@426
|
810 file=${file#bazaar|}
|
slaxemulator@426
|
811 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/bazaar/receipt ] && tazpkg get-install bazaar --forced
|
slaxemulator@426
|
812 if [ -f $INSTALLED/bazaar/receipt ]; then
|
slaxemulator@426
|
813 mkdir $tmp_src
|
slaxemulator@426
|
814 cd $tmp_src
|
slaxemulator@426
|
815 if [ "$BRANCH" ]; then
|
slaxemulator@426
|
816 bzr co $file -r $BRANCH ${src##*/} && rm -rf ${src##*/}/.bzr* && break
|
slaxemulator@426
|
817 else
|
slaxemulator@426
|
818 bzr co $file ${src##*/} && rm -rf ${src##*/}/.bzr* && break
|
slaxemulator@426
|
819 fi
|
slaxemulator@426
|
820 revert_vcs_failure
|
slaxemulator@426
|
821 else
|
paul@430
|
822 tazwok_warning "Needs bazaar to download the source tarball from $file, please add it as a build-depend."
|
slaxemulator@426
|
823 continue
|
slaxemulator@426
|
824 fi
|
slaxemulator@426
|
825 ;;
|
gokhlayeh@266
|
826 subversion\|*)
|
gokhlayeh@266
|
827 file=${file#subversion|}
|
gokhlayeh@278
|
828 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/subversion/receipt ] && tazpkg get-install subversion --forced
|
slaxemulator@274
|
829 if [ -f $INSTALLED/subversion/receipt ]; then
|
gokhlayeh@266
|
830 mkdir $tmp_src
|
gokhlayeh@266
|
831 cd $tmp_src
|
gokhlayeh@266
|
832 if [ "$BRANCH" ]; then
|
gokhlayeh@266
|
833 echo t | svn co $file -r $BRANCH ${src##*/} && rm -rf ${src##*/}/.svn* && break
|
gokhlayeh@266
|
834 else
|
gokhlayeh@266
|
835 echo t | svn co $file ${src##*/} && rm -rf ${src##*/}/.svn* && break
|
gokhlayeh@266
|
836 fi
|
gokhlayeh@266
|
837 revert_vcs_failure
|
gokhlayeh@266
|
838 else
|
paul@430
|
839 tazwok_warning "Needs subversion to download the source tarball from $file, please add it as a build-depend."
|
gokhlayeh@266
|
840 continue
|
gokhlayeh@266
|
841 fi
|
gokhlayeh@266
|
842 ;;
|
gokhlayeh@266
|
843 mercurial\|*)
|
gokhlayeh@266
|
844 file=${file#mercurial|}
|
gokhlayeh@278
|
845 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/mercurial/receipt ] && tazpkg get-install mercurial --forced
|
slaxemulator@274
|
846 if [ -f $INSTALLED/mercurial/receipt ]; then
|
gokhlayeh@266
|
847 mkdir $tmp_src
|
gokhlayeh@266
|
848 cd $tmp_src
|
gokhlayeh@266
|
849 if [ "$BRANCH" ]; then
|
gokhlayeh@266
|
850 hg clone $file --rev $BRANCH ${src##*/} && rm -rf ${src##*/}/.hg* && break
|
gokhlayeh@266
|
851 else
|
gokhlayeh@266
|
852 hg clone $file ${src##*/} && rm -rf ${src##*/}/.hg* && break
|
gokhlayeh@266
|
853 fi
|
gokhlayeh@266
|
854 revert_vcs_failure
|
gokhlayeh@266
|
855 else
|
paul@430
|
856 tazwok_warning "Needs mercurial to download the source tarball from $file, please add it as a build-depend."
|
gokhlayeh@266
|
857 continue
|
gokhlayeh@266
|
858 fi
|
gokhlayeh@266
|
859 ;;
|
gokhlayeh@266
|
860 https*)
|
gokhlayeh@278
|
861 [ "$COMMAND" = get-src ] && [ ! -f $INSTALLED/wget/receipt ] && tazpkg get-install wget --forced
|
gokhlayeh@255
|
862 if [ -d $INSTALLED/wget ]; then
|
gokhlayeh@266
|
863 if [ "${WGET_URL%$TARBALL}" = "$WGET_URL" ] && [ "$file" = "$WGET_URL" ]; then
|
gokhlayeh@266
|
864 wget -q --no-check-certificate -O $TARBALL $file && break
|
gokhlayeh@266
|
865 else
|
gokhlayeh@290
|
866 wget -q --no-check-certificate $file && break
|
gokhlayeh@266
|
867 fi
|
gokhlayeh@255
|
868 else
|
paul@430
|
869 tazwok_warning "Needs wget to download the source tarball from $file, please add it as a build-depend."
|
gokhlayeh@266
|
870 continue
|
gokhlayeh@255
|
871 fi
|
gokhlayeh@266
|
872 ;;
|
gokhlayeh@266
|
873 http*|ftp*)
|
gokhlayeh@266
|
874 # Handle crappy URL.
|
gokhlayeh@278
|
875 if [ "$COMMAND" = get-src ]; then
|
gokhlayeh@278
|
876 if [ "${DEPENDS/wget}" != "$DEPENDS" ] || [ "${BUILD_DEPENDS/wget}" != "$BUILD_DEPENDS" ]; then
|
gokhlayeh@278
|
877 [ -f $INSALLED/wget/receipt ] || tazpkg get-install wget --forced
|
gokhlayeh@278
|
878 fi
|
gokhlayeh@278
|
879 fi
|
gokhlayeh@266
|
880 if [ "${WGET_URL%$TARBALL}" = "$WGET_URL" ] && [ "$file" = "$WGET_URL" ]; then
|
gokhlayeh@266
|
881 wget -q -O $TARBALL $file && break
|
gokhlayeh@266
|
882 else
|
gokhlayeh@266
|
883 wget -q $file && break
|
gokhlayeh@266
|
884 fi
|
gokhlayeh@266
|
885 ;;
|
gokhlayeh@255
|
886 esac
|
pascal@178
|
887 done
|
pankso@7
|
888 }
|
pankso@7
|
889
|
paul@430
|
890 # Regenerate every package that wants a PACKAGE compiled.
|
pascal@156
|
891 refresh_packages_from_compile()
|
pascal@156
|
892 {
|
paul@430
|
893 # make tazwok genpkg happy.
|
pascal@156
|
894 mkdir $WOK/$PACKAGE/taz
|
gokhlayeh@204
|
895
|
paul@430
|
896 # Cook rwanted in default or specied order.
|
gokhlayeh@186
|
897 genlist=" $(look_for_rwanted | tr '\n' ' ') "
|
gokhlayeh@186
|
898 for i in $(look_for_cookopt genpkg | tac); do
|
gokhlayeh@186
|
899 [ "${genlist/ $i }" = "$genlist" ] && continue
|
gokhlayeh@186
|
900 genlist=" $i${genlist/ $i / }"
|
pascal@156
|
901 done
|
gokhlayeh@215
|
902 if [ "$genlist" ]; then
|
gokhlayeh@215
|
903 local PACKAGE SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \
|
gokhlayeh@215
|
904 MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED \
|
gokhlayeh@215
|
905 PACKED_SIZE UNPACKED_SIZE COOK_OPT PROVIDE CONFIG_FILES TAGS \
|
gokhlayeh@298
|
906 src _pkg DESTDIR CONFIG_SITE RECEIPT LOG stuff wanted_stuff
|
gokhlayeh@215
|
907 for PACKAGE in $genlist; do
|
gokhlayeh@215
|
908 set_common_path
|
gokhlayeh@215
|
909 gen_package
|
gokhlayeh@215
|
910 done
|
gokhlayeh@215
|
911 fi
|
pascal@156
|
912 }
|
pascal@156
|
913
|
MikeDSmith25@82
|
914 # Copy all generic files (locale, pixmaps, .desktop). We use standard paths,
|
pankso@22
|
915 # so some packages need to copy these files with the receipt and genpkg_rules.
|
pankso@22
|
916 # This function is executed by gen_package when 'tazwok genpkg'.
|
pankso@22
|
917 copy_generic_files()
|
pankso@22
|
918 {
|
MikeDSmith25@82
|
919 # In most cases, locales are in $_pkg/usr/share/locale so we copy files
|
pankso@22
|
920 # using generic variables and $LOCALE from Tazwok config file.
|
gokhlayeh@186
|
921 if [ "$LOCALE" ]; then
|
pankso@22
|
922 if [ -d "$_pkg/usr/share/locale" ]; then
|
pankso@22
|
923 for i in $LOCALE
|
pankso@22
|
924 do
|
pankso@37
|
925 if [ -d "$_pkg/usr/share/locale/$i" ]; then
|
pankso@37
|
926 mkdir -p $fs/usr/share/locale
|
pankso@37
|
927 cp -a $_pkg/usr/share/locale/$i $fs/usr/share/locale
|
pankso@37
|
928 fi
|
pankso@22
|
929 done
|
pankso@22
|
930 fi
|
pankso@22
|
931 fi
|
gokhlayeh@186
|
932
|
pankso@133
|
933 # Pixmaps (PNG or/and XPM only). Some icons/images can be added through
|
MikeDSmith25@82
|
934 # genpkg_rules and generic copy can be disabled with GENERIC_PIXMAPS="no"
|
pankso@31
|
935 # in pkg receipt.
|
gokhlayeh@186
|
936 if [ "$GENERIC_PIXMAPS" != "no" ]; then
|
pankso@22
|
937 if [ -d "$_pkg/usr/share/pixmaps" ]; then
|
pankso@27
|
938 mkdir -p $fs/usr/share/pixmaps
|
pankso@31
|
939 cp -a $_pkg/usr/share/pixmaps/$PACKAGE.png \
|
pankso@31
|
940 $fs/usr/share/pixmaps 2>/dev/null
|
pankso@31
|
941 cp -a $_pkg/usr/share/pixmaps/$PACKAGE.xpm \
|
pankso@22
|
942 $fs/usr/share/pixmaps 2>/dev/null
|
pankso@23
|
943 fi
|
gokhlayeh@186
|
944
|
MikeDSmith25@82
|
945 # Custom or homemade PNG pixmap can be in stuff.
|
pankso@23
|
946 if [ -f "stuff/$PACKAGE.png" ]; then
|
pankso@27
|
947 mkdir -p $fs/usr/share/pixmaps
|
pankso@23
|
948 cp -a stuff/$PACKAGE.png $fs/usr/share/pixmaps
|
pankso@22
|
949 fi
|
pankso@22
|
950 fi
|
gokhlayeh@186
|
951
|
pankso@22
|
952 # Desktop entry (.desktop).
|
pankso@22
|
953 if [ -d "$_pkg/usr/share/applications" ]; then
|
pankso@22
|
954 cp -a $_pkg/usr/share/applications $fs/usr/share
|
pankso@23
|
955 fi
|
gokhlayeh@186
|
956
|
MikeDSmith25@82
|
957 # Homemade desktop file(s) can be in stuff.
|
pankso@34
|
958 if [ -d "stuff/applications" ]; then
|
pankso@42
|
959 mkdir -p $fs/usr/share
|
pankso@42
|
960 cp -a stuff/applications $fs/usr/share
|
pankso@34
|
961 fi
|
pankso@34
|
962 if [ -f "stuff/$PACKAGE.desktop" ]; then
|
pankso@42
|
963 mkdir -p $fs/usr/share/applications
|
pankso@42
|
964 cp -a stuff/$PACKAGE.desktop $fs/usr/share/applications
|
pankso@22
|
965 fi
|
pankso@22
|
966 }
|
pankso@22
|
967
|
pankso@25
|
968 # Find and strip : --strip-all (-s) or --strip-debug on static libs.
|
pankso@25
|
969 strip_package()
|
pankso@25
|
970 {
|
gokhlayeh@186
|
971 report step "Executing strip on all files"
|
gokhlayeh@186
|
972
|
pankso@25
|
973 # Binaries.
|
pankso@25
|
974 for dir in $fs/bin $fs/sbin $fs/usr/bin $fs/usr/sbin $fs/usr/games
|
pankso@25
|
975 do
|
pankso@25
|
976 if [ -d "$dir" ]; then
|
pankso@25
|
977 find $dir -type f -exec strip -s '{}' 2>/dev/null \;
|
pankso@25
|
978 fi
|
pankso@25
|
979 done
|
gokhlayeh@186
|
980
|
pankso@25
|
981 # Libraries.
|
pankso@25
|
982 find $fs -name "*.so*" -exec strip -s '{}' 2>/dev/null \;
|
pankso@25
|
983 find $fs -name "*.a" -exec strip --strip-debug '{}' 2>/dev/null \;
|
gokhlayeh@186
|
984 report end-step
|
pankso@25
|
985 }
|
pankso@25
|
986
|
paul@430
|
987 # Remove .pyc and .pyo files from packages.
|
slaxemulator@183
|
988 py_compiled_files_remove()
|
slaxemulator@183
|
989 {
|
paul@438
|
990 report step "Removing all .pyc and .pyo files from package"
|
slaxemulator@183
|
991 find $fs -type f -name "*.pyc" -delete 2>/dev/null
|
slaxemulator@183
|
992 find $fs -type f -name "*.pyo" -delete 2>/dev/null
|
gokhlayeh@186
|
993 report end-step
|
slaxemulator@183
|
994 }
|
slaxemulator@183
|
995
|
pankso@135
|
996 # Check FSH in a slitaz package (Path: /:/usr)
|
pankso@135
|
997 check_fsh()
|
pankso@135
|
998 {
|
pankso@135
|
999 cd $WOK/$PACKAGE/taz/*/fs
|
pascal@428
|
1000 if [ -z "$(find * ! -type d)" ] && [ "$CATEGORY" != meta ]; then
|
gokhlayeh@381
|
1001 echo "$PACKAGE fs is empty." >&2
|
gokhlayeh@381
|
1002 cd $WOK/$PACKAGE && rm -rf taz
|
gokhlayeh@381
|
1003 return 1
|
gokhlayeh@381
|
1004 fi
|
pascal@149
|
1005 [ -n "$FSH" ] || FSH="bin boot dev etc home init lib media mnt proc \
|
pascal@149
|
1006 root sbin share sys tmp usr var vz usr/bin usr/games usr/include usr/lib \
|
pascal@149
|
1007 usr/local usr/sbin usr/share usr/src"
|
pascal@455
|
1008 error=0
|
pankso@135
|
1009 for i in `ls -d * usr/* 2>/dev/null`
|
pankso@135
|
1010 do
|
gokhlayeh@195
|
1011 if ! echo $FSH | fgrep -q $i; then
|
gokhlayeh@186
|
1012 echo "Wrong path: /$i" >&2
|
pankso@135
|
1013 error=1
|
pankso@135
|
1014 fi
|
pankso@135
|
1015 done
|
pankso@135
|
1016 if [ "$error" = "1" ]; then
|
pankso@135
|
1017 cat << _EOT_
|
pankso@135
|
1018
|
paul@155
|
1019 Package will install files in a non standard directory and won't be generated.
|
paul@154
|
1020 You may have a wrong copy path in genpkg_rules or need to add some options to
|
pankso@135
|
1021 configure in compile_rules. Some valid options for SliTaz (Linux FSH):
|
pankso@135
|
1022
|
pankso@135
|
1023 --prefix=/usr
|
pankso@135
|
1024 --sysconfdir=/etc
|
pankso@135
|
1025 --libexecdir=/usr/lib/(pkgname)
|
pankso@135
|
1026 --localstatedir=/var
|
pankso@135
|
1027 --mandir=/usr/share/man
|
pankso@135
|
1028 --infodir=/usr/share/info
|
pankso@135
|
1029
|
paul@152
|
1030 For more information please read SliTaz docs and run: ./configure --help
|
pankso@135
|
1031 ================================================================================
|
pankso@135
|
1032 $PACKAGE package generation aborted.
|
pankso@135
|
1033
|
pankso@135
|
1034 _EOT_
|
gokhlayeh@186
|
1035
|
pankso@135
|
1036 # Dont generate a corrupted package.
|
pankso@137
|
1037 cd $WOK/$PACKAGE && rm -rf taz
|
gokhlayeh@381
|
1038 return 1
|
pankso@135
|
1039 fi
|
gokhlayeh@381
|
1040 return 0
|
gokhlayeh@186
|
1041 }
|
gokhlayeh@186
|
1042
|
gokhlayeh@186
|
1043 gen_cookmd5()
|
gokhlayeh@186
|
1044 {
|
gokhlayeh@186
|
1045 # md5sum of cooking stuff make tazwok able to check for changes
|
gokhlayeh@186
|
1046 # without hg.
|
gokhlayeh@186
|
1047 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1048 md5sum receipt > md5
|
gokhlayeh@186
|
1049 [ -f description.txt ] && md5sum description.txt >> md5
|
gokhlayeh@186
|
1050 if [ -d stuff ]; then
|
gokhlayeh@186
|
1051 find stuff | while read file; do
|
gokhlayeh@186
|
1052 md5sum $file >> md5
|
gokhlayeh@186
|
1053 done
|
gokhlayeh@186
|
1054 fi
|
pankso@135
|
1055 }
|
pankso@135
|
1056
|
gokhlayeh@381
|
1057 set_pkg_broken()
|
gokhlayeh@381
|
1058 {
|
gokhlayeh@405
|
1059 grep -q ^$PACKAGE$ $broken || echo $PACKAGE >> $broken
|
gokhlayeh@381
|
1060
|
paul@430
|
1061 # Remove pkg from cooklist to avoid re-cook it if no changes happen
|
gokhlayeh@381
|
1062 # in the cook stuff.
|
gokhlayeh@405
|
1063 sed "/^$PACKAGE$/d" -i $cooklist $commit
|
gokhlayeh@381
|
1064
|
gokhlayeh@381
|
1065 gen_cookmd5
|
gokhlayeh@381
|
1066
|
paul@430
|
1067 # Return 1 to make report know that its mother-function failed.
|
gokhlayeh@381
|
1068 return 1
|
gokhlayeh@381
|
1069 }
|
gokhlayeh@381
|
1070
|
MikeDSmith25@82
|
1071 # Create a package tree and build the gziped cpio archive
|
pankso@7
|
1072 # to make a SliTaz (.tazpkg) package.
|
pankso@7
|
1073 gen_package()
|
pankso@7
|
1074 {
|
pankso@7
|
1075 check_root
|
pankso@7
|
1076 check_for_package_on_cmdline
|
pankso@7
|
1077 check_for_receipt
|
gokhlayeh@381
|
1078 source_receipt
|
gokhlayeh@186
|
1079
|
pascal@86
|
1080 # May compute VERSION
|
pascal@86
|
1081 if grep -q ^get_version $RECEIPT; then
|
pascal@86
|
1082 get_version
|
pascal@86
|
1083 fi
|
pankso@7
|
1084 check_for_wanted
|
pankso@7
|
1085 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1086
|
pankso@7
|
1087 # Remove old Tazwok package files.
|
gokhlayeh@186
|
1088 [ -d "taz" ] && rm -rf taz
|
gokhlayeh@186
|
1089
|
MikeDSmith25@82
|
1090 # Create the package tree and set useful variables.
|
gokhlayeh@266
|
1091 fs=$WOK/$PACKAGE/taz/$PACKAGE-$VERSION/fs
|
gokhlayeh@381
|
1092 mkdir -p $fs
|
gokhlayeh@186
|
1093
|
MikeDSmith25@82
|
1094 # Set $src for standard package and $_pkg variables.
|
gokhlayeh@302
|
1095 set_src_path
|
gokhlayeh@302
|
1096 set_pkg_path
|
gokhlayeh@186
|
1097
|
pankso@135
|
1098 # Execute genpkg_rules, check package and copy generic files to build
|
pankso@135
|
1099 # the package.
|
gokhlayeh@186
|
1100 report step "Building $PACKAGE with the receipt"
|
gokhlayeh@186
|
1101 report open-bloc
|
gokhlayeh@381
|
1102 if look_for_cookopt !fs; then
|
gokhlayeh@381
|
1103 :
|
gokhlayeh@381
|
1104 elif grep -q ^genpkg_rules $RECEIPT; then
|
gokhlayeh@186
|
1105
|
pankso@7
|
1106 # Log process.
|
pankso@7
|
1107 echo "executing genpkg_rules" >> $LOG
|
gokhlayeh@186
|
1108 report step "Executing genpkg_rules"
|
gokhlayeh@381
|
1109 ( set -e; genpkg_rules ) || { set_pkg_broken; report close-bloc; return 1; }
|
gokhlayeh@381
|
1110 check_fsh || { set_pkg_broken; report close-bloc; return 1; }
|
gokhlayeh@381
|
1111 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1112 report end-step
|
gokhlayeh@381
|
1113
|
pankso@133
|
1114 # Skip generic files for packages with a WANTED variable
|
paul@430
|
1115 # (dev and split pkgs).
|
gokhlayeh@186
|
1116 if [ ! "$WANTED" ]; then
|
pankso@24
|
1117 copy_generic_files
|
pankso@24
|
1118 fi
|
gokhlayeh@204
|
1119 look_for_cookopt !strip || strip_package
|
slaxemulator@183
|
1120 py_compiled_files_remove
|
pankso@7
|
1121 else
|
gokhlayeh@186
|
1122 echo "No package rules to gen $PACKAGE..." >&2
|
gokhlayeh@381
|
1123 set_pkg_broken
|
gokhlayeh@381
|
1124 report close-bloc
|
gokhlayeh@381
|
1125 return 1
|
pankso@7
|
1126 fi
|
gokhlayeh@186
|
1127
|
paul@154
|
1128 # Copy the receipt and description (if exists) into the binary package tree.
|
pankso@7
|
1129 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1130 report step "Copying the receipt"
|
pankso@7
|
1131 cp receipt taz/$PACKAGE-$VERSION
|
gokhlayeh@186
|
1132 report end-step
|
pascal@89
|
1133 if grep -q ^get_version $RECEIPT; then
|
gokhlayeh@186
|
1134 report step "Updating version in receipt"
|
pascal@89
|
1135 sed -i "s/^VERSION=.*/VERSION=\"$VERSION\"/" \
|
pascal@89
|
1136 taz/$PACKAGE-$VERSION/receipt
|
gokhlayeh@186
|
1137 report end-step
|
pascal@89
|
1138 fi
|
pankso@7
|
1139 if [ -f "description.txt" ]; then
|
gokhlayeh@186
|
1140 report step "Copying the description file"
|
pankso@7
|
1141 cp description.txt taz/$PACKAGE-$VERSION
|
gokhlayeh@186
|
1142 report end-step
|
pankso@7
|
1143 fi
|
gokhlayeh@186
|
1144
|
gokhlayeh@186
|
1145 # Generate md5 of cooking stuff to look for commit later.
|
gokhlayeh@186
|
1146 gen_cookmd5
|
gokhlayeh@186
|
1147 echo -e "\n# md5sum of cooking stuff :" >> taz/$PACKAGE-$VERSION/receipt
|
gokhlayeh@186
|
1148 cat md5 | sed 's/^/# /' >> taz/$PACKAGE-$VERSION/receipt
|
gokhlayeh@186
|
1149
|
MikeDSmith25@82
|
1150 # Create the files.list by redirecting find output.
|
gokhlayeh@186
|
1151 report step "Creating the list of files"
|
pascal@15
|
1152 cd taz/$PACKAGE-$VERSION
|
pascal@13
|
1153 LAST_FILE=""
|
gokhlayeh@195
|
1154 { find fs -print; echo; } | while read file; do
|
gokhlayeh@186
|
1155 if [ "$LAST_FILE" ]; then
|
pascal@15
|
1156 case "$file" in
|
pascal@13
|
1157 $LAST_FILE/*)
|
pankso@133
|
1158 case "$(ls -ld "$LAST_FILE")" in
|
pascal@15
|
1159 drwxr-xr-x\ *\ root\ *\ root\ *);;
|
pascal@15
|
1160 *) echo ${LAST_FILE#fs};;
|
pascal@13
|
1161 esac;;
|
pascal@15
|
1162 *) echo ${LAST_FILE#fs};;
|
pascal@13
|
1163 esac
|
pascal@13
|
1164 fi
|
pascal@15
|
1165 LAST_FILE="$file"
|
pascal@15
|
1166 done > files.list
|
gokhlayeh@186
|
1167
|
gokhlayeh@186
|
1168 # Next, check if something has changed in lib files.
|
gokhlayeh@450
|
1169 # Plan to recook each packages which depends on libs
|
gokhlayeh@450
|
1170 # which doesn't exists anymore.
|
gokhlayeh@450
|
1171 libs=$(for file in $(find * -type f); do
|
gokhlayeh@450
|
1172 [ "$(dd if=$file bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ] || continue
|
gokhlayeh@450
|
1173 LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $PWD/$file
|
gokhlayeh@450
|
1174 done | { cut -f 1 -d ' ' | tr -d '\t' | sort -u | \
|
gokhlayeh@450
|
1175 sed -e 's/^linux-gate.so.*$/SLIB/' -e 's~^/lib/ld-.*$~SLIB~' \
|
gokhlayeh@450
|
1176 -e '/^statically$/d' | tr '\n' ' '; })
|
gokhlayeh@459
|
1177 [ "$libs" ] && libs=$(echo " $libs" | sed -r 's/( SLIB)+ / /g')
|
gokhlayeh@450
|
1178 old_libs=$(grep -m1 ^$PACKAGE$'\t' $lib_db | cut -f 2)
|
gokhlayeh@450
|
1179 if [ "$old_libs" ]; then
|
gokhlayeh@450
|
1180 report step "Looking if reverse depends needs to be refreshed"
|
gokhlayeh@450
|
1181 for i in $old_libs; do
|
gokhlayeh@450
|
1182 [ "${libs/ $i }" = "$libs" ] || continue
|
gokhlayeh@450
|
1183 fgrep " $i " $lib_db | cut -f 1
|
gokhlayeh@450
|
1184 done | sort -u | while read rdep; do
|
gokhlayeh@450
|
1185 [ "$rdep" = "${WANTED:-$PACKAGE}" ] && continue
|
gokhlayeh@450
|
1186 grep -q ^$rdep$ $blocked $cooklist && continue
|
gokhlayeh@450
|
1187 echo "Plan to recook $rdep"
|
gokhlayeh@450
|
1188 echo $rdep >> $cooklist
|
gokhlayeh@215
|
1189 done
|
gokhlayeh@450
|
1190 sed "/^$PACKAGE\t/d" -i $lib_db
|
gokhlayeh@450
|
1191 report end-step
|
gokhlayeh@450
|
1192 fi
|
gokhlayeh@450
|
1193 if [ "$libs" ]; then
|
gokhlayeh@450
|
1194 echo -e "$PACKAGE\t$libs" >> $lib_db
|
gokhlayeh@450
|
1195 sort -o $lib_db $lib_db
|
gokhlayeh@450
|
1196 fi
|
gokhlayeh@450
|
1197
|
gokhlayeh@186
|
1198 if [ ! "$EXTRAVERSION" ]; then
|
pascal@84
|
1199 case "$PACKAGE" in
|
pascal@84
|
1200 linux*);;
|
pascal@85
|
1201 *) EXTRAVERSION="$(grep '/lib/modules/.*-slitaz/' files.list |\
|
pascal@84
|
1202 head -1 | sed 's|/lib/modules/\(.*\)-slitaz/.*|_\1|')";;
|
pascal@84
|
1203 esac
|
pascal@84
|
1204 fi
|
gokhlayeh@186
|
1205 rm -f $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg 2> /dev/null
|
gokhlayeh@186
|
1206 report step "Creating md5sum of files"
|
pascal@70
|
1207 while read file; do
|
pascal@71
|
1208 [ -L "fs$file" ] && continue
|
pascal@71
|
1209 [ -f "fs$file" ] || continue
|
pascal@71
|
1210 md5sum "fs$file" | sed 's/ fs/ /'
|
pascal@70
|
1211 done < files.list > md5sum
|
gokhlayeh@204
|
1212 report end-step
|
pascal@84
|
1213 UNPACKED_SIZE=$(du -chs fs receipt files.list md5sum description.txt \
|
pascal@84
|
1214 2> /dev/null | awk '{ sz=$1 } END { print sz }')
|
gokhlayeh@186
|
1215
|
pankso@7
|
1216 # Build cpio archives. Find, cpio and gzip the fs, finish by
|
pankso@7
|
1217 # removing the fs tree.
|
paul@430
|
1218 # Don't log this because compression always outputs error messages.
|
pascal@150
|
1219 find fs -print | cpio -o -H newc | case "$PACKAGE-$COMPRESSION" in
|
pascal@150
|
1220 tazpkg-lzma) gzip > fs.cpio.gz;;
|
pascal@150
|
1221 *-lzma) lzma e fs.cpio.lzma -si;;
|
pascal@150
|
1222 *) gzip > fs.cpio.gz;;
|
pascal@150
|
1223 esac && rm -rf fs
|
pascal@150
|
1224 PACKED_SIZE=$(du -chs fs.cpio.* receipt files.list md5sum \
|
pascal@84
|
1225 description.txt 2> /dev/null | awk '{ sz=$1 } END { print sz }')
|
gokhlayeh@186
|
1226 report step "Updating receipt sizes"
|
pascal@138
|
1227 sed -i '/^PACKED_SIZE/d' receipt
|
pascal@138
|
1228 sed -i '/^UNPACKED_SIZE/d' receipt
|
pascal@59
|
1229 sed -i "s/^PACKAGE=/PACKED_SIZE=\"$PACKED_SIZE\"\nUNPACKED_SIZE=\"$UNPACKED_SIZE\"\nPACKAGE=/" receipt
|
pascal@86
|
1230 sed -i "s/^VERSION=$/VERSION=\"$VERSION\"/" receipt
|
gokhlayeh@212
|
1231 report end-step
|
gokhlayeh@212
|
1232 if [ "$EXTRAVERSION" ]; then
|
gokhlayeh@186
|
1233 report step "Updating receipt EXTRAVERSION"
|
pascal@72
|
1234 sed -i s/^EXTRAVERSION.*$// receipt
|
pascal@72
|
1235 sed -i "s/^VERSION=/EXTRAVERSION=\"$EXTRAVERSION\"\nVERSION=/" receipt
|
pascal@72
|
1236 fi
|
gokhlayeh@186
|
1237 prev_VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
|
gokhlayeh@186
|
1238 remove_previous_package $INCOMING_REPOSITORY
|
gokhlayeh@186
|
1239 report step "Creating full cpio archive"
|
gokhlayeh@186
|
1240 find . -print | cpio -o -H newc > $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg
|
gokhlayeh@186
|
1241
|
paul@154
|
1242 # Restore package tree in case we want to browse it.
|
gokhlayeh@186
|
1243 report step "Restoring original package tree"
|
gokhlayeh@195
|
1244 { zcat fs.cpio.gz 2> /dev/null || unlzma -c fs.cpio.lzma; } | cpio --quiet -id
|
pascal@150
|
1245 rm fs.cpio.* && cd ..
|
gokhlayeh@383
|
1246
|
gokhlayeh@449
|
1247 # Save receipts if save_wok is enabled.
|
gokhlayeh@449
|
1248 [ "$save_wok" ] && copy_cooking_stuff $WOK $PACKAGE $INCOMING_REPOSITORY/wok
|
gokhlayeh@449
|
1249
|
gokhlayeh@383
|
1250 # Recook of reverse-depends if package was broken.
|
gokhlayeh@405
|
1251 if grep -q "^$PACKAGE$" $broken; then
|
paul@430
|
1252 report step "Planning a re-try cook of reverse depends"
|
gokhlayeh@405
|
1253 sed "/^$PACKAGE$/d" -i $broken
|
gokhlayeh@383
|
1254 for rdep in $(look_for_rdep); do
|
gokhlayeh@405
|
1255 grep -q "^$rdep$" $broken || continue
|
gokhlayeh@405
|
1256 grep -q "^$rdep$" $cooklist && continue
|
gokhlayeh@383
|
1257 echo "Adding $rdep to the cooklist"
|
gokhlayeh@405
|
1258 echo $rdep >> $cooklist
|
gokhlayeh@383
|
1259 regen_cooklist=t
|
gokhlayeh@383
|
1260 done
|
gokhlayeh@383
|
1261 report end-step
|
gokhlayeh@383
|
1262 fi
|
gokhlayeh@405
|
1263 sed "/^$PACKAGE$/d" -i $commit $cooklist
|
gokhlayeh@186
|
1264
|
pankso@7
|
1265 # Log process.
|
pascal@69
|
1266 echo "$PACKAGE-$VERSION$EXTRAVERSION.tazpkg (done)" >> $LOG
|
gokhlayeh@186
|
1267 report close-bloc
|
pascal@68
|
1268 echo "Package $PACKAGE ($VERSION$EXTRAVERSION) generated."
|
gokhlayeh@186
|
1269 echo "Size : `du -sh $INCOMING_REPOSITORY/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg`"
|
pankso@7
|
1270 echo ""
|
pankso@7
|
1271 }
|
pankso@7
|
1272
|
gokhlayeh@186
|
1273 ########################################################################
|
gokhlayeh@186
|
1274 # This section contains functions used by several other functions
|
paul@430
|
1275 # below.
|
gokhlayeh@186
|
1276 ########################
|
gokhlayeh@186
|
1277
|
gokhlayeh@186
|
1278 # Look for receipt/files.list in wok. If they can't be found, get them
|
gokhlayeh@186
|
1279 # from package. Accept one argument : absolute path to package.
|
gokhlayeh@186
|
1280 get_pkg_files()
|
pankso@28
|
1281 {
|
gokhlayeh@186
|
1282 pkg_files_dir=$tmp/$(basename ${1%.tazpkg})
|
gokhlayeh@186
|
1283 mkdir -p $pkg_files_dir && \
|
gokhlayeh@186
|
1284 cd $pkg_files_dir && \
|
gokhlayeh@186
|
1285 cpio --quiet -idm receipt < $1 && \
|
gokhlayeh@186
|
1286 cpio --quiet -idm files.list < $1
|
gokhlayeh@186
|
1287 }
|
gokhlayeh@170
|
1288
|
gokhlayeh@186
|
1289 ########################################################################
|
gokhlayeh@204
|
1290 # This section contains functions to generate packages databases.
|
gokhlayeh@186
|
1291 ########################
|
gokhlayeh@186
|
1292
|
gokhlayeh@186
|
1293
|
gokhlayeh@186
|
1294 gen_packages_db()
|
gokhlayeh@186
|
1295 {
|
gokhlayeh@186
|
1296 # pkg_repository can be $PACKAGES_REPOSITORY or $INCOMING_REPOSITORY.
|
gokhlayeh@204
|
1297 [ "$pkg_repository" ] || pkg_repository=$PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1298 cd $pkg_repository
|
gokhlayeh@204
|
1299 report step "Generating packages lists: $pkg_repository"
|
gokhlayeh@204
|
1300 report open-bloc
|
gokhlayeh@204
|
1301 report step "Removing old files"
|
gokhlayeh@204
|
1302 for file in files.list.lzma packages.list packages.txt \
|
gokhlayeh@204
|
1303 packages.desc packages.equiv packages.md5; do
|
gokhlayeh@415
|
1304 rm -rf $file
|
gokhlayeh@204
|
1305 done
|
gokhlayeh@204
|
1306 touch files.list
|
gokhlayeh@204
|
1307
|
gokhlayeh@186
|
1308 packages_db_start
|
gokhlayeh@186
|
1309 unset RECEIPT
|
paul@430
|
1310 report step "Reading data from all packages"
|
gokhlayeh@195
|
1311 for pkg in $(echo $pkg_repository/*.tazpkg | fgrep -v '*'); do
|
gokhlayeh@186
|
1312 get_packages_info
|
gokhlayeh@186
|
1313 done
|
gokhlayeh@186
|
1314 report end-step
|
gokhlayeh@186
|
1315 packages_db_end
|
gokhlayeh@204
|
1316 report close-bloc
|
gokhlayeh@186
|
1317 }
|
gokhlayeh@186
|
1318
|
gokhlayeh@186
|
1319 update_packages_db()
|
gokhlayeh@186
|
1320 {
|
gokhlayeh@204
|
1321 [ "$pkg_repository" ] || pkg_repository=$PACKAGES_REPOSITORY
|
gokhlayeh@186
|
1322 cd $pkg_repository
|
gokhlayeh@204
|
1323 for file in packages.list packages.equiv packages.md5 packages.desc \
|
gokhlayeh@204
|
1324 packages.txt; do
|
gokhlayeh@186
|
1325 if [ ! -f "$file" ]; then
|
gokhlayeh@204
|
1326 gen_packages_db
|
gokhlayeh@186
|
1327 return
|
gokhlayeh@170
|
1328 fi
|
gokhlayeh@170
|
1329 done
|
gokhlayeh@186
|
1330 if [ -f files.list.lzma ]; then
|
gokhlayeh@186
|
1331 lzma d files.list.lzma files.list
|
gokhlayeh@186
|
1332 else
|
gokhlayeh@204
|
1333 gen_packages_db
|
gokhlayeh@414
|
1334 return
|
gokhlayeh@186
|
1335 fi
|
gokhlayeh@204
|
1336 report step "Updating packages lists: $pkg_repository"
|
gokhlayeh@186
|
1337 packages_db_start
|
gokhlayeh@412
|
1338
|
gokhlayeh@186
|
1339 # Look for removed/update packages.
|
gokhlayeh@412
|
1340 touch stamp -r packages.list
|
gokhlayeh@186
|
1341 for PACKAGE in $(grep ^[0-9,a-z,A-Z] packages.txt); do
|
gokhlayeh@202
|
1342 pkg="$pkg_repository/$(grep -m1 ^$PACKAGE- packages.list).tazpkg"
|
gokhlayeh@195
|
1343 if ! [ -f "$pkg" ]; then
|
gokhlayeh@186
|
1344 erase_package_info
|
gokhlayeh@186
|
1345 else
|
gokhlayeh@412
|
1346 if [ "$pkg" -nt "stamp" ]; then
|
gokhlayeh@215
|
1347 updated_pkg="$updated_pkg
|
gokhlayeh@215
|
1348 $PACKAGE $pkg"
|
gokhlayeh@266
|
1349 elif [ ! -f $WOK/$PACKAGE/receipt ] && \
|
gokhlayeh@266
|
1350 [ "$COMMAND" = check-incoming -o "$pkg_repository" = "$INCOMING_REPOSITORY" ]; then
|
gokhlayeh@266
|
1351 erase_package_info
|
gokhlayeh@415
|
1352 echo "Removing $PACKAGE from $pkg_repository."
|
gokhlayeh@266
|
1353 rm $pkg
|
gokhlayeh@449
|
1354 [ "$save_wok" ] && rm -rf $pkg_repository/wok/$PACKAGE
|
gokhlayeh@449
|
1355 if [ "$pkg_repository" = "$INCOMING_REPOSITORY" ]; then
|
gokhlayeh@449
|
1356 rm -rf $WOK/$PACKAGE
|
gokhlayeh@449
|
1357 sed "/^$PACKAGE\t/d" -i $wan_db $dep_db $cookorder
|
gokhlayeh@449
|
1358 sed "/^$PACKAGE$/d" -i $cooklist $commit $blocked $broken
|
gokhlayeh@449
|
1359 rm -f $LOCAL_REPOSITORY/log/$PACKAGE.html
|
gokhlayeh@449
|
1360 if [ "$(sed 1!d $cookorder)" != "#PlanSort" ]; then
|
gokhlayeh@449
|
1361 sed 1i"#PlanSort" -i $cookorder
|
gokhlayeh@449
|
1362 regen_cooklist=yes
|
gokhlayeh@449
|
1363 fi
|
gokhlayeh@266
|
1364 else
|
gokhlayeh@449
|
1365 echo "$PACKAGE" >> removed
|
gokhlayeh@415
|
1366 sed -n '1,10p' -i removed
|
gokhlayeh@266
|
1367 fi
|
gokhlayeh@186
|
1368 fi
|
pascal@178
|
1369 fi
|
pascal@178
|
1370 done
|
gokhlayeh@412
|
1371 rm stamp
|
gokhlayeh@215
|
1372 echo "$updated_pkg" | sed 1d | while read PACKAGE pkg; do
|
gokhlayeh@202
|
1373 erase_package_info
|
gokhlayeh@202
|
1374 get_packages_info
|
gokhlayeh@202
|
1375 done
|
gokhlayeh@204
|
1376 unset updated_pkg
|
gokhlayeh@202
|
1377
|
gokhlayeh@186
|
1378 # Look for new packages.
|
gokhlayeh@415
|
1379 for pkg in $pkg_repository/*.tazpkg; do
|
gokhlayeh@415
|
1380 fgrep -q " ${pkg##*/}" packages.md5 || get_packages_info
|
gokhlayeh@186
|
1381 done
|
gokhlayeh@186
|
1382 report end-step
|
gokhlayeh@186
|
1383 packages_db_end
|
gokhlayeh@186
|
1384 }
|
gokhlayeh@186
|
1385
|
gokhlayeh@186
|
1386 packages_db_start()
|
gokhlayeh@186
|
1387 {
|
gokhlayeh@415
|
1388 if [ -s packages.txt ]; then
|
gokhlayeh@434
|
1389 sed -e 's/^# Packages :.*/# Packages : unknown/' \
|
gokhlayeh@415
|
1390 -e "s/# Date :.*/# Date : $(date +%Y-%m-%d\ \%H:%M:%S)/" \
|
gokhlayeh@415
|
1391 -i packages.txt
|
gokhlayeh@415
|
1392 else
|
gokhlayeh@186
|
1393 echo "# SliTaz GNU/Linux - Packages list
|
gokhlayeh@186
|
1394 #
|
paul@430
|
1395 # Packages : unknown
|
gokhlayeh@186
|
1396 # Date : $(date +%Y-%m-%d\ \%H:%M:%S)
|
gokhlayeh@215
|
1397 #
|
gokhlayeh@215
|
1398 " > packages.txt
|
pascal@60
|
1399 fi
|
gokhlayeh@186
|
1400
|
paul@430
|
1401 # Needed in some cases as tazwok defines RECEIPT at configuration time
|
paul@430
|
1402 # in this particular case it can break the script.
|
gokhlayeh@186
|
1403 unset RECEIPT
|
gokhlayeh@410
|
1404
|
gokhlayeh@410
|
1405 # If $packages_repository is the main one, configure few functions
|
gokhlayeh@410
|
1406 # to act as they should, without having loop on them (speed-up)
|
gokhlayeh@460
|
1407 if [ "$pkg_repository" = "$PACKAGES_REPOSITORY" ]; then
|
gokhlayeh@410
|
1408 erase_package_info_extracmd="erase_package_info_main"
|
gokhlayeh@460
|
1409 get_packages_info_extracmd="get_packages_info_main"
|
gokhlayeh@439
|
1410 fi
|
gokhlayeh@186
|
1411 }
|
pankso@28
|
1412
|
gokhlayeh@186
|
1413 erase_package_info()
|
gokhlayeh@186
|
1414 {
|
gokhlayeh@186
|
1415 cd $pkg_repository
|
gokhlayeh@186
|
1416 sed "/^$PACKAGE$/,/^$/d" -i packages.txt
|
gokhlayeh@186
|
1417 sed "/^$PACKAGE /d" -i packages.desc
|
gokhlayeh@186
|
1418 sed -e "s/=$PACKAGE /= /" -e "s/ $PACKAGE / /" -e "s/ $PACKAGE$//" \
|
gokhlayeh@186
|
1419 -e "/=$PACKAGE$/d" -e "s/=[0-9,a-z,A-Z]:$PACKAGE /= /" \
|
gokhlayeh@186
|
1420 -e "s/ [0-9,a-z,A-Z]:$PACKAGE / /" -e "s/ [0-9,a-z,A-Z]:$PACKAGE$/ /" \
|
gokhlayeh@186
|
1421 -e "/=[0-9,a-z,A-Z]:$PACKAGE$/d" \
|
gokhlayeh@186
|
1422 -i packages.equiv
|
gokhlayeh@186
|
1423 sed "/^$PACKAGE:/d" -i files.list
|
gokhlayeh@186
|
1424 sed "/^$(basename ${pkg%.tazpkg})$/d" -i packages.list
|
gokhlayeh@186
|
1425 sed "/ $(basename $pkg)$/d" -i packages.md5
|
gokhlayeh@410
|
1426 $erase_package_info_extracmd
|
gokhlayeh@410
|
1427 }
|
gokhlayeh@410
|
1428
|
gokhlayeh@410
|
1429 erase_package_info_main()
|
gokhlayeh@410
|
1430 {
|
gokhlayeh@450
|
1431 for i in wanted.txt depends.txt libraries.txt; do
|
gokhlayeh@399
|
1432 [ -f $i ] || continue
|
gokhlayeh@399
|
1433 sed "/^$PACKAGE\t/d" -i $i
|
gokhlayeh@399
|
1434 done
|
gokhlayeh@186
|
1435 }
|
gokhlayeh@186
|
1436
|
gokhlayeh@186
|
1437 get_packages_info()
|
gokhlayeh@186
|
1438 {
|
paul@430
|
1439 # If there's no taz folder in the wok, extract info from the
|
gokhlayeh@186
|
1440 # package.
|
gokhlayeh@186
|
1441 get_pkg_files $pkg
|
gokhlayeh@186
|
1442 source_receipt
|
paul@430
|
1443 echo "Getting data from $PACKAGE"
|
gokhlayeh@186
|
1444
|
gokhlayeh@186
|
1445 cat >> $pkg_repository/packages.txt << _EOT_
|
pankso@28
|
1446 $PACKAGE
|
gokhlayeh@186
|
1447 $VERSION$EXTRAVERSION
|
pankso@28
|
1448 $SHORT_DESC
|
pankso@28
|
1449 _EOT_
|
gokhlayeh@215
|
1450 if [ "$PACKED_SIZE" ]; then
|
gokhlayeh@215
|
1451 cat >> $pkg_repository/packages.txt << _EOT_
|
pankso@133
|
1452 $PACKED_SIZE ($UNPACKED_SIZE installed)
|
gokhlayeh@215
|
1453
|
pascal@60
|
1454 _EOT_
|
gokhlayeh@215
|
1455 else
|
gokhlayeh@215
|
1456 echo "" >> $pkg_repository/packages.txt
|
pascal@60
|
1457 fi
|
gokhlayeh@186
|
1458
|
paul@121
|
1459 # Packages.desc is used by Tazpkgbox <tree>.
|
gokhlayeh@186
|
1460 echo "$PACKAGE | $VERSION$EXTRAVERSION | $SHORT_DESC | $CATEGORY | $WEB_SITE" >> $pkg_repository/packages.desc
|
gokhlayeh@186
|
1461
|
paul@430
|
1462 # Packages.equiv is used by tazpkg install to check depends.
|
pascal@99
|
1463 for i in $PROVIDE; do
|
pascal@99
|
1464 DEST=""
|
gokhlayeh@195
|
1465 echo $i | fgrep -q : && DEST="${i#*:}:"
|
gokhlayeh@186
|
1466 if grep -qs ^${i%:*}= $pkg_repository/packages.equiv; then
|
gokhlayeh@186
|
1467 sed -i "s/^${i%:*}=/${i%:*}=$DEST$PACKAGE /" $pkg_repository/packages.equiv
|
pascal@99
|
1468 else
|
gokhlayeh@186
|
1469 echo "${i%:*}=$DEST$PACKAGE" >> $pkg_repository/packages.equiv
|
gokhlayeh@186
|
1470 fi
|
gokhlayeh@186
|
1471 done
|
gokhlayeh@186
|
1472
|
gokhlayeh@186
|
1473 if [ -f files.list ]; then
|
gokhlayeh@186
|
1474 { echo "$PACKAGE"; cat files.list; } | awk '
|
gokhlayeh@186
|
1475 BEGIN { name="" } { if (name == "") name=$0; else printf("%s: %s\n",name,$0); }' >> $pkg_repository/files.list
|
gokhlayeh@186
|
1476 fi
|
gokhlayeh@186
|
1477
|
gokhlayeh@186
|
1478 cd .. && rm -r "$pkg_files_dir"
|
gokhlayeh@186
|
1479
|
gokhlayeh@186
|
1480 cd $pkg_repository
|
gokhlayeh@186
|
1481 echo $(basename ${pkg%.tazpkg}) >> packages.list
|
gokhlayeh@410
|
1482 md5sum $(basename $pkg) >> packages.md5
|
gokhlayeh@410
|
1483 $get_packages_info_extracmd
|
gokhlayeh@410
|
1484 }
|
gokhlayeh@399
|
1485
|
gokhlayeh@410
|
1486 get_packages_info_main()
|
gokhlayeh@410
|
1487 {
|
gokhlayeh@410
|
1488 [ "$WANTED" ] && echo -e "$PACKAGE\t$WANTED" >> wanted.txt
|
gokhlayeh@410
|
1489 echo -e "$PACKAGE\t "$DEPENDS" \t "$BUILD_DEPENDS" " >> package.txt
|
gokhlayeh@460
|
1490 grep -m1 ^$PACKAGE$'\t' $lib_db >> libraries.txt
|
gokhlayeh@186
|
1491 }
|
gokhlayeh@186
|
1492
|
gokhlayeh@186
|
1493 source_receipt()
|
gokhlayeh@186
|
1494 {
|
gokhlayeh@186
|
1495 unset PACKAGE SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \
|
gokhlayeh@186
|
1496 MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED \
|
gokhlayeh@186
|
1497 PACKED_SIZE UNPACKED_SIZE COOK_OPT PROVIDE CONFIG_FILES TAGS \
|
gokhlayeh@298
|
1498 src _pkg DESTDIR CONFIG_SITE BRANCH TARBALL stuff wanted_stuff
|
gokhlayeh@186
|
1499 . ${RECEIPT:-$PWD/receipt}
|
gokhlayeh@186
|
1500 }
|
gokhlayeh@186
|
1501
|
gokhlayeh@186
|
1502 packages_db_end()
|
gokhlayeh@186
|
1503 {
|
gokhlayeh@186
|
1504 cd $pkg_repository
|
gokhlayeh@186
|
1505 pkgs=$(wc -l packages.list | sed 's/ .*//')
|
gokhlayeh@186
|
1506 sed "s/# Packages : .*/# Packages : $pkgs/" -i packages.txt
|
gokhlayeh@186
|
1507
|
paul@430
|
1508 # If lists were updated it's generally needed to sort them well.
|
gokhlayeh@186
|
1509 if ! sort -c packages.list 2> /dev/null; then
|
gokhlayeh@186
|
1510 report step "Sorting packages lists"
|
gokhlayeh@399
|
1511 files_list="packages.list packages.desc packages.equiv"
|
gokhlayeh@415
|
1512 [ "${pkg_repository##*/}" = packages ] && \
|
gokhlayeh@450
|
1513 files_list="$files_list wanted.txt depends.txt libraries.txt"
|
gokhlayeh@399
|
1514 for file in $files_list; do
|
gokhlayeh@186
|
1515 [ -f $file ] || continue
|
gokhlayeh@186
|
1516 sort -o $file $file
|
gokhlayeh@186
|
1517 done
|
gokhlayeh@186
|
1518 report end-step
|
gokhlayeh@186
|
1519 fi
|
gokhlayeh@460
|
1520
|
gokhlayeh@460
|
1521 md5sum packages.md5 | cut -f1 -d' ' > ID
|
gokhlayeh@460
|
1522 [ -s ID ] || echo null > ID
|
gokhlayeh@186
|
1523
|
paul@430
|
1524 # Dont log this because lzma always output errors.
|
gokhlayeh@186
|
1525 lzma e files.list files.list.lzma
|
gokhlayeh@204
|
1526 rm -f files.list
|
gokhlayeh@204
|
1527 [ -f packages.equiv ] || touch packages.equiv
|
gokhlayeh@186
|
1528 }
|
gokhlayeh@186
|
1529
|
gokhlayeh@186
|
1530 ########################################################################
|
gokhlayeh@186
|
1531 # This section contains functions to generate wok database.
|
gokhlayeh@186
|
1532 ########################
|
gokhlayeh@186
|
1533
|
gokhlayeh@186
|
1534 gen_wok_db()
|
gokhlayeh@186
|
1535 {
|
gokhlayeh@204
|
1536 report step "Generating wok database"
|
gokhlayeh@186
|
1537 report open-bloc
|
gokhlayeh@204
|
1538 report step "Removing old files"
|
gokhlayeh@397
|
1539 for file in $wan_db $dep_db $cookorder; do
|
gokhlayeh@204
|
1540 [ -f $file ] && rm $file
|
gokhlayeh@204
|
1541 done
|
gokhlayeh@186
|
1542 report step "Generating wok-wanted.txt"
|
gokhlayeh@204
|
1543 gen_wan_db
|
gokhlayeh@186
|
1544 report step "Generating wok-depends.txt"
|
gokhlayeh@204
|
1545 for PACKAGE in $(cut -f1 -d '|' $PACKAGES_REPOSITORY/packages.desc \
|
gokhlayeh@204
|
1546 $INCOMING_REPOSITORY/packages.desc | sort -u); do
|
gokhlayeh@186
|
1547 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
1548 if [ -s $RECEIPT ]; then
|
gokhlayeh@186
|
1549 source_receipt
|
gokhlayeh@186
|
1550 echo -e $PACKAGE"\t "$DEPENDS" \t "$BUILD_DEPENDS' ' >> $dep_db
|
pankso@133
|
1551 fi
|
pascal@99
|
1552 done
|
gokhlayeh@215
|
1553 sort_db
|
gokhlayeh@204
|
1554 report close-bloc
|
pankso@28
|
1555 }
|
pankso@28
|
1556
|
gokhlayeh@204
|
1557 gen_wan_db()
|
pascal@91
|
1558 {
|
gokhlayeh@471
|
1559 rm -f $wan_db
|
gokhlayeh@204
|
1560 for RECEIPT in $(fgrep -l WANTED $WOK/*/receipt); do
|
gokhlayeh@204
|
1561 WANTED=
|
gokhlayeh@204
|
1562 source $RECEIPT
|
gokhlayeh@204
|
1563 [ "$WANTED" ] || continue
|
gokhlayeh@471
|
1564 echo -e $PACKAGE"\t"$WANTED >> $wan_db
|
gokhlayeh@204
|
1565 done
|
pascal@91
|
1566 }
|
pascal@91
|
1567
|
gokhlayeh@215
|
1568 update_wan_db()
|
gokhlayeh@215
|
1569 {
|
slaxemulator@326
|
1570 local PACKAGE=$PACKAGE
|
gokhlayeh@423
|
1571 wanted_list=$(fgrep WANTED=\"$PACKAGE\" $WOK/*/receipt | cut -f1 -d ':')
|
gokhlayeh@423
|
1572 grep $'\t'$PACKAGE $wan_db | cut -f 1 | while read wan; do
|
gokhlayeh@423
|
1573 echo "$wanted_list" | fgrep -q /$wan/receipt && continue
|
gokhlayeh@423
|
1574 sed "/^$wan\t/d" -i $wan_db
|
gokhlayeh@423
|
1575 done
|
gokhlayeh@423
|
1576 for RECEIPT in $wanted_list; do
|
gokhlayeh@470
|
1577 unset WANTED PACKAGE
|
gokhlayeh@215
|
1578 source $RECEIPT
|
gokhlayeh@215
|
1579 [ "$WANTED" ] || continue
|
gokhlayeh@215
|
1580 sed "/^$PACKAGE\t/d" -i $wan_db
|
gokhlayeh@470
|
1581 echo -e $PACKAGE"\t"$WANTED >> $wan_db
|
gokhlayeh@215
|
1582 done
|
gokhlayeh@423
|
1583 unset wanted_list
|
gokhlayeh@215
|
1584 }
|
gokhlayeh@215
|
1585
|
gokhlayeh@204
|
1586 update_dep_db()
|
gokhlayeh@204
|
1587 {
|
gokhlayeh@204
|
1588 sed "/^$PACKAGE\t/d" -i $dep_db
|
gokhlayeh@470
|
1589 echo -e $PACKAGE"\t "$DEPENDS" \t "$BUILD_DEPENDS' ' >> $dep_db
|
pascal@178
|
1590 }
|
pascal@178
|
1591
|
gokhlayeh@186
|
1592 sort_db()
|
pascal@178
|
1593 {
|
gokhlayeh@186
|
1594 report step "Generating cookorder.txt"
|
gokhlayeh@415
|
1595 sed 's/ \t / /' $dep_db | while read PACKAGE BUILD_DEPENDS; do
|
gokhlayeh@186
|
1596 grep -q ^$PACKAGE$'\t' $wan_db && continue
|
gokhlayeh@186
|
1597
|
gokhlayeh@186
|
1598 # Replace each BUILD_DEPENDS with a WANTED package by it's
|
gokhlayeh@186
|
1599 # WANTED package.
|
gokhlayeh@415
|
1600 echo -e $PACKAGE"\t $(echo $BUILD_DEPENDS | use_wanted | \
|
gokhlayeh@415
|
1601 sort -u | sed "/^$PACKAGE$/d" | tr '\n' ' ') "
|
gokhlayeh@186
|
1602 done > $tmp/db
|
gokhlayeh@186
|
1603 while [ -s "$tmp/db" ]; do
|
gokhlayeh@186
|
1604 status=start
|
gokhlayeh@186
|
1605 for pkg in $(cut -f 1 $tmp/db); do
|
gokhlayeh@195
|
1606 if ! fgrep -q ' '$pkg' ' $tmp/db; then
|
gokhlayeh@186
|
1607 echo $pkg >> $tmp/cookorder
|
gokhlayeh@186
|
1608 sed -e "/^$pkg\t/d" -e "s/ $pkg / /g" -i $tmp/db
|
gokhlayeh@186
|
1609 status=proceed
|
gokhlayeh@186
|
1610 fi
|
gokhlayeh@186
|
1611 done
|
gokhlayeh@186
|
1612 if [ "$status" = start ]; then
|
gokhlayeh@186
|
1613 cp -f $tmp/db /tmp/remain-depends.txt
|
paul@430
|
1614 echo "Can't go further because of dependency loop(s). The remaining packages will be commented in the cookorder and will be unbuilt in case of major updates until the problem is solved." >&2
|
gokhlayeh@415
|
1615 for remaining in $(cut -f 1 $tmp/db); do
|
gokhlayeh@415
|
1616 echo "$remaining" >> $blocked
|
gokhlayeh@186
|
1617 done
|
gokhlayeh@186
|
1618 break
|
gokhlayeh@186
|
1619 fi
|
gokhlayeh@186
|
1620 done
|
gokhlayeh@186
|
1621 [ -s $tmp/cookorder ] || touch $tmp/cookorder
|
gokhlayeh@186
|
1622
|
gokhlayeh@186
|
1623 # The toolchain packages are moved in first position.
|
gokhlayeh@186
|
1624 grep $(for pkg in `scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
1625 --look_for=all --with_args`; do echo " -e ^$pkg$"; done) \
|
gokhlayeh@397
|
1626 $tmp/cookorder | tac > $cookorder
|
gokhlayeh@397
|
1627 for pkg in $(cat $cookorder); do
|
gokhlayeh@186
|
1628 sed "/^$pkg$/d" -i $tmp/cookorder
|
gokhlayeh@186
|
1629 done
|
gokhlayeh@186
|
1630
|
gokhlayeh@397
|
1631 tac $tmp/cookorder >> $cookorder
|
gokhlayeh@186
|
1632 report end-step
|
pascal@178
|
1633 }
|
pascal@178
|
1634
|
gokhlayeh@186
|
1635 ########################################################################
|
gokhlayeh@186
|
1636 # SCAN CORE
|
gokhlayeh@186
|
1637 ########################
|
paul@430
|
1638 # Includes various scan core-functions. It's not intended to be used
|
gokhlayeh@186
|
1639 # directly : prefer scan wrappers in next section.
|
gokhlayeh@186
|
1640
|
gokhlayeh@186
|
1641 look_for_dep()
|
gokhlayeh@186
|
1642 {
|
gokhlayeh@410
|
1643 grep -m1 ^$PACKAGE$'\t' $dep_db | cut -f 2
|
gokhlayeh@186
|
1644 }
|
gokhlayeh@186
|
1645
|
gokhlayeh@186
|
1646 look_for_bdep()
|
gokhlayeh@186
|
1647 {
|
gokhlayeh@186
|
1648 look_for_all
|
gokhlayeh@186
|
1649 }
|
gokhlayeh@186
|
1650
|
gokhlayeh@186
|
1651 look_for_all()
|
gokhlayeh@186
|
1652 {
|
gokhlayeh@410
|
1653 grep -m1 ^$PACKAGE$'\t' $dep_db | cut -f 2,3 | sed 's/ / /'
|
gokhlayeh@186
|
1654 }
|
gokhlayeh@186
|
1655
|
gokhlayeh@186
|
1656 look_for_rdep()
|
gokhlayeh@186
|
1657 {
|
gokhlayeh@399
|
1658 fgrep ' '$PACKAGE' ' $dep_db | cut -f 1
|
gokhlayeh@186
|
1659 }
|
gokhlayeh@186
|
1660
|
gokhlayeh@186
|
1661 look_for_rbdep()
|
gokhlayeh@186
|
1662 {
|
gokhlayeh@399
|
1663 fgrep ' '$PACKAGE' ' $dep_db | cut -f 1,3 | fgrep ' '$PACKAGE' ' | cut -f 1
|
gokhlayeh@186
|
1664 }
|
gokhlayeh@186
|
1665
|
gokhlayeh@186
|
1666 # Return WANTED if it exists.
|
gokhlayeh@186
|
1667 look_for_wanted()
|
gokhlayeh@186
|
1668 {
|
gokhlayeh@410
|
1669 grep -m1 ^$PACKAGE$'\t' $wan_db | cut -f 2
|
gokhlayeh@186
|
1670 }
|
gokhlayeh@186
|
1671
|
gokhlayeh@186
|
1672 # Return packages which wants PACKAGE.
|
gokhlayeh@186
|
1673 look_for_rwanted()
|
gokhlayeh@186
|
1674 {
|
gokhlayeh@399
|
1675 grep $'\t'$PACKAGE$ $wan_db | cut -f 1
|
gokhlayeh@186
|
1676 }
|
gokhlayeh@186
|
1677
|
gokhlayeh@186
|
1678 look_for_dev()
|
gokhlayeh@186
|
1679 {
|
gokhlayeh@223
|
1680 WANTED=$(look_for_wanted)
|
gokhlayeh@223
|
1681 if [ "$WANTED" ]; then
|
gokhlayeh@410
|
1682 [ -f "$WOK/$WANTED-dev/receipt" ] && echo $WANTED-dev
|
gokhlayeh@223
|
1683 fi
|
gokhlayeh@410
|
1684 [ -f "$WOK/$PACKAGE-dev/receipt" ] && echo $PACKAGE-dev
|
gokhlayeh@186
|
1685 }
|
gokhlayeh@186
|
1686
|
gokhlayeh@215
|
1687 with_dev()
|
gokhlayeh@215
|
1688 {
|
gokhlayeh@215
|
1689 for PACKAGE in $(cat); do
|
gokhlayeh@215
|
1690 echo $PACKAGE
|
gokhlayeh@215
|
1691 look_for_dev
|
gokhlayeh@215
|
1692 done
|
gokhlayeh@215
|
1693 }
|
gokhlayeh@215
|
1694
|
gokhlayeh@215
|
1695 with_wanted()
|
gokhlayeh@215
|
1696 {
|
gokhlayeh@215
|
1697 for PACKAGE in $(cat); do
|
gokhlayeh@215
|
1698 echo $PACKAGE
|
gokhlayeh@215
|
1699 look_for_wanted
|
gokhlayeh@215
|
1700 done
|
gokhlayeh@215
|
1701 }
|
gokhlayeh@215
|
1702
|
gokhlayeh@215
|
1703 use_wanted()
|
gokhlayeh@215
|
1704 {
|
gokhlayeh@410
|
1705 for input in $(cat); do
|
gokhlayeh@410
|
1706 { grep ^$input$'\t' $wan_db || echo $input
|
gokhlayeh@415
|
1707 }
|
gokhlayeh@415
|
1708 done | sed 's/.*\t//'
|
gokhlayeh@415
|
1709 }
|
gokhlayeh@415
|
1710
|
gokhlayeh@415
|
1711 check_for_pkg_in_wok()
|
gokhlayeh@415
|
1712 {
|
gokhlayeh@415
|
1713 [ -f $WOK/$PACKAGE/receipt ] && return
|
gokhlayeh@415
|
1714 echo "Can't find $PACKAGE in wok or mirror" >&2
|
gokhlayeh@415
|
1715 return 2
|
gokhlayeh@410
|
1716 }
|
gokhlayeh@410
|
1717
|
gokhlayeh@410
|
1718 # Define how theses functions should act when using --undigest.
|
gokhlayeh@410
|
1719 use_undigest_scan_core()
|
gokhlayeh@410
|
1720 {
|
gokhlayeh@410
|
1721 look_for_dep()
|
gokhlayeh@410
|
1722 {
|
gokhlayeh@410
|
1723 if [ -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@410
|
1724 grep -m1 ^$PACKAGE$'\t' $dep_db | cut -f 2
|
gokhlayeh@410
|
1725 else
|
gokhlayeh@410
|
1726 grep -m1 ^$PACKAGE$'\t' $ref_dep_db | cut -f 2
|
gokhlayeh@410
|
1727 fi
|
gokhlayeh@410
|
1728 }
|
gokhlayeh@410
|
1729
|
gokhlayeh@410
|
1730 look_for_all()
|
gokhlayeh@410
|
1731 {
|
gokhlayeh@410
|
1732 if [ -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@410
|
1733 grep -m1 ^$PACKAGE$'\t' $dep_db | cut -f 2,3 | sed 's/ / /'
|
gokhlayeh@410
|
1734 else
|
gokhlayeh@410
|
1735 grep -m1 ^$PACKAGE$'\t' $ref_dep_db | cut -f 2,3 | sed 's/ / /'
|
gokhlayeh@410
|
1736 fi
|
gokhlayeh@410
|
1737 }
|
gokhlayeh@410
|
1738
|
gokhlayeh@410
|
1739 look_for_rdep()
|
gokhlayeh@410
|
1740 {
|
gokhlayeh@410
|
1741 fgrep ' '$PACKAGE' ' $dep_db | cut -f 1
|
gokhlayeh@410
|
1742 for rdep in $(fgrep ' '$PACKAGE' ' $ref_dep_db | cut -f 1); do
|
gokhlayeh@410
|
1743 [ -f "WOK$/$rdep/receipt" ] || echo "$rdep"
|
gokhlayeh@410
|
1744 done
|
gokhlayeh@410
|
1745 }
|
gokhlayeh@410
|
1746
|
gokhlayeh@410
|
1747 look_for_rbdep()
|
gokhlayeh@410
|
1748 {
|
gokhlayeh@410
|
1749 fgrep ' '$PACKAGE' ' $dep_db | cut -f 1,3 | fgrep ' '$PACKAGE' ' | cut -f 1
|
gokhlayeh@410
|
1750 for rdep in $(fgrep ' '$PACKAGE' ' $ref_dep_db | cut -f 1,3 | fgrep ' '$PACKAGE' ' | cut -f 1); do
|
gokhlayeh@410
|
1751 [ -f "WOK$/$rdep/receipt" ] || echo "$rdep"
|
gokhlayeh@410
|
1752 done
|
gokhlayeh@410
|
1753 }
|
gokhlayeh@410
|
1754
|
gokhlayeh@410
|
1755 look_for_wanted()
|
gokhlayeh@410
|
1756 {
|
gokhlayeh@410
|
1757 if [ -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@410
|
1758 grep -m1 ^$PACKAGE$'\t' $wan_db | cut -f 2
|
gokhlayeh@410
|
1759 else
|
gokhlayeh@410
|
1760 grep -m1 ^$PACKAGE$'\t' $ref_wan_db | cut -f 2
|
gokhlayeh@410
|
1761 fi
|
gokhlayeh@410
|
1762 }
|
gokhlayeh@410
|
1763
|
gokhlayeh@410
|
1764 look_for_rwanted()
|
gokhlayeh@410
|
1765 {
|
gokhlayeh@410
|
1766 if [ -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@410
|
1767 grep $'\t'$PACKAGE$ $wan_db | cut -f 1
|
gokhlayeh@410
|
1768 else
|
gokhlayeh@410
|
1769 grep $'\t'$PACKAGE$ $ref_wan_db | cut -f 1
|
gokhlayeh@410
|
1770 fi
|
gokhlayeh@410
|
1771 }
|
gokhlayeh@410
|
1772
|
gokhlayeh@410
|
1773 look_for_dev()
|
gokhlayeh@410
|
1774 {
|
gokhlayeh@410
|
1775 WANTED=$(look_for_wanted)
|
gokhlayeh@410
|
1776 if [ "$WANTED" ]; then
|
gokhlayeh@410
|
1777 if [ -f "$WOK/$WANTED/receipt" ]; then
|
gokhlayeh@410
|
1778 [ -f "$WOK/$WANTED-dev/receipt" ] && echo $WANTED-dev
|
gokhlayeh@410
|
1779 else
|
gokhlayeh@410
|
1780 grep -q ^$WANTED-dev$'\t' $ref_dep_db && echo $WANTED-dev
|
gokhlayeh@410
|
1781 fi
|
gokhlayeh@410
|
1782 fi
|
gokhlayeh@410
|
1783 if [ -f "$WOK/$PACKAGE/receipt" ]; then
|
gokhlayeh@410
|
1784 [ -f "$WOK/$PACKAGE-dev/receipt" ] && echo $PACKAGE-dev
|
gokhlayeh@410
|
1785 else
|
gokhlayeh@410
|
1786 grep -q ^$PACKAGE-dev$'\t' $ref_dep_db && echo $PACKAGE-dev
|
gokhlayeh@410
|
1787 fi
|
gokhlayeh@410
|
1788 }
|
gokhlayeh@415
|
1789
|
gokhlayeh@415
|
1790 check_for_pkg_in_wok()
|
gokhlayeh@415
|
1791 {
|
gokhlayeh@415
|
1792 [ -f $WOK/$PACKAGE/receipt ] && return
|
gokhlayeh@415
|
1793 grep -q ^$PACKAGE'$\t' $ref_dep_db && return 1
|
gokhlayeh@415
|
1794 echo "Can't find $PACKAGE in wok or mirror" >&2
|
gokhlayeh@415
|
1795 return 2
|
gokhlayeh@415
|
1796 }
|
gokhlayeh@215
|
1797 }
|
gokhlayeh@215
|
1798
|
gokhlayeh@186
|
1799 ########################################################################
|
gokhlayeh@186
|
1800 # SCAN
|
gokhlayeh@186
|
1801 ########################
|
gokhlayeh@186
|
1802 # Use wok-wanted.txt and wok-depeds.txt to scan depends.
|
gokhlayeh@186
|
1803 # Option in command line (must be first arg) :
|
gokhlayeh@186
|
1804 # --look_for=bdep/rbdep - Look for depends or reverse depends.
|
gokhlayeh@186
|
1805 # --with_dev - Add development packages (*-dev) in the result.
|
gokhlayeh@186
|
1806 # --with_wanted - Add package+reverse wanted in the result.
|
gokhlayeh@186
|
1807 # --with_args - Include packages in argument in the result.
|
gokhlayeh@186
|
1808
|
gokhlayeh@186
|
1809 scan()
|
gokhlayeh@186
|
1810 {
|
gokhlayeh@186
|
1811 # Get packages in argument.
|
slaxemulator@326
|
1812 local PACKAGE=$PACKAGE WANTED=$WANTED pkg_list=
|
gokhlayeh@186
|
1813 for arg in $@; do
|
gokhlayeh@186
|
1814 [ "$arg" = "${arg#--}" ] || continue
|
gokhlayeh@186
|
1815 pkg_list="$pkg_list $arg"
|
gokhlayeh@186
|
1816 done
|
gokhlayeh@204
|
1817
|
gokhlayeh@186
|
1818 # Get options.
|
gokhlayeh@186
|
1819 [ "$pkg_list" ] || return
|
gokhlayeh@186
|
1820 local cooklist= look_for= with_dev= with_wanted= with_args= log_command="$0 $@" \
|
gokhlayeh@215
|
1821 get_options_list="look_for with_dev with_wanted with_args cooklist use_wanted"
|
gokhlayeh@186
|
1822 get_options
|
gokhlayeh@470
|
1823
|
gokhlayeh@470
|
1824 # Get db md5 to be able to check for changes latter.
|
gokhlayeh@470
|
1825 db_md5=$(md5sum $dep_db $wan_db)
|
gokhlayeh@186
|
1826
|
gokhlayeh@186
|
1827 # Cooklist is a special case where we need to modify a little
|
gokhlayeh@186
|
1828 # scan behavior
|
gokhlayeh@186
|
1829 if [ "$cooklist" ]; then
|
gokhlayeh@204
|
1830 gen_wan_db
|
gokhlayeh@204
|
1831 look_for=all && with_args=yes && with_dev= && with_wanted=
|
gokhlayeh@204
|
1832 filter=use_wanted
|
gokhlayeh@241
|
1833 if [ "$COMMAND" = gen-cooklist ]; then
|
gokhlayeh@241
|
1834 for PACKAGE in $pkg_list; do
|
gokhlayeh@241
|
1835 grep -q ^$PACKAGE$'\t' $dep_db && continue
|
gokhlayeh@241
|
1836 [ -d "$WOK/$p" ] || continue
|
gokhlayeh@241
|
1837 check_for_missing
|
gokhlayeh@241
|
1838 done
|
gokhlayeh@241
|
1839 append_to_dep()
|
gokhlayeh@241
|
1840 {
|
gokhlayeh@415
|
1841 if grep -q ^$PACKAGE$'\t' $dep_db; then
|
gokhlayeh@415
|
1842 echo $PACKAGE >> $tmp/dep
|
gokhlayeh@415
|
1843 else
|
gokhlayeh@241
|
1844 check_for_missing && echo $PACKAGE >> $tmp/dep
|
gokhlayeh@241
|
1845 fi
|
gokhlayeh@241
|
1846 }
|
gokhlayeh@241
|
1847 else
|
gokhlayeh@241
|
1848 append_to_dep()
|
gokhlayeh@241
|
1849 {
|
gokhlayeh@241
|
1850 check_for_commit && echo $PACKAGE >> $tmp/dep
|
gokhlayeh@241
|
1851 }
|
gokhlayeh@241
|
1852 fi
|
gokhlayeh@204
|
1853 else
|
gokhlayeh@204
|
1854 append_to_dep()
|
gokhlayeh@204
|
1855 {
|
gokhlayeh@204
|
1856 echo $PACKAGE >> $tmp/dep
|
gokhlayeh@204
|
1857 }
|
gokhlayeh@240
|
1858 # If requested packages are not in dep_db, partial generation of this db is needed.
|
gokhlayeh@241
|
1859 for PACKAGE in $pkg_list; do
|
gokhlayeh@241
|
1860 grep -q ^$PACKAGE$'\t' $dep_db && continue
|
gokhlayeh@240
|
1861 [ -d "$WOK/$p" ] || continue
|
gokhlayeh@240
|
1862 plan_check_for_missing=yes
|
gokhlayeh@240
|
1863 check_for_missing
|
gokhlayeh@240
|
1864 done
|
gokhlayeh@240
|
1865 if [ "$plan_check_for_missing" ]; then
|
gokhlayeh@240
|
1866 append_to_dep()
|
gokhlayeh@240
|
1867 {
|
gokhlayeh@415
|
1868 if grep -q ^$PACKAGE$'\t' $dep_db; then
|
gokhlayeh@415
|
1869 echo $PACKAGE >> $tmp/dep
|
gokhlayeh@415
|
1870 else
|
gokhlayeh@240
|
1871 check_for_missing && echo $PACKAGE >> $tmp/dep
|
gokhlayeh@240
|
1872 fi
|
gokhlayeh@240
|
1873 }
|
gokhlayeh@240
|
1874 unset plan_check_for_missing
|
gokhlayeh@240
|
1875 fi
|
gokhlayeh@186
|
1876 fi
|
gokhlayeh@215
|
1877
|
gokhlayeh@204
|
1878 [ "$with_dev" ] && filter=with_dev
|
gokhlayeh@204
|
1879 [ "$with_wanted" ] && filter=with_wanted
|
gokhlayeh@204
|
1880 if [ "$filter" ]; then
|
gokhlayeh@291
|
1881 pkg_list=$(echo $pkg_list | $filter | sort -u)
|
gokhlayeh@204
|
1882 scan_pkg()
|
gokhlayeh@204
|
1883 {
|
gokhlayeh@204
|
1884 look_for_$look_for | $filter
|
gokhlayeh@204
|
1885 }
|
gokhlayeh@204
|
1886 else
|
gokhlayeh@204
|
1887 scan_pkg()
|
gokhlayeh@204
|
1888 {
|
gokhlayeh@204
|
1889 look_for_$look_for
|
gokhlayeh@204
|
1890 }
|
gokhlayeh@204
|
1891 fi
|
gokhlayeh@215
|
1892 touch $tmp/dep
|
gokhlayeh@204
|
1893 for PACKAGE in $pkg_list; do
|
gokhlayeh@204
|
1894 [ "$with_args" ] && append_to_dep
|
gokhlayeh@204
|
1895 scan_pkg
|
gokhlayeh@186
|
1896 done | tr ' ' '\n' | sort -u > $tmp/list
|
gokhlayeh@186
|
1897 [ "$look_for" = bdep ] && look_for=dep
|
gokhlayeh@186
|
1898 while [ -s $tmp/list ]; do
|
gokhlayeh@186
|
1899 PACKAGE=$(sed 1!d $tmp/list)
|
gokhlayeh@186
|
1900 sed 1d -i $tmp/list
|
gokhlayeh@204
|
1901 append_to_dep
|
gokhlayeh@204
|
1902 for pkg in $(scan_pkg); do
|
gokhlayeh@415
|
1903 grep -q ^$pkg$ $tmp/list $tmp/dep || echo $pkg >> $tmp/list
|
gokhlayeh@186
|
1904 done
|
gokhlayeh@186
|
1905 done
|
gokhlayeh@204
|
1906 if [ "$cooklist" ]; then
|
gokhlayeh@204
|
1907 mv $tmp/dep $tmp/cooklist
|
gokhlayeh@215
|
1908 else
|
gokhlayeh@204
|
1909 cat $tmp/dep | sort -u
|
gokhlayeh@186
|
1910 fi
|
gokhlayeh@204
|
1911 rm -f $tmp/dep $tmp/list
|
gokhlayeh@475
|
1912 sort -o $dep_db $dep_db
|
gokhlayeh@475
|
1913 sort -o $wan_db $wan_db
|
gokhlayeh@470
|
1914 if [ "$db_md5" != "$(md5sum $dep_db $wan_db)" ]; then
|
gokhlayeh@472
|
1915 grep -q "^#" $cookorder || sed 1i"#PlanSort" -i $cookorder
|
gokhlayeh@240
|
1916 fi
|
gokhlayeh@186
|
1917 }
|
gokhlayeh@186
|
1918
|
gokhlayeh@186
|
1919 ########################################################################
|
paul@430
|
1920 # This section contains functions to check the package repository and
|
gokhlayeh@186
|
1921 # find which packages to cook.
|
gokhlayeh@186
|
1922 ########################
|
gokhlayeh@186
|
1923
|
gokhlayeh@240
|
1924 check_for_missing()
|
gokhlayeh@240
|
1925 {
|
slaxemulator@326
|
1926 local PACKAGE=$PACKAGE
|
gokhlayeh@240
|
1927 if ! check_for_pkg_in_wok; then
|
gokhlayeh@240
|
1928 [ "$?" = 2 ] && return 1
|
gokhlayeh@240
|
1929 return
|
gokhlayeh@240
|
1930 fi
|
gokhlayeh@241
|
1931 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@240
|
1932 source_receipt
|
gokhlayeh@240
|
1933 PACKAGE=${WANTED:-$PACKAGE}
|
gokhlayeh@240
|
1934 update_wan_db
|
gokhlayeh@240
|
1935 for PACKAGE in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@240
|
1936 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@240
|
1937 source_receipt
|
gokhlayeh@240
|
1938 update_dep_db
|
gokhlayeh@240
|
1939 done
|
gokhlayeh@240
|
1940 }
|
gokhlayeh@240
|
1941
|
gokhlayeh@186
|
1942 check_for_commit()
|
gokhlayeh@186
|
1943 {
|
gokhlayeh@204
|
1944 if ! check_for_pkg_in_wok; then
|
gokhlayeh@204
|
1945 [ "$?" = 2 ] && return 1
|
gokhlayeh@204
|
1946 return
|
gokhlayeh@204
|
1947 fi
|
gokhlayeh@204
|
1948 for PACKAGE in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@204
|
1949 RECEIPT=$WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
1950 source_receipt
|
gokhlayeh@204
|
1951
|
gokhlayeh@186
|
1952 # We use md5 of cooking stuff in the packaged receipt to check
|
gokhlayeh@186
|
1953 # commit. We look consecutively in 3 different locations :
|
gokhlayeh@204
|
1954 # - in the wok/PACKAGE/taz/* folder
|
gokhlayeh@186
|
1955 # - in the receipt in the package in incoming repository
|
gokhlayeh@186
|
1956 # - in the receipt in the package in packages repository
|
paul@430
|
1957 # If md5sums match, there's no commit.
|
gokhlayeh@186
|
1958 check_for_commit_using_md5sum()
|
gokhlayeh@186
|
1959 {
|
gokhlayeh@186
|
1960 if [ ! -f $WOK/$PACKAGE/md5 ]; then
|
gokhlayeh@186
|
1961 sed -n '/# md5sum of cooking stuff :/,$p' receipt | \
|
gokhlayeh@186
|
1962 sed -e 1d -e 's/^# //' > $WOK/$PACKAGE/md5
|
gokhlayeh@186
|
1963 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1964 fi
|
gokhlayeh@204
|
1965
|
gokhlayeh@186
|
1966 if [ -s md5 ]; then
|
gokhlayeh@186
|
1967 if md5sum -cs md5; then
|
gokhlayeh@204
|
1968
|
gokhlayeh@204
|
1969 # If md5sum check if ok, check for new/missing files in
|
gokhlayeh@204
|
1970 # cooking stuff.
|
gokhlayeh@204
|
1971 for file in $([ -f receipt ] && echo receipt; \
|
gokhlayeh@204
|
1972 [ -f description.txt ] && echo description.txt; \
|
gokhlayeh@204
|
1973 [ -d stuff ] && find stuff); do
|
gokhlayeh@204
|
1974 if ! fgrep -q " $file" md5; then
|
gokhlayeh@186
|
1975 set_commited
|
gokhlayeh@186
|
1976 fi
|
gokhlayeh@186
|
1977 done
|
gokhlayeh@186
|
1978 else
|
gokhlayeh@186
|
1979 set_commited
|
gokhlayeh@186
|
1980 fi
|
gokhlayeh@186
|
1981 else
|
gokhlayeh@204
|
1982 set_commited
|
gokhlayeh@186
|
1983 fi
|
gokhlayeh@186
|
1984 }
|
gokhlayeh@186
|
1985 set_commited()
|
gokhlayeh@186
|
1986 {
|
gokhlayeh@405
|
1987 grep -q ^$PACKAGE$ $commit || echo $PACKAGE >> $commit
|
gokhlayeh@186
|
1988 gen_cookmd5
|
gokhlayeh@204
|
1989 update_dep_db
|
gokhlayeh@186
|
1990 }
|
gokhlayeh@195
|
1991 taz_dir=$(echo $WOK/$PACKAGE/taz/$PACKAGE-* | fgrep -v '*')
|
gokhlayeh@186
|
1992 if [ -f $WOK/$PACKAGE/md5 ]; then
|
gokhlayeh@186
|
1993 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
1994 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1995 elif [ "$taz_dir" ]; then
|
gokhlayeh@186
|
1996 cd $taz_dir
|
gokhlayeh@186
|
1997 check_for_commit_using_md5sum
|
gokhlayeh@186
|
1998 else
|
gokhlayeh@195
|
1999 pkg=$(echo $INCOMING_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | fgrep -v '*')
|
gokhlayeh@195
|
2000 [ "$pkg" ] || pkg=$(echo $PACKAGES_REPOSITORY/$PACKAGE-$VERSION*.tazpkg | fgrep -v '*')
|
gokhlayeh@186
|
2001 if [ "$pkg" ]; then
|
gokhlayeh@186
|
2002 get_pkg_files $pkg
|
gokhlayeh@186
|
2003 check_for_commit_using_md5sum
|
gokhlayeh@186
|
2004 rm -r $pkg_files_dir
|
gokhlayeh@204
|
2005 else
|
gokhlayeh@204
|
2006 set_commited
|
gokhlayeh@186
|
2007 fi
|
gokhlayeh@186
|
2008 fi
|
gokhlayeh@204
|
2009 [ "$forced" ] || echo $PACKAGE >> $tmp/checked
|
gokhlayeh@186
|
2010 done
|
gokhlayeh@204
|
2011 return
|
gokhlayeh@186
|
2012 }
|
gokhlayeh@186
|
2013
|
gokhlayeh@186
|
2014 gen_cook_list()
|
gokhlayeh@186
|
2015 {
|
gokhlayeh@204
|
2016 report step "Scanning wok"
|
gokhlayeh@204
|
2017 if [ "$pkg" ]; then
|
gokhlayeh@204
|
2018 scan $pkg --cooklist
|
gokhlayeh@405
|
2019 elif [ "$LIST" ]; then
|
gokhlayeh@405
|
2020 scan `cat $LIST` --cooklist
|
gokhlayeh@204
|
2021 else
|
gokhlayeh@204
|
2022 scan `cat $cooklist` --cooklist
|
gokhlayeh@204
|
2023 fi
|
gokhlayeh@204
|
2024 report end-step
|
gokhlayeh@209
|
2025
|
gokhlayeh@209
|
2026 [ -s $tmp/checked ] || [ -s $tmp/cooklist ] || return
|
gokhlayeh@209
|
2027
|
gokhlayeh@209
|
2028 # Core toolchain should not be cooked unless cook-toolchain is used.
|
gokhlayeh@209
|
2029 if ! [ -f /etc/config.site.tmptoolchain ] ; then
|
gokhlayeh@209
|
2030 for PACKAGE in $(scan gcc --look_for=all --with_args --with_wanted); do
|
gokhlayeh@405
|
2031 grep -q ^$PACKAGE$ $blocked || echo $PACKAGE >> $blocked
|
gokhlayeh@209
|
2032 done
|
gokhlayeh@209
|
2033 fi
|
gokhlayeh@313
|
2034
|
gokhlayeh@405
|
2035 if [ -s $commit ] && [ "$COMMAND" != gen-cooklist ]; then
|
gokhlayeh@405
|
2036 for PACKAGE in $(cat $commit); do
|
gokhlayeh@186
|
2037 WANTED="$(look_for_wanted)"
|
gokhlayeh@186
|
2038 if [ "$WANTED" ]; then
|
gokhlayeh@405
|
2039 grep -q ^$WANTED$ $broken $cooklist $blocked $commit && continue
|
gokhlayeh@186
|
2040 fi
|
gokhlayeh@405
|
2041 grep -q ^$PACKAGE$ $blocked $cooklist && continue
|
gokhlayeh@405
|
2042 echo $PACKAGE >> $cooklist
|
gokhlayeh@186
|
2043 done
|
gokhlayeh@186
|
2044 fi
|
gokhlayeh@186
|
2045 sort_cooklist
|
gokhlayeh@186
|
2046 }
|
gokhlayeh@186
|
2047
|
gokhlayeh@186
|
2048 sort_cooklist()
|
gokhlayeh@186
|
2049 {
|
gokhlayeh@397
|
2050 if [ "$(sed 1!d $cookorder)" = "#PlanSort" ]; then
|
gokhlayeh@397
|
2051 sed 1d -i $cookorder
|
gokhlayeh@470
|
2052 sort_db
|
gokhlayeh@266
|
2053 fi
|
gokhlayeh@313
|
2054 report step "Generating cooklist"
|
gokhlayeh@204
|
2055 if [ -f "$tmp/checked" ]; then
|
gokhlayeh@204
|
2056 rm -f $tmp/cooklist
|
gokhlayeh@204
|
2057 cat $tmp/checked | while read PACKAGE; do
|
gokhlayeh@405
|
2058 grep -q ^$PACKAGE$ $cooklist && echo $PACKAGE >> $tmp/cooklist
|
gokhlayeh@204
|
2059 done
|
gokhlayeh@209
|
2060 elif ! [ "$COMMAND" = gen-cooklist ]; then
|
gokhlayeh@405
|
2061 cat $blocked | while read PACKAGE; do
|
gokhlayeh@209
|
2062 sed "/^$PACKAGE/d" -i $tmp/cooklist
|
gokhlayeh@209
|
2063 done
|
gokhlayeh@204
|
2064 fi
|
gokhlayeh@313
|
2065 report end-step
|
gokhlayeh@313
|
2066 [ -s $tmp/cooklist ] || return
|
gokhlayeh@215
|
2067
|
gokhlayeh@313
|
2068 report step "Sorting cooklist"
|
gokhlayeh@204
|
2069 for PACKAGE in $(cat $tmp/cooklist); do
|
gokhlayeh@204
|
2070 WANTED="$(look_for_wanted)"
|
gokhlayeh@204
|
2071 [ "$WANTED" ] || continue
|
gokhlayeh@405
|
2072 if grep -q ^$WANTED$ $broken $tmp/cooklist; then
|
gokhlayeh@186
|
2073 sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@204
|
2074 elif [ ! -d $WOK/$WANTED/install ]; then
|
gokhlayeh@204
|
2075 sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@204
|
2076 echo $WANTED >> $tmp/cooklist
|
gokhlayeh@186
|
2077 fi
|
gokhlayeh@186
|
2078 done
|
gokhlayeh@186
|
2079
|
gokhlayeh@204
|
2080 # Use cookorder.txt to sort cooklist.
|
gokhlayeh@204
|
2081 if [ -s $tmp/cooklist ]; then
|
gokhlayeh@397
|
2082 cat $cookorder | while read PACKAGE; do
|
gokhlayeh@204
|
2083 if grep -q ^$PACKAGE$ $tmp/cooklist; then
|
gokhlayeh@204
|
2084 sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@204
|
2085 echo $PACKAGE >> $tmp/cooklist.tmp
|
gokhlayeh@204
|
2086 fi
|
gokhlayeh@204
|
2087 done
|
gokhlayeh@204
|
2088
|
paul@430
|
2089 # Remaining packages in cooklist are those without compile_rules.
|
gokhlayeh@204
|
2090 # They can be cooked first in any order.
|
gokhlayeh@204
|
2091 if [ -f $tmp/cooklist.tmp ]; then
|
gokhlayeh@204
|
2092 cat $tmp/cooklist.tmp >> $tmp/cooklist
|
gokhlayeh@204
|
2093 rm $tmp/cooklist.tmp
|
gokhlayeh@204
|
2094 fi
|
gokhlayeh@204
|
2095
|
gokhlayeh@204
|
2096 cat $tmp/cooklist
|
gokhlayeh@405
|
2097 [ "$LIST" ] || cat $tmp/cooklist > $cooklist
|
gokhlayeh@204
|
2098 fi
|
gokhlayeh@204
|
2099
|
gokhlayeh@186
|
2100 report end-step
|
gokhlayeh@186
|
2101 }
|
gokhlayeh@186
|
2102
|
gokhlayeh@284
|
2103 look_for_missing_pkg()
|
gokhlayeh@284
|
2104 {
|
gokhlayeh@284
|
2105 for pkg in $(cat $PACKAGES_REPOSITORY/$1); do
|
gokhlayeh@284
|
2106 grep -q ^$pkg$ $INCOMING_REPOSITORY/packages.txt \
|
gokhlayeh@284
|
2107 $PACKAGES_REPOSITORY/packages.txt || \
|
gokhlayeh@284
|
2108 continue
|
gokhlayeh@284
|
2109 echo $pkg
|
gokhlayeh@284
|
2110 done
|
gokhlayeh@284
|
2111 }
|
gokhlayeh@284
|
2112
|
gokhlayeh@186
|
2113 check_for_incoming()
|
gokhlayeh@186
|
2114 {
|
paul@430
|
2115 report step "Checking that all packages were cooked OK"
|
gokhlayeh@204
|
2116 [ -s $INCOMING_REPOSITORY/packages.desc ] || {
|
gokhlayeh@204
|
2117 echo "No packages in $INCOMING_REPOSITORY."
|
gokhlayeh@307
|
2118 report end-step; return; }
|
gokhlayeh@405
|
2119 if [ -s $broken ]; then
|
gokhlayeh@290
|
2120 missingpkg=$(look_for_missing_pkg broken)
|
gokhlayeh@290
|
2121 if [ "$missingpkg" ]; then
|
paul@430
|
2122 echo "Don't move incoming packages to main repository because these ones are broken:" >&2
|
gokhlayeh@290
|
2123 echo "$missingpkg"
|
gokhlayeh@307
|
2124 report end-step
|
gokhlayeh@307
|
2125 return 1
|
gokhlayeh@290
|
2126 fi
|
gokhlayeh@186
|
2127 fi
|
gokhlayeh@405
|
2128 if [ -s $cooklist ]; then
|
gokhlayeh@290
|
2129 missingpkg=$(look_for_missing_pkg cooklist)
|
gokhlayeh@290
|
2130 if [ "$missingpkg" ]; then
|
paul@430
|
2131 echo "Don't move incoming packages to main repository because these ones need to be cooked:" >&2
|
gokhlayeh@290
|
2132 echo "$missingpkg"
|
gokhlayeh@307
|
2133 report end-step
|
gokhlayeh@307
|
2134 return 1
|
gokhlayeh@290
|
2135 fi
|
gokhlayeh@204
|
2136 fi
|
gokhlayeh@306
|
2137 incoming_pkgs="$(cut -f 1 -d '|' $INCOMING_REPOSITORY/packages.desc)"
|
gokhlayeh@214
|
2138 if ! [ "$forced" ]; then
|
gokhlayeh@214
|
2139 cooklist=$PACKAGES_REPOSITORY/cooklist
|
gokhlayeh@313
|
2140 pkg="$incoming_pkgs"
|
gokhlayeh@214
|
2141 gen_cook_list
|
gokhlayeh@405
|
2142 if [ -s $cooklist ]; then
|
gokhlayeh@290
|
2143 missingpkg=$(look_for_missing_pkg cooklist)
|
gokhlayeh@290
|
2144 if [ "$missingpkg" ]; then
|
paul@430
|
2145 echo "Don't move incoming packages to main repository because these ones need to be cooked:" >&2
|
gokhlayeh@290
|
2146 echo "$missingpkg"
|
gokhlayeh@307
|
2147 report end-step
|
gokhlayeh@307
|
2148 return 1
|
gokhlayeh@290
|
2149 fi
|
gokhlayeh@214
|
2150 fi
|
gokhlayeh@204
|
2151 fi
|
gokhlayeh@313
|
2152
|
gokhlayeh@204
|
2153 report step "Moving incoming packages to main repository"
|
gokhlayeh@449
|
2154 [ "save_wok" ] && mkdir -p $PACKAGES_REPOSITORY/wok
|
gokhlayeh@204
|
2155 unset EXTRAVERSION
|
gokhlayeh@306
|
2156 for PACKAGE in $incoming_pkgs; do
|
gokhlayeh@186
|
2157 prev_VERSION=$(get_pkg_version $PACKAGES_REPOSITORY)
|
gokhlayeh@204
|
2158 VERSION=$(get_pkg_version $INCOMING_REPOSITORY)
|
gokhlayeh@186
|
2159 remove_previous_package $PACKAGES_REPOSITORY
|
gokhlayeh@204
|
2160 echo "Moving $PACKAGE..."
|
gokhlayeh@204
|
2161 mv -f $INCOMING_REPOSITORY/$PACKAGE-$VERSION.tazpkg $PACKAGES_REPOSITORY
|
gokhlayeh@204
|
2162 touch $PACKAGES_REPOSITORY/$PACKAGE-$VERSION.tazpkg
|
gokhlayeh@415
|
2163 previous_tarball=$(grep -m1 ^$PACKAGE:main $SOURCES_REPOSITORY/sources.list | cut -f2)
|
gokhlayeh@266
|
2164 sed -e "/^$PACKAGE:main/d" \
|
slaxemulator@275
|
2165 -e "s/^$PACKAGE:incoming/$PACKAGE:main/" \
|
gokhlayeh@266
|
2166 -i $SOURCES_REPOSITORY/sources.list
|
gokhlayeh@266
|
2167 if [ "$previous_tarball" ]; then
|
gokhlayeh@266
|
2168 grep -q $'\t'$previous_tarball$ $SOURCES_REPOSITORY/sources.list || \
|
gokhlayeh@266
|
2169 rm -f $SOURCES_REPOSITORY/$previous_tarball
|
gokhlayeh@266
|
2170 fi
|
gokhlayeh@479
|
2171 [ "$save_wok" ] && mv $INCOMING_REPOSITORY/wok/$PACKAGE $PACKAGES_REPOSITORY/wok
|
gokhlayeh@204
|
2172 done
|
gokhlayeh@401
|
2173
|
gokhlayeh@449
|
2174 if [ "$save_wok" = tarball ]; then
|
gokhlayeh@415
|
2175 rm -f $PACKAGES_REPOSITORY/wok.tar.lzma
|
gokhlayeh@401
|
2176 cd $PACKAGES_REPOSITORY/wok
|
gokhlayeh@401
|
2177 report step "Generating safe-wok tarball"
|
gokhlayeh@479
|
2178 tar -c * | lzma e -si $PACKAGES_REPOSITORY/wok.tar.lzma
|
gokhlayeh@401
|
2179 report end-step
|
gokhlayeh@401
|
2180 fi
|
gokhlayeh@401
|
2181
|
gokhlayeh@204
|
2182 for file in packages.list packages.equiv packages.md5 packages.desc \
|
gokhlayeh@204
|
2183 packages.txt; do
|
gokhlayeh@204
|
2184 echo -n "" > $INCOMING_REPOSITORY/$file
|
gokhlayeh@204
|
2185 done
|
gokhlayeh@204
|
2186 rm -r $INCOMING_REPOSITORY/files.list.lzma
|
gokhlayeh@186
|
2187 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@313
|
2188
|
gokhlayeh@313
|
2189 report step "Updating flavors"
|
gokhlayeh@313
|
2190 if [ -x /usr/bin/tazlito ] || [ -x /usr/bin/clean-chroot ]; then
|
gokhlayeh@313
|
2191 if ! [ -x /usr/bin/tazlito ]; then
|
gokhlayeh@313
|
2192 tazpkg get-install tazlito
|
gokhlayeh@313
|
2193 fi
|
gokhlayeh@313
|
2194
|
gokhlayeh@313
|
2195 # Handle cases where tazwok is used into main system;
|
gokhlayeh@313
|
2196 # Handle cases where SLITAZ_DIR is not /home/slitaz.
|
gokhlayeh@313
|
2197 [ -L /home/slitaz/flavors ] && rm /home/slitaz/flavors
|
gokhlayeh@313
|
2198 mkdir -p /home/slitaz
|
gokhlayeh@313
|
2199 ln -s $LOCAL_REPOSITORY/flavors /home/slitaz/flavors
|
gokhlayeh@313
|
2200
|
gokhlayeh@313
|
2201 cd $LOCAL_REPOSITORY/packages
|
gokhlayeh@313
|
2202 for i in $LOCAL_REPOSITORY/flavors/*; do
|
gokhlayeh@331
|
2203 [ -d "$i" ] || continue
|
gokhlayeh@313
|
2204 tazlito pack-flavor ${i##*/}
|
gokhlayeh@313
|
2205 done
|
gokhlayeh@313
|
2206
|
gokhlayeh@313
|
2207 noheader=""
|
gokhlayeh@313
|
2208 for i in *.flavor; do
|
gokhlayeh@313
|
2209 tazlito show-flavor $i --brief $noheader
|
gokhlayeh@313
|
2210 noheader="--noheader"
|
gokhlayeh@313
|
2211 done > flavors.list
|
gokhlayeh@313
|
2212 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@313
|
2213 else
|
paul@430
|
2214 echo "Can't create up-to-date flavors because the tazlito package is missing." >&2
|
gokhlayeh@313
|
2215 fi
|
gokhlayeh@313
|
2216 report end-step
|
gokhlayeh@186
|
2217 }
|
gokhlayeh@186
|
2218
|
gokhlayeh@449
|
2219 # Usage: move_cooking_stuff source receipt destination
|
gokhlayeh@449
|
2220 # Make the argument check before calling it!
|
gokhlayeh@449
|
2221 copy_cooking_stuff()
|
gokhlayeh@449
|
2222 {
|
gokhlayeh@449
|
2223 rm -rf $3/$2
|
gokhlayeh@449
|
2224 mkdir -p $3/$2
|
gokhlayeh@449
|
2225 cp -a $1/$2/receipt $3/$2
|
gokhlayeh@449
|
2226 [ -f $1/$2/description.txt ] && \
|
gokhlayeh@449
|
2227 cp -a $1/$2/description.txt $3/$2
|
gokhlayeh@449
|
2228 if [ -d "$1/$2/stuff" ]; then
|
gokhlayeh@449
|
2229 cp -a $1/$2/stuff $3/$2
|
gokhlayeh@449
|
2230 fi
|
gokhlayeh@449
|
2231 }
|
gokhlayeh@449
|
2232
|
gokhlayeh@186
|
2233 ########################################################################
|
gokhlayeh@186
|
2234 # TAZWOK MAIN FUNCTIONS
|
gokhlayeh@186
|
2235 ########################
|
gokhlayeh@186
|
2236
|
gokhlayeh@186
|
2237 clean()
|
gokhlayeh@186
|
2238 {
|
gokhlayeh@186
|
2239 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
2240 ls -A $WOK/$PACKAGE | grep -q -v -e ^receipt$ -e ^description.txt$ \
|
gokhlayeh@186
|
2241 -e ^stuff$ || return
|
gokhlayeh@186
|
2242
|
gokhlayeh@249
|
2243 [ "$COMMAND" = clean-wok ] || report step "Cleaning $PACKAGE"
|
gokhlayeh@186
|
2244 # Check for clean_wok function.
|
gokhlayeh@186
|
2245 if grep -q ^clean_wok $RECEIPT; then
|
gokhlayeh@186
|
2246 clean_wok
|
gokhlayeh@186
|
2247 fi
|
gokhlayeh@415
|
2248 # Clean should only have a receipt, stuff and optionals desc/md5.
|
gokhlayeh@186
|
2249 for f in `ls .`
|
gokhlayeh@186
|
2250 do
|
gokhlayeh@186
|
2251 case $f in
|
gokhlayeh@250
|
2252 receipt|stuff|description.txt|md5)
|
gokhlayeh@186
|
2253 continue ;;
|
gokhlayeh@186
|
2254 *)
|
gokhlayeh@263
|
2255 rm -rf $f ;;
|
gokhlayeh@186
|
2256 esac
|
gokhlayeh@186
|
2257 done
|
gokhlayeh@262
|
2258 [ "$COMMAND" != clean-wok ] && report end-step
|
gokhlayeh@186
|
2259 }
|
gokhlayeh@186
|
2260
|
gokhlayeh@186
|
2261 # Configure and make a package with the receipt.
|
gokhlayeh@186
|
2262 compile_package()
|
gokhlayeh@186
|
2263 {
|
gokhlayeh@186
|
2264 check_for_package_on_cmdline
|
gokhlayeh@186
|
2265
|
gokhlayeh@186
|
2266 # Include the receipt to get all needed variables and functions
|
gokhlayeh@186
|
2267 # and cd into the work directory to start the work.
|
gokhlayeh@186
|
2268 check_for_receipt
|
gokhlayeh@186
|
2269 source_receipt
|
gokhlayeh@186
|
2270
|
gokhlayeh@186
|
2271 # Log the package name and date.
|
gokhlayeh@186
|
2272 echo "date `date +%Y%m%d\ \%H:%M:%S`" >> $LOG
|
gokhlayeh@186
|
2273 echo "package $PACKAGE (compile)" >> $LOG
|
gokhlayeh@186
|
2274
|
gokhlayeh@186
|
2275 # Set wanted $src variable to help compiling.
|
gokhlayeh@186
|
2276 [ ! "$src" ] && set_src_path
|
gokhlayeh@186
|
2277 check_for_build_depends || return 1
|
gokhlayeh@186
|
2278 check_for_wanted
|
gokhlayeh@186
|
2279 unset target
|
gokhlayeh@186
|
2280 check_for_tarball && check_for_compile_rules
|
gokhlayeh@186
|
2281 }
|
gokhlayeh@186
|
2282
|
gokhlayeh@186
|
2283 # Cook command also include all features to manage lists which keep
|
gokhlayeh@186
|
2284 # track of wok/packages state.
|
gokhlayeh@186
|
2285 cook()
|
gokhlayeh@186
|
2286 {
|
gokhlayeh@186
|
2287 cook_code=
|
gokhlayeh@186
|
2288 set_common_path
|
gokhlayeh@186
|
2289 check_for_receipt
|
gokhlayeh@186
|
2290 source_receipt
|
gokhlayeh@186
|
2291
|
gokhlayeh@186
|
2292 # Define log path and start report.
|
gokhlayeh@415
|
2293 for i in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@415
|
2294 rm -f $LOCAL_REPOSITORY/log/$i.html
|
gokhlayeh@415
|
2295 done
|
gokhlayeh@186
|
2296 report sublog $LOCAL_REPOSITORY/log/$PACKAGE.html
|
pascal@349
|
2297 echo "$PACKAGE" > $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
2298 report step "Cooking $PACKAGE"
|
gokhlayeh@186
|
2299 report open-bloc
|
gokhlayeh@186
|
2300
|
gokhlayeh@186
|
2301 clean $PACKAGE
|
gokhlayeh@186
|
2302 [ -s $tmp/cooklist ] && sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@381
|
2303
|
gokhlayeh@186
|
2304 if compile_package; then
|
gokhlayeh@215
|
2305 remove_src
|
gokhlayeh@186
|
2306 refresh_packages_from_compile
|
gokhlayeh@186
|
2307 gen_package
|
gokhlayeh@186
|
2308
|
gokhlayeh@186
|
2309 # Update packages-incoming repository.
|
gokhlayeh@186
|
2310 store_pkgname=$PACKAGE
|
gokhlayeh@186
|
2311 pkg_repository=$INCOMING_REPOSITORY
|
gokhlayeh@186
|
2312 update_packages_db
|
gokhlayeh@186
|
2313
|
gokhlayeh@186
|
2314 PACKAGE=$store_pkgname
|
gokhlayeh@186
|
2315 unset store_pkgname
|
gokhlayeh@186
|
2316
|
gokhlayeh@186
|
2317 # Upgrade to cooked packages if it was previously installed.
|
paul@430
|
2318 report step "Looking for package(s) to upgrade"
|
gokhlayeh@186
|
2319 for pkg in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@415
|
2320 if [ -f $INSTALLED/$pkg/receipt ]; then
|
gokhlayeh@186
|
2321 tazpkg get-install $pkg --forced
|
gokhlayeh@186
|
2322 fi
|
gokhlayeh@186
|
2323 done
|
gokhlayeh@186
|
2324 report end-step
|
gokhlayeh@186
|
2325 else
|
gokhlayeh@381
|
2326 set_pkg_broken
|
gokhlayeh@186
|
2327 cook_code=1
|
gokhlayeh@186
|
2328 fi
|
gokhlayeh@186
|
2329
|
gokhlayeh@186
|
2330 # Remove build_depends in cook mode (if in cooklist, it's done when
|
gokhlayeh@186
|
2331 # checking build_depends of next package and we remove only unneeded
|
gokhlayeh@186
|
2332 # packages to keep chroot minimal and gain some time).
|
gokhlayeh@210
|
2333 if [ "$COMMAND" = cook ]; then
|
gokhlayeh@210
|
2334 remove_build_depends $MISSING_PACKAGE
|
gokhlayeh@210
|
2335 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@210
|
2336 fi
|
gokhlayeh@210
|
2337
|
gokhlayeh@186
|
2338 # Regen the cooklist if it was planned and command is not cook.
|
gokhlayeh@405
|
2339 [ "$regen_cooklist" ] && unset regen_cooklist &&
|
gokhlayeh@405
|
2340 [ "$COMMAND" != cook ] && sort_cooklist
|
gokhlayeh@186
|
2341
|
paul@430
|
2342 # Some hacks to set the bloc & function status as failed if cook has
|
gokhlayeh@186
|
2343 # failed.
|
gokhlayeh@186
|
2344 report_return_code=$cook_code
|
gokhlayeh@186
|
2345 report close-bloc
|
gokhlayeh@186
|
2346 report end-sublog
|
pascal@351
|
2347 rm -f $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
2348 return $cook_code
|
gokhlayeh@186
|
2349 }
|
gokhlayeh@186
|
2350
|
gokhlayeh@186
|
2351 cook_list()
|
gokhlayeh@186
|
2352 {
|
gokhlayeh@204
|
2353 if [ -s $tmp/cooklist ]; then
|
gokhlayeh@204
|
2354 if [ -f /usr/bin/tazchroot ]; then
|
paul@430
|
2355 # Note : options -main variables- are automatically kept by
|
gokhlayeh@204
|
2356 # the sub-applications tazchroot/tazwok; as well as report data.
|
gokhlayeh@204
|
2357 cd $LOCAL_REPOSITORY
|
gokhlayeh@204
|
2358 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@204
|
2359 tazchroot tazwok cook-list --SLITAZ_DIR=$SLITAZ_DIR --SLITAZ_VERSION=$SLITAZ_VERSION ${undigest:+ --undigest=$undigest}
|
gokhlayeh@204
|
2360 return
|
gokhlayeh@204
|
2361 fi
|
gokhlayeh@204
|
2362 while [ -s $tmp/cooklist ]; do
|
gokhlayeh@204
|
2363 PACKAGE=$(sed 1!d $tmp/cooklist)
|
gokhlayeh@204
|
2364 cook
|
gokhlayeh@204
|
2365 done
|
gokhlayeh@204
|
2366 remove_build_depends $MISSING_PACKAGE $remove_later
|
gokhlayeh@210
|
2367 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@204
|
2368 else
|
gokhlayeh@186
|
2369 echo "Nothing to cook."
|
gokhlayeh@186
|
2370 return
|
gokhlayeh@186
|
2371 fi
|
gokhlayeh@186
|
2372 }
|
gokhlayeh@186
|
2373
|
gokhlayeh@186
|
2374 configure_tazchroot()
|
gokhlayeh@186
|
2375 {
|
gokhlayeh@190
|
2376 cat > $LOCAL_REPOSITORY/tazchroot.conf << EOF
|
gokhlayeh@186
|
2377 # Tazchroot configuration file - created by tazwok.
|
gokhlayeh@186
|
2378
|
gokhlayeh@407
|
2379 # Local repository definition.
|
gokhlayeh@186
|
2380 SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@186
|
2381 SLITAZ_VERSION=$SLITAZ_VERSION
|
gokhlayeh@407
|
2382 LOCAL_REPOSITORY=$SLITAZ_DIR/${undigest:-$SLITAZ_VERSION}
|
gokhlayeh@407
|
2383 ${USE_ONLINE_PKG:+USE_ONLINE_PKG=$USE_ONLINE_PKG}
|
gokhlayeh@407
|
2384 ${undigest:+undigest=$undigest}
|
gokhlayeh@407
|
2385 ${ref_USE_ONLINE_PKG:+ref_USE_ONLINE_PKG=$ref_USE_ONLINE_PKG}
|
gokhlayeh@407
|
2386
|
gokhlayeh@407
|
2387 # Chroot path.
|
gokhlayeh@407
|
2388 # You can use a chroot into /tmp if it's mounted in RAM
|
gokhlayeh@407
|
2389 # to speed-up the process, be sure you have a free GB.
|
gokhlayeh@407
|
2390 # (minimal chroot is like 150~200MB, can be a lot more during cook)
|
gokhlayeh@407
|
2391 # chroot_dir=/tmp/chroot-${undigest:-$SLITAZ_VERSION}
|
gokhlayeh@186
|
2392 chroot_dir=\$LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
2393
|
paul@430
|
2394 # Default scripts path (these scripts are added to the
|
paul@430
|
2395 # $chroot_dir/usr/bin and can be called with tazchroot script).
|
gokhlayeh@314
|
2396 script_dir=/usr/lib/slitaz/chroot-scripts/tazwok
|
gokhlayeh@186
|
2397
|
gokhlayeh@186
|
2398 # List of directories to mount.
|
gokhlayeh@407
|
2399 list_dir="$LOCAL_REPOSITORY
|
gokhlayeh@186
|
2400 $SLITAZ_LOG$( [ "$undigest" ] && echo -e "\n$SLITAZ_DIR/$SLITAZ_VERSION/packages" )"
|
gokhlayeh@186
|
2401
|
gokhlayeh@186
|
2402 create_chroot()
|
gokhlayeh@186
|
2403 {
|
gokhlayeh@186
|
2404 mkdir -p \$chroot_dir
|
gokhlayeh@186
|
2405 for pkg in \$(tazwok build-depends toolchain --SLITAZ_DIR=\$SLITAZ_DIR --SLITAZ_VERSION=\$SLITAZ_VERSION${undigest:+ --undigest=\$undigest}); do
|
gokhlayeh@186
|
2406 tazpkg get-install \$pkg --root="\$chroot_dir"
|
gokhlayeh@186
|
2407 done
|
gokhlayeh@186
|
2408
|
gokhlayeh@186
|
2409 # Store list of installed packages needed by cleanchroot.
|
gokhlayeh@194
|
2410 ls -1 \$chroot_dir/\$INSTALLED > \$chroot_dir/\$LOCALSTATE/chroot-pkgs
|
gokhlayeh@186
|
2411
|
gokhlayeh@186
|
2412 sed -e "s~^SLITAZ_DIR=.*~SLITAZ_DIR=\$SLITAZ_DIR~" \\
|
gokhlayeh@186
|
2413 -e "s/^SLITAZ_VERSION=.*/SLITAZ_VERSION=\$SLITAZ_VERSION/" \\
|
gokhlayeh@186
|
2414 -i \$chroot_dir/etc/slitaz/slitaz.conf
|
gokhlayeh@443
|
2415 echo \$SLITAZ_VERSION > \$chroot_dir/etc/slitaz-release
|
gokhlayeh@186
|
2416 $( [ "$undigest" ] && echo ' echo "undigest='"$undigest"'" >> $chroot_dir/etc/slitaz/tazwok.conf')
|
gokhlayeh@186
|
2417 sed 's/LC_ALL/LC_ALL=POSIX/' -i \$chroot_dir/etc/profile
|
gokhlayeh@407
|
2418
|
paul@430
|
2419 # The build bot may run in a sandbox: link sandbox lockfile.
|
pascal@368
|
2420 ln -s \$LOCAL_REPOSITORY/sandbox/proc/1 \$chroot_dir/proc/1
|
gokhlayeh@186
|
2421 }
|
gokhlayeh@186
|
2422
|
gokhlayeh@186
|
2423 mount_chroot()
|
gokhlayeh@186
|
2424 {
|
gokhlayeh@186
|
2425 cp -a /etc/resolv.conf \$chroot_dir/etc/resolv.conf
|
gokhlayeh@407
|
2426 $( if [ "$USE_ONLINE_PKG" ]; then
|
gokhlayeh@407
|
2427 echo ' echo "$USE_ONLINE_PKG" > $chroot_dir$LOCALSTATE/mirror'
|
gokhlayeh@407
|
2428 else
|
gokhlayeh@452
|
2429 echo ' echo "$LOCAL_REPOSITORY/packages" > $chroot_dir$LOCALSTATE/mirror'
|
gokhlayeh@407
|
2430 fi
|
gokhlayeh@407
|
2431 )
|
gokhlayeh@194
|
2432 mkdir -p \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming
|
gokhlayeh@194
|
2433 echo "\$LOCAL_REPOSITORY/packages-incoming" > \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming/mirror
|
gokhlayeh@448
|
2434 $( if [ "$undigest" ]; then
|
gokhlayeh@448
|
2435 echo ' mkdir -p $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION'
|
gokhlayeh@448
|
2436 if [ "$ref_USE_ONLINE_PKG" ]; then
|
gokhlayeh@448
|
2437 echo ' echo "$ref_USE_ONLINE_PKG" > $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION/mirror'
|
gokhlayeh@448
|
2438 else
|
gokhlayeh@448
|
2439 echo ' echo "$ref_LOCAL_REPOSITORY/packages" > $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION/mirror'
|
gokhlayeh@448
|
2440 fi
|
gokhlayeh@448
|
2441 fi )
|
gokhlayeh@194
|
2442 echo -e "\${LOCAL_REPOSITORY##*/}-incoming\nmain" > \$chroot_dir\$LOCALSTATE/priority
|
gokhlayeh@440
|
2443 mount -o bind /proc \$chroot_dir/proc
|
gokhlayeh@440
|
2444 mount -o bind /sys \$chroot_dir/sys
|
gokhlayeh@433
|
2445 mount -o bind /dev/pts \$chroot_dir/dev/pts
|
gokhlayeh@433
|
2446 mount -o bind /dev/shm \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2447 for dir in \$list_dir; do
|
gokhlayeh@186
|
2448 mkdir -p \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2449 mount \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2450 done
|
gokhlayeh@186
|
2451 }
|
gokhlayeh@186
|
2452
|
gokhlayeh@186
|
2453 umount_chroot()
|
gokhlayeh@186
|
2454 {
|
gokhlayeh@186
|
2455 for dir in \$list_dir; do
|
gokhlayeh@186
|
2456 umount \$chroot_dir\$dir
|
gokhlayeh@186
|
2457 done
|
gokhlayeh@186
|
2458 umount \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2459 umount \$chroot_dir/dev/pts
|
gokhlayeh@186
|
2460 umount \$chroot_dir/sys
|
gokhlayeh@186
|
2461 umount \$chroot_dir/proc
|
gokhlayeh@186
|
2462 }
|
gokhlayeh@186
|
2463 EOF
|
gokhlayeh@186
|
2464 }
|
gokhlayeh@186
|
2465
|
gokhlayeh@186
|
2466 ########################################################################
|
gokhlayeh@186
|
2467 ######################### END OF NEW FUNCTIONS #########################
|
gokhlayeh@186
|
2468 ########################################################################
|
gokhlayeh@186
|
2469
|
paul@430
|
2470 # List packages providing a virtual package.
|
pascal@111
|
2471 whoprovide()
|
pascal@111
|
2472 {
|
pascal@111
|
2473 local i;
|
gokhlayeh@195
|
2474 for i in $(fgrep -l PROVIDE $WOK/*/receipt); do
|
pascal@111
|
2475 . $i
|
pascal@111
|
2476 case " $PROVIDE " in
|
pascal@111
|
2477 *\ $1\ *|*\ $1:*) echo $(basename $(dirname $i));;
|
pascal@111
|
2478 esac
|
pascal@111
|
2479 done
|
pascal@111
|
2480 }
|
pascal@111
|
2481
|
gokhlayeh@186
|
2482 ########################################################################
|
gokhlayeh@186
|
2483 # TAZWOK COMMANDS
|
gokhlayeh@186
|
2484 ########################
|
pankso@7
|
2485
|
pankso@7
|
2486 case "$COMMAND" in
|
pankso@7
|
2487 stats)
|
paul@166
|
2488 # Tazwok general statistics from the wok config file.
|
pankso@7
|
2489 #
|
gokhlayeh@186
|
2490 get_tazwok_config
|
gokhlayeh@186
|
2491 echo -e "\n\033[1mTazwok configuration statistics\033[0m
|
pankso@7
|
2492 ================================================================================
|
pankso@7
|
2493 Wok directory : $WOK
|
pankso@7
|
2494 Packages repository : $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
2495 Incoming repository : $INCOMING_REPOSITORY
|
pankso@7
|
2496 Sources repository : $SOURCES_REPOSITORY
|
gokhlayeh@186
|
2497 Log directory : $LOCAL_REPOSITORY/log
|
pankso@7
|
2498 Packages in the wok : `ls -1 $WOK | wc -l`
|
pankso@16
|
2499 Cooked packages : `ls -1 $PACKAGES_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2500 Incoming packages : `ls -1 $INCOMING_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2501 ================================================================================\n"
|
gokhlayeh@186
|
2502 ;;
|
pankso@133
|
2503 edit)
|
gokhlayeh@186
|
2504 get_tazwok_config
|
pankso@133
|
2505 check_for_package_on_cmdline
|
pankso@133
|
2506 check_for_receipt
|
gokhlayeh@186
|
2507 $EDITOR $WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
2508 ;;
|
pascal@98
|
2509 build-depends)
|
paul@430
|
2510 # List dependencies to rebuild wok, or only a package.
|
gokhlayeh@186
|
2511 get_tazwok_config
|
gokhlayeh@215
|
2512 report(){ : ; }
|
gokhlayeh@242
|
2513 if [ ! "$PACKAGE" ] || [ "$PACKAGE" = toolchain ]; then
|
gokhlayeh@186
|
2514 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
2515 --look_for=dep --with_dev --with_args
|
gokhlayeh@186
|
2516 else
|
gokhlayeh@186
|
2517 check_for_package_on_cmdline
|
gokhlayeh@186
|
2518 scan $PACKAGE --look_for=bdep --with_dev
|
gokhlayeh@186
|
2519 fi
|
gokhlayeh@186
|
2520 ;;
|
gokhlayeh@186
|
2521 gen-cooklist)
|
gokhlayeh@215
|
2522 check_root
|
gokhlayeh@204
|
2523 get_options_list="pkg"
|
gokhlayeh@186
|
2524 get_tazwok_config
|
gokhlayeh@215
|
2525 report(){ : ; }
|
gokhlayeh@204
|
2526 if ! [ "$pkg" ]; then
|
gokhlayeh@242
|
2527 if [ ! "$LIST" ] || [ "$LIST" = toolchain ]; then
|
gokhlayeh@242
|
2528 pkg="$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA"
|
gokhlayeh@242
|
2529 else
|
gokhlayeh@405
|
2530 check_for_list
|
gokhlayeh@242
|
2531 fi
|
gokhlayeh@186
|
2532 fi
|
gokhlayeh@204
|
2533 gen_cook_list
|
gokhlayeh@186
|
2534 ;;
|
pascal@119
|
2535 check-depends)
|
paul@430
|
2536 # Check package depends /!\.
|
gokhlayeh@186
|
2537 get_tazwok_config
|
pascal@119
|
2538 echo ""
|
paul@121
|
2539 echo -e "\033[1mCheck every receipt for DEPENDS - doesn't scan ELF files\033[0m
|
pascal@119
|
2540 ================================================================================"
|
pascal@119
|
2541 TMPDIR=/tmp/tazwok$$
|
pascal@119
|
2542 DEFAULT_DEPENDS="glibc-base gcc-lib-base"
|
pascal@119
|
2543
|
paul@430
|
2544 # Build ALL_DEPENDS variable.
|
pascal@119
|
2545 scan_dep()
|
pascal@119
|
2546 {
|
pascal@119
|
2547 local i
|
pascal@119
|
2548 ALL_DEPENDS="$ALL_DEPENDS$PACKAGE "
|
pascal@128
|
2549 for i in $DEPENDS $SUGGESTED ; do
|
pascal@119
|
2550 case " $ALL_DEPENDS " in
|
pascal@119
|
2551 *\ $i\ *) continue;;
|
pascal@119
|
2552 esac
|
pascal@120
|
2553 [ -d $WOK/$i ] || {
|
pascal@120
|
2554 ALL_DEPENDS="$ALL_DEPENDS$i "
|
pascal@120
|
2555 continue
|
pascal@120
|
2556 }
|
pascal@128
|
2557 DEPENDS=""
|
pascal@128
|
2558 SUGGESTED=""
|
pascal@119
|
2559 . $WOK/$i/receipt
|
pascal@119
|
2560 scan_dep
|
pascal@119
|
2561 done
|
pascal@119
|
2562 }
|
pankso@133
|
2563
|
paul@430
|
2564 # Check for ELF file.
|
pascal@119
|
2565 is_elf()
|
pascal@119
|
2566 {
|
slaxemulator@323
|
2567 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ]
|
pascal@119
|
2568 }
|
pascal@119
|
2569
|
paul@430
|
2570 # Print shared library dependencies.
|
pascal@119
|
2571 ldd()
|
pascal@119
|
2572 {
|
pascal@130
|
2573 LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
|
pascal@119
|
2574 }
|
pascal@119
|
2575
|
pascal@119
|
2576 mkdir $TMPDIR
|
pascal@119
|
2577 cd $TMPDIR
|
pascal@140
|
2578 for i in $LOCALSTATE/files.list.lzma \
|
pascal@140
|
2579 $LOCALSTATE/undigest/*/files.list.lzma ; do
|
pascal@119
|
2580 [ -f $i ] && lzma d $i -so >> files.list
|
pascal@119
|
2581 done
|
pascal@119
|
2582 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
|
pascal@119
|
2583 tazpkg extract $pkg > /dev/null 2>&1
|
pascal@119
|
2584 . */receipt
|
pascal@119
|
2585 ALL_DEPENDS="$DEFAULT_DEPENDS "
|
pascal@119
|
2586 scan_dep
|
pascal@119
|
2587 find */fs -type f | while read file ; do
|
pascal@119
|
2588 is_elf $file || continue
|
pascal@119
|
2589 case "$file" in
|
pascal@119
|
2590 *.o|*.ko|*.ko.gz) continue;;
|
pascal@119
|
2591 esac
|
pascal@119
|
2592 ldd $file | while read lib rem; do
|
pascal@119
|
2593 case "$lib" in
|
pascal@128
|
2594 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
|
pascal@119
|
2595 continue;;
|
pascal@119
|
2596 esac
|
gokhlayeh@195
|
2597 for dep in $(fgrep $lib files.list | cut -d: -f1); do
|
pascal@119
|
2598 case " $ALL_DEPENDS " in
|
pascal@119
|
2599 *\ $dep\ *) continue 2;;
|
pascal@119
|
2600 esac
|
gokhlayeh@195
|
2601 for vdep in $(fgrep $dep $LOCALSTATE/packages.equiv | cut -d= -f1); do
|
pascal@128
|
2602 case " $ALL_DEPENDS " in
|
pascal@129
|
2603 *\ $vdep\ *) continue 3;;
|
pascal@128
|
2604 esac
|
pascal@128
|
2605 done
|
pascal@119
|
2606 done
|
pascal@128
|
2607 [ -n "$dep" ] || dep="UNKNOWN"
|
pascal@119
|
2608 echo "$(basename $pkg): ${file#*fs} depends on package $dep for the shared library $lib"
|
pascal@119
|
2609 done
|
pascal@119
|
2610 done
|
pascal@119
|
2611 rm -rf */
|
pascal@119
|
2612 done
|
pascal@119
|
2613 cd /tmp
|
pascal@119
|
2614 rm -rf $TMPDIR
|
gokhlayeh@186
|
2615 ;;
|
pascal@76
|
2616 check)
|
paul@430
|
2617 # Check wok consistency.
|
gokhlayeh@186
|
2618 get_tazwok_config
|
pascal@76
|
2619 echo ""
|
pascal@76
|
2620 echo -e "\033[1mWok and packages checking\033[0m
|
pascal@76
|
2621 ================================================================================"
|
pascal@77
|
2622 cd $WOK
|
pascal@77
|
2623 for pkg in $(ls)
|
pascal@76
|
2624 do
|
pascal@76
|
2625 [ -f $pkg/receipt ] || continue
|
gokhlayeh@186
|
2626 RECEIPT= $pkg/receipt
|
gokhlayeh@186
|
2627 source_receipt
|
gokhlayeh@186
|
2628 [ "$PACKAGE" = "$pkg" ] || echo "Package $PACKAGE should be $pkg" >&2
|
gokhlayeh@186
|
2629 [ -n "$VERSION" ] || echo "Package $PACKAGE has no VERSION" >&2
|
gokhlayeh@186
|
2630 [ -n "$PACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded PACKED_SIZE" >&2
|
gokhlayeh@186
|
2631 [ -n "$UNPACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded UNPACKED_SIZE" >&2
|
gokhlayeh@186
|
2632 [ -n "$EXTRAVERSION" ] && echo "Package $PACKAGE has hardcoded EXTRAVERSION" >&2
|
pascal@97
|
2633 if [ -n "$WANTED" ]; then
|
pascal@97
|
2634 if [ ! -f $WANTED/receipt ]; then
|
gokhlayeh@186
|
2635 echo "Package $PACKAGE wants unknown $WANTED package" >&2
|
pascal@97
|
2636 else
|
pascal@97
|
2637 BASEVERSION=$(. $WANTED/receipt ; echo $VERSION)
|
pascal@103
|
2638 if [ "$VERSION" = "$WANTED" ]; then
|
pascal@103
|
2639 # BASEVERSION is computed in receipt
|
gokhlayeh@195
|
2640 fgrep -q '_pkg=' $pkg/receipt &&
|
pascal@103
|
2641 BASEVERSION=$VERSION
|
pascal@103
|
2642 fi
|
pascal@97
|
2643 if [ "$VERSION" != "$BASEVERSION" ]; then
|
gokhlayeh@186
|
2644 echo "Package $PACKAGE ($VERSION) wants $WANTED ($BASEVERSION)" >&2
|
pascal@97
|
2645 fi
|
pascal@97
|
2646 fi
|
pascal@97
|
2647 fi
|
pascal@97
|
2648
|
pascal@94
|
2649 if [ -n "$CATEGORY" ]; then
|
pascal@94
|
2650 case " $(echo $CATEGORIES) " in
|
pascal@94
|
2651 *\ $CATEGORY\ *);;
|
gokhlayeh@186
|
2652 *) echo "Package $PACKAGE has an invalid CATEGORY" >&2;;
|
pascal@94
|
2653 esac
|
pascal@94
|
2654 else
|
gokhlayeh@186
|
2655 echo"Package $PACKAGE has no CATEGORY" >&2
|
pascal@94
|
2656 fi
|
gokhlayeh@186
|
2657 [ -n "$SHORT_DESC" ] || echo "Package $PACKAGE has no SHORT_DESC" >&2
|
gokhlayeh@186
|
2658 [ -n "$MAINTAINER" ] || echo "Package $PACKAGE has no MAINTAINER" >&2
|
pascal@122
|
2659 case "$WGET_URL" in
|
pascal@178
|
2660 ftp*|http*) busybox wget -s $WGET_URL 2> /dev/null ||
|
gokhlayeh@186
|
2661 echo "Package $PACKAGE has a wrong WGET_URL" >&2;;
|
pascal@122
|
2662 '') ;;
|
gokhlayeh@186
|
2663 *) echo "Package $PACKAGE has an invalid WGET_URL" >&2;;
|
pascal@122
|
2664 esac
|
pascal@112
|
2665 case "$WEB_SITE" in
|
pascal@125
|
2666 ftp*|http*);;
|
gokhlayeh@186
|
2667 '') echo "Package $PACKAGE has no WEB_SITE" >&2;;
|
gokhlayeh@186
|
2668 *) echo "Package $PACKAGE has an invalid WEB_SITE" >&2;;
|
pascal@112
|
2669 esac
|
pascal@78
|
2670 case "$MAINTAINER" in
|
gokhlayeh@186
|
2671 *\<*|*\>*) echo "Package $PACKAGE has an invalid MAINTAINER: $MAINTAINER" >&2;;
|
pascal@78
|
2672 esac
|
pascal@78
|
2673 case "$MAINTAINER" in
|
pascal@78
|
2674 *@*);;
|
gokhlayeh@186
|
2675 *) echo "Package $PACKAGE MAINTAINER is not an email address" >&2;;
|
pascal@78
|
2676 esac
|
gokhlayeh@186
|
2677 MSG="Missing dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@76
|
2678 for i in $DEPENDS; do
|
pascal@76
|
2679 [ -d $i ] && continue
|
pascal@111
|
2680 [ -n "$(whoprovide $i)" ] && continue
|
pascal@76
|
2681 echo -e "$MSG $i"
|
pascal@76
|
2682 MSG=""
|
pascal@76
|
2683 done
|
gokhlayeh@186
|
2684 MSG="Missing build dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@92
|
2685 for i in $BUILD_DEPENDS; do
|
pascal@92
|
2686 [ -d $i ] && continue
|
pascal@111
|
2687 [ -n "$(whoprovide $i)" ] && continue
|
pascal@92
|
2688 echo -e "$MSG $i"
|
pascal@92
|
2689 MSG=""
|
pascal@92
|
2690 done
|
paul@430
|
2691 MSG="Dependency loop between $PACKAGE and :\n"
|
pascal@76
|
2692 ALL_DEPS=""
|
pascal@76
|
2693 check_for_deps_loop $PACKAGE $DEPENDS
|
pascal@140
|
2694 [ -d $WOK/$pkg/taz ] && for i in $BUILD_DEPENDS; do
|
pascal@141
|
2695 [ $WOK/$pkg/taz -nt $INSTALLED/$i/files.list ] && continue
|
paul@154
|
2696 echo "$pkg should be rebuilt after $i installation"
|
pascal@140
|
2697 done
|
pascal@76
|
2698 done
|
gokhlayeh@186
|
2699 ;;
|
pankso@7
|
2700 list)
|
paul@166
|
2701 # List packages in wok directory. User can specify a category.
|
pankso@7
|
2702 #
|
gokhlayeh@186
|
2703 get_tazwok_config
|
pankso@7
|
2704 if [ "$2" = "category" ]; then
|
pankso@7
|
2705 echo -e "\033[1m\nPackages categories :\033[0m $CATEGORIES\n"
|
pankso@7
|
2706 exit 0
|
pankso@7
|
2707 fi
|
pankso@7
|
2708 # Check for an asked category.
|
pankso@7
|
2709 if [ -n "$2" ]; then
|
pankso@7
|
2710 ASKED_CATEGORY=$2
|
pankso@7
|
2711 echo ""
|
pankso@7
|
2712 echo -e "\033[1mPackages in category :\033[0m $ASKED_CATEGORY"
|
pankso@7
|
2713 echo "================================================================================"
|
pankso@7
|
2714 for pkg in $WOK/*
|
pankso@7
|
2715 do
|
erjo@168
|
2716 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2717 . $pkg/receipt
|
pankso@7
|
2718 if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then
|
pankso@7
|
2719 echo -n "$PACKAGE"
|
pankso@28
|
2720 echo -e "\033[28G $VERSION"
|
pankso@7
|
2721 packages=$(($packages+1))
|
pankso@7
|
2722 fi
|
pankso@7
|
2723 done
|
pankso@7
|
2724 echo "================================================================================"
|
pankso@7
|
2725 echo -e "$packages packages in category $ASKED_CATEGORY.\n"
|
pankso@7
|
2726 else
|
pankso@7
|
2727 # By default list all packages and version.
|
pankso@7
|
2728 echo ""
|
pankso@7
|
2729 echo -e "\033[1mList of packages in the wok\033[0m"
|
pankso@7
|
2730 echo "================================================================================"
|
pankso@7
|
2731 for pkg in $WOK/*
|
pankso@7
|
2732 do
|
erjo@168
|
2733 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2734 . $pkg/receipt
|
pankso@7
|
2735 echo -n "$PACKAGE"
|
pankso@28
|
2736 echo -en "\033[28G $VERSION"
|
pankso@7
|
2737 echo -e "\033[42G $CATEGORY"
|
pankso@7
|
2738 packages=$(($packages+1))
|
pankso@7
|
2739 done
|
pankso@7
|
2740 echo "================================================================================"
|
MikeDSmith25@82
|
2741 echo -e "$packages packages available in the wok.\n"
|
pankso@7
|
2742 fi
|
pankso@7
|
2743 ;;
|
pankso@7
|
2744 info)
|
MikeDSmith25@82
|
2745 # Information about a package.
|
pankso@7
|
2746 #
|
gokhlayeh@186
|
2747 get_tazwok_config
|
pankso@7
|
2748 check_for_package_on_cmdline
|
pankso@7
|
2749 check_for_receipt
|
pankso@7
|
2750 . $WOK/$PACKAGE/receipt
|
pankso@7
|
2751 echo ""
|
MikeDSmith25@82
|
2752 echo -e "\033[1mTazwok package information\033[0m
|
pankso@7
|
2753 ================================================================================
|
pankso@7
|
2754 Package : $PACKAGE
|
pankso@7
|
2755 Version : $VERSION
|
pankso@7
|
2756 Category : $CATEGORY
|
pankso@7
|
2757 Short desc : $SHORT_DESC
|
pankso@7
|
2758 Maintainer : $MAINTAINER"
|
pankso@7
|
2759 if [ ! "$WEB_SITE" = "" ]; then
|
pankso@7
|
2760 echo "Web site : $WEB_SITE"
|
pankso@7
|
2761 fi
|
pankso@7
|
2762 if [ ! "$DEPENDS" = "" ]; then
|
pankso@7
|
2763 echo "Depends : $DEPENDS"
|
pankso@7
|
2764 fi
|
pankso@7
|
2765 if [ ! "$WANTED" = "" ]; then
|
pankso@7
|
2766 echo "Wanted src : $WANTED"
|
pankso@7
|
2767 fi
|
pankso@7
|
2768 echo "================================================================================"
|
pankso@7
|
2769 echo ""
|
gokhlayeh@186
|
2770 ;;
|
pankso@7
|
2771 check-log)
|
pankso@7
|
2772 # We just cat the file log to view process info.
|
pankso@7
|
2773 #
|
gokhlayeh@186
|
2774 get_tazwok_config
|
pankso@7
|
2775 if [ ! -f "$LOG" ]; then
|
gokhlayeh@186
|
2776 echo -e "\nNo process log found. The package is probably not cooked.\n" >&2
|
gokhlayeh@186
|
2777 exit 1
|
pankso@7
|
2778 else
|
pankso@7
|
2779 echo ""
|
pankso@7
|
2780 echo -e "\033[1mPackage process log for :\033[0m $PACKAGE"
|
pankso@7
|
2781 echo "================================================================================"
|
pankso@7
|
2782 cat $LOG
|
pankso@7
|
2783 echo "================================================================================"
|
pankso@7
|
2784 echo ""
|
gokhlayeh@237
|
2785 if [ -s "$WOK/$PACKAGE/warning.txt" ]; then
|
gokhlayeh@237
|
2786 echo -e "\033[1mCook warning(s) for :\033[0m $PACKAGE"
|
gokhlayeh@237
|
2787 echo "================================================================================"
|
gokhlayeh@237
|
2788 cat "$WOK/$PACKAGE/warning.txt"
|
gokhlayeh@237
|
2789 echo "================================================================================"
|
gokhlayeh@237
|
2790 echo ""
|
gokhlayeh@237
|
2791 fi
|
pankso@7
|
2792 fi
|
gokhlayeh@186
|
2793 ;;
|
pankso@7
|
2794 search)
|
pankso@7
|
2795 # Search for a package by pattern or name.
|
pankso@7
|
2796 #
|
gokhlayeh@186
|
2797 get_tazwok_config
|
pankso@7
|
2798 if [ -z "$2" ]; then
|
gokhlayeh@186
|
2799 echo -e "\nPlease specify a pattern or a package name to search." >&2
|
gokhlayeh@186
|
2800 echo -e "Example : 'tazwok search gcc'.\n" >&2
|
gokhlayeh@186
|
2801 exit 1
|
pankso@7
|
2802 fi
|
pankso@7
|
2803 echo ""
|
pankso@7
|
2804 echo -e "\033[1mSearch result for :\033[0m $2"
|
pankso@7
|
2805 echo "================================================================================"
|
gokhlayeh@195
|
2806 list=`ls -1 $WOK | fgrep $2`
|
pankso@7
|
2807 for pkg in $list
|
pankso@7
|
2808 do
|
pankso@7
|
2809 . $WOK/$pkg/receipt
|
pankso@7
|
2810 echo -n "$PACKAGE "
|
pankso@7
|
2811 echo -en "\033[24G $VERSION"
|
pankso@7
|
2812 echo -e "\033[42G $CATEGORY"
|
gokhlayeh@186
|
2813 packages=$(($PACKAGEs+1))
|
pankso@7
|
2814 done
|
pankso@7
|
2815 echo "================================================================================"
|
pankso@7
|
2816 echo "$packages packages found for : $2"
|
pankso@7
|
2817 echo ""
|
gokhlayeh@186
|
2818 ;;
|
pankso@7
|
2819 compile)
|
pankso@7
|
2820 # Configure and make a package with the receipt.
|
pankso@7
|
2821 #
|
gokhlayeh@186
|
2822 get_tazwok_config
|
gokhlayeh@186
|
2823 source_lib report
|
gokhlayeh@186
|
2824 report start
|
pankso@7
|
2825 compile_package
|
gokhlayeh@186
|
2826 ;;
|
pankso@7
|
2827 genpkg)
|
paul@121
|
2828 # Generate a package.
|
pankso@7
|
2829 #
|
gokhlayeh@186
|
2830 get_tazwok_config
|
gokhlayeh@186
|
2831 source_lib report
|
gokhlayeh@186
|
2832 report start
|
pankso@7
|
2833 gen_package
|
gokhlayeh@186
|
2834 ;;
|
pankso@7
|
2835 cook)
|
pankso@7
|
2836 # Compile and generate a package. Just execute tazwok with
|
pankso@7
|
2837 # the good commands.
|
pankso@7
|
2838 #
|
pankso@7
|
2839 check_root
|
gokhlayeh@186
|
2840 get_tazwok_config
|
gokhlayeh@186
|
2841 source_lib report
|
gokhlayeh@186
|
2842 report start
|
gokhlayeh@470
|
2843 db_md5=$(md5sum $dep_db $wan_db)
|
gokhlayeh@215
|
2844 update_wan_db
|
gokhlayeh@215
|
2845 check_for_commit
|
gokhlayeh@475
|
2846 sort -o $dep_db $dep_db
|
gokhlayeh@475
|
2847 sort -o $wan_db $wan_db
|
gokhlayeh@470
|
2848 if [ "$db_md5" != "$(md5sum $dep_db $wan_db)" ]; then
|
gokhlayeh@472
|
2849 grep -q "^#" $cookorder || sed 1i"#PlanSort" -i $cookorder
|
gokhlayeh@215
|
2850 fi
|
gokhlayeh@186
|
2851 cook
|
gokhlayeh@186
|
2852 ;;
|
gokhlayeh@186
|
2853 sort-cooklist)
|
gokhlayeh@297
|
2854 check_root
|
gokhlayeh@186
|
2855 get_tazwok_config
|
gokhlayeh@405
|
2856 check_for_list
|
gokhlayeh@297
|
2857 report(){ : ; }
|
gokhlayeh@297
|
2858 # When using sort-cooklist, the script should behave as for gen-cooklist
|
paul@430
|
2859 # The only difference between these two is where the output is sent.
|
gokhlayeh@297
|
2860 COMMAND=gen-cooklist
|
gokhlayeh@297
|
2861 gen_cook_list
|
gokhlayeh@405
|
2862 cp -af $tmp/cooklist $LIST
|
gokhlayeh@186
|
2863 ;;
|
pankso@7
|
2864 cook-list)
|
gokhlayeh@204
|
2865 # Cook all packages listed in a file or in default cooklist.
|
gokhlayeh@186
|
2866 check_root
|
gokhlayeh@204
|
2867 get_options_list="pkg forced"
|
gokhlayeh@186
|
2868 get_tazwok_config
|
gokhlayeh@186
|
2869 source_lib report
|
gokhlayeh@186
|
2870 report start
|
gokhlayeh@204
|
2871 if ! [ "$pkg" ]; then
|
gokhlayeh@405
|
2872 [ "$LIST" ] && check_for_list
|
gokhlayeh@186
|
2873 fi
|
gokhlayeh@204
|
2874 gen_cook_list
|
gokhlayeh@186
|
2875 cook_list
|
gokhlayeh@186
|
2876 ;;
|
gokhlayeh@186
|
2877 clean)
|
paul@430
|
2878 # Clean up a package work directory + those which want it.
|
pankso@7
|
2879 #
|
gokhlayeh@186
|
2880 get_tazwok_config
|
pankso@7
|
2881 check_for_package_on_cmdline
|
pankso@7
|
2882 check_for_receipt
|
gokhlayeh@186
|
2883 source_lib report
|
gokhlayeh@186
|
2884 report start
|
pankso@7
|
2885 . $RECEIPT
|
gokhlayeh@186
|
2886 clean
|
gokhlayeh@186
|
2887 ;;
|
pankso@7
|
2888 gen-clean-wok)
|
paul@121
|
2889 # Generate a clean wok from the current wok by copying all receipts
|
pankso@7
|
2890 # and stuff directory.
|
pankso@7
|
2891 #
|
gokhlayeh@186
|
2892 get_tazwok_config
|
gokhlayeh@186
|
2893 source_lib report
|
gokhlayeh@186
|
2894 report start
|
gokhlayeh@186
|
2895 if [ -z "$ARG" ]; then
|
gokhlayeh@186
|
2896 echo -e "\nPlease specify the destination for the new clean wok.\n" >&2
|
gokhlayeh@186
|
2897 exit 1
|
pankso@7
|
2898 else
|
gokhlayeh@186
|
2899 dest=$ARG
|
pankso@7
|
2900 mkdir -p $dest
|
pankso@7
|
2901 fi
|
gokhlayeh@186
|
2902 report step "Creating clean wok in : $dest"
|
pankso@7
|
2903 for pkg in `ls -1 $WOK`
|
pankso@7
|
2904 do
|
gokhlayeh@449
|
2905 copy_cooking_stuff $WOK $pkg $dest
|
pankso@7
|
2906 done
|
gokhlayeh@186
|
2907 [ -d $WOK/.hg ] && cp -a $WOK/.hg $dest
|
gokhlayeh@186
|
2908 report end-step
|
pankso@7
|
2909 echo "Packages cleaned : `ls -1 $dest | wc -l`"
|
pankso@7
|
2910 echo ""
|
gokhlayeh@186
|
2911 ;;
|
pankso@7
|
2912 clean-wok)
|
paul@430
|
2913 # Clean all packages in the work directory.
|
pankso@7
|
2914 #
|
gokhlayeh@186
|
2915 get_tazwok_config
|
gokhlayeh@186
|
2916 source_lib report
|
gokhlayeh@186
|
2917 report start
|
gokhlayeh@186
|
2918 report step "Cleaning wok"
|
gokhlayeh@186
|
2919 for PACKAGE in `ls -1 $WOK`
|
pankso@7
|
2920 do
|
gokhlayeh@186
|
2921 set_common_path
|
gokhlayeh@186
|
2922 source_receipt
|
gokhlayeh@186
|
2923 clean
|
pankso@7
|
2924 done
|
pankso@7
|
2925 echo "`ls -1 $WOK | wc -l` packages cleaned."
|
gokhlayeh@186
|
2926 ;;
|
gokhlayeh@266
|
2927 clean-src)
|
gokhlayeh@266
|
2928 # Remove tarball unrelated to wok receipts from src repo.
|
gokhlayeh@266
|
2929 check_root
|
gokhlayeh@266
|
2930 get_options_list="forced"
|
gokhlayeh@266
|
2931 get_tazwok_config
|
gokhlayeh@266
|
2932 cd $SOURCES_REPOSITORY
|
gokhlayeh@266
|
2933 echo -n "Checking $SOURCES_REPOSITORY..."
|
gokhlayeh@266
|
2934 for TARBALL in *; do
|
gokhlayeh@266
|
2935 [ "$TARBALL" = sources.list ] && continue
|
gokhlayeh@266
|
2936 grep -q $'\t'$TARBALL$ $SOURCES_REPOSITORY/sources.list || \
|
gokhlayeh@266
|
2937 echo $TARBALL >> $tmp/obsolete
|
gokhlayeh@266
|
2938 done
|
gokhlayeh@266
|
2939 status
|
slaxemulator@273
|
2940 if ! [ -f $tmp/obsolete ]; then
|
slaxemulator@273
|
2941 echo "No sources need to be removed."
|
slaxemulator@273
|
2942 exit 1
|
slaxemulator@273
|
2943 fi
|
gokhlayeh@266
|
2944 echo ""
|
paul@430
|
2945 echo -e "\033[1mObsolete/unrelated-to-wok sources :\033[0m"
|
gokhlayeh@266
|
2946 horizontal_line
|
gokhlayeh@266
|
2947 cat $tmp/obsolete
|
gokhlayeh@266
|
2948 horizontal_line
|
gokhlayeh@266
|
2949 echo "$(wc -l $tmp/obsolete | cut -f1 -d' ') tarballs to remove."
|
pankso@7
|
2950 echo ""
|
paul@430
|
2951 echo -n "Please confirm before removing (type uppercase YES): "
|
gokhlayeh@266
|
2952 read answer
|
gokhlayeh@266
|
2953 if [ "$answer" = YES ]; then
|
gokhlayeh@266
|
2954 echo -n "Removing old sources..."
|
gokhlayeh@266
|
2955 cat $tmp/obsolete | while read i; do
|
gokhlayeh@266
|
2956 rm -f $SOURCES_REPOSITORY/$i
|
gokhlayeh@266
|
2957 done
|
gokhlayeh@266
|
2958 status
|
gokhlayeh@266
|
2959 fi
|
gokhlayeh@266
|
2960 ;;
|
pankso@7
|
2961 gen-list)
|
gokhlayeh@186
|
2962 get_tazwok_config
|
gokhlayeh@204
|
2963 if [ "$2" ]; then
|
pankso@7
|
2964 if [ -d "$2" ]; then
|
gokhlayeh@204
|
2965 pkg_repository=$2
|
pankso@7
|
2966 else
|
gokhlayeh@204
|
2967 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@204
|
2968 exit 1
|
pankso@7
|
2969 fi
|
pankso@7
|
2970 fi
|
gokhlayeh@204
|
2971
|
gokhlayeh@186
|
2972 source_lib report
|
gokhlayeh@186
|
2973 report start
|
gokhlayeh@204
|
2974 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
2975 gen_packages_db
|
gokhlayeh@204
|
2976 else
|
gokhlayeh@204
|
2977 pkg_repository=$PACKAGES_REPOSITORY && gen_packages_db
|
gokhlayeh@204
|
2978 pkg_repository=$INCOMING_REPOSITORY && gen_packages_db
|
pankso@28
|
2979 fi
|
gokhlayeh@186
|
2980 ;;
|
gokhlayeh@186
|
2981 check-list)
|
gokhlayeh@186
|
2982 # The directory to move into by default is the repository,
|
gokhlayeh@186
|
2983 # if $2 is not empty cd into $2.
|
pascal@178
|
2984 #
|
gokhlayeh@186
|
2985 get_tazwok_config
|
gokhlayeh@204
|
2986 if [ "$2" ]; then
|
pascal@178
|
2987 if [ -d "$2" ]; then
|
gokhlayeh@204
|
2988 pkg_repository=$2
|
pascal@178
|
2989 else
|
gokhlayeh@186
|
2990 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@186
|
2991 exit 1
|
pascal@178
|
2992 fi
|
pascal@178
|
2993 fi
|
gokhlayeh@186
|
2994
|
gokhlayeh@186
|
2995 source_lib report
|
gokhlayeh@204
|
2996 report start
|
gokhlayeh@204
|
2997 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
2998 update_packages_db
|
gokhlayeh@204
|
2999 else
|
gokhlayeh@204
|
3000 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
3001 pkg_repository=$INCOMING_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
3002 fi
|
gokhlayeh@186
|
3003 ;;
|
pankso@7
|
3004 new-tree)
|
MikeDSmith25@82
|
3005 # Just create a few directories and generate an empty receipt to prepare
|
pankso@7
|
3006 # the creation of a new package.
|
pankso@7
|
3007 #
|
gokhlayeh@186
|
3008 get_tazwok_config
|
pankso@7
|
3009 check_for_package_on_cmdline
|
slaxemulator@362
|
3010 clean_wok=$LOCAL_REPOSITORY/clean-wok
|
slaxemulator@362
|
3011 if [ -d $clean_wok/$PACKAGE ]; then
|
gokhlayeh@186
|
3012 echo -e "\n$PACKAGE package tree already exists.\n" >&2
|
gokhlayeh@186
|
3013 exit 1
|
pankso@7
|
3014 fi
|
gokhlayeh@442
|
3015 echo "Creating : $clean_wok/$PACKAGE"
|
slaxemulator@362
|
3016 mkdir $clean_wok/$PACKAGE
|
slaxemulator@362
|
3017 cd $clean_wok/$PACKAGE
|
pankso@7
|
3018 echo -n "Preparing the receipt..."
|
pankso@7
|
3019 #
|
pankso@7
|
3020 # Default receipt begin.
|
pankso@7
|
3021 #
|
pankso@7
|
3022 echo "# SliTaz package receipt." > receipt
|
pankso@7
|
3023 echo "" >> receipt
|
pankso@7
|
3024 echo "PACKAGE=\"$PACKAGE\"" >> receipt
|
pankso@7
|
3025 # Finish the empty receipt.
|
pankso@7
|
3026 cat >> receipt << "EOF"
|
pankso@7
|
3027 VERSION=""
|
pankso@7
|
3028 CATEGORY=""
|
pankso@7
|
3029 SHORT_DESC=""
|
pankso@7
|
3030 MAINTAINER=""
|
pankso@7
|
3031 DEPENDS=""
|
pankso@7
|
3032 TARBALL="$PACKAGE-$VERSION.tar.gz"
|
pankso@7
|
3033 WEB_SITE=""
|
pankso@7
|
3034 WGET_URL=""
|
pankso@7
|
3035
|
pankso@7
|
3036 # Rules to configure and make the package.
|
pankso@7
|
3037 compile_rules()
|
pankso@7
|
3038 {
|
pankso@7
|
3039 cd $src
|
gokhlayeh@204
|
3040 ./configure && make && make install
|
pankso@7
|
3041 }
|
pankso@7
|
3042
|
pankso@7
|
3043 # Rules to gen a SliTaz package suitable for Tazpkg.
|
pankso@7
|
3044 genpkg_rules()
|
pankso@7
|
3045 {
|
pankso@7
|
3046 mkdir -p $fs/usr
|
pankso@7
|
3047 cp -a $_pkg/usr/bin $fs/usr
|
pankso@7
|
3048 }
|
pankso@7
|
3049
|
pankso@7
|
3050 EOF
|
pankso@7
|
3051 #
|
pankso@7
|
3052 # Default receipt end.
|
pankso@7
|
3053 #
|
pankso@7
|
3054 status
|
pankso@7
|
3055 # Interactive mode, asking and seding.
|
pankso@7
|
3056 if [ "$3" = "--interactive" ]; then
|
paul@430
|
3057 echo "Entering interactive mode..."
|
pankso@7
|
3058 echo "================================================================================"
|
pankso@7
|
3059 echo "Package : $PACKAGE"
|
pankso@7
|
3060 # Version.
|
pankso@7
|
3061 echo -n "Version : " ; read anser
|
pankso@7
|
3062 sed -i s/'VERSION=\"\"'/"VERSION=\"$anser\""/ receipt
|
pankso@7
|
3063 # Category.
|
pankso@7
|
3064 echo -n "Category : " ; read anser
|
pankso@7
|
3065 sed -i s/'CATEGORY=\"\"'/"CATEGORY=\"$anser\""/ receipt
|
pankso@7
|
3066 # Short description.
|
pankso@7
|
3067 echo -n "Short desc : " ; read anser
|
pankso@7
|
3068 sed -i s/'SHORT_DESC=\"\"'/"SHORT_DESC=\"$anser\""/ receipt
|
pankso@7
|
3069 # Maintainer.
|
pankso@7
|
3070 echo -n "Maintainer : " ; read anser
|
pankso@7
|
3071 sed -i s/'MAINTAINER=\"\"'/"MAINTAINER=\"$anser\""/ receipt
|
pankso@7
|
3072 # Web site.
|
pankso@7
|
3073 echo -n "Web site : " ; read anser
|
pankso@133
|
3074 sed -i s#'WEB_SITE=\"\"'#"WEB_SITE=\"$anser\""# receipt
|
pankso@7
|
3075 echo ""
|
pankso@7
|
3076 # Wget URL.
|
pankso@7
|
3077 echo "Wget URL to download source tarball."
|
pankso@7
|
3078 echo "Example : \$GNU_MIRROR/\$PACKAGE/\$TARBALL"
|
pankso@7
|
3079 echo -n "Wget url : " ; read anser
|
pankso@7
|
3080 sed -i s#'WGET_URL=\"\"'#"WGET_URL=\"$anser\""# receipt
|
pankso@7
|
3081 # Ask for a stuff dir.
|
pankso@7
|
3082 echo -n "Do you need a stuff directory ? (y/N) : " ; read anser
|
pankso@7
|
3083 if [ "$anser" = "y" ]; then
|
pankso@7
|
3084 echo -n "Creating the stuff directory..."
|
pankso@7
|
3085 mkdir stuff && status
|
pankso@7
|
3086 fi
|
pankso@7
|
3087 # Ask for a description file.
|
pankso@7
|
3088 echo -n "Are you going to write a description ? (y/N) : " ; read anser
|
pankso@7
|
3089 if [ "$anser" = "y" ]; then
|
pankso@7
|
3090 echo -n "Creating the description.txt file..."
|
pankso@7
|
3091 echo "" > description.txt && status
|
pankso@7
|
3092 fi
|
pankso@7
|
3093 echo "================================================================================"
|
pankso@7
|
3094 echo ""
|
pankso@7
|
3095 fi
|
gokhlayeh@186
|
3096 ;;
|
pankso@7
|
3097 remove)
|
pankso@7
|
3098 # Remove a package from the wok.
|
pankso@7
|
3099 #
|
gokhlayeh@186
|
3100 get_tazwok_config
|
pankso@7
|
3101 check_for_package_on_cmdline
|
pankso@7
|
3102 echo ""
|
pascal@83
|
3103 echo -n "Please confirm deletion (y/N) : "; read anser
|
pascal@83
|
3104 if [ "$anser" = "y" ]; then
|
pascal@83
|
3105 echo -n "Removing $PACKAGE..."
|
pascal@83
|
3106 rm -rf $WOK/$PACKAGE && status
|
pascal@83
|
3107 echo ""
|
pascal@83
|
3108 fi
|
gokhlayeh@186
|
3109 ;;
|
gokhlayeh@304
|
3110 update-wok)
|
paul@166
|
3111 # Pull and update a Hg wok.
|
gokhlayeh@304
|
3112 get_options_list="local"
|
gokhlayeh@186
|
3113 get_tazwok_config
|
gokhlayeh@309
|
3114 source_lib report
|
gokhlayeh@310
|
3115 report start
|
gokhlayeh@304
|
3116 clean_wok=$LOCAL_REPOSITORY/clean-wok
|
gokhlayeh@304
|
3117 cd $clean_wok
|
gokhlayeh@304
|
3118 if ! [ "$local" ]; then
|
gokhlayeh@304
|
3119 if [ "$WOK_UPDATE_METHOD" = hg ]; then
|
gokhlayeh@304
|
3120 if ! [ -f "$INSTALLED/mercurial/receipt" ]; then
|
gokhlayeh@304
|
3121
|
gokhlayeh@304
|
3122 # Auto-install only if we are in a cook chroot.
|
gokhlayeh@304
|
3123 if [ -x /usr/bin/clean-chroot ]; then
|
gokhlayeh@392
|
3124 tazpkg get-install mercurial
|
gokhlayeh@392
|
3125 else
|
gokhlayeh@304
|
3126 echo "" >&2
|
paul@430
|
3127 echo "You need to install mercurial to get wok from hg (recommended). Otherwise, you can switch wok get method to \"tarball\" into $LOCAL_REPOSITORY/tazwok.conf (per-repository configuration, if it doesn't exist) or /etc/slitaz/tazwok.conf (global configuration)." | fold -s >&2
|
gokhlayeh@304
|
3128 echo "">&2
|
gokhlayeh@330
|
3129 exit 1
|
gokhlayeh@304
|
3130 fi
|
gokhlayeh@330
|
3131 fi
|
gokhlayeh@304
|
3132
|
gokhlayeh@330
|
3133 report step "Getting wok changes using hg"
|
gokhlayeh@330
|
3134 if [ -d .hg ]; then
|
gokhlayeh@330
|
3135 hg pull -u || exit 1
|
gokhlayeh@304
|
3136 else
|
gokhlayeh@330
|
3137 hg clone $HG_WOK . || exit 1
|
gokhlayeh@304
|
3138 fi
|
gokhlayeh@309
|
3139 report end-step
|
gokhlayeh@304
|
3140 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@304
|
3141 else
|
gokhlayeh@309
|
3142 report step "Getting wok changes using tarball"
|
gokhlayeh@304
|
3143 { mkdir .tmp && cd .tmp
|
gokhlayeh@304
|
3144 wget "$TARBALL_WOK" &&
|
gokhlayeh@304
|
3145 case $TARBALL_WOK in
|
gokhlayeh@304
|
3146 *bz2) tar xjf *.bz2 -C wok; rm *.bz2;;
|
gokhlayeh@304
|
3147 *lzma) unlzma -c *.lzma | tar xf - -C wok; rm *.lzma ;;
|
gokhlayeh@304
|
3148 *gz) tar xzf *.gz -C wok; rm*.gz ;;
|
gokhlayeh@304
|
3149 esac &&
|
gokhlayeh@304
|
3150 rm -r $(ls -d $clean_wok/*) &&
|
gokhlayeh@304
|
3151 cp -a wok/* $clean_wok &&
|
gokhlayeh@304
|
3152 cd .. &&
|
gokhlayeh@304
|
3153 rm -r .tmp
|
gokhlayeh@304
|
3154 } || { echo "That's not cool: it fails!" >&2
|
gokhlayeh@309
|
3155 report end-step
|
gokhlayeh@304
|
3156 exit 1; }
|
gokhlayeh@309
|
3157 report end-step
|
gokhlayeh@304
|
3158 fi
|
pankso@106
|
3159 fi
|
gokhlayeh@309
|
3160 report step "Appending changes to wok"
|
gokhlayeh@304
|
3161
|
gokhlayeh@308
|
3162 # Handle removed files/dir.
|
gokhlayeh@308
|
3163 cd $WOK
|
gokhlayeh@313
|
3164 for dir in *; do
|
slaxemulator@329
|
3165 [ -d "$clean_wok/$dir" ] || rm -rf $dir
|
gokhlayeh@308
|
3166 done
|
gokhlayeh@308
|
3167 for file in */receipt */description.txt; do
|
slaxemulator@329
|
3168 [ -f "$clean_wok/$file" ] || rm -rf $file
|
gokhlayeh@308
|
3169 done
|
gokhlayeh@330
|
3170 for i in $(find */stuff 2>/dev/null); do
|
slaxemulator@329
|
3171 [ -e "$clean_wok/$i" ] || rm -rf $i
|
gokhlayeh@304
|
3172 done
|
gokhlayeh@304
|
3173
|
gokhlayeh@308
|
3174 cp -a $clean_wok/* $WOK
|
gokhlayeh@309
|
3175 report end-step
|
gokhlayeh@186
|
3176 ;;
|
pankso@108
|
3177 maintainers)
|
gokhlayeh@186
|
3178 get_tazwok_config
|
pankso@108
|
3179 echo ""
|
pankso@108
|
3180 echo "List of maintainers for: $WOK"
|
pankso@108
|
3181 echo "================================================================================"
|
pankso@108
|
3182 touch /tmp/slitaz-maintainers
|
pankso@108
|
3183 for pkg in $WOK/*
|
pankso@108
|
3184 do
|
pankso@108
|
3185 . $pkg/receipt
|
gokhlayeh@195
|
3186 if ! fgrep -q "$MAINTAINER" /tmp/slitaz-maintainers; then
|
pankso@108
|
3187 echo "$MAINTAINER" >> /tmp/slitaz-maintainers
|
pankso@108
|
3188 echo "$MAINTAINER"
|
pankso@108
|
3189 fi
|
pankso@108
|
3190 done
|
pankso@108
|
3191 echo "================================================================================"
|
pankso@108
|
3192 echo "Maintainers: `cat /tmp/slitaz-maintainers | wc -l`"
|
pankso@108
|
3193 echo ""
|
pankso@108
|
3194 # Remove tmp files
|
gokhlayeh@186
|
3195 rm -f /tmp/slitaz-maintainers
|
gokhlayeh@186
|
3196 ;;
|
pankso@107
|
3197 maintained-by)
|
paul@166
|
3198 # Search for packages maintained by a contributor.
|
gokhlayeh@186
|
3199 get_tazwok_config
|
pankso@107
|
3200 if [ ! -n "$2" ]; then
|
gokhlayeh@186
|
3201 echo "Specify a name or email of a maintainer." >&2
|
gokhlayeh@186
|
3202 exit 1
|
pankso@107
|
3203 fi
|
pankso@107
|
3204 echo "Maintainer packages"
|
pankso@107
|
3205 echo "================================================================================"
|
pankso@107
|
3206 for pkg in $WOK/*
|
pankso@107
|
3207 do
|
pankso@107
|
3208 . $pkg/receipt
|
gokhlayeh@195
|
3209 if echo "$MAINTAINER" | fgrep -q "$2"; then
|
pankso@107
|
3210 echo "$PACKAGE"
|
gokhlayeh@186
|
3211 packages=$(($PACKAGEs+1))
|
pankso@107
|
3212 fi
|
pankso@107
|
3213 done
|
pankso@107
|
3214 echo "================================================================================"
|
gokhlayeh@186
|
3215 echo "Packages maintained by $2: $PACKAGEs"
|
gokhlayeh@186
|
3216 echo ""
|
gokhlayeh@186
|
3217 ;;
|
gokhlayeh@268
|
3218 tags)
|
gokhlayeh@268
|
3219 get_tazwok_config
|
gokhlayeh@268
|
3220 echo -e "\n\033[1mTags list :\033[0m"
|
gokhlayeh@268
|
3221 horizontal_line
|
gokhlayeh@268
|
3222 cd $WOK
|
gokhlayeh@268
|
3223 for i in */receipt; do
|
gokhlayeh@268
|
3224 unset TAGS
|
gokhlayeh@268
|
3225 source $i
|
gokhlayeh@268
|
3226 for t in $TAGS; do
|
gokhlayeh@268
|
3227 grep -q ^$t$ $tmp/tags && continue
|
gokhlayeh@268
|
3228 echo $t | tee -a $tmp/tags
|
gokhlayeh@268
|
3229 done
|
gokhlayeh@268
|
3230 done
|
gokhlayeh@268
|
3231 horizontal_line
|
gokhlayeh@268
|
3232 echo "$(wc -l $tmp/tags | cut -f1 -d ' ') tags listed."
|
gokhlayeh@268
|
3233 ;;
|
erjo@159
|
3234 check-src)
|
paul@430
|
3235 # Verify if upstream package is still available.
|
erjo@159
|
3236 #
|
gokhlayeh@186
|
3237 get_tazwok_config
|
erjo@159
|
3238 check_for_package_on_cmdline
|
erjo@159
|
3239 check_for_receipt
|
gokhlayeh@186
|
3240 source_receipt
|
erjo@159
|
3241 check_src()
|
erjo@159
|
3242 {
|
erjo@159
|
3243 for url in $@; do
|
pascal@178
|
3244 busybox wget -s $url 2>/dev/null && break
|
erjo@159
|
3245 done
|
erjo@159
|
3246 }
|
gokhlayeh@186
|
3247 if [ "$WGET_URL" ];then
|
erjo@159
|
3248 echo -n "$PACKAGE : "
|
erjo@159
|
3249 check_src $WGET_URL
|
erjo@159
|
3250 status
|
erjo@159
|
3251 else
|
erjo@159
|
3252 echo "No tarball to check for $PACKAGE"
|
erjo@159
|
3253 fi
|
gokhlayeh@186
|
3254 ;;
|
slaxemulator@456
|
3255 gen-src)
|
slaxemulator@456
|
3256 get_tazwok_config
|
slaxemulator@456
|
3257 if [ "$2" ]; then
|
slaxemulator@456
|
3258 if [ -d "$2" ]; then
|
slaxemulator@456
|
3259 src_repository=$2
|
slaxemulator@456
|
3260 else
|
slaxemulator@456
|
3261 echo -e "\nUnable to find directory : $2\n" >&2
|
slaxemulator@456
|
3262 exit 1
|
slaxemulator@456
|
3263 fi
|
slaxemulator@456
|
3264 fi
|
slaxemulator@456
|
3265 echo -n "Rebuilding sources.list file"
|
slaxemulator@456
|
3266 [ $src_repository ] || src_repository="$SOURCES_REPOSITORY"
|
slaxemulator@456
|
3267 gen_sources_list $src_repository
|
slaxemulator@456
|
3268 status
|
slaxemulator@456
|
3269 ;;
|
gokhlayeh@186
|
3270 get-src)
|
gokhlayeh@186
|
3271 check_root
|
gokhlayeh@225
|
3272 get_options_list="target nounpack"
|
gokhlayeh@186
|
3273 get_tazwok_config
|
gokhlayeh@186
|
3274 check_for_package_on_cmdline
|
gokhlayeh@186
|
3275 check_for_receipt
|
gokhlayeh@186
|
3276 source_receipt
|
gokhlayeh@186
|
3277 if [ "$WGET_URL" ];then
|
gokhlayeh@186
|
3278 source_lib report
|
gokhlayeh@186
|
3279 report start
|
gokhlayeh@225
|
3280 check_for_tarball
|
gokhlayeh@186
|
3281 else
|
gokhlayeh@186
|
3282 echo "No tarball to download for $PACKAGE"
|
gokhlayeh@186
|
3283 fi
|
gokhlayeh@186
|
3284 ;;
|
gokhlayeh@204
|
3285 check-commit)
|
gokhlayeh@186
|
3286 check_root
|
gokhlayeh@204
|
3287 get_options_list="missing forced"
|
gokhlayeh@186
|
3288 get_tazwok_config
|
gokhlayeh@186
|
3289 source_lib report
|
gokhlayeh@186
|
3290 report start
|
gokhlayeh@204
|
3291 if [ "$forced" ]; then
|
gokhlayeh@204
|
3292 rm -f $WOK/*/md5
|
gokhlayeh@204
|
3293 unset forced
|
gokhlayeh@204
|
3294 fi
|
gokhlayeh@204
|
3295 if [ "$missing" ]; then
|
gokhlayeh@204
|
3296 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3297 else
|
gokhlayeh@204
|
3298 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3299 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3300 } | sort -u)"
|
gokhlayeh@204
|
3301 fi
|
gokhlayeh@186
|
3302 gen_cook_list
|
gokhlayeh@186
|
3303 ;;
|
gokhlayeh@186
|
3304 cook-commit)
|
gokhlayeh@186
|
3305 check_root
|
gokhlayeh@204
|
3306 get_options_list="missing forced"
|
gokhlayeh@186
|
3307 get_tazwok_config
|
gokhlayeh@186
|
3308 source_lib report
|
gokhlayeh@186
|
3309 report start
|
gokhlayeh@204
|
3310 if [ "$forced" ]; then
|
gokhlayeh@204
|
3311 rm -f $WOK/*/md5
|
gokhlayeh@204
|
3312 unset forced
|
gokhlayeh@204
|
3313 fi
|
gokhlayeh@204
|
3314 if [ "$missing" ]; then
|
gokhlayeh@204
|
3315 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3316 else
|
gokhlayeh@204
|
3317 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3318 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3319 } | sort -u)"
|
gokhlayeh@204
|
3320 fi
|
gokhlayeh@186
|
3321 gen_cook_list
|
gokhlayeh@186
|
3322 cook_list
|
gokhlayeh@186
|
3323 ;;
|
gokhlayeh@186
|
3324 cook-all)
|
gokhlayeh@186
|
3325 check_root
|
gokhlayeh@204
|
3326 get_options_list="forced missing"
|
gokhlayeh@186
|
3327 get_tazwok_config
|
gokhlayeh@186
|
3328 source_lib report
|
gokhlayeh@186
|
3329 report start
|
gokhlayeh@204
|
3330 if [ "$missing" ]; then
|
gokhlayeh@204
|
3331 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3332 else
|
gokhlayeh@204
|
3333 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3334 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3335 } | sort -u)"
|
gokhlayeh@204
|
3336 fi
|
gokhlayeh@204
|
3337 gen_cook_list
|
gokhlayeh@186
|
3338 cook_list
|
gokhlayeh@186
|
3339 ;;
|
gokhlayeh@186
|
3340 gen-wok-db)
|
gokhlayeh@186
|
3341 check_root
|
gokhlayeh@186
|
3342 get_tazwok_config
|
gokhlayeh@186
|
3343 source_lib report
|
gokhlayeh@186
|
3344 report start
|
gokhlayeh@204
|
3345 gen_wok_db
|
gokhlayeh@186
|
3346 ;;
|
gokhlayeh@186
|
3347 report)
|
gokhlayeh@186
|
3348 get_tazwok_config
|
gokhlayeh@186
|
3349 cd $PACKAGES_REPOSITORY
|
gokhlayeh@239
|
3350 if [ "$2" ]; then
|
gokhlayeh@239
|
3351 case $2 in
|
gokhlayeh@239
|
3352 commit|cooklist|incoming|broken|blocked)
|
gokhlayeh@239
|
3353 show="$2"
|
gokhlayeh@239
|
3354 ;;
|
gokhlayeh@239
|
3355 *)
|
gokhlayeh@239
|
3356 echo "usage : tazwok report [commit|cooklist|incoming|broken|blocked]" >&2
|
gokhlayeh@239
|
3357 exit 1
|
gokhlayeh@239
|
3358 ;;
|
gokhlayeh@239
|
3359 esac
|
gokhlayeh@239
|
3360 else
|
gokhlayeh@239
|
3361 show="commit cooklist incoming broken blocked"
|
gokhlayeh@239
|
3362 fi
|
gokhlayeh@239
|
3363 for i in $show; do
|
gokhlayeh@186
|
3364 if [ -s $i ]; then
|
gokhlayeh@239
|
3365 echo ""
|
gokhlayeh@239
|
3366 echo -e "\033[1m$i\033[0m"
|
gokhlayeh@239
|
3367 echo "================================================================================"
|
gokhlayeh@239
|
3368 cat $i
|
gokhlayeh@239
|
3369 echo "================================================================================"
|
gokhlayeh@239
|
3370 echo ""
|
gokhlayeh@186
|
3371 fi
|
gokhlayeh@186
|
3372 done
|
gokhlayeh@186
|
3373 ;;
|
gokhlayeh@186
|
3374 check-incoming)
|
gokhlayeh@186
|
3375 check_root
|
gokhlayeh@214
|
3376 get_options_list="forced"
|
gokhlayeh@186
|
3377 get_tazwok_config
|
gokhlayeh@186
|
3378 source_lib report
|
gokhlayeh@186
|
3379 report start
|
gokhlayeh@307
|
3380 [ -f $LOCAL_RESOSITORY/incoming ] && rm [ -f $LOCAL_REPOSITORY/incoming ]
|
gokhlayeh@307
|
3381 report step "Checking $INCOMING_REPOSITORY"
|
gokhlayeh@307
|
3382 report open-bloc
|
gokhlayeh@313
|
3383 [ -f $LOCAL_REPOSITORY/log/incoming.html ] && rm $LOCAL_REPOSITORY/log/incoming.html
|
gokhlayeh@307
|
3384 report sublog $LOCAL_REPOSITORY/log/incoming.html
|
gokhlayeh@352
|
3385 echo "incoming" > $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
3386 check_for_incoming
|
gokhlayeh@307
|
3387 report end-sublog
|
gokhlayeh@307
|
3388 report close-bloc
|
gokhlayeh@186
|
3389 ;;
|
gokhlayeh@190
|
3390 configure-chroot)
|
gokhlayeh@190
|
3391 check_root
|
gokhlayeh@190
|
3392 get_tazwok_config
|
gokhlayeh@190
|
3393 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@190
|
3394 cd $LOCAL_REPOSITORY
|
gokhlayeh@190
|
3395 configure_tazchroot
|
gokhlayeh@190
|
3396 else
|
paul@430
|
3397 echo "The package tazchroot needs to be installed" >&2
|
gokhlayeh@190
|
3398 exit 1
|
gokhlayeh@190
|
3399 fi
|
gokhlayeh@190
|
3400 ;;
|
gokhlayeh@186
|
3401 chroot)
|
gokhlayeh@186
|
3402 check_root
|
gokhlayeh@186
|
3403 get_tazwok_config
|
gokhlayeh@186
|
3404 # Merge this and the other chroot function ?.
|
gokhlayeh@186
|
3405 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
3406 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
3407 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
3408 tazchroot
|
gokhlayeh@186
|
3409 else
|
paul@430
|
3410 echo "The package tazchroot needs to be installed" >&2
|
gokhlayeh@186
|
3411 exit 1
|
gokhlayeh@186
|
3412 fi
|
gokhlayeh@186
|
3413 ;;
|
gokhlayeh@186
|
3414 cook-toolchain)
|
gokhlayeh@186
|
3415 check_root
|
gokhlayeh@186
|
3416 get_tazwok_config
|
gokhlayeh@186
|
3417 echo -n "" > $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
3418 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
3419 cd $LOCAL_REPOSITORY
|
gokhlayeh@406
|
3420 [ -f tazchroot.conf ] || configure_tazchroot
|
gokhlayeh@406
|
3421
|
gokhlayeh@406
|
3422 # Plan to recook all packages.
|
gokhlayeh@406
|
3423 if tazchroot cook-toolchain; then
|
gokhlayeh@406
|
3424 source_lib report
|
gokhlayeh@406
|
3425 report start
|
gokhlayeh@406
|
3426 pkg="$(grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt \
|
gokhlayeh@406
|
3427 $INCOMING_REPOSITORY/packages.txt | sort -u)"
|
gokhlayeh@406
|
3428 forced=yes
|
gokhlayeh@406
|
3429 gen_cook_list
|
gokhlayeh@406
|
3430 fi
|
gokhlayeh@406
|
3431
|
gokhlayeh@406
|
3432 # Remove chroot where toolchain has been cooked.
|
gokhlayeh@406
|
3433 source $LOCAL_REPOSITORY/tazchroot.conf
|
gokhlayeh@186
|
3434 rm -r $LOCAL_REPOSITORY/chroot
|
gokhlayeh@406
|
3435
|
gokhlayeh@186
|
3436 else
|
gokhlayeh@434
|
3437 echo -e "\nThe package tazchroot needs to be installed.\n" >&2
|
gokhlayeh@186
|
3438 exit 1
|
gokhlayeh@186
|
3439 fi
|
gokhlayeh@186
|
3440 ;;
|
gokhlayeh@235
|
3441 webserver)
|
gokhlayeh@235
|
3442 check_root
|
gokhlayeh@235
|
3443 get_tazwok_config
|
gokhlayeh@235
|
3444 if [ "$ARG" = on ]; then
|
gokhlayeh@235
|
3445 if [ "$WEBSERVER" ] && [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3446 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3447 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3448 exit 1
|
gokhlayeh@235
|
3449 fi
|
gokhlayeh@235
|
3450 if ! [ -f $LOCAL_REPOSITORY/tazchroot.conf ]; then
|
gokhlayeh@235
|
3451 tazwok configure-chroot ${undigest:+--undigest=$undigest} --SLITAZ_VERSION=$SLITAZ_VERSION --SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@235
|
3452 fi
|
gokhlayeh@235
|
3453 for pkg in php lighttpd; do
|
gokhlayeh@235
|
3454 [ -d $INSTALLED/$pkg ] || missing="$missing $pkg"
|
gokhlayeh@235
|
3455 done
|
gokhlayeh@235
|
3456 if [ "$missing" ]; then
|
paul@430
|
3457 echo "You need to install these packages to start webserver: $missing." >&2
|
gokhlayeh@235
|
3458 exit 1
|
gokhlayeh@235
|
3459 fi
|
gokhlayeh@235
|
3460 if [ ! -f "$LOCAL_REPOSITORY/tazwok.conf" ]; then
|
gokhlayeh@235
|
3461 echo "Copying /etc/slitaz/tazwok.conf to $LOCAL_REPOSITORY/tazwok.conf: webserver is configured repository-by-repository."
|
gokhlayeh@235
|
3462 cp /etc/slitaz/tazwok.conf $LOCAL_REPOSITORY
|
gokhlayeh@235
|
3463 fi
|
gokhlayeh@235
|
3464 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3465 echo -n "Where to store php pages (default: /var/www/vhosts/bb)? "
|
gokhlayeh@235
|
3466 read WEBSERVER
|
gokhlayeh@235
|
3467 [ "$WEBSERVER" ] || WEBSERVER="/var/www/vhosts/bb"
|
gokhlayeh@235
|
3468 fi
|
gokhlayeh@235
|
3469 if [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3470 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3471 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3472 exit 1
|
gokhlayeh@235
|
3473 fi
|
gokhlayeh@235
|
3474 mkdir -p $WEBSERVER
|
gokhlayeh@235
|
3475 echo "${undigest:-$SLITAZ_VERSION}" >> $WEBSERVER/repositories.list
|
gokhlayeh@267
|
3476 for file in index.php log.php download.php; do
|
gokhlayeh@235
|
3477 [ -f "$WEBSERVER/$file" ] || ln -s /usr/share/slitaz/web-bb/$file $WEBSERVER
|
gokhlayeh@235
|
3478 done
|
gokhlayeh@267
|
3479 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3480 ln -s $dir $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3481 done
|
gokhlayeh@235
|
3482 source $LOCAL_REPOSITORY/tazchroot.conf
|
gokhlayeh@235
|
3483 echo "<?php
|
gokhlayeh@235
|
3484
|
gokhlayeh@235
|
3485 // Web interface configuration
|
gokhlayeh@235
|
3486
|
gokhlayeh@235
|
3487 \$version=\"${undigest:-$SLITAZ_VERSION}\";
|
gokhlayeh@235
|
3488 \$chroot=\"$chroot_dir\";
|
pascal@360
|
3489 \$lockfile=\"\$chroot/proc/1/status\";
|
gokhlayeh@235
|
3490 \$db_dir=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3491 \$log_dir=\"$LOCAL_REPOSITORY/log\";
|
gokhlayeh@235
|
3492 \$packages=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3493 \$incoming=\"$INCOMING_REPOSITORY\";
|
gokhlayeh@251
|
3494 \$wok=\"$WOK\";
|
gokhlayeh@235
|
3495
|
gokhlayeh@235
|
3496 ?>" > $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@235
|
3497 [ -L "$WEBSERVER/web" ] || ln -s /usr/share/slitaz/web $WEBSERVER
|
gokhlayeh@235
|
3498 echo "WEBSERVER=\"$WEBSERVER\"" >> $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3499 if [ -L "$WEBSERVER/conf.php" ]; then
|
paul@430
|
3500 echo "Do you want to make ${undigest:-$SLITAZ_VERSION} the default page (y/N) ? "
|
gokhlayeh@235
|
3501 read answer
|
gokhlayeh@235
|
3502 if [ "$answer" = y ]; then
|
gokhlayeh@235
|
3503 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3504 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3505 fi
|
gokhlayeh@235
|
3506 else
|
gokhlayeh@235
|
3507 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3508 fi
|
gokhlayeh@235
|
3509 elif [ "$ARG" = off ]; then
|
gokhlayeh@235
|
3510 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3511 echo "No webserver running for ${undigest:-$SLITAZ_VERSION}" >&2
|
gokhlayeh@235
|
3512 exit 1
|
gokhlayeh@235
|
3513 fi
|
gokhlayeh@235
|
3514 sed '/^WEBSERVER/d' -i $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3515 sed "/^${undigest:-$SLITAZ_VERSION}$/d" -i $WEBSERVER/repositories.list
|
gokhlayeh@235
|
3516 rm $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@267
|
3517 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3518 rm $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3519 done
|
gokhlayeh@235
|
3520 if ! [ -s "$WEBSERVER/repositories.list" ]; then
|
paul@430
|
3521 echo "$WEBSERVER/repositories.list is empty; tazwok doesn't remove the server automatically in case you have important stuff in it. If that's not the case, you can remove it using: rm -r $WEBSERVER"
|
gokhlayeh@235
|
3522 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3523 elif [ "$(readlink $WEBSERVER/conf.php)" = "$WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php" ]; then
|
gokhlayeh@235
|
3524 echo "${undigest:-$SLITAZ_VERSION} was the default version to use; switched to : $(sed 1!d $WEBSERVER/repositories.list)"
|
gokhlayeh@235
|
3525 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3526 ln -s $WEBSERVER/conf-$(sed 1!d $WEBSERVER/repositories.list).php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3527 fi
|
gokhlayeh@235
|
3528 else
|
gokhlayeh@235
|
3529 echo "Usage: tazwok webserver on/off" >&2
|
gokhlayeh@235
|
3530 exit 1
|
gokhlayeh@235
|
3531 fi
|
gokhlayeh@235
|
3532 ;;
|
pankso@354
|
3533 block)
|
pankso@354
|
3534 # Add a pkg name to the list of blocked packages.
|
gokhlayeh@367
|
3535 get_tazwok_config
|
gokhlayeh@367
|
3536 check_root
|
gokhlayeh@367
|
3537 check_for_package_on_cmdline
|
gokhlayeh@367
|
3538 if ! [ -f $WOK/$PACKAGE/receipt ]; then
|
paul@430
|
3539 echo "Can't find $PACKAGE in wok." >&2
|
gokhlayeh@367
|
3540 echo ""
|
gokhlayeh@367
|
3541 exit 1
|
gokhlayeh@367
|
3542 fi
|
pankso@354
|
3543 echo ""
|
gokhlayeh@405
|
3544 if grep -qs "^$PACKAGE$" $blocked; then
|
gokhlayeh@367
|
3545 echo "$PACKAGE is already in the blocked packages list." >&2
|
gokhlayeh@367
|
3546 echo ""
|
gokhlayeh@367
|
3547 exit 1
|
pankso@354
|
3548 else
|
gokhlayeh@405
|
3549 echo -n "Adding $PACKAGE to : $blocked... "
|
gokhlayeh@405
|
3550 echo "$PACKAGE" >> $blocked
|
gokhlayeh@367
|
3551 status
|
gokhlayeh@405
|
3552 if grep -q "^$PACKAGE$" $cooklist; then
|
gokhlayeh@405
|
3553 echo -n "Removing $PACKAGE from : $cooklist... "
|
gokhlayeh@405
|
3554 sed -i /"^$PACKAGE$"/d $cooklist
|
gokhlayeh@367
|
3555 status
|
pankso@354
|
3556 fi
|
pankso@354
|
3557 fi
|
pankso@354
|
3558 echo "" ;;
|
pankso@354
|
3559 unblock)
|
pankso@354
|
3560 # Remove a pkg name from the list of blocked packages.
|
gokhlayeh@367
|
3561 get_tazwok_config
|
gokhlayeh@367
|
3562 check_root
|
gokhlayeh@367
|
3563 check_for_package_on_cmdline
|
gokhlayeh@367
|
3564 if ! [ -f $WOK/$PACKAGE/receipt ]; then
|
paul@430
|
3565 echo "Can't find $PACKAGE in wok." >&2
|
gokhlayeh@367
|
3566 echo ""
|
gokhlayeh@367
|
3567 exit 1
|
gokhlayeh@367
|
3568 fi
|
pankso@354
|
3569 echo ""
|
gokhlayeh@405
|
3570 if grep -qs "^$PACKAGE$" $blocked; then
|
gokhlayeh@405
|
3571 echo -n "Removing $PACKAGE from : $blocked... "
|
gokhlayeh@405
|
3572 sed -i /"^$PACKAGE$"/d $blocked
|
gokhlayeh@405
|
3573 sed -i '/^$/d' $blocked
|
gokhlayeh@367
|
3574 status
|
pankso@354
|
3575 else
|
gokhlayeh@367
|
3576 echo "$PACKAGE is not in the blocked packages list." >&2
|
gokhlayeh@367
|
3577 echo ""
|
gokhlayeh@367
|
3578 exit 1
|
pankso@354
|
3579 fi
|
pankso@354
|
3580 echo "" ;;
|
pankso@7
|
3581 usage|*)
|
MikeDSmith25@82
|
3582 # Print usage also for all unknown commands.
|
pankso@7
|
3583 #
|
pankso@7
|
3584 usage
|
gokhlayeh@186
|
3585 ;;
|
pankso@7
|
3586 esac
|
pankso@7
|
3587
|
gokhlayeh@451
|
3588 # If a cook command has been used, refresh ID of the repository to avoid
|
gokhlayeh@451
|
3589 # useless upgrade at next cook command.
|
gokhlayeh@451
|
3590 case $COMMAND in
|
gokhlayeh@451
|
3591 cook*)
|
gokhlayeh@451
|
3592 for repo in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY \
|
gokhlayeh@451
|
3593 $( [ "$undigest" -a ! "$ref_USE_ONLINE_PKG" ] && echo $ref_PACKAGES_REPOSITORY ); do
|
gokhlayeh@451
|
3594 [ -f $repo/ID ] || continue
|
gokhlayeh@451
|
3595 MIRROR_path=$(grep -l "^$repo$" $LOCALSTATE/mirror $LOCALSTATE/undigest/*/mirror)
|
gokhlayeh@451
|
3596 LOCALSTATE_path=${MIRROR_path%/mirror}
|
gokhlayeh@451
|
3597 cp -a $repo/ID $LOCALSTATE_path
|
gokhlayeh@451
|
3598 done
|
gokhlayeh@451
|
3599 ;;
|
gokhlayeh@451
|
3600 esac
|
gokhlayeh@451
|
3601
|
gokhlayeh@313
|
3602 report stop 2>/dev/null
|
pankso@7
|
3603 exit 0
|