diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
commit | ad547a6b5986815fda458221149728d9d9ab1d87 (patch) | |
tree | 16296910eb3eca724371474ea9aea3994dc69614 /Build/source/Build | |
parent | 947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff) |
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/Build')
-rwxr-xr-x | Build/source/Build | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/Build/source/Build b/Build/source/Build new file mode 100755 index 00000000000..a197e1f21f0 --- /dev/null +++ b/Build/source/Build @@ -0,0 +1,167 @@ +#!/bin/sh +# $Id$ +# Public domain. Originally written many years ago by Sebastian Rahtz. +# The basic idea is to run configure && make, but with a multitude of +# environment variables to allow overriding everything. +# +# To build again from where it left off, try Build --no-clean. +# To build without optimization, try Build --debug. +# Any other options given are passed along to configure. + +# clean up environment +unset TEXMFCNF; export TEXMFCNF +LANG=C; export LANG + +# cd to our source directory. +mydir=`dirname $0` +cd $mydir || exit 1 +mydir=`pwd` # make absolute + +# We export the TL_* variables so that they can be dumped to buildenv.log. +: ${TL_WORKDIR=Work}; export TL_WORKDIR + +# allow override of install destination. +if test -z "$TL_INSTALL_DEST"; then + H=`pwd` + test -d inst || mkdir -p inst/texmf # avoid configure warnings + TL_INSTALL_DEST=$H/inst +fi +export TL_INSTALL_DEST + +# allow override of the make program. +# The idea is to use TL_MAKE if that is defined (and set MAKE), +# or MAKE if that is defined (and set TL_MAKE), +# or default to "make" if neither is set. +# We have to end up with both defined because TL_MAKE is used below +# in this script, and MAKE is used throughout (in its usual way). +if test -n "$TL_MAKE"; then + MAKE=$TL_MAKE +elif test -n "$MAKE"; then + TL_MAKE=$MAKE +else + TL_MAKE=make + MAKE=make +fi +export MAKE; export TL_MAKE + +# make flags +: ${TL_MAKE_FLAGS=}; export TL_MAKE_FLAGS +: ${TL_MAKE_VERBOSE=VERBOSE=1}; export TL_MAKE_VERBOSE + +# allow override of make target. +: ${TL_TARGET=world}; export TL_TARGET + +if test "x$1" = x--no-clean; then + shift +else + test -f Makefile && $MAKE clean + rm -rf $TL_WORKDIR $TL_INSTALL_DEST +fi + +# allow adding environment setting for build. +: ${TL_BUILD_ENV=}; export TL_BUILD_ENV +if test "x$1" = x--debug || test "x$1" = x-g; then + shift + # The idea is that with Build -g, you can set TL_COMPILER_GFLAGS in + # the environment with options common to all compilers -- + # not necessarily anything to do with debugging, e.g., -mcpu=sparvc9. + # Or you can set TL_{C,CXX,OBJCXX}FLAGS for per-language flags, + # notably TL_CFLAGS=-Wdeclaration-after-statement. + : ${TL_COMPILER_GFLAGS=-g}; export TL_COMPILER_CFLAGS + c="CFLAGS='$TL_COMPILER_GFLAGS $TL_CFLAGS'" + cxx="CXXFLAGS='$TL_COMPILER_GFLAGS $TL_CXXFLAGS'" + objcxx="OBJCXXFLAGS='$TL_COMPILER_GFLAGS $TL_OBJCXXFLAGS'" # only for macs + TL_BUILD_ENV="$c $cxx $objcxx $TL_BUILD_ENV" +fi + +# allow for changing the banner identification, e.g., +# --with-banner-add='/SomeDistro'; see the build doc. +: ${TL_CONF_BANNER=}; export TL_CONF_BANNER + +# default to supporting large files as much as possible; +# see comments at --disable-largefile in README.config. +: ${TL_CONF_LARGEFILE=--enable-largefile}; export TL_CONF_LARGEFILE + +# default to terminate if requested programs or features must be disabled. +: ${TL_CONF_MISSING=--disable-missing}; export TL_CONF_MISSING + +# default to static linking. +: ${TL_CONF_SHARED=--disable-shared}; export TL_CONF_SHARED + +# allow override of xdvi toolkit, default to standard xaw. +: ${TL_CONF_XDVI_TOOLKIT=--with-xdvi-x-toolkit=xaw} +export TL_CONF_XDVI_TOOLKIT + +# allow override of configure location. +: ${TL_CONFIGURE=../configure}; export TL_CONFIGURE + +# allow adding arbitrary other configure args, after all the others. +: ${TL_CONFIGURE_ARGS=}; export TL_CONFIGURE_ARGS + +# allow for doing stuff betwen configure and make. +: ${TL_POSTCONFIGURE=true}; export TL_POSTCONFIGURE + +# Kpathsea is not going to be able to find its cnf files during the +# build, so omit the warning about it. +: ${KPATHSEA_WARNING=0}; export KPATHSEA_WARNING + +# make our working directory. +test -d $TL_WORKDIR || mkdir $TL_WORKDIR +cd $TL_WORKDIR || exit 1 + +# configure && make. Keep the tee outside, so that we can detect +# failure at either step. +{ + echo "starting TeX Live build at `date`" + printf 'CMDLINE\t"%s"\n' "$0 $*" + printf 'PWD\t"%s"\n' "`pwd`" + printf 'UNAME\t"%s"\n' "`uname`" + env | sort >buildenv.log + echo "See also buildenv.log and buildinfo.log in `pwd`" + echo + # + set -vx # show the configure and make commands in the log. + + eval $TL_BUILD_ENV $TL_CONFIGURE \ + --prefix=$TL_INSTALL_DEST \ + --datadir=$TL_INSTALL_DEST \ + $TL_CONF_BANNER \ + $TL_CONF_MISSING \ + $TL_CONF_LARGEFILE \ + $TL_CONF_SHARED \ + $TL_CONF_XDVI_TOOLKIT \ + $TL_CONFIGURE_ARGS \ + "$@" \ + && eval $TL_POSTCONFIGURE \ + && eval $TL_BUILD_ENV $TL_MAKE $TL_MAKE_FLAGS $TL_MAKE_VERBOSE $TL_TARGET + + # Too arcane to propagate the exit status through a pipeline. + # Just use a temp file. + echo $? >exitstatus.txt +} 2>&1 | tee build.log + + +# if we have a bindir, report the number of binaries built. +bindir=$TL_INSTALL_DEST/bin +if test -d "$bindir"; then + count=`find "$bindir" \! -type d -print | wc -l` + if test "$count" -gt 0; then + echo + echo "$0: $count executables in $bindir." + else + echo "$0: Build failed, no executables under $bindir." + echo "$0: Full log in: `pwd`/build.log" + exit 1 + fi | tee -a build.log +# if no bindir, perhaps they specified --prefix; don't worry. +# Any errors will have been duly reported anyway. +fi + +status=`cat exitstatus.txt` +if echo "$status" | egrep '^[0-9]+$' >/dev/null; then :; else + echo "$0: exitstatus.txt does not contain a number; disk full?" >&2 + status=1 +fi +echo "done (exit status $status)" `date` | tee -a build.log + +exit $status |