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 - 2011 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.*"/"Last_Updated: $(date +%c)"/g ${HOME}/.project
120 awk '/^CONTENTS:/ { print; exit; } {print}' ${HOME}/.project > ${HOME}/.projtmp
121 echo "--------" >> ${HOME}/.projtmp
122 list_package $(whoami) >> ${HOME}/.projtmp
123 mv ${HOME}/.projtmp ${HOME}/.project
128 echo -n "Configuring ($(whoami))... "
129 { configure_commands 3>&1 1>&2 2>&3 | tee "$HOME/configure.err" ;} \
130 &>"$HOME/configure.log"
132 [[ ${only} = yes ]] && exit 0 || run_build
137 echo -n "Building ($(whoami))... "
138 { make_commands 3>&1 1>&2 2>&3 | tee "$HOME/make.err" ;} \
141 [[ ${only} = yes ]] && exit 0 || run_check
146 echo -n "Checking ($(whoami))... "
147 { check_commands 3>&1 1>&2 2>&3 | tee "$HOME/check.err" ;} \
150 [[ ${only} = yes ]] && exit 0 || run_install
155 echo -n "Installing ($(whoami))... "
156 { install_commands 3>&1 1>&2 2>&3 | tee "$HOME/install.err" ;} \
157 &>"$HOME/install.log"
159 [[ ${only} = yes ]] && exit 0 || run_update
164 echo -n "Updating package list ($(whoami))... "
165 { update_commands 3>&1 1>&2 2>&3 | tee "$HOME/upd.err" ;} \
168 # maybe update the version too
169 if [ $auto_version -eq 1 ];then
170 echo -n "Updating package version ($(whoami))... "
171 { version_commands 3>&1 1>&2 2>&3 | tee "$HOME/verupd.err" ;} \
180 # Look for a pager to display the help with.
183 if [ ${PAGER} ]; then
184 # User has PAGER env var set, use that.
187 # No PAGER var set, try most->less->more->cat
188 for pager in most less more cat; do
189 if [ -x "$(which $pager)" ]; then
208 [ -c | -C | -b | -B | -k | -K | -i | -I | -u ]
209 [ --conf | --conf_only | --build | --build_only | --check ]
210 [ --check_only | --install | --install_only | --upd_list ]
219 $ourname is a general purpose build script. It should fit the bill
220 for most packages out of the box. However you should ALWAYS check
221 through the script before running it blindly on a package.
223 The places in the script that will require your attention each time
224 you set up a new package have been marked with "#*".
229 Most times you will not need to specify any command line options.
230 They exist mainly for those times when something has gone awry.
234 Run the script from the configure stage, onwards. This is
235 synonymous with running the script without any command line
240 Run just the configure stage and then exit.
244 Run the script from the build (make) stage, onwards. Specifying
245 this option forces the script to skip the configure stage. Do
246 not use this option simply because the package does not have a
247 configure, in that case, you are better off simply removing the
248 contents of the "configure_commands" function.
252 Run just the build (make) stage and then exit.
256 Run the script from the check (testsuite) stage, onwards.
257 Specifying this option forces the script to skip the configure
262 Run just the check (testsuite) stage and then exit.
266 Run the script from the install stage, onwards. Specifying
267 this option forces the script to skip the configure, build,
272 Run just the install stage and then exit.
276 Updates the package file list kept in the .project file. This
277 option also updates the package version in that file too if
282 Display this usage info and exit.
286 Display version and copyright info and exit.
292 Has information about the package, including (but not limited
293 to), website, repo location and type, version, date last
294 updated, installation notes, and complete file list.
296 ${HOME}/configure.log
297 Contains all messages output during configure.
299 ${HOME}/configure.err
300 Contains only error messages output during configure.
303 Contains all messages output during make.
306 Contains only error messages output during make.
309 Contains all messages output from running a package testsuite.
312 Contains only error messages output from running a package
316 Contains all messages output during install.
319 Contains only error messages output during install.
322 Contains all messages output during the update of the package
323 file list. This log is nearly always empty, or at least it
327 Contains only error messages output during the update of the
328 package file list. This log is nearly always empty, or at
332 Contains all messages output when updating the package version
333 info. It should be empty.
336 Contains only error messages output when updating the package
337 version info. It should be empty.
342 0 -- Successful completion.
343 1 -- Something bad happened.
344 2 -- Bad command line option.
351 # Command line parsing.
352 # Yes, it is possible to give more than one option on the command
353 # line, but that normally doesn't make much sense. Consider:
354 # '../build --conf_only --install' the --conf_only option will
355 # cause the script to exit before the install happens.
360 # We have cmdline args, deal with them.
361 while getopts $args opts; do
365 (conf) run_configure ;;
366 (conf_only) only=yes; run_configure ;;
368 (build_only) only=yes; run_build ;;
370 (check_only) only=yes; run_check ;;
371 (install) run_install ;;
372 (install_only) only=yes; run_install ;;
373 (upd_list) run_update ;;
374 (help|usage) usage ;;
375 (version) show_version ;;
377 echo $ouname: error: bad option: --$OPTARG >&2
383 (C) only=yes; run_configure ;;
385 (B) only=yes; run_build ;;
387 (K) only=yes; run_check ;;
389 (I) only=yes; run_install ;;
394 echo $ourname: error: bad option: -$OPTARG >&2
399 shift $(( $OPTIND - 1 ))
401 # There were no cmdline args given, just run from configure onwards
402 only=no # this should be "no" already, but make sure