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@464
|
2187 copy_cooking_stuff $INCOMING_REPOSITORY/wok $PACKAGE $PACKAGES_REPOSITORY/wok &&
|
gokhlayeh@464
|
2188 rm -r $INCOMING_REPOSITORY/wok/$PACKAGE
|
gokhlayeh@204
|
2189 done
|
gokhlayeh@401
|
2190
|
gokhlayeh@449
|
2191 if [ "$save_wok" = tarball ]; then
|
gokhlayeh@415
|
2192 rm -f $PACKAGES_REPOSITORY/wok.tar.lzma
|
gokhlayeh@401
|
2193 cd $PACKAGES_REPOSITORY/wok
|
gokhlayeh@401
|
2194 report step "Generating safe-wok tarball"
|
gokhlayeh@401
|
2195 tar -c * | lzma e $PACKAGES_REPOSITORY/wok.tar.lzma
|
gokhlayeh@401
|
2196 report end-step
|
gokhlayeh@401
|
2197 fi
|
gokhlayeh@401
|
2198
|
gokhlayeh@204
|
2199 for file in packages.list packages.equiv packages.md5 packages.desc \
|
gokhlayeh@204
|
2200 packages.txt; do
|
gokhlayeh@204
|
2201 echo -n "" > $INCOMING_REPOSITORY/$file
|
gokhlayeh@204
|
2202 done
|
gokhlayeh@204
|
2203 rm -r $INCOMING_REPOSITORY/files.list.lzma
|
gokhlayeh@186
|
2204 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@313
|
2205
|
gokhlayeh@313
|
2206 report step "Updating flavors"
|
gokhlayeh@313
|
2207 if [ -x /usr/bin/tazlito ] || [ -x /usr/bin/clean-chroot ]; then
|
gokhlayeh@313
|
2208 if ! [ -x /usr/bin/tazlito ]; then
|
gokhlayeh@313
|
2209 tazpkg get-install tazlito
|
gokhlayeh@313
|
2210 fi
|
gokhlayeh@313
|
2211
|
gokhlayeh@313
|
2212 # Handle cases where tazwok is used into main system;
|
gokhlayeh@313
|
2213 # Handle cases where SLITAZ_DIR is not /home/slitaz.
|
gokhlayeh@313
|
2214 [ -L /home/slitaz/flavors ] && rm /home/slitaz/flavors
|
gokhlayeh@313
|
2215 mkdir -p /home/slitaz
|
gokhlayeh@313
|
2216 ln -s $LOCAL_REPOSITORY/flavors /home/slitaz/flavors
|
gokhlayeh@313
|
2217
|
gokhlayeh@313
|
2218 cd $LOCAL_REPOSITORY/packages
|
gokhlayeh@313
|
2219 for i in $LOCAL_REPOSITORY/flavors/*; do
|
gokhlayeh@331
|
2220 [ -d "$i" ] || continue
|
gokhlayeh@313
|
2221 tazlito pack-flavor ${i##*/}
|
gokhlayeh@313
|
2222 done
|
gokhlayeh@313
|
2223
|
gokhlayeh@313
|
2224 noheader=""
|
gokhlayeh@313
|
2225 for i in *.flavor; do
|
gokhlayeh@313
|
2226 tazlito show-flavor $i --brief $noheader
|
gokhlayeh@313
|
2227 noheader="--noheader"
|
gokhlayeh@313
|
2228 done > flavors.list
|
gokhlayeh@313
|
2229 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@313
|
2230 else
|
paul@430
|
2231 echo "Can't create up-to-date flavors because the tazlito package is missing." >&2
|
gokhlayeh@313
|
2232 fi
|
gokhlayeh@313
|
2233 report end-step
|
gokhlayeh@186
|
2234 }
|
gokhlayeh@186
|
2235
|
gokhlayeh@449
|
2236 # Usage: move_cooking_stuff source receipt destination
|
gokhlayeh@449
|
2237 # Make the argument check before calling it!
|
gokhlayeh@449
|
2238 copy_cooking_stuff()
|
gokhlayeh@449
|
2239 {
|
gokhlayeh@449
|
2240 rm -rf $3/$2
|
gokhlayeh@449
|
2241 mkdir -p $3/$2
|
gokhlayeh@449
|
2242 cp -a $1/$2/receipt $3/$2
|
gokhlayeh@449
|
2243 [ -f $1/$2/description.txt ] && \
|
gokhlayeh@449
|
2244 cp -a $1/$2/description.txt $3/$2
|
gokhlayeh@449
|
2245 if [ -d "$1/$2/stuff" ]; then
|
gokhlayeh@449
|
2246 cp -a $1/$2/stuff $3/$2
|
gokhlayeh@449
|
2247 fi
|
gokhlayeh@449
|
2248 }
|
gokhlayeh@449
|
2249
|
gokhlayeh@186
|
2250 ########################################################################
|
gokhlayeh@186
|
2251 # TAZWOK MAIN FUNCTIONS
|
gokhlayeh@186
|
2252 ########################
|
gokhlayeh@186
|
2253
|
gokhlayeh@186
|
2254 clean()
|
gokhlayeh@186
|
2255 {
|
gokhlayeh@186
|
2256 cd $WOK/$PACKAGE
|
gokhlayeh@186
|
2257 ls -A $WOK/$PACKAGE | grep -q -v -e ^receipt$ -e ^description.txt$ \
|
gokhlayeh@186
|
2258 -e ^stuff$ || return
|
gokhlayeh@186
|
2259
|
gokhlayeh@249
|
2260 [ "$COMMAND" = clean-wok ] || report step "Cleaning $PACKAGE"
|
gokhlayeh@186
|
2261 # Check for clean_wok function.
|
gokhlayeh@186
|
2262 if grep -q ^clean_wok $RECEIPT; then
|
gokhlayeh@186
|
2263 clean_wok
|
gokhlayeh@186
|
2264 fi
|
gokhlayeh@415
|
2265 # Clean should only have a receipt, stuff and optionals desc/md5.
|
gokhlayeh@186
|
2266 for f in `ls .`
|
gokhlayeh@186
|
2267 do
|
gokhlayeh@186
|
2268 case $f in
|
gokhlayeh@250
|
2269 receipt|stuff|description.txt|md5)
|
gokhlayeh@186
|
2270 continue ;;
|
gokhlayeh@186
|
2271 *)
|
gokhlayeh@263
|
2272 rm -rf $f ;;
|
gokhlayeh@186
|
2273 esac
|
gokhlayeh@186
|
2274 done
|
gokhlayeh@262
|
2275 [ "$COMMAND" != clean-wok ] && report end-step
|
gokhlayeh@186
|
2276 }
|
gokhlayeh@186
|
2277
|
gokhlayeh@186
|
2278 # Configure and make a package with the receipt.
|
gokhlayeh@186
|
2279 compile_package()
|
gokhlayeh@186
|
2280 {
|
gokhlayeh@186
|
2281 check_for_package_on_cmdline
|
gokhlayeh@186
|
2282
|
gokhlayeh@186
|
2283 # Include the receipt to get all needed variables and functions
|
gokhlayeh@186
|
2284 # and cd into the work directory to start the work.
|
gokhlayeh@186
|
2285 check_for_receipt
|
gokhlayeh@186
|
2286 source_receipt
|
gokhlayeh@186
|
2287
|
gokhlayeh@186
|
2288 # Log the package name and date.
|
gokhlayeh@186
|
2289 echo "date `date +%Y%m%d\ \%H:%M:%S`" >> $LOG
|
gokhlayeh@186
|
2290 echo "package $PACKAGE (compile)" >> $LOG
|
gokhlayeh@186
|
2291
|
gokhlayeh@186
|
2292 # Set wanted $src variable to help compiling.
|
gokhlayeh@186
|
2293 [ ! "$src" ] && set_src_path
|
gokhlayeh@186
|
2294 check_for_build_depends || return 1
|
gokhlayeh@186
|
2295 check_for_wanted
|
gokhlayeh@186
|
2296 unset target
|
gokhlayeh@186
|
2297 check_for_tarball && check_for_compile_rules
|
gokhlayeh@186
|
2298 }
|
gokhlayeh@186
|
2299
|
gokhlayeh@186
|
2300 # Cook command also include all features to manage lists which keep
|
gokhlayeh@186
|
2301 # track of wok/packages state.
|
gokhlayeh@186
|
2302 cook()
|
gokhlayeh@186
|
2303 {
|
gokhlayeh@186
|
2304 cook_code=
|
gokhlayeh@186
|
2305 set_common_path
|
gokhlayeh@186
|
2306 check_for_receipt
|
gokhlayeh@186
|
2307 source_receipt
|
gokhlayeh@186
|
2308
|
gokhlayeh@186
|
2309 # Define log path and start report.
|
gokhlayeh@415
|
2310 for i in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@415
|
2311 rm -f $LOCAL_REPOSITORY/log/$i.html
|
gokhlayeh@415
|
2312 done
|
gokhlayeh@186
|
2313 report sublog $LOCAL_REPOSITORY/log/$PACKAGE.html
|
pascal@349
|
2314 echo "$PACKAGE" > $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
2315 report step "Cooking $PACKAGE"
|
gokhlayeh@186
|
2316 report open-bloc
|
gokhlayeh@186
|
2317
|
gokhlayeh@186
|
2318 clean $PACKAGE
|
gokhlayeh@186
|
2319 [ -s $tmp/cooklist ] && sed "/^$PACKAGE$/d" -i $tmp/cooklist
|
gokhlayeh@381
|
2320
|
gokhlayeh@186
|
2321 if compile_package; then
|
gokhlayeh@215
|
2322 remove_src
|
gokhlayeh@186
|
2323 refresh_packages_from_compile
|
gokhlayeh@186
|
2324 gen_package
|
gokhlayeh@186
|
2325
|
gokhlayeh@186
|
2326 # Update packages-incoming repository.
|
gokhlayeh@186
|
2327 store_pkgname=$PACKAGE
|
gokhlayeh@186
|
2328 pkg_repository=$INCOMING_REPOSITORY
|
gokhlayeh@186
|
2329 update_packages_db
|
gokhlayeh@186
|
2330
|
gokhlayeh@186
|
2331 PACKAGE=$store_pkgname
|
gokhlayeh@186
|
2332 unset store_pkgname
|
gokhlayeh@186
|
2333
|
gokhlayeh@186
|
2334 # Upgrade to cooked packages if it was previously installed.
|
paul@430
|
2335 report step "Looking for package(s) to upgrade"
|
gokhlayeh@186
|
2336 for pkg in $(look_for_rwanted) $PACKAGE; do
|
gokhlayeh@415
|
2337 if [ -f $INSTALLED/$pkg/receipt ]; then
|
gokhlayeh@186
|
2338 tazpkg get-install $pkg --forced
|
gokhlayeh@186
|
2339 fi
|
gokhlayeh@186
|
2340 done
|
gokhlayeh@186
|
2341 report end-step
|
gokhlayeh@186
|
2342 else
|
gokhlayeh@381
|
2343 set_pkg_broken
|
gokhlayeh@186
|
2344 cook_code=1
|
gokhlayeh@186
|
2345 fi
|
gokhlayeh@186
|
2346
|
gokhlayeh@186
|
2347 # Remove build_depends in cook mode (if in cooklist, it's done when
|
gokhlayeh@186
|
2348 # checking build_depends of next package and we remove only unneeded
|
gokhlayeh@186
|
2349 # packages to keep chroot minimal and gain some time).
|
gokhlayeh@210
|
2350 if [ "$COMMAND" = cook ]; then
|
gokhlayeh@210
|
2351 remove_build_depends $MISSING_PACKAGE
|
gokhlayeh@210
|
2352 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@210
|
2353 fi
|
gokhlayeh@210
|
2354
|
gokhlayeh@186
|
2355 # Regen the cooklist if it was planned and command is not cook.
|
gokhlayeh@405
|
2356 [ "$regen_cooklist" ] && unset regen_cooklist &&
|
gokhlayeh@405
|
2357 [ "$COMMAND" != cook ] && sort_cooklist
|
gokhlayeh@186
|
2358
|
paul@430
|
2359 # Some hacks to set the bloc & function status as failed if cook has
|
gokhlayeh@186
|
2360 # failed.
|
gokhlayeh@186
|
2361 report_return_code=$cook_code
|
gokhlayeh@186
|
2362 report close-bloc
|
gokhlayeh@186
|
2363 report end-sublog
|
pascal@351
|
2364 rm -f $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
2365 return $cook_code
|
gokhlayeh@186
|
2366 }
|
gokhlayeh@186
|
2367
|
gokhlayeh@186
|
2368 cook_list()
|
gokhlayeh@186
|
2369 {
|
gokhlayeh@204
|
2370 if [ -s $tmp/cooklist ]; then
|
gokhlayeh@204
|
2371 if [ -f /usr/bin/tazchroot ]; then
|
paul@430
|
2372 # Note : options -main variables- are automatically kept by
|
gokhlayeh@204
|
2373 # the sub-applications tazchroot/tazwok; as well as report data.
|
gokhlayeh@204
|
2374 cd $LOCAL_REPOSITORY
|
gokhlayeh@204
|
2375 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@204
|
2376 tazchroot tazwok cook-list --SLITAZ_DIR=$SLITAZ_DIR --SLITAZ_VERSION=$SLITAZ_VERSION ${undigest:+ --undigest=$undigest}
|
gokhlayeh@204
|
2377 return
|
gokhlayeh@204
|
2378 fi
|
gokhlayeh@204
|
2379 while [ -s $tmp/cooklist ]; do
|
gokhlayeh@204
|
2380 PACKAGE=$(sed 1!d $tmp/cooklist)
|
gokhlayeh@204
|
2381 cook
|
gokhlayeh@204
|
2382 done
|
gokhlayeh@204
|
2383 remove_build_depends $MISSING_PACKAGE $remove_later
|
gokhlayeh@210
|
2384 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@204
|
2385 else
|
gokhlayeh@186
|
2386 echo "Nothing to cook."
|
gokhlayeh@186
|
2387 return
|
gokhlayeh@186
|
2388 fi
|
gokhlayeh@186
|
2389 }
|
gokhlayeh@186
|
2390
|
gokhlayeh@186
|
2391 configure_tazchroot()
|
gokhlayeh@186
|
2392 {
|
gokhlayeh@190
|
2393 cat > $LOCAL_REPOSITORY/tazchroot.conf << EOF
|
gokhlayeh@186
|
2394 # Tazchroot configuration file - created by tazwok.
|
gokhlayeh@186
|
2395
|
gokhlayeh@407
|
2396 # Local repository definition.
|
gokhlayeh@186
|
2397 SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@186
|
2398 SLITAZ_VERSION=$SLITAZ_VERSION
|
gokhlayeh@407
|
2399 LOCAL_REPOSITORY=$SLITAZ_DIR/${undigest:-$SLITAZ_VERSION}
|
gokhlayeh@407
|
2400 ${USE_ONLINE_PKG:+USE_ONLINE_PKG=$USE_ONLINE_PKG}
|
gokhlayeh@407
|
2401 ${undigest:+undigest=$undigest}
|
gokhlayeh@407
|
2402 ${ref_USE_ONLINE_PKG:+ref_USE_ONLINE_PKG=$ref_USE_ONLINE_PKG}
|
gokhlayeh@407
|
2403
|
gokhlayeh@407
|
2404 # Chroot path.
|
gokhlayeh@407
|
2405 # You can use a chroot into /tmp if it's mounted in RAM
|
gokhlayeh@407
|
2406 # to speed-up the process, be sure you have a free GB.
|
gokhlayeh@407
|
2407 # (minimal chroot is like 150~200MB, can be a lot more during cook)
|
gokhlayeh@407
|
2408 # chroot_dir=/tmp/chroot-${undigest:-$SLITAZ_VERSION}
|
gokhlayeh@186
|
2409 chroot_dir=\$LOCAL_REPOSITORY/chroot
|
gokhlayeh@186
|
2410
|
paul@430
|
2411 # Default scripts path (these scripts are added to the
|
paul@430
|
2412 # $chroot_dir/usr/bin and can be called with tazchroot script).
|
gokhlayeh@314
|
2413 script_dir=/usr/lib/slitaz/chroot-scripts/tazwok
|
gokhlayeh@186
|
2414
|
gokhlayeh@186
|
2415 # List of directories to mount.
|
gokhlayeh@407
|
2416 list_dir="$LOCAL_REPOSITORY
|
gokhlayeh@186
|
2417 $SLITAZ_LOG$( [ "$undigest" ] && echo -e "\n$SLITAZ_DIR/$SLITAZ_VERSION/packages" )"
|
gokhlayeh@186
|
2418
|
gokhlayeh@186
|
2419 create_chroot()
|
gokhlayeh@186
|
2420 {
|
gokhlayeh@186
|
2421 mkdir -p \$chroot_dir
|
gokhlayeh@186
|
2422 for pkg in \$(tazwok build-depends toolchain --SLITAZ_DIR=\$SLITAZ_DIR --SLITAZ_VERSION=\$SLITAZ_VERSION${undigest:+ --undigest=\$undigest}); do
|
gokhlayeh@186
|
2423 tazpkg get-install \$pkg --root="\$chroot_dir"
|
gokhlayeh@186
|
2424 done
|
gokhlayeh@186
|
2425
|
gokhlayeh@186
|
2426 # Store list of installed packages needed by cleanchroot.
|
gokhlayeh@194
|
2427 ls -1 \$chroot_dir/\$INSTALLED > \$chroot_dir/\$LOCALSTATE/chroot-pkgs
|
gokhlayeh@186
|
2428
|
gokhlayeh@186
|
2429 sed -e "s~^SLITAZ_DIR=.*~SLITAZ_DIR=\$SLITAZ_DIR~" \\
|
gokhlayeh@186
|
2430 -e "s/^SLITAZ_VERSION=.*/SLITAZ_VERSION=\$SLITAZ_VERSION/" \\
|
gokhlayeh@186
|
2431 -i \$chroot_dir/etc/slitaz/slitaz.conf
|
gokhlayeh@443
|
2432 echo \$SLITAZ_VERSION > \$chroot_dir/etc/slitaz-release
|
gokhlayeh@186
|
2433 $( [ "$undigest" ] && echo ' echo "undigest='"$undigest"'" >> $chroot_dir/etc/slitaz/tazwok.conf')
|
gokhlayeh@186
|
2434 sed 's/LC_ALL/LC_ALL=POSIX/' -i \$chroot_dir/etc/profile
|
gokhlayeh@407
|
2435
|
paul@430
|
2436 # The build bot may run in a sandbox: link sandbox lockfile.
|
pascal@368
|
2437 ln -s \$LOCAL_REPOSITORY/sandbox/proc/1 \$chroot_dir/proc/1
|
gokhlayeh@186
|
2438 }
|
gokhlayeh@186
|
2439
|
gokhlayeh@186
|
2440 mount_chroot()
|
gokhlayeh@186
|
2441 {
|
gokhlayeh@186
|
2442 cp -a /etc/resolv.conf \$chroot_dir/etc/resolv.conf
|
gokhlayeh@407
|
2443 $( if [ "$USE_ONLINE_PKG" ]; then
|
gokhlayeh@407
|
2444 echo ' echo "$USE_ONLINE_PKG" > $chroot_dir$LOCALSTATE/mirror'
|
gokhlayeh@407
|
2445 else
|
gokhlayeh@452
|
2446 echo ' echo "$LOCAL_REPOSITORY/packages" > $chroot_dir$LOCALSTATE/mirror'
|
gokhlayeh@407
|
2447 fi
|
gokhlayeh@407
|
2448 )
|
gokhlayeh@194
|
2449 mkdir -p \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming
|
gokhlayeh@194
|
2450 echo "\$LOCAL_REPOSITORY/packages-incoming" > \$chroot_dir\$LOCALSTATE/undigest/\${LOCAL_REPOSITORY##*/}-incoming/mirror
|
gokhlayeh@448
|
2451 $( if [ "$undigest" ]; then
|
gokhlayeh@448
|
2452 echo ' mkdir -p $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION'
|
gokhlayeh@448
|
2453 if [ "$ref_USE_ONLINE_PKG" ]; then
|
gokhlayeh@448
|
2454 echo ' echo "$ref_USE_ONLINE_PKG" > $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION/mirror'
|
gokhlayeh@448
|
2455 else
|
gokhlayeh@448
|
2456 echo ' echo "$ref_LOCAL_REPOSITORY/packages" > $chroot_dir$LOCALSTATE/undigest/$SLITAZ_VERSION/mirror'
|
gokhlayeh@448
|
2457 fi
|
gokhlayeh@448
|
2458 fi )
|
gokhlayeh@194
|
2459 echo -e "\${LOCAL_REPOSITORY##*/}-incoming\nmain" > \$chroot_dir\$LOCALSTATE/priority
|
gokhlayeh@440
|
2460 mount -o bind /proc \$chroot_dir/proc
|
gokhlayeh@440
|
2461 mount -o bind /sys \$chroot_dir/sys
|
gokhlayeh@433
|
2462 mount -o bind /dev/pts \$chroot_dir/dev/pts
|
gokhlayeh@433
|
2463 mount -o bind /dev/shm \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2464 for dir in \$list_dir; do
|
gokhlayeh@186
|
2465 mkdir -p \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2466 mount \$dir \$chroot_dir\$dir
|
gokhlayeh@186
|
2467 done
|
gokhlayeh@186
|
2468 }
|
gokhlayeh@186
|
2469
|
gokhlayeh@186
|
2470 umount_chroot()
|
gokhlayeh@186
|
2471 {
|
gokhlayeh@186
|
2472 for dir in \$list_dir; do
|
gokhlayeh@186
|
2473 umount \$chroot_dir\$dir
|
gokhlayeh@186
|
2474 done
|
gokhlayeh@186
|
2475 umount \$chroot_dir/dev/shm
|
gokhlayeh@186
|
2476 umount \$chroot_dir/dev/pts
|
gokhlayeh@186
|
2477 umount \$chroot_dir/sys
|
gokhlayeh@186
|
2478 umount \$chroot_dir/proc
|
gokhlayeh@186
|
2479 }
|
gokhlayeh@186
|
2480 EOF
|
gokhlayeh@186
|
2481 }
|
gokhlayeh@186
|
2482
|
gokhlayeh@186
|
2483 ########################################################################
|
gokhlayeh@186
|
2484 ######################### END OF NEW FUNCTIONS #########################
|
gokhlayeh@186
|
2485 ########################################################################
|
gokhlayeh@186
|
2486
|
paul@430
|
2487 # List packages providing a virtual package.
|
pascal@111
|
2488 whoprovide()
|
pascal@111
|
2489 {
|
pascal@111
|
2490 local i;
|
gokhlayeh@195
|
2491 for i in $(fgrep -l PROVIDE $WOK/*/receipt); do
|
pascal@111
|
2492 . $i
|
pascal@111
|
2493 case " $PROVIDE " in
|
pascal@111
|
2494 *\ $1\ *|*\ $1:*) echo $(basename $(dirname $i));;
|
pascal@111
|
2495 esac
|
pascal@111
|
2496 done
|
pascal@111
|
2497 }
|
pascal@111
|
2498
|
gokhlayeh@186
|
2499 ########################################################################
|
gokhlayeh@186
|
2500 # TAZWOK COMMANDS
|
gokhlayeh@186
|
2501 ########################
|
pankso@7
|
2502
|
pankso@7
|
2503 case "$COMMAND" in
|
pankso@7
|
2504 stats)
|
paul@166
|
2505 # Tazwok general statistics from the wok config file.
|
pankso@7
|
2506 #
|
gokhlayeh@186
|
2507 get_tazwok_config
|
gokhlayeh@186
|
2508 echo -e "\n\033[1mTazwok configuration statistics\033[0m
|
pankso@7
|
2509 ================================================================================
|
pankso@7
|
2510 Wok directory : $WOK
|
pankso@7
|
2511 Packages repository : $PACKAGES_REPOSITORY
|
gokhlayeh@186
|
2512 Incoming repository : $INCOMING_REPOSITORY
|
pankso@7
|
2513 Sources repository : $SOURCES_REPOSITORY
|
gokhlayeh@186
|
2514 Log directory : $LOCAL_REPOSITORY/log
|
pankso@7
|
2515 Packages in the wok : `ls -1 $WOK | wc -l`
|
pankso@16
|
2516 Cooked packages : `ls -1 $PACKAGES_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2517 Incoming packages : `ls -1 $INCOMING_REPOSITORY/*.tazpkg 2>/dev/null | wc -l`
|
gokhlayeh@186
|
2518 ================================================================================\n"
|
gokhlayeh@186
|
2519 ;;
|
pankso@133
|
2520 edit)
|
gokhlayeh@186
|
2521 get_tazwok_config
|
pankso@133
|
2522 check_for_package_on_cmdline
|
pankso@133
|
2523 check_for_receipt
|
gokhlayeh@186
|
2524 $EDITOR $WOK/$PACKAGE/receipt
|
gokhlayeh@186
|
2525 ;;
|
pascal@98
|
2526 build-depends)
|
paul@430
|
2527 # List dependencies to rebuild wok, or only a package.
|
gokhlayeh@186
|
2528 get_tazwok_config
|
gokhlayeh@215
|
2529 report(){ : ; }
|
gokhlayeh@242
|
2530 if [ ! "$PACKAGE" ] || [ "$PACKAGE" = toolchain ]; then
|
gokhlayeh@186
|
2531 scan "$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA" \
|
gokhlayeh@186
|
2532 --look_for=dep --with_dev --with_args
|
gokhlayeh@186
|
2533 else
|
gokhlayeh@186
|
2534 check_for_package_on_cmdline
|
gokhlayeh@186
|
2535 scan $PACKAGE --look_for=bdep --with_dev
|
gokhlayeh@186
|
2536 fi
|
gokhlayeh@186
|
2537 ;;
|
gokhlayeh@186
|
2538 gen-cooklist)
|
gokhlayeh@215
|
2539 check_root
|
gokhlayeh@204
|
2540 get_options_list="pkg"
|
gokhlayeh@186
|
2541 get_tazwok_config
|
gokhlayeh@215
|
2542 report(){ : ; }
|
gokhlayeh@204
|
2543 if ! [ "$pkg" ]; then
|
gokhlayeh@242
|
2544 if [ ! "$LIST" ] || [ "$LIST" = toolchain ]; then
|
gokhlayeh@242
|
2545 pkg="$SLITAZ_TOOLCHAIN $SLITAZ_TOOLCHAIN_EXTRA"
|
gokhlayeh@242
|
2546 else
|
gokhlayeh@405
|
2547 check_for_list
|
gokhlayeh@242
|
2548 fi
|
gokhlayeh@186
|
2549 fi
|
gokhlayeh@204
|
2550 gen_cook_list
|
gokhlayeh@186
|
2551 ;;
|
pascal@119
|
2552 check-depends)
|
paul@430
|
2553 # Check package depends /!\.
|
gokhlayeh@186
|
2554 get_tazwok_config
|
pascal@119
|
2555 echo ""
|
paul@121
|
2556 echo -e "\033[1mCheck every receipt for DEPENDS - doesn't scan ELF files\033[0m
|
pascal@119
|
2557 ================================================================================"
|
pascal@119
|
2558 TMPDIR=/tmp/tazwok$$
|
pascal@119
|
2559 DEFAULT_DEPENDS="glibc-base gcc-lib-base"
|
pascal@119
|
2560
|
paul@430
|
2561 # Build ALL_DEPENDS variable.
|
pascal@119
|
2562 scan_dep()
|
pascal@119
|
2563 {
|
pascal@119
|
2564 local i
|
pascal@119
|
2565 ALL_DEPENDS="$ALL_DEPENDS$PACKAGE "
|
pascal@128
|
2566 for i in $DEPENDS $SUGGESTED ; do
|
pascal@119
|
2567 case " $ALL_DEPENDS " in
|
pascal@119
|
2568 *\ $i\ *) continue;;
|
pascal@119
|
2569 esac
|
pascal@120
|
2570 [ -d $WOK/$i ] || {
|
pascal@120
|
2571 ALL_DEPENDS="$ALL_DEPENDS$i "
|
pascal@120
|
2572 continue
|
pascal@120
|
2573 }
|
pascal@128
|
2574 DEPENDS=""
|
pascal@128
|
2575 SUGGESTED=""
|
pascal@119
|
2576 . $WOK/$i/receipt
|
pascal@119
|
2577 scan_dep
|
pascal@119
|
2578 done
|
pascal@119
|
2579 }
|
pankso@133
|
2580
|
paul@430
|
2581 # Check for ELF file.
|
pascal@119
|
2582 is_elf()
|
pascal@119
|
2583 {
|
slaxemulator@323
|
2584 [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ]
|
pascal@119
|
2585 }
|
pascal@119
|
2586
|
paul@430
|
2587 # Print shared library dependencies.
|
pascal@119
|
2588 ldd()
|
pascal@119
|
2589 {
|
pascal@130
|
2590 LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null
|
pascal@119
|
2591 }
|
pascal@119
|
2592
|
pascal@119
|
2593 mkdir $TMPDIR
|
pascal@119
|
2594 cd $TMPDIR
|
pascal@140
|
2595 for i in $LOCALSTATE/files.list.lzma \
|
pascal@140
|
2596 $LOCALSTATE/undigest/*/files.list.lzma ; do
|
pascal@119
|
2597 [ -f $i ] && lzma d $i -so >> files.list
|
pascal@119
|
2598 done
|
pascal@119
|
2599 for pkg in $PACKAGES_REPOSITORY/*.tazpkg ; do
|
pascal@119
|
2600 tazpkg extract $pkg > /dev/null 2>&1
|
pascal@119
|
2601 . */receipt
|
pascal@119
|
2602 ALL_DEPENDS="$DEFAULT_DEPENDS "
|
pascal@119
|
2603 scan_dep
|
pascal@119
|
2604 find */fs -type f | while read file ; do
|
pascal@119
|
2605 is_elf $file || continue
|
pascal@119
|
2606 case "$file" in
|
pascal@119
|
2607 *.o|*.ko|*.ko.gz) continue;;
|
pascal@119
|
2608 esac
|
pascal@119
|
2609 ldd $file | while read lib rem; do
|
pascal@119
|
2610 case "$lib" in
|
pascal@128
|
2611 statically|linux-gate.so*|ld-*.so|*/ld-*.so)
|
pascal@119
|
2612 continue;;
|
pascal@119
|
2613 esac
|
gokhlayeh@195
|
2614 for dep in $(fgrep $lib files.list | cut -d: -f1); do
|
pascal@119
|
2615 case " $ALL_DEPENDS " in
|
pascal@119
|
2616 *\ $dep\ *) continue 2;;
|
pascal@119
|
2617 esac
|
gokhlayeh@195
|
2618 for vdep in $(fgrep $dep $LOCALSTATE/packages.equiv | cut -d= -f1); do
|
pascal@128
|
2619 case " $ALL_DEPENDS " in
|
pascal@129
|
2620 *\ $vdep\ *) continue 3;;
|
pascal@128
|
2621 esac
|
pascal@128
|
2622 done
|
pascal@119
|
2623 done
|
pascal@128
|
2624 [ -n "$dep" ] || dep="UNKNOWN"
|
pascal@119
|
2625 echo "$(basename $pkg): ${file#*fs} depends on package $dep for the shared library $lib"
|
pascal@119
|
2626 done
|
pascal@119
|
2627 done
|
pascal@119
|
2628 rm -rf */
|
pascal@119
|
2629 done
|
pascal@119
|
2630 cd /tmp
|
pascal@119
|
2631 rm -rf $TMPDIR
|
gokhlayeh@186
|
2632 ;;
|
pascal@76
|
2633 check)
|
paul@430
|
2634 # Check wok consistency.
|
gokhlayeh@186
|
2635 get_tazwok_config
|
pascal@76
|
2636 echo ""
|
pascal@76
|
2637 echo -e "\033[1mWok and packages checking\033[0m
|
pascal@76
|
2638 ================================================================================"
|
pascal@77
|
2639 cd $WOK
|
pascal@77
|
2640 for pkg in $(ls)
|
pascal@76
|
2641 do
|
pascal@76
|
2642 [ -f $pkg/receipt ] || continue
|
gokhlayeh@186
|
2643 RECEIPT= $pkg/receipt
|
gokhlayeh@186
|
2644 source_receipt
|
gokhlayeh@186
|
2645 [ "$PACKAGE" = "$pkg" ] || echo "Package $PACKAGE should be $pkg" >&2
|
gokhlayeh@186
|
2646 [ -n "$VERSION" ] || echo "Package $PACKAGE has no VERSION" >&2
|
gokhlayeh@186
|
2647 [ -n "$PACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded PACKED_SIZE" >&2
|
gokhlayeh@186
|
2648 [ -n "$UNPACKED_SIZE" ] && echo "Package $PACKAGE has hardcoded UNPACKED_SIZE" >&2
|
gokhlayeh@186
|
2649 [ -n "$EXTRAVERSION" ] && echo "Package $PACKAGE has hardcoded EXTRAVERSION" >&2
|
pascal@97
|
2650 if [ -n "$WANTED" ]; then
|
pascal@97
|
2651 if [ ! -f $WANTED/receipt ]; then
|
gokhlayeh@186
|
2652 echo "Package $PACKAGE wants unknown $WANTED package" >&2
|
pascal@97
|
2653 else
|
pascal@97
|
2654 BASEVERSION=$(. $WANTED/receipt ; echo $VERSION)
|
pascal@103
|
2655 if [ "$VERSION" = "$WANTED" ]; then
|
pascal@103
|
2656 # BASEVERSION is computed in receipt
|
gokhlayeh@195
|
2657 fgrep -q '_pkg=' $pkg/receipt &&
|
pascal@103
|
2658 BASEVERSION=$VERSION
|
pascal@103
|
2659 fi
|
pascal@97
|
2660 if [ "$VERSION" != "$BASEVERSION" ]; then
|
gokhlayeh@186
|
2661 echo "Package $PACKAGE ($VERSION) wants $WANTED ($BASEVERSION)" >&2
|
pascal@97
|
2662 fi
|
pascal@97
|
2663 fi
|
pascal@97
|
2664 fi
|
pascal@97
|
2665
|
pascal@94
|
2666 if [ -n "$CATEGORY" ]; then
|
pascal@94
|
2667 case " $(echo $CATEGORIES) " in
|
pascal@94
|
2668 *\ $CATEGORY\ *);;
|
gokhlayeh@186
|
2669 *) echo "Package $PACKAGE has an invalid CATEGORY" >&2;;
|
pascal@94
|
2670 esac
|
pascal@94
|
2671 else
|
gokhlayeh@186
|
2672 echo"Package $PACKAGE has no CATEGORY" >&2
|
pascal@94
|
2673 fi
|
gokhlayeh@186
|
2674 [ -n "$SHORT_DESC" ] || echo "Package $PACKAGE has no SHORT_DESC" >&2
|
gokhlayeh@186
|
2675 [ -n "$MAINTAINER" ] || echo "Package $PACKAGE has no MAINTAINER" >&2
|
pascal@122
|
2676 case "$WGET_URL" in
|
pascal@178
|
2677 ftp*|http*) busybox wget -s $WGET_URL 2> /dev/null ||
|
gokhlayeh@186
|
2678 echo "Package $PACKAGE has a wrong WGET_URL" >&2;;
|
pascal@122
|
2679 '') ;;
|
gokhlayeh@186
|
2680 *) echo "Package $PACKAGE has an invalid WGET_URL" >&2;;
|
pascal@122
|
2681 esac
|
pascal@112
|
2682 case "$WEB_SITE" in
|
pascal@125
|
2683 ftp*|http*);;
|
gokhlayeh@186
|
2684 '') echo "Package $PACKAGE has no WEB_SITE" >&2;;
|
gokhlayeh@186
|
2685 *) echo "Package $PACKAGE has an invalid WEB_SITE" >&2;;
|
pascal@112
|
2686 esac
|
pascal@78
|
2687 case "$MAINTAINER" in
|
gokhlayeh@186
|
2688 *\<*|*\>*) echo "Package $PACKAGE has an invalid MAINTAINER: $MAINTAINER" >&2;;
|
pascal@78
|
2689 esac
|
pascal@78
|
2690 case "$MAINTAINER" in
|
pascal@78
|
2691 *@*);;
|
gokhlayeh@186
|
2692 *) echo "Package $PACKAGE MAINTAINER is not an email address" >&2;;
|
pascal@78
|
2693 esac
|
gokhlayeh@186
|
2694 MSG="Missing dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@76
|
2695 for i in $DEPENDS; do
|
pascal@76
|
2696 [ -d $i ] && continue
|
pascal@111
|
2697 [ -n "$(whoprovide $i)" ] && continue
|
pascal@76
|
2698 echo -e "$MSG $i"
|
pascal@76
|
2699 MSG=""
|
pascal@76
|
2700 done
|
gokhlayeh@186
|
2701 MSG="Missing build dependencies for $PACKAGE $VERSION$EXTRAVERSION :\n" >&2
|
pascal@92
|
2702 for i in $BUILD_DEPENDS; do
|
pascal@92
|
2703 [ -d $i ] && continue
|
pascal@111
|
2704 [ -n "$(whoprovide $i)" ] && continue
|
pascal@92
|
2705 echo -e "$MSG $i"
|
pascal@92
|
2706 MSG=""
|
pascal@92
|
2707 done
|
paul@430
|
2708 MSG="Dependency loop between $PACKAGE and :\n"
|
pascal@76
|
2709 ALL_DEPS=""
|
pascal@76
|
2710 check_for_deps_loop $PACKAGE $DEPENDS
|
pascal@140
|
2711 [ -d $WOK/$pkg/taz ] && for i in $BUILD_DEPENDS; do
|
pascal@141
|
2712 [ $WOK/$pkg/taz -nt $INSTALLED/$i/files.list ] && continue
|
paul@154
|
2713 echo "$pkg should be rebuilt after $i installation"
|
pascal@140
|
2714 done
|
pascal@76
|
2715 done
|
gokhlayeh@186
|
2716 ;;
|
pankso@7
|
2717 list)
|
paul@166
|
2718 # List packages in wok directory. User can specify a category.
|
pankso@7
|
2719 #
|
gokhlayeh@186
|
2720 get_tazwok_config
|
pankso@7
|
2721 if [ "$2" = "category" ]; then
|
pankso@7
|
2722 echo -e "\033[1m\nPackages categories :\033[0m $CATEGORIES\n"
|
pankso@7
|
2723 exit 0
|
pankso@7
|
2724 fi
|
pankso@7
|
2725 # Check for an asked category.
|
pankso@7
|
2726 if [ -n "$2" ]; then
|
pankso@7
|
2727 ASKED_CATEGORY=$2
|
pankso@7
|
2728 echo ""
|
pankso@7
|
2729 echo -e "\033[1mPackages in category :\033[0m $ASKED_CATEGORY"
|
pankso@7
|
2730 echo "================================================================================"
|
pankso@7
|
2731 for pkg in $WOK/*
|
pankso@7
|
2732 do
|
erjo@168
|
2733 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2734 . $pkg/receipt
|
pankso@7
|
2735 if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then
|
pankso@7
|
2736 echo -n "$PACKAGE"
|
pankso@28
|
2737 echo -e "\033[28G $VERSION"
|
pankso@7
|
2738 packages=$(($packages+1))
|
pankso@7
|
2739 fi
|
pankso@7
|
2740 done
|
pankso@7
|
2741 echo "================================================================================"
|
pankso@7
|
2742 echo -e "$packages packages in category $ASKED_CATEGORY.\n"
|
pankso@7
|
2743 else
|
pankso@7
|
2744 # By default list all packages and version.
|
pankso@7
|
2745 echo ""
|
pankso@7
|
2746 echo -e "\033[1mList of packages in the wok\033[0m"
|
pankso@7
|
2747 echo "================================================================================"
|
pankso@7
|
2748 for pkg in $WOK/*
|
pankso@7
|
2749 do
|
erjo@168
|
2750 [ ! -f $pkg/receipt ] && continue
|
pankso@7
|
2751 . $pkg/receipt
|
pankso@7
|
2752 echo -n "$PACKAGE"
|
pankso@28
|
2753 echo -en "\033[28G $VERSION"
|
pankso@7
|
2754 echo -e "\033[42G $CATEGORY"
|
pankso@7
|
2755 packages=$(($packages+1))
|
pankso@7
|
2756 done
|
pankso@7
|
2757 echo "================================================================================"
|
MikeDSmith25@82
|
2758 echo -e "$packages packages available in the wok.\n"
|
pankso@7
|
2759 fi
|
pankso@7
|
2760 ;;
|
pankso@7
|
2761 info)
|
MikeDSmith25@82
|
2762 # Information about a package.
|
pankso@7
|
2763 #
|
gokhlayeh@186
|
2764 get_tazwok_config
|
pankso@7
|
2765 check_for_package_on_cmdline
|
pankso@7
|
2766 check_for_receipt
|
pankso@7
|
2767 . $WOK/$PACKAGE/receipt
|
pankso@7
|
2768 echo ""
|
MikeDSmith25@82
|
2769 echo -e "\033[1mTazwok package information\033[0m
|
pankso@7
|
2770 ================================================================================
|
pankso@7
|
2771 Package : $PACKAGE
|
pankso@7
|
2772 Version : $VERSION
|
pankso@7
|
2773 Category : $CATEGORY
|
pankso@7
|
2774 Short desc : $SHORT_DESC
|
pankso@7
|
2775 Maintainer : $MAINTAINER"
|
pankso@7
|
2776 if [ ! "$WEB_SITE" = "" ]; then
|
pankso@7
|
2777 echo "Web site : $WEB_SITE"
|
pankso@7
|
2778 fi
|
pankso@7
|
2779 if [ ! "$DEPENDS" = "" ]; then
|
pankso@7
|
2780 echo "Depends : $DEPENDS"
|
pankso@7
|
2781 fi
|
pankso@7
|
2782 if [ ! "$WANTED" = "" ]; then
|
pankso@7
|
2783 echo "Wanted src : $WANTED"
|
pankso@7
|
2784 fi
|
pankso@7
|
2785 echo "================================================================================"
|
pankso@7
|
2786 echo ""
|
gokhlayeh@186
|
2787 ;;
|
pankso@7
|
2788 check-log)
|
pankso@7
|
2789 # We just cat the file log to view process info.
|
pankso@7
|
2790 #
|
gokhlayeh@186
|
2791 get_tazwok_config
|
pankso@7
|
2792 if [ ! -f "$LOG" ]; then
|
gokhlayeh@186
|
2793 echo -e "\nNo process log found. The package is probably not cooked.\n" >&2
|
gokhlayeh@186
|
2794 exit 1
|
pankso@7
|
2795 else
|
pankso@7
|
2796 echo ""
|
pankso@7
|
2797 echo -e "\033[1mPackage process log for :\033[0m $PACKAGE"
|
pankso@7
|
2798 echo "================================================================================"
|
pankso@7
|
2799 cat $LOG
|
pankso@7
|
2800 echo "================================================================================"
|
pankso@7
|
2801 echo ""
|
gokhlayeh@237
|
2802 if [ -s "$WOK/$PACKAGE/warning.txt" ]; then
|
gokhlayeh@237
|
2803 echo -e "\033[1mCook warning(s) for :\033[0m $PACKAGE"
|
gokhlayeh@237
|
2804 echo "================================================================================"
|
gokhlayeh@237
|
2805 cat "$WOK/$PACKAGE/warning.txt"
|
gokhlayeh@237
|
2806 echo "================================================================================"
|
gokhlayeh@237
|
2807 echo ""
|
gokhlayeh@237
|
2808 fi
|
pankso@7
|
2809 fi
|
gokhlayeh@186
|
2810 ;;
|
pankso@7
|
2811 search)
|
pankso@7
|
2812 # Search for a package by pattern or name.
|
pankso@7
|
2813 #
|
gokhlayeh@186
|
2814 get_tazwok_config
|
pankso@7
|
2815 if [ -z "$2" ]; then
|
gokhlayeh@186
|
2816 echo -e "\nPlease specify a pattern or a package name to search." >&2
|
gokhlayeh@186
|
2817 echo -e "Example : 'tazwok search gcc'.\n" >&2
|
gokhlayeh@186
|
2818 exit 1
|
pankso@7
|
2819 fi
|
pankso@7
|
2820 echo ""
|
pankso@7
|
2821 echo -e "\033[1mSearch result for :\033[0m $2"
|
pankso@7
|
2822 echo "================================================================================"
|
gokhlayeh@195
|
2823 list=`ls -1 $WOK | fgrep $2`
|
pankso@7
|
2824 for pkg in $list
|
pankso@7
|
2825 do
|
pankso@7
|
2826 . $WOK/$pkg/receipt
|
pankso@7
|
2827 echo -n "$PACKAGE "
|
pankso@7
|
2828 echo -en "\033[24G $VERSION"
|
pankso@7
|
2829 echo -e "\033[42G $CATEGORY"
|
gokhlayeh@186
|
2830 packages=$(($PACKAGEs+1))
|
pankso@7
|
2831 done
|
pankso@7
|
2832 echo "================================================================================"
|
pankso@7
|
2833 echo "$packages packages found for : $2"
|
pankso@7
|
2834 echo ""
|
gokhlayeh@186
|
2835 ;;
|
pankso@7
|
2836 compile)
|
pankso@7
|
2837 # Configure and make a package with the receipt.
|
pankso@7
|
2838 #
|
gokhlayeh@186
|
2839 get_tazwok_config
|
gokhlayeh@186
|
2840 source_lib report
|
gokhlayeh@186
|
2841 report start
|
pankso@7
|
2842 compile_package
|
gokhlayeh@186
|
2843 ;;
|
pankso@7
|
2844 genpkg)
|
paul@121
|
2845 # Generate a package.
|
pankso@7
|
2846 #
|
gokhlayeh@186
|
2847 get_tazwok_config
|
gokhlayeh@186
|
2848 source_lib report
|
gokhlayeh@186
|
2849 report start
|
pankso@7
|
2850 gen_package
|
gokhlayeh@186
|
2851 ;;
|
pankso@7
|
2852 cook)
|
pankso@7
|
2853 # Compile and generate a package. Just execute tazwok with
|
pankso@7
|
2854 # the good commands.
|
pankso@7
|
2855 #
|
pankso@7
|
2856 check_root
|
gokhlayeh@186
|
2857 get_tazwok_config
|
gokhlayeh@186
|
2858 source_lib report
|
gokhlayeh@186
|
2859 report start
|
gokhlayeh@215
|
2860 update_wan_db
|
gokhlayeh@215
|
2861 check_for_commit
|
gokhlayeh@215
|
2862 [ "$plan_sort_depdb" ] && sort -o $dep_db $dep_db && unset plan_sort_depdb
|
gokhlayeh@215
|
2863 [ "$plan_sort_wandb" ] && sort -o $wan_db $wan_db && unset plan_sort_wandb
|
gokhlayeh@215
|
2864 if [ "$plan_regen_cookorder" ]; then
|
gokhlayeh@397
|
2865 [ "$(sed 1!d $cookorder)" = "#PlanSort" ] || \
|
gokhlayeh@397
|
2866 sed 1i"#PlanSort" -i $cookorder
|
gokhlayeh@215
|
2867 fi
|
gokhlayeh@186
|
2868 cook
|
gokhlayeh@186
|
2869 ;;
|
gokhlayeh@186
|
2870 sort-cooklist)
|
gokhlayeh@297
|
2871 check_root
|
gokhlayeh@186
|
2872 get_tazwok_config
|
gokhlayeh@405
|
2873 check_for_list
|
gokhlayeh@297
|
2874 report(){ : ; }
|
gokhlayeh@297
|
2875 # When using sort-cooklist, the script should behave as for gen-cooklist
|
paul@430
|
2876 # The only difference between these two is where the output is sent.
|
gokhlayeh@297
|
2877 COMMAND=gen-cooklist
|
gokhlayeh@297
|
2878 gen_cook_list
|
gokhlayeh@405
|
2879 cp -af $tmp/cooklist $LIST
|
gokhlayeh@186
|
2880 ;;
|
pankso@7
|
2881 cook-list)
|
gokhlayeh@204
|
2882 # Cook all packages listed in a file or in default cooklist.
|
gokhlayeh@186
|
2883 check_root
|
gokhlayeh@204
|
2884 get_options_list="pkg forced"
|
gokhlayeh@186
|
2885 get_tazwok_config
|
gokhlayeh@186
|
2886 source_lib report
|
gokhlayeh@186
|
2887 report start
|
gokhlayeh@204
|
2888 if ! [ "$pkg" ]; then
|
gokhlayeh@405
|
2889 [ "$LIST" ] && check_for_list
|
gokhlayeh@186
|
2890 fi
|
gokhlayeh@204
|
2891 gen_cook_list
|
gokhlayeh@186
|
2892 cook_list
|
gokhlayeh@186
|
2893 ;;
|
gokhlayeh@186
|
2894 clean)
|
paul@430
|
2895 # Clean up a package work directory + those which want it.
|
pankso@7
|
2896 #
|
gokhlayeh@186
|
2897 get_tazwok_config
|
pankso@7
|
2898 check_for_package_on_cmdline
|
pankso@7
|
2899 check_for_receipt
|
gokhlayeh@186
|
2900 source_lib report
|
gokhlayeh@186
|
2901 report start
|
pankso@7
|
2902 . $RECEIPT
|
gokhlayeh@186
|
2903 clean
|
gokhlayeh@186
|
2904 ;;
|
pankso@7
|
2905 gen-clean-wok)
|
paul@121
|
2906 # Generate a clean wok from the current wok by copying all receipts
|
pankso@7
|
2907 # and stuff directory.
|
pankso@7
|
2908 #
|
gokhlayeh@186
|
2909 get_tazwok_config
|
gokhlayeh@186
|
2910 source_lib report
|
gokhlayeh@186
|
2911 report start
|
gokhlayeh@186
|
2912 if [ -z "$ARG" ]; then
|
gokhlayeh@186
|
2913 echo -e "\nPlease specify the destination for the new clean wok.\n" >&2
|
gokhlayeh@186
|
2914 exit 1
|
pankso@7
|
2915 else
|
gokhlayeh@186
|
2916 dest=$ARG
|
pankso@7
|
2917 mkdir -p $dest
|
pankso@7
|
2918 fi
|
gokhlayeh@186
|
2919 report step "Creating clean wok in : $dest"
|
pankso@7
|
2920 for pkg in `ls -1 $WOK`
|
pankso@7
|
2921 do
|
gokhlayeh@449
|
2922 copy_cooking_stuff $WOK $pkg $dest
|
pankso@7
|
2923 done
|
gokhlayeh@186
|
2924 [ -d $WOK/.hg ] && cp -a $WOK/.hg $dest
|
gokhlayeh@186
|
2925 report end-step
|
pankso@7
|
2926 echo "Packages cleaned : `ls -1 $dest | wc -l`"
|
pankso@7
|
2927 echo ""
|
gokhlayeh@186
|
2928 ;;
|
pankso@7
|
2929 clean-wok)
|
paul@430
|
2930 # Clean all packages in the work directory.
|
pankso@7
|
2931 #
|
gokhlayeh@186
|
2932 get_tazwok_config
|
gokhlayeh@186
|
2933 source_lib report
|
gokhlayeh@186
|
2934 report start
|
gokhlayeh@186
|
2935 report step "Cleaning wok"
|
gokhlayeh@186
|
2936 for PACKAGE in `ls -1 $WOK`
|
pankso@7
|
2937 do
|
gokhlayeh@186
|
2938 set_common_path
|
gokhlayeh@186
|
2939 source_receipt
|
gokhlayeh@186
|
2940 clean
|
pankso@7
|
2941 done
|
pankso@7
|
2942 echo "`ls -1 $WOK | wc -l` packages cleaned."
|
gokhlayeh@186
|
2943 ;;
|
gokhlayeh@266
|
2944 clean-src)
|
gokhlayeh@266
|
2945 # Remove tarball unrelated to wok receipts from src repo.
|
gokhlayeh@266
|
2946 check_root
|
gokhlayeh@266
|
2947 get_options_list="forced"
|
gokhlayeh@266
|
2948 get_tazwok_config
|
gokhlayeh@266
|
2949 cd $SOURCES_REPOSITORY
|
gokhlayeh@266
|
2950 echo -n "Checking $SOURCES_REPOSITORY..."
|
gokhlayeh@266
|
2951 for TARBALL in *; do
|
gokhlayeh@266
|
2952 [ "$TARBALL" = sources.list ] && continue
|
gokhlayeh@266
|
2953 grep -q $'\t'$TARBALL$ $SOURCES_REPOSITORY/sources.list || \
|
gokhlayeh@266
|
2954 echo $TARBALL >> $tmp/obsolete
|
gokhlayeh@266
|
2955 done
|
gokhlayeh@266
|
2956 status
|
slaxemulator@273
|
2957 if ! [ -f $tmp/obsolete ]; then
|
slaxemulator@273
|
2958 echo "No sources need to be removed."
|
slaxemulator@273
|
2959 exit 1
|
slaxemulator@273
|
2960 fi
|
gokhlayeh@266
|
2961 echo ""
|
paul@430
|
2962 echo -e "\033[1mObsolete/unrelated-to-wok sources :\033[0m"
|
gokhlayeh@266
|
2963 horizontal_line
|
gokhlayeh@266
|
2964 cat $tmp/obsolete
|
gokhlayeh@266
|
2965 horizontal_line
|
gokhlayeh@266
|
2966 echo "$(wc -l $tmp/obsolete | cut -f1 -d' ') tarballs to remove."
|
pankso@7
|
2967 echo ""
|
paul@430
|
2968 echo -n "Please confirm before removing (type uppercase YES): "
|
gokhlayeh@266
|
2969 read answer
|
gokhlayeh@266
|
2970 if [ "$answer" = YES ]; then
|
gokhlayeh@266
|
2971 echo -n "Removing old sources..."
|
gokhlayeh@266
|
2972 cat $tmp/obsolete | while read i; do
|
gokhlayeh@266
|
2973 rm -f $SOURCES_REPOSITORY/$i
|
gokhlayeh@266
|
2974 done
|
gokhlayeh@266
|
2975 status
|
gokhlayeh@266
|
2976 fi
|
gokhlayeh@266
|
2977 ;;
|
pankso@7
|
2978 gen-list)
|
gokhlayeh@186
|
2979 get_tazwok_config
|
gokhlayeh@204
|
2980 if [ "$2" ]; then
|
pankso@7
|
2981 if [ -d "$2" ]; then
|
gokhlayeh@204
|
2982 pkg_repository=$2
|
pankso@7
|
2983 else
|
gokhlayeh@204
|
2984 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@204
|
2985 exit 1
|
pankso@7
|
2986 fi
|
pankso@7
|
2987 fi
|
gokhlayeh@204
|
2988
|
gokhlayeh@186
|
2989 source_lib report
|
gokhlayeh@186
|
2990 report start
|
gokhlayeh@204
|
2991 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
2992 gen_packages_db
|
gokhlayeh@204
|
2993 else
|
gokhlayeh@204
|
2994 pkg_repository=$PACKAGES_REPOSITORY && gen_packages_db
|
gokhlayeh@204
|
2995 pkg_repository=$INCOMING_REPOSITORY && gen_packages_db
|
pankso@28
|
2996 fi
|
gokhlayeh@186
|
2997 ;;
|
gokhlayeh@186
|
2998 check-list)
|
gokhlayeh@186
|
2999 # The directory to move into by default is the repository,
|
gokhlayeh@186
|
3000 # if $2 is not empty cd into $2.
|
pascal@178
|
3001 #
|
gokhlayeh@186
|
3002 get_tazwok_config
|
gokhlayeh@204
|
3003 if [ "$2" ]; then
|
pascal@178
|
3004 if [ -d "$2" ]; then
|
gokhlayeh@204
|
3005 pkg_repository=$2
|
pascal@178
|
3006 else
|
gokhlayeh@186
|
3007 echo -e "\nUnable to find directory : $2\n" >&2
|
gokhlayeh@186
|
3008 exit 1
|
pascal@178
|
3009 fi
|
pascal@178
|
3010 fi
|
gokhlayeh@186
|
3011
|
gokhlayeh@186
|
3012 source_lib report
|
gokhlayeh@204
|
3013 report start
|
gokhlayeh@204
|
3014 if [ "$pkg_repository" ]; then
|
gokhlayeh@204
|
3015 update_packages_db
|
gokhlayeh@204
|
3016 else
|
gokhlayeh@204
|
3017 pkg_repository=$PACKAGES_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
3018 pkg_repository=$INCOMING_REPOSITORY && update_packages_db
|
gokhlayeh@204
|
3019 fi
|
gokhlayeh@186
|
3020 ;;
|
pankso@7
|
3021 new-tree)
|
MikeDSmith25@82
|
3022 # Just create a few directories and generate an empty receipt to prepare
|
pankso@7
|
3023 # the creation of a new package.
|
pankso@7
|
3024 #
|
gokhlayeh@186
|
3025 get_tazwok_config
|
pankso@7
|
3026 check_for_package_on_cmdline
|
slaxemulator@362
|
3027 clean_wok=$LOCAL_REPOSITORY/clean-wok
|
slaxemulator@362
|
3028 if [ -d $clean_wok/$PACKAGE ]; then
|
gokhlayeh@186
|
3029 echo -e "\n$PACKAGE package tree already exists.\n" >&2
|
gokhlayeh@186
|
3030 exit 1
|
pankso@7
|
3031 fi
|
gokhlayeh@442
|
3032 echo "Creating : $clean_wok/$PACKAGE"
|
slaxemulator@362
|
3033 mkdir $clean_wok/$PACKAGE
|
slaxemulator@362
|
3034 cd $clean_wok/$PACKAGE
|
pankso@7
|
3035 echo -n "Preparing the receipt..."
|
pankso@7
|
3036 #
|
pankso@7
|
3037 # Default receipt begin.
|
pankso@7
|
3038 #
|
pankso@7
|
3039 echo "# SliTaz package receipt." > receipt
|
pankso@7
|
3040 echo "" >> receipt
|
pankso@7
|
3041 echo "PACKAGE=\"$PACKAGE\"" >> receipt
|
pankso@7
|
3042 # Finish the empty receipt.
|
pankso@7
|
3043 cat >> receipt << "EOF"
|
pankso@7
|
3044 VERSION=""
|
pankso@7
|
3045 CATEGORY=""
|
pankso@7
|
3046 SHORT_DESC=""
|
pankso@7
|
3047 MAINTAINER=""
|
pankso@7
|
3048 DEPENDS=""
|
pankso@7
|
3049 TARBALL="$PACKAGE-$VERSION.tar.gz"
|
pankso@7
|
3050 WEB_SITE=""
|
pankso@7
|
3051 WGET_URL=""
|
pankso@7
|
3052
|
pankso@7
|
3053 # Rules to configure and make the package.
|
pankso@7
|
3054 compile_rules()
|
pankso@7
|
3055 {
|
pankso@7
|
3056 cd $src
|
gokhlayeh@204
|
3057 ./configure && make && make install
|
pankso@7
|
3058 }
|
pankso@7
|
3059
|
pankso@7
|
3060 # Rules to gen a SliTaz package suitable for Tazpkg.
|
pankso@7
|
3061 genpkg_rules()
|
pankso@7
|
3062 {
|
pankso@7
|
3063 mkdir -p $fs/usr
|
pankso@7
|
3064 cp -a $_pkg/usr/bin $fs/usr
|
pankso@7
|
3065 }
|
pankso@7
|
3066
|
pankso@7
|
3067 EOF
|
pankso@7
|
3068 #
|
pankso@7
|
3069 # Default receipt end.
|
pankso@7
|
3070 #
|
pankso@7
|
3071 status
|
pankso@7
|
3072 # Interactive mode, asking and seding.
|
pankso@7
|
3073 if [ "$3" = "--interactive" ]; then
|
paul@430
|
3074 echo "Entering interactive mode..."
|
pankso@7
|
3075 echo "================================================================================"
|
pankso@7
|
3076 echo "Package : $PACKAGE"
|
pankso@7
|
3077 # Version.
|
pankso@7
|
3078 echo -n "Version : " ; read anser
|
pankso@7
|
3079 sed -i s/'VERSION=\"\"'/"VERSION=\"$anser\""/ receipt
|
pankso@7
|
3080 # Category.
|
pankso@7
|
3081 echo -n "Category : " ; read anser
|
pankso@7
|
3082 sed -i s/'CATEGORY=\"\"'/"CATEGORY=\"$anser\""/ receipt
|
pankso@7
|
3083 # Short description.
|
pankso@7
|
3084 echo -n "Short desc : " ; read anser
|
pankso@7
|
3085 sed -i s/'SHORT_DESC=\"\"'/"SHORT_DESC=\"$anser\""/ receipt
|
pankso@7
|
3086 # Maintainer.
|
pankso@7
|
3087 echo -n "Maintainer : " ; read anser
|
pankso@7
|
3088 sed -i s/'MAINTAINER=\"\"'/"MAINTAINER=\"$anser\""/ receipt
|
pankso@7
|
3089 # Web site.
|
pankso@7
|
3090 echo -n "Web site : " ; read anser
|
pankso@133
|
3091 sed -i s#'WEB_SITE=\"\"'#"WEB_SITE=\"$anser\""# receipt
|
pankso@7
|
3092 echo ""
|
pankso@7
|
3093 # Wget URL.
|
pankso@7
|
3094 echo "Wget URL to download source tarball."
|
pankso@7
|
3095 echo "Example : \$GNU_MIRROR/\$PACKAGE/\$TARBALL"
|
pankso@7
|
3096 echo -n "Wget url : " ; read anser
|
pankso@7
|
3097 sed -i s#'WGET_URL=\"\"'#"WGET_URL=\"$anser\""# receipt
|
pankso@7
|
3098 # Ask for a stuff dir.
|
pankso@7
|
3099 echo -n "Do you need a stuff directory ? (y/N) : " ; read anser
|
pankso@7
|
3100 if [ "$anser" = "y" ]; then
|
pankso@7
|
3101 echo -n "Creating the stuff directory..."
|
pankso@7
|
3102 mkdir stuff && status
|
pankso@7
|
3103 fi
|
pankso@7
|
3104 # Ask for a description file.
|
pankso@7
|
3105 echo -n "Are you going to write a description ? (y/N) : " ; read anser
|
pankso@7
|
3106 if [ "$anser" = "y" ]; then
|
pankso@7
|
3107 echo -n "Creating the description.txt file..."
|
pankso@7
|
3108 echo "" > description.txt && status
|
pankso@7
|
3109 fi
|
pankso@7
|
3110 echo "================================================================================"
|
pankso@7
|
3111 echo ""
|
pankso@7
|
3112 fi
|
gokhlayeh@186
|
3113 ;;
|
pankso@7
|
3114 remove)
|
pankso@7
|
3115 # Remove a package from the wok.
|
pankso@7
|
3116 #
|
gokhlayeh@186
|
3117 get_tazwok_config
|
pankso@7
|
3118 check_for_package_on_cmdline
|
pankso@7
|
3119 echo ""
|
pascal@83
|
3120 echo -n "Please confirm deletion (y/N) : "; read anser
|
pascal@83
|
3121 if [ "$anser" = "y" ]; then
|
pascal@83
|
3122 echo -n "Removing $PACKAGE..."
|
pascal@83
|
3123 rm -rf $WOK/$PACKAGE && status
|
pascal@83
|
3124 echo ""
|
pascal@83
|
3125 fi
|
gokhlayeh@186
|
3126 ;;
|
gokhlayeh@304
|
3127 update-wok)
|
paul@166
|
3128 # Pull and update a Hg wok.
|
gokhlayeh@304
|
3129 get_options_list="local"
|
gokhlayeh@186
|
3130 get_tazwok_config
|
gokhlayeh@309
|
3131 source_lib report
|
gokhlayeh@310
|
3132 report start
|
gokhlayeh@304
|
3133 clean_wok=$LOCAL_REPOSITORY/clean-wok
|
gokhlayeh@304
|
3134 cd $clean_wok
|
gokhlayeh@304
|
3135 if ! [ "$local" ]; then
|
gokhlayeh@304
|
3136 if [ "$WOK_UPDATE_METHOD" = hg ]; then
|
gokhlayeh@304
|
3137 if ! [ -f "$INSTALLED/mercurial/receipt" ]; then
|
gokhlayeh@304
|
3138
|
gokhlayeh@304
|
3139 # Auto-install only if we are in a cook chroot.
|
gokhlayeh@304
|
3140 if [ -x /usr/bin/clean-chroot ]; then
|
gokhlayeh@392
|
3141 tazpkg get-install mercurial
|
gokhlayeh@392
|
3142 else
|
gokhlayeh@304
|
3143 echo "" >&2
|
paul@430
|
3144 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
|
3145 echo "">&2
|
gokhlayeh@330
|
3146 exit 1
|
gokhlayeh@304
|
3147 fi
|
gokhlayeh@330
|
3148 fi
|
gokhlayeh@304
|
3149
|
gokhlayeh@330
|
3150 report step "Getting wok changes using hg"
|
gokhlayeh@330
|
3151 if [ -d .hg ]; then
|
gokhlayeh@330
|
3152 hg pull -u || exit 1
|
gokhlayeh@304
|
3153 else
|
gokhlayeh@330
|
3154 hg clone $HG_WOK . || exit 1
|
gokhlayeh@304
|
3155 fi
|
gokhlayeh@309
|
3156 report end-step
|
gokhlayeh@304
|
3157 [ -x /usr/bin/clean-chroot ] && clean-chroot
|
gokhlayeh@304
|
3158 else
|
gokhlayeh@309
|
3159 report step "Getting wok changes using tarball"
|
gokhlayeh@304
|
3160 { mkdir .tmp && cd .tmp
|
gokhlayeh@304
|
3161 wget "$TARBALL_WOK" &&
|
gokhlayeh@304
|
3162 case $TARBALL_WOK in
|
gokhlayeh@304
|
3163 *bz2) tar xjf *.bz2 -C wok; rm *.bz2;;
|
gokhlayeh@304
|
3164 *lzma) unlzma -c *.lzma | tar xf - -C wok; rm *.lzma ;;
|
gokhlayeh@304
|
3165 *gz) tar xzf *.gz -C wok; rm*.gz ;;
|
gokhlayeh@304
|
3166 esac &&
|
gokhlayeh@304
|
3167 rm -r $(ls -d $clean_wok/*) &&
|
gokhlayeh@304
|
3168 cp -a wok/* $clean_wok &&
|
gokhlayeh@304
|
3169 cd .. &&
|
gokhlayeh@304
|
3170 rm -r .tmp
|
gokhlayeh@304
|
3171 } || { echo "That's not cool: it fails!" >&2
|
gokhlayeh@309
|
3172 report end-step
|
gokhlayeh@304
|
3173 exit 1; }
|
gokhlayeh@309
|
3174 report end-step
|
gokhlayeh@304
|
3175 fi
|
pankso@106
|
3176 fi
|
gokhlayeh@309
|
3177 report step "Appending changes to wok"
|
gokhlayeh@304
|
3178
|
gokhlayeh@308
|
3179 # Handle removed files/dir.
|
gokhlayeh@308
|
3180 cd $WOK
|
gokhlayeh@313
|
3181 for dir in *; do
|
slaxemulator@329
|
3182 [ -d "$clean_wok/$dir" ] || rm -rf $dir
|
gokhlayeh@308
|
3183 done
|
gokhlayeh@308
|
3184 for file in */receipt */description.txt; do
|
slaxemulator@329
|
3185 [ -f "$clean_wok/$file" ] || rm -rf $file
|
gokhlayeh@308
|
3186 done
|
gokhlayeh@330
|
3187 for i in $(find */stuff 2>/dev/null); do
|
slaxemulator@329
|
3188 [ -e "$clean_wok/$i" ] || rm -rf $i
|
gokhlayeh@304
|
3189 done
|
gokhlayeh@304
|
3190
|
gokhlayeh@308
|
3191 cp -a $clean_wok/* $WOK
|
gokhlayeh@309
|
3192 report end-step
|
gokhlayeh@186
|
3193 ;;
|
pankso@108
|
3194 maintainers)
|
gokhlayeh@186
|
3195 get_tazwok_config
|
pankso@108
|
3196 echo ""
|
pankso@108
|
3197 echo "List of maintainers for: $WOK"
|
pankso@108
|
3198 echo "================================================================================"
|
pankso@108
|
3199 touch /tmp/slitaz-maintainers
|
pankso@108
|
3200 for pkg in $WOK/*
|
pankso@108
|
3201 do
|
pankso@108
|
3202 . $pkg/receipt
|
gokhlayeh@195
|
3203 if ! fgrep -q "$MAINTAINER" /tmp/slitaz-maintainers; then
|
pankso@108
|
3204 echo "$MAINTAINER" >> /tmp/slitaz-maintainers
|
pankso@108
|
3205 echo "$MAINTAINER"
|
pankso@108
|
3206 fi
|
pankso@108
|
3207 done
|
pankso@108
|
3208 echo "================================================================================"
|
pankso@108
|
3209 echo "Maintainers: `cat /tmp/slitaz-maintainers | wc -l`"
|
pankso@108
|
3210 echo ""
|
pankso@108
|
3211 # Remove tmp files
|
gokhlayeh@186
|
3212 rm -f /tmp/slitaz-maintainers
|
gokhlayeh@186
|
3213 ;;
|
pankso@107
|
3214 maintained-by)
|
paul@166
|
3215 # Search for packages maintained by a contributor.
|
gokhlayeh@186
|
3216 get_tazwok_config
|
pankso@107
|
3217 if [ ! -n "$2" ]; then
|
gokhlayeh@186
|
3218 echo "Specify a name or email of a maintainer." >&2
|
gokhlayeh@186
|
3219 exit 1
|
pankso@107
|
3220 fi
|
pankso@107
|
3221 echo "Maintainer packages"
|
pankso@107
|
3222 echo "================================================================================"
|
pankso@107
|
3223 for pkg in $WOK/*
|
pankso@107
|
3224 do
|
pankso@107
|
3225 . $pkg/receipt
|
gokhlayeh@195
|
3226 if echo "$MAINTAINER" | fgrep -q "$2"; then
|
pankso@107
|
3227 echo "$PACKAGE"
|
gokhlayeh@186
|
3228 packages=$(($PACKAGEs+1))
|
pankso@107
|
3229 fi
|
pankso@107
|
3230 done
|
pankso@107
|
3231 echo "================================================================================"
|
gokhlayeh@186
|
3232 echo "Packages maintained by $2: $PACKAGEs"
|
gokhlayeh@186
|
3233 echo ""
|
gokhlayeh@186
|
3234 ;;
|
gokhlayeh@268
|
3235 tags)
|
gokhlayeh@268
|
3236 get_tazwok_config
|
gokhlayeh@268
|
3237 echo -e "\n\033[1mTags list :\033[0m"
|
gokhlayeh@268
|
3238 horizontal_line
|
gokhlayeh@268
|
3239 cd $WOK
|
gokhlayeh@268
|
3240 for i in */receipt; do
|
gokhlayeh@268
|
3241 unset TAGS
|
gokhlayeh@268
|
3242 source $i
|
gokhlayeh@268
|
3243 for t in $TAGS; do
|
gokhlayeh@268
|
3244 grep -q ^$t$ $tmp/tags && continue
|
gokhlayeh@268
|
3245 echo $t | tee -a $tmp/tags
|
gokhlayeh@268
|
3246 done
|
gokhlayeh@268
|
3247 done
|
gokhlayeh@268
|
3248 horizontal_line
|
gokhlayeh@268
|
3249 echo "$(wc -l $tmp/tags | cut -f1 -d ' ') tags listed."
|
gokhlayeh@268
|
3250 ;;
|
erjo@159
|
3251 check-src)
|
paul@430
|
3252 # Verify if upstream package is still available.
|
erjo@159
|
3253 #
|
gokhlayeh@186
|
3254 get_tazwok_config
|
erjo@159
|
3255 check_for_package_on_cmdline
|
erjo@159
|
3256 check_for_receipt
|
gokhlayeh@186
|
3257 source_receipt
|
erjo@159
|
3258 check_src()
|
erjo@159
|
3259 {
|
erjo@159
|
3260 for url in $@; do
|
pascal@178
|
3261 busybox wget -s $url 2>/dev/null && break
|
erjo@159
|
3262 done
|
erjo@159
|
3263 }
|
gokhlayeh@186
|
3264 if [ "$WGET_URL" ];then
|
erjo@159
|
3265 echo -n "$PACKAGE : "
|
erjo@159
|
3266 check_src $WGET_URL
|
erjo@159
|
3267 status
|
erjo@159
|
3268 else
|
erjo@159
|
3269 echo "No tarball to check for $PACKAGE"
|
erjo@159
|
3270 fi
|
gokhlayeh@186
|
3271 ;;
|
slaxemulator@456
|
3272 gen-src)
|
slaxemulator@456
|
3273 get_tazwok_config
|
slaxemulator@456
|
3274 if [ "$2" ]; then
|
slaxemulator@456
|
3275 if [ -d "$2" ]; then
|
slaxemulator@456
|
3276 src_repository=$2
|
slaxemulator@456
|
3277 else
|
slaxemulator@456
|
3278 echo -e "\nUnable to find directory : $2\n" >&2
|
slaxemulator@456
|
3279 exit 1
|
slaxemulator@456
|
3280 fi
|
slaxemulator@456
|
3281 fi
|
slaxemulator@456
|
3282 echo -n "Rebuilding sources.list file"
|
slaxemulator@456
|
3283 [ $src_repository ] || src_repository="$SOURCES_REPOSITORY"
|
slaxemulator@456
|
3284 gen_sources_list $src_repository
|
slaxemulator@456
|
3285 status
|
slaxemulator@456
|
3286 ;;
|
gokhlayeh@186
|
3287 get-src)
|
gokhlayeh@186
|
3288 check_root
|
gokhlayeh@225
|
3289 get_options_list="target nounpack"
|
gokhlayeh@186
|
3290 get_tazwok_config
|
gokhlayeh@186
|
3291 check_for_package_on_cmdline
|
gokhlayeh@186
|
3292 check_for_receipt
|
gokhlayeh@186
|
3293 source_receipt
|
gokhlayeh@186
|
3294 if [ "$WGET_URL" ];then
|
gokhlayeh@186
|
3295 source_lib report
|
gokhlayeh@186
|
3296 report start
|
gokhlayeh@225
|
3297 check_for_tarball
|
gokhlayeh@186
|
3298 else
|
gokhlayeh@186
|
3299 echo "No tarball to download for $PACKAGE"
|
gokhlayeh@186
|
3300 fi
|
gokhlayeh@186
|
3301 ;;
|
gokhlayeh@204
|
3302 check-commit)
|
gokhlayeh@186
|
3303 check_root
|
gokhlayeh@204
|
3304 get_options_list="missing forced"
|
gokhlayeh@186
|
3305 get_tazwok_config
|
gokhlayeh@186
|
3306 source_lib report
|
gokhlayeh@186
|
3307 report start
|
gokhlayeh@204
|
3308 if [ "$forced" ]; then
|
gokhlayeh@204
|
3309 rm -f $WOK/*/md5
|
gokhlayeh@204
|
3310 unset forced
|
gokhlayeh@204
|
3311 fi
|
gokhlayeh@204
|
3312 if [ "$missing" ]; then
|
gokhlayeh@204
|
3313 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3314 else
|
gokhlayeh@204
|
3315 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3316 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3317 } | sort -u)"
|
gokhlayeh@204
|
3318 fi
|
gokhlayeh@186
|
3319 gen_cook_list
|
gokhlayeh@186
|
3320 ;;
|
gokhlayeh@186
|
3321 cook-commit)
|
gokhlayeh@186
|
3322 check_root
|
gokhlayeh@204
|
3323 get_options_list="missing forced"
|
gokhlayeh@186
|
3324 get_tazwok_config
|
gokhlayeh@186
|
3325 source_lib report
|
gokhlayeh@186
|
3326 report start
|
gokhlayeh@204
|
3327 if [ "$forced" ]; then
|
gokhlayeh@204
|
3328 rm -f $WOK/*/md5
|
gokhlayeh@204
|
3329 unset forced
|
gokhlayeh@204
|
3330 fi
|
gokhlayeh@204
|
3331 if [ "$missing" ]; then
|
gokhlayeh@204
|
3332 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3333 else
|
gokhlayeh@204
|
3334 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3335 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3336 } | sort -u)"
|
gokhlayeh@204
|
3337 fi
|
gokhlayeh@186
|
3338 gen_cook_list
|
gokhlayeh@186
|
3339 cook_list
|
gokhlayeh@186
|
3340 ;;
|
gokhlayeh@186
|
3341 cook-all)
|
gokhlayeh@186
|
3342 check_root
|
gokhlayeh@204
|
3343 get_options_list="forced missing"
|
gokhlayeh@186
|
3344 get_tazwok_config
|
gokhlayeh@186
|
3345 source_lib report
|
gokhlayeh@186
|
3346 report start
|
gokhlayeh@204
|
3347 if [ "$missing" ]; then
|
gokhlayeh@204
|
3348 pkg=$(ls -1 $WOK)
|
gokhlayeh@204
|
3349 else
|
gokhlayeh@204
|
3350 pkg="$({ grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3351 grep ^[a-zA-Z0-9] $INCOMING_REPOSITORY/packages.txt
|
gokhlayeh@204
|
3352 } | sort -u)"
|
gokhlayeh@204
|
3353 fi
|
gokhlayeh@204
|
3354 gen_cook_list
|
gokhlayeh@186
|
3355 cook_list
|
gokhlayeh@186
|
3356 ;;
|
gokhlayeh@186
|
3357 gen-wok-db)
|
gokhlayeh@186
|
3358 check_root
|
gokhlayeh@186
|
3359 get_tazwok_config
|
gokhlayeh@186
|
3360 source_lib report
|
gokhlayeh@186
|
3361 report start
|
gokhlayeh@204
|
3362 gen_wok_db
|
gokhlayeh@186
|
3363 ;;
|
gokhlayeh@186
|
3364 report)
|
gokhlayeh@186
|
3365 get_tazwok_config
|
gokhlayeh@186
|
3366 cd $PACKAGES_REPOSITORY
|
gokhlayeh@239
|
3367 if [ "$2" ]; then
|
gokhlayeh@239
|
3368 case $2 in
|
gokhlayeh@239
|
3369 commit|cooklist|incoming|broken|blocked)
|
gokhlayeh@239
|
3370 show="$2"
|
gokhlayeh@239
|
3371 ;;
|
gokhlayeh@239
|
3372 *)
|
gokhlayeh@239
|
3373 echo "usage : tazwok report [commit|cooklist|incoming|broken|blocked]" >&2
|
gokhlayeh@239
|
3374 exit 1
|
gokhlayeh@239
|
3375 ;;
|
gokhlayeh@239
|
3376 esac
|
gokhlayeh@239
|
3377 else
|
gokhlayeh@239
|
3378 show="commit cooklist incoming broken blocked"
|
gokhlayeh@239
|
3379 fi
|
gokhlayeh@239
|
3380 for i in $show; do
|
gokhlayeh@186
|
3381 if [ -s $i ]; then
|
gokhlayeh@239
|
3382 echo ""
|
gokhlayeh@239
|
3383 echo -e "\033[1m$i\033[0m"
|
gokhlayeh@239
|
3384 echo "================================================================================"
|
gokhlayeh@239
|
3385 cat $i
|
gokhlayeh@239
|
3386 echo "================================================================================"
|
gokhlayeh@239
|
3387 echo ""
|
gokhlayeh@186
|
3388 fi
|
gokhlayeh@186
|
3389 done
|
gokhlayeh@186
|
3390 ;;
|
gokhlayeh@186
|
3391 check-incoming)
|
gokhlayeh@186
|
3392 check_root
|
gokhlayeh@214
|
3393 get_options_list="forced"
|
gokhlayeh@186
|
3394 get_tazwok_config
|
gokhlayeh@186
|
3395 source_lib report
|
gokhlayeh@186
|
3396 report start
|
gokhlayeh@307
|
3397 [ -f $LOCAL_RESOSITORY/incoming ] && rm [ -f $LOCAL_REPOSITORY/incoming ]
|
gokhlayeh@307
|
3398 report step "Checking $INCOMING_REPOSITORY"
|
gokhlayeh@307
|
3399 report open-bloc
|
gokhlayeh@313
|
3400 [ -f $LOCAL_REPOSITORY/log/incoming.html ] && rm $LOCAL_REPOSITORY/log/incoming.html
|
gokhlayeh@307
|
3401 report sublog $LOCAL_REPOSITORY/log/incoming.html
|
gokhlayeh@352
|
3402 echo "incoming" > $LOCAL_REPOSITORY/log/package
|
gokhlayeh@186
|
3403 check_for_incoming
|
gokhlayeh@307
|
3404 report end-sublog
|
gokhlayeh@307
|
3405 report close-bloc
|
gokhlayeh@186
|
3406 ;;
|
gokhlayeh@190
|
3407 configure-chroot)
|
gokhlayeh@190
|
3408 check_root
|
gokhlayeh@190
|
3409 get_tazwok_config
|
gokhlayeh@190
|
3410 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@190
|
3411 cd $LOCAL_REPOSITORY
|
gokhlayeh@190
|
3412 configure_tazchroot
|
gokhlayeh@190
|
3413 else
|
paul@430
|
3414 echo "The package tazchroot needs to be installed" >&2
|
gokhlayeh@190
|
3415 exit 1
|
gokhlayeh@190
|
3416 fi
|
gokhlayeh@190
|
3417 ;;
|
gokhlayeh@186
|
3418 chroot)
|
gokhlayeh@186
|
3419 check_root
|
gokhlayeh@186
|
3420 get_tazwok_config
|
gokhlayeh@186
|
3421 # Merge this and the other chroot function ?.
|
gokhlayeh@186
|
3422 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
3423 cd $LOCAL_REPOSITORY
|
gokhlayeh@186
|
3424 [ ! -f tazchroot.conf ] && configure_tazchroot
|
gokhlayeh@186
|
3425 tazchroot
|
gokhlayeh@186
|
3426 else
|
paul@430
|
3427 echo "The package tazchroot needs to be installed" >&2
|
gokhlayeh@186
|
3428 exit 1
|
gokhlayeh@186
|
3429 fi
|
gokhlayeh@186
|
3430 ;;
|
gokhlayeh@186
|
3431 cook-toolchain)
|
gokhlayeh@186
|
3432 check_root
|
gokhlayeh@186
|
3433 get_tazwok_config
|
gokhlayeh@186
|
3434 echo -n "" > $PACKAGES_REPOSITORY/broken
|
gokhlayeh@186
|
3435 if [ -f /usr/bin/tazchroot ]; then
|
gokhlayeh@186
|
3436 cd $LOCAL_REPOSITORY
|
gokhlayeh@406
|
3437 [ -f tazchroot.conf ] || configure_tazchroot
|
gokhlayeh@406
|
3438
|
gokhlayeh@406
|
3439 # Plan to recook all packages.
|
gokhlayeh@406
|
3440 if tazchroot cook-toolchain; then
|
gokhlayeh@406
|
3441 source_lib report
|
gokhlayeh@406
|
3442 report start
|
gokhlayeh@406
|
3443 pkg="$(grep ^[a-zA-Z0-9] $PACKAGES_REPOSITORY/packages.txt \
|
gokhlayeh@406
|
3444 $INCOMING_REPOSITORY/packages.txt | sort -u)"
|
gokhlayeh@406
|
3445 forced=yes
|
gokhlayeh@406
|
3446 gen_cook_list
|
gokhlayeh@406
|
3447 fi
|
gokhlayeh@406
|
3448
|
gokhlayeh@406
|
3449 # Remove chroot where toolchain has been cooked.
|
gokhlayeh@406
|
3450 source $LOCAL_REPOSITORY/tazchroot.conf
|
gokhlayeh@186
|
3451 rm -r $LOCAL_REPOSITORY/chroot
|
gokhlayeh@406
|
3452
|
gokhlayeh@186
|
3453 else
|
gokhlayeh@434
|
3454 echo -e "\nThe package tazchroot needs to be installed.\n" >&2
|
gokhlayeh@186
|
3455 exit 1
|
gokhlayeh@186
|
3456 fi
|
gokhlayeh@186
|
3457 ;;
|
gokhlayeh@235
|
3458 webserver)
|
gokhlayeh@235
|
3459 check_root
|
gokhlayeh@235
|
3460 get_tazwok_config
|
gokhlayeh@235
|
3461 if [ "$ARG" = on ]; then
|
gokhlayeh@235
|
3462 if [ "$WEBSERVER" ] && [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3463 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3464 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3465 exit 1
|
gokhlayeh@235
|
3466 fi
|
gokhlayeh@235
|
3467 if ! [ -f $LOCAL_REPOSITORY/tazchroot.conf ]; then
|
gokhlayeh@235
|
3468 tazwok configure-chroot ${undigest:+--undigest=$undigest} --SLITAZ_VERSION=$SLITAZ_VERSION --SLITAZ_DIR=$SLITAZ_DIR
|
gokhlayeh@235
|
3469 fi
|
gokhlayeh@235
|
3470 for pkg in php lighttpd; do
|
gokhlayeh@235
|
3471 [ -d $INSTALLED/$pkg ] || missing="$missing $pkg"
|
gokhlayeh@235
|
3472 done
|
gokhlayeh@235
|
3473 if [ "$missing" ]; then
|
paul@430
|
3474 echo "You need to install these packages to start webserver: $missing." >&2
|
gokhlayeh@235
|
3475 exit 1
|
gokhlayeh@235
|
3476 fi
|
gokhlayeh@235
|
3477 if [ ! -f "$LOCAL_REPOSITORY/tazwok.conf" ]; then
|
gokhlayeh@235
|
3478 echo "Copying /etc/slitaz/tazwok.conf to $LOCAL_REPOSITORY/tazwok.conf: webserver is configured repository-by-repository."
|
gokhlayeh@235
|
3479 cp /etc/slitaz/tazwok.conf $LOCAL_REPOSITORY
|
gokhlayeh@235
|
3480 fi
|
gokhlayeh@235
|
3481 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3482 echo -n "Where to store php pages (default: /var/www/vhosts/bb)? "
|
gokhlayeh@235
|
3483 read WEBSERVER
|
gokhlayeh@235
|
3484 [ "$WEBSERVER" ] || WEBSERVER="/var/www/vhosts/bb"
|
gokhlayeh@235
|
3485 fi
|
gokhlayeh@235
|
3486 if [ -f "$WEBSERVER/repositories.list" ] && \
|
gokhlayeh@235
|
3487 grep -q ^"${undigest:-$SLITAZ_VERSION}"$ $WEBSERVER/repositories.list; then
|
gokhlayeh@235
|
3488 echo "Webserver is already enabled at $WEBSERVER for ${undigest:-$SLITAZ_VERSION}." >&2
|
gokhlayeh@235
|
3489 exit 1
|
gokhlayeh@235
|
3490 fi
|
gokhlayeh@235
|
3491 mkdir -p $WEBSERVER
|
gokhlayeh@235
|
3492 echo "${undigest:-$SLITAZ_VERSION}" >> $WEBSERVER/repositories.list
|
gokhlayeh@267
|
3493 for file in index.php log.php download.php; do
|
gokhlayeh@235
|
3494 [ -f "$WEBSERVER/$file" ] || ln -s /usr/share/slitaz/web-bb/$file $WEBSERVER
|
gokhlayeh@235
|
3495 done
|
gokhlayeh@267
|
3496 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3497 ln -s $dir $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3498 done
|
gokhlayeh@235
|
3499 source $LOCAL_REPOSITORY/tazchroot.conf
|
gokhlayeh@235
|
3500 echo "<?php
|
gokhlayeh@235
|
3501
|
gokhlayeh@235
|
3502 // Web interface configuration
|
gokhlayeh@235
|
3503
|
gokhlayeh@235
|
3504 \$version=\"${undigest:-$SLITAZ_VERSION}\";
|
gokhlayeh@235
|
3505 \$chroot=\"$chroot_dir\";
|
pascal@360
|
3506 \$lockfile=\"\$chroot/proc/1/status\";
|
gokhlayeh@235
|
3507 \$db_dir=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3508 \$log_dir=\"$LOCAL_REPOSITORY/log\";
|
gokhlayeh@235
|
3509 \$packages=\"$PACKAGES_REPOSITORY\";
|
gokhlayeh@235
|
3510 \$incoming=\"$INCOMING_REPOSITORY\";
|
gokhlayeh@251
|
3511 \$wok=\"$WOK\";
|
gokhlayeh@235
|
3512
|
gokhlayeh@235
|
3513 ?>" > $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@235
|
3514 [ -L "$WEBSERVER/web" ] || ln -s /usr/share/slitaz/web $WEBSERVER
|
gokhlayeh@235
|
3515 echo "WEBSERVER=\"$WEBSERVER\"" >> $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3516 if [ -L "$WEBSERVER/conf.php" ]; then
|
paul@430
|
3517 echo "Do you want to make ${undigest:-$SLITAZ_VERSION} the default page (y/N) ? "
|
gokhlayeh@235
|
3518 read answer
|
gokhlayeh@235
|
3519 if [ "$answer" = y ]; then
|
gokhlayeh@235
|
3520 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3521 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3522 fi
|
gokhlayeh@235
|
3523 else
|
gokhlayeh@235
|
3524 ln -s $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3525 fi
|
gokhlayeh@235
|
3526 elif [ "$ARG" = off ]; then
|
gokhlayeh@235
|
3527 if ! [ "$WEBSERVER" ]; then
|
gokhlayeh@235
|
3528 echo "No webserver running for ${undigest:-$SLITAZ_VERSION}" >&2
|
gokhlayeh@235
|
3529 exit 1
|
gokhlayeh@235
|
3530 fi
|
gokhlayeh@235
|
3531 sed '/^WEBSERVER/d' -i $LOCAL_REPOSITORY/tazwok.conf
|
gokhlayeh@235
|
3532 sed "/^${undigest:-$SLITAZ_VERSION}$/d" -i $WEBSERVER/repositories.list
|
gokhlayeh@235
|
3533 rm $WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php
|
gokhlayeh@267
|
3534 for dir in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY; do
|
gokhlayeh@267
|
3535 rm $WEBSERVER/${undigest:-$SLITAZ_VERSION}-${dir##*/}
|
gokhlayeh@267
|
3536 done
|
gokhlayeh@235
|
3537 if ! [ -s "$WEBSERVER/repositories.list" ]; then
|
paul@430
|
3538 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
|
3539 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3540 elif [ "$(readlink $WEBSERVER/conf.php)" = "$WEBSERVER/conf-${undigest:-$SLITAZ_VERSION}.php" ]; then
|
gokhlayeh@235
|
3541 echo "${undigest:-$SLITAZ_VERSION} was the default version to use; switched to : $(sed 1!d $WEBSERVER/repositories.list)"
|
gokhlayeh@235
|
3542 rm $WEBSERVER/conf.php
|
gokhlayeh@235
|
3543 ln -s $WEBSERVER/conf-$(sed 1!d $WEBSERVER/repositories.list).php $WEBSERVER/conf.php
|
gokhlayeh@235
|
3544 fi
|
gokhlayeh@235
|
3545 else
|
gokhlayeh@235
|
3546 echo "Usage: tazwok webserver on/off" >&2
|
gokhlayeh@235
|
3547 exit 1
|
gokhlayeh@235
|
3548 fi
|
gokhlayeh@235
|
3549 ;;
|
pankso@354
|
3550 block)
|
pankso@354
|
3551 # Add a pkg name to the list of blocked packages.
|
gokhlayeh@367
|
3552 get_tazwok_config
|
gokhlayeh@367
|
3553 check_root
|
gokhlayeh@367
|
3554 check_for_package_on_cmdline
|
gokhlayeh@367
|
3555 if ! [ -f $WOK/$PACKAGE/receipt ]; then
|
paul@430
|
3556 echo "Can't find $PACKAGE in wok." >&2
|
gokhlayeh@367
|
3557 echo ""
|
gokhlayeh@367
|
3558 exit 1
|
gokhlayeh@367
|
3559 fi
|
pankso@354
|
3560 echo ""
|
gokhlayeh@405
|
3561 if grep -qs "^$PACKAGE$" $blocked; then
|
gokhlayeh@367
|
3562 echo "$PACKAGE is already in the blocked packages list." >&2
|
gokhlayeh@367
|
3563 echo ""
|
gokhlayeh@367
|
3564 exit 1
|
pankso@354
|
3565 else
|
gokhlayeh@405
|
3566 echo -n "Adding $PACKAGE to : $blocked... "
|
gokhlayeh@405
|
3567 echo "$PACKAGE" >> $blocked
|
gokhlayeh@367
|
3568 status
|
gokhlayeh@405
|
3569 if grep -q "^$PACKAGE$" $cooklist; then
|
gokhlayeh@405
|
3570 echo -n "Removing $PACKAGE from : $cooklist... "
|
gokhlayeh@405
|
3571 sed -i /"^$PACKAGE$"/d $cooklist
|
gokhlayeh@367
|
3572 status
|
pankso@354
|
3573 fi
|
pankso@354
|
3574 fi
|
pankso@354
|
3575 echo "" ;;
|
pankso@354
|
3576 unblock)
|
pankso@354
|
3577 # Remove a pkg name from the list of blocked packages.
|
gokhlayeh@367
|
3578 get_tazwok_config
|
gokhlayeh@367
|
3579 check_root
|
gokhlayeh@367
|
3580 check_for_package_on_cmdline
|
gokhlayeh@367
|
3581 if ! [ -f $WOK/$PACKAGE/receipt ]; then
|
paul@430
|
3582 echo "Can't find $PACKAGE in wok." >&2
|
gokhlayeh@367
|
3583 echo ""
|
gokhlayeh@367
|
3584 exit 1
|
gokhlayeh@367
|
3585 fi
|
pankso@354
|
3586 echo ""
|
gokhlayeh@405
|
3587 if grep -qs "^$PACKAGE$" $blocked; then
|
gokhlayeh@405
|
3588 echo -n "Removing $PACKAGE from : $blocked... "
|
gokhlayeh@405
|
3589 sed -i /"^$PACKAGE$"/d $blocked
|
gokhlayeh@405
|
3590 sed -i '/^$/d' $blocked
|
gokhlayeh@367
|
3591 status
|
pankso@354
|
3592 else
|
gokhlayeh@367
|
3593 echo "$PACKAGE is not in the blocked packages list." >&2
|
gokhlayeh@367
|
3594 echo ""
|
gokhlayeh@367
|
3595 exit 1
|
pankso@354
|
3596 fi
|
pankso@354
|
3597 echo "" ;;
|
pankso@7
|
3598 usage|*)
|
MikeDSmith25@82
|
3599 # Print usage also for all unknown commands.
|
pankso@7
|
3600 #
|
pankso@7
|
3601 usage
|
gokhlayeh@186
|
3602 ;;
|
pankso@7
|
3603 esac
|
pankso@7
|
3604
|
gokhlayeh@451
|
3605 # If a cook command has been used, refresh ID of the repository to avoid
|
gokhlayeh@451
|
3606 # useless upgrade at next cook command.
|
gokhlayeh@451
|
3607 case $COMMAND in
|
gokhlayeh@451
|
3608 cook*)
|
gokhlayeh@451
|
3609 for repo in $PACKAGES_REPOSITORY $INCOMING_REPOSITORY \
|
gokhlayeh@451
|
3610 $( [ "$undigest" -a ! "$ref_USE_ONLINE_PKG" ] && echo $ref_PACKAGES_REPOSITORY ); do
|
gokhlayeh@451
|
3611 [ -f $repo/ID ] || continue
|
gokhlayeh@451
|
3612 MIRROR_path=$(grep -l "^$repo$" $LOCALSTATE/mirror $LOCALSTATE/undigest/*/mirror)
|
gokhlayeh@451
|
3613 LOCALSTATE_path=${MIRROR_path%/mirror}
|
gokhlayeh@451
|
3614 cp -a $repo/ID $LOCALSTATE_path
|
gokhlayeh@451
|
3615 done
|
gokhlayeh@451
|
3616 ;;
|
gokhlayeh@451
|
3617 esac
|
gokhlayeh@451
|
3618
|
gokhlayeh@313
|
3619 report stop 2>/dev/null
|
pankso@7
|
3620 exit 0
|