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