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