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