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