summaryrefslogtreecommitdiff
path: root/Build/source/Build
blob: 1cc955f83d59fd46210a52145aaa7044995fc16f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/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

: ${TL_WORKDIR=Work}

# 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

# 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

# make flags
: ${TL_MAKE_FLAGS=}

# allow override of make target.
: ${TL_TARGET=world}

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=}
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.
  : ${TL_COMPILER_GFLAGS=-g}
  c="CFLAGS='$TL_COMPILER_GFLAGS'"
  cxx="CXXFLAGS='$TL_COMPILER_GFLAGS'"
  objcxx="OBJCXXFLAGS='$TL_COMPILER_GFLAGS'"  # needed only on macs
  TL_BUILD_ENV="$c $cxx $objcxx $TL_BUILD_ENV"
fi

# allow override of configure location.
: ${TL_CONFIGURE=../configure}

# allow for changing the banner identification, e.g.,
# --with-banner-add='/SomeDistro'; see the build doc.
: ${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}

# default to terminate if requested programs or features must be disabled.
: ${TL_CONF_MISSING=--disable-missing}

# default to static linking.
: ${TL_CONF_SHARED=--disable-shared}

# allow override of xdvi toolkit, default to standard xaw.
: ${TL_CONF_XDVI_TOOLKIT=--with-xdvi-x-toolkit=xaw}

# allow adding arbitrary other configure args, after all the others.
: ${TL_CONFIGURE_ARGS=}

# allow for doing stuff betwen configure and make.
: ${TL_POSTCONFIGURE=true} 

# Kpathsea is not going to be able to find its cnf files during the
# build, so omit the warning about it.
: ${KPATHSEA_WARNING=0}

# 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`"
  echo "on `uname -a`"
  echo "in `pwd`"
  echo "$0 $*"
  echo
  env | sort >buildenv.log
  #
  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_TARGET
  
  # Too arcane to try 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