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