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