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