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