3 # Build script for <PACKAGE>
5 # This build script is meant to be executed from within the source
6 # directory created by extracting the tarball.
8 # It will create up to 12 log files in the $HOME directory:
10 # configure.log: All messages output during configure
11 # configure.err: Just the errors output during configure
12 # make.log: All messages output during make
13 # make.err: Just the errors output during make
14 # check.log: All messages output during make check/test
15 # check.err: Just the errors output during make check/test
16 # install.log: All messages output during make install
17 # install.err: Just the errors output during make install
18 # upd.log: Any messages from updating the package list
20 # upd.err: Just the errors from updating the package list
22 # verupd.log: Any messages from updating the package version
24 # verupd.err: Just the errors from updating the package version
27 # After running the script you should check the *.err files to see
28 # if any problems have occurred. If that is the case, use the corresponding
29 # *.log files to see the error messages in context.
31 # Note: the ":" before the "}" in *_commands() is a no-op that makes sure
32 # that the function remains syntactically valid, even if you remove its
33 # contents (e.g. remove the "configure" line, because there's nothing to
34 # configure for the package).
36 # Comments throughout the script marked "#*" are places where you may
37 # have to change things for individual package circumstances.
42 COPYRIGHT="Copyright (C) 2007 - 2013 Steve Youngs <steve@steveyoungs.com>"
43 version_str="${ourname}: ${VERSION}\n${COPYRIGHT}"
52 # Set this to 1 (one) if the package's version can be updated
57 # Set the configure commands/options here. Remove everything except
58 # the braces and colon if the package has no configure.
61 ./configure --prefix=/usr \
62 --infodir=/usr/share/info \
63 --mandir=/usr/share/man \
65 --libexecdir=/usr/lib \
70 # Set the make commands/options here.
77 # Set the test suite commands/options here. Remove everything except
78 # the braces and colon if the package has no test suite
85 # Set the install commands/options here.
89 # libtool .la files DO NOT need to be executable! (remove if not a
91 forall_direntries_from $(whoami) -name \*.la -exec chmod -v 644 {} \;
95 # Set `arg' to command(s) that output just the version number of the
99 # Commands to update the version string in .project
100 arg='' # replace with something that returns a version number.
101 sed -i "s|\(Version: \).*$|\1${arg}|" ${HOME}/.project
104 #======================================================================#
105 ### There shouldn't be anything beyond this point to tweak or change ###
106 #======================================================================#
110 for i in "${PIPESTATUS[@]}"; do
111 test $i != 0 && { echo FAILED! ; exit 1 ; }
119 sed -i s/"\(Last_Updated: \).*$"/"\1$(date +%c)"/g ${HOME}/.project
120 sed -i s/"\(Deps: \).*$"/"\1$(forall_direntries_from $(whoami) -executable -exec ldd {} 2>/dev/null \;|grep '=>' 2>/dev/null|awk '{print $3;}'|xargs stat --format \"%U:%G\"|sort|uniq|xargs echo -n)"/ ${HOME}/.project
121 awk '/^CONTENTS:/ { print; exit; } {print}' ${HOME}/.project > ${HOME}/.projtmp
122 echo "--------" >> ${HOME}/.projtmp
123 list_package $(whoami) >> ${HOME}/.projtmp
124 mv ${HOME}/.projtmp ${HOME}/.project
129 echo -n "Configuring ($(whoami))... "
130 { configure_commands 3>&1 1>&2 2>&3 | tee "$HOME/configure.err" ;} \
131 &>"$HOME/configure.log"
133 [[ ${only} = yes ]] && exit 0 || run_build
138 echo -n "Building ($(whoami))... "
139 { make_commands 3>&1 1>&2 2>&3 | tee "$HOME/make.err" ;} \
142 [[ ${only} = yes ]] && exit 0 || run_check
147 echo -n "Checking ($(whoami))... "
148 { check_commands 3>&1 1>&2 2>&3 | tee "$HOME/check.err" ;} \
151 [[ ${only} = yes ]] && exit 0 || run_install
156 echo -n "Installing ($(whoami))... "
157 { install_commands 3>&1 1>&2 2>&3 | tee "$HOME/install.err" ;} \
158 &>"$HOME/install.log"
160 [[ ${only} = yes ]] && exit 0 || run_update
165 echo -n "Updating package list ($(whoami))... "
166 { update_commands 3>&1 1>&2 2>&3 | tee "$HOME/upd.err" ;} \
169 # maybe update the version too
170 if [ $auto_version -eq 1 ];then
171 echo -n "Updating package version ($(whoami))... "
172 { version_commands 3>&1 1>&2 2>&3 | tee "$HOME/verupd.err" ;} \
181 # Look for a pager to display the help with.
184 if [ ${PAGER} ]; then
185 # User has PAGER env var set, use that.
188 # No PAGER var set, try most->less->more->cat
189 for pager in most less more cat; do
190 if [ -x "$(which $pager)" ]; then
209 [ -c | -C | -b | -B | -k | -K | -i | -I | -u ]
210 [ --conf | --conf_only | --build | --build_only | --check ]
211 [ --check_only | --install | --install_only | --upd_list ]
220 $ourname is a general purpose build script. It should fit the bill
221 for most packages out of the box. However you should ALWAYS check
222 through the script before running it blindly on a package.
224 The places in the script that will require your attention each time
225 you set up a new package have been marked with "#*".
230 Most times you will not need to specify any command line options.
231 They exist mainly for those times when something has gone awry.
235 Run the script from the configure stage, onwards. This is
236 synonymous with running the script without any command line
241 Run just the configure stage and then exit.
245 Run the script from the build (make) stage, onwards. Specifying
246 this option forces the script to skip the configure stage. Do
247 not use this option simply because the package does not have a
248 configure, in that case, you are better off simply removing the
249 contents of the "configure_commands" function.
253 Run just the build (make) stage and then exit.
257 Run the script from the check (testsuite) stage, onwards.
258 Specifying this option forces the script to skip the configure
263 Run just the check (testsuite) stage and then exit.
267 Run the script from the install stage, onwards. Specifying
268 this option forces the script to skip the configure, build,
273 Run just the install stage and then exit.
277 Updates the package file list kept in the .project file. This
278 option also updates the package version in that file too if
283 Display this usage info and exit.
287 Display version and copyright info and exit.
293 Has information about the package, including (but not limited
294 to), website, repo location and type, version, date last
295 updated, installation notes, and complete file list.
297 ${HOME}/configure.log
298 Contains all messages output during configure.
300 ${HOME}/configure.err
301 Contains only error messages output during configure.
304 Contains all messages output during make.
307 Contains only error messages output during make.
310 Contains all messages output from running a package testsuite.
313 Contains only error messages output from running a package
317 Contains all messages output during install.
320 Contains only error messages output during install.
323 Contains all messages output during the update of the package
324 file list. This log is nearly always empty, or at least it
328 Contains only error messages output during the update of the
329 package file list. This log is nearly always empty, or at
333 Contains all messages output when updating the package version
334 info. It should be empty.
337 Contains only error messages output when updating the package
338 version info. It should be empty.
343 0 -- Successful completion.
344 1 -- Something bad happened.
345 2 -- Bad command line option.
352 # Command line parsing.
353 # Yes, it is possible to give more than one option on the command
354 # line, but that normally doesn't make much sense. Consider:
355 # '../build --conf_only --install' the --conf_only option will
356 # cause the script to exit before the install happens.
361 # We have cmdline args, deal with them.
362 while getopts $args opts; do
366 (conf) run_configure ;;
367 (conf_only) only=yes; run_configure ;;
369 (build_only) only=yes; run_build ;;
371 (check_only) only=yes; run_check ;;
372 (install) run_install ;;
373 (install_only) only=yes; run_install ;;
374 (upd_list) run_update ;;
375 (help|usage) usage ;;
376 (version) show_version ;;
378 echo $ouname: error: bad option: --$OPTARG >&2
384 (C) only=yes; run_configure ;;
386 (B) only=yes; run_build ;;
388 (K) only=yes; run_check ;;
390 (I) only=yes; run_install ;;
395 echo $ourname: error: bad option: -$OPTARG >&2
400 shift $(( $OPTIND - 1 ))
402 # There were no cmdline args given, just run from configure onwards
403 only=no # this should be "no" already, but make sure