3 # Build script for <PACKAGE>
5 # This build script is meant to be executed from within the build
6 # directory, regardless of whether that is outside the source tree or
9 # It will create up to 12 log files in the $HOME directory:
11 # configure.log: All messages output during configure
12 # configure.err: Just the errors output during configure
13 # make.log: All messages output during make
14 # make.err: Just the errors output during make
15 # check.log: All messages output during make check/test
16 # check.err: Just the errors output during make check/test
17 # install.log: All messages output during make install
18 # install.err: Just the errors output during make install
19 # upd.log: Any messages from updating the package list
20 # upd.err: Just the errors from updating the package list
21 # verupd.log: Any messages from updating the package version
22 # verupd.err: Just the errors from updating the package version
24 # After running the script you should check the *.err files to see
25 # if any problems have occurred. If that is the case, use the corresponding
26 # *.log files to see the error messages in context.
28 # Note: the ":" before the "}" in *_commands() is a no-op that makes sure
29 # that the function remains syntactically valid, even if you remove its
30 # contents (e.g. remove the "configure" line, because there's nothing to
31 # configure for the package).
33 # Comments throughout the script marked "#*" are places where you may
34 # have to change things for individual package circumstances.
39 COPYRIGHT="Copyright (C) 2007 - 2014 Steve Youngs <steve@steveyoungs.com>"
40 version_str="${ourname}: ${VERSION}\n${COPYRIGHT}"
49 # Set $auto_version to 1 (one) if the package's version can be updated
50 # automatically. Set $SRCTREE if building outside the source tree.
55 # Set the configure commands/options here. Remove everything except
56 # the braces and colon if the package has no configure.
59 ${SRCTREE}/configure --prefix=/usr \
60 --infodir=/usr/share/info \
61 --mandir=/usr/share/man \
63 --libexecdir=/usr/lib \
68 # Set the make commands/options here.
75 # Set the test suite commands/options here. Remove everything except
76 # the braces and colon if the package has no test suite
83 # Set the install commands/options here.
87 # libtool .la files DO NOT need to be executable! (remove if not a
89 forall_direntries_from $(whoami) -name \*.la -exec chmod -v 644 {} \;
93 # Set `arg' to command(s) that output just the version number of the
97 # Commands to update the version string in .project
98 arg='' # replace with something that returns a version number.
99 sed -i "s|\(Version: \).*$|\1${arg}|" ${HOME}/.project
102 #======================================================================#
103 ### There shouldn't be anything beyond this point to tweak or change ###
104 #======================================================================#
108 for i in "${PIPESTATUS[@]}"; do
109 test $i != 0 && { echo FAILED! ; exit 1 ; }
117 update-pkg-project $(whoami)
122 echo -n "Configuring ($(whoami))... "
123 { configure_commands 3>&1 1>&2 2>&3 | tee "$HOME/configure.err" ;} \
124 &>"$HOME/configure.log"
126 [[ ${only} = yes ]] && exit 0 || run_build
131 echo -n "Building ($(whoami))... "
132 { make_commands 3>&1 1>&2 2>&3 | tee "$HOME/make.err" ;} \
135 [[ ${only} = yes ]] && exit 0 || run_check
140 echo -n "Checking ($(whoami))... "
141 { check_commands 3>&1 1>&2 2>&3 | tee "$HOME/check.err" ;} \
144 [[ ${only} = yes ]] && exit 0 || run_install
149 echo -n "Installing ($(whoami))... "
150 { install_commands 3>&1 1>&2 2>&3 | tee "$HOME/install.err" ;} \
151 &>"$HOME/install.log"
153 [[ ${only} = yes ]] && exit 0 || run_update
158 echo -n "Updating package list ($(whoami))... "
159 { update_commands 3>&1 1>&2 2>&3 | tee "$HOME/upd.err" ;} \
162 # maybe update the version too
163 if [ $auto_version -eq 1 ];then
164 echo -n "Updating package version ($(whoami))... "
165 { version_commands 3>&1 1>&2 2>&3 | tee "$HOME/verupd.err" ;} \
174 # Look for a pager to display the help with.
177 if [ ${PAGER} ]; then
178 # User has PAGER env var set, use that.
181 # No PAGER var set, try most->less->more->cat
182 for pager in most less more cat; do
183 if [ -x "$(which $pager)" ]; then
202 [ -c | -C | -b | -B | -k | -K | -i | -I | -u ]
203 [ --conf | --conf_only | --build | --build_only | --check ]
204 [ --check_only | --install | --install_only | --upd_list ]
213 $ourname is a general purpose build script. It should fit the bill
214 for most packages out of the box. However you should ALWAYS check
215 through the script before running it blindly on a package.
217 The places in the script that will require your attention each time
218 you set up a new package have been marked with "#*".
223 Most times you will not need to specify any command line options.
224 They exist mainly for those times when something has gone awry.
228 Run the script from the configure stage, onwards. This is
229 synonymous with running the script without any command line
234 Run just the configure stage and then exit.
238 Run the script from the build (make) stage, onwards. Specifying
239 this option forces the script to skip the configure stage. Do
240 not use this option simply because the package does not have a
241 configure, in that case, you are better off simply removing the
242 contents of the "configure_commands" function.
246 Run just the build (make) stage and then exit.
250 Run the script from the check (testsuite) stage, onwards.
251 Specifying this option forces the script to skip the configure
256 Run just the check (testsuite) stage and then exit.
260 Run the script from the install stage, onwards. Specifying
261 this option forces the script to skip the configure, build,
266 Run just the install stage and then exit.
270 Updates the package file list kept in the .project file. This
271 option also updates the package version in that file too if
276 Display this usage info and exit.
280 Display version and copyright info and exit.
286 Has information about the package, including (but not limited
287 to), website, repo location and type, version, date last
288 updated, installation notes, and complete file list.
290 ${HOME}/configure.log
291 Contains all messages output during configure.
293 ${HOME}/configure.err
294 Contains only error messages output during configure.
297 Contains all messages output during make.
300 Contains only error messages output during make.
303 Contains all messages output from running a package testsuite.
306 Contains only error messages output from running a package
310 Contains all messages output during install.
313 Contains only error messages output during install.
316 Contains all messages output during the update of the package
317 file list. This log is nearly always empty, or at least it
321 Contains only error messages output during the update of the
322 package file list. This log is nearly always empty, or at
326 Contains all messages output when updating the package version
327 info. It should be empty.
330 Contains only error messages output when updating the package
331 version info. It should be empty.
336 0 -- Successful completion.
337 1 -- Something bad happened.
338 2 -- Bad command line option.
345 # Command line parsing.
346 # Yes, it is possible to give more than one option on the command
347 # line, but that normally doesn't make much sense. Consider:
348 # '../build --conf_only --install' the --conf_only option will
349 # cause the script to exit before the install happens.
354 # We have cmdline args, deal with them.
355 while getopts $args opts; do
359 (conf) run_configure ;;
360 (conf_only) only=yes; run_configure ;;
362 (build_only) only=yes; run_build ;;
364 (check_only) only=yes; run_check ;;
365 (install) run_install ;;
366 (install_only) only=yes; run_install ;;
367 (upd_list) run_update ;;
368 (help|usage) usage ;;
369 (version) show_version ;;
371 echo $ouname: error: bad option: --$OPTARG >&2
377 (C) only=yes; run_configure ;;
379 (B) only=yes; run_build ;;
381 (K) only=yes; run_check ;;
383 (I) only=yes; run_install ;;
388 echo $ourname: error: bad option: -$OPTARG >&2
393 shift $(( $OPTIND - 1 ))
395 # There were no cmdline args given, just run from configure onwards
396 only=no # this should be "no" already, but make sure