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