summaryrefslogtreecommitdiff
path: root/Build/source/Build
blob: dff4f2eed18ceb8d9bcede2ac01ed1301744ba72 (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
#!/bin/sh
# $Id$
# Public domain.  Originally written many years ago by Sebastian Rahtz.
# To build again, try Build --no-clean.
# To build without optimization, try Build --debug.
# 
# Any other options given are passed along to configure, and everything can be
# overridden with environment variables.

# 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.
: ${TL_MAKE=make}

# make flags
: ${TL_MAKE_FLAGS=}

# set MAKE to $TL_MAKE for configure
: ${MAKE=${TL_MAKE}}
export MAKE

if test "x$1" = x--no-clean; then
  shift
else
  test -f Makefile && $MAKE clean 
  rm -rf $TL_WORKDIR $TL_INSTALL_DEST
fi

: ${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 four compilers used.
  # 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'"
  objc="OBJCFLAGS='$TL_COMPILER_GFLAGS'"
  objcxx="OBJCXXFLAGS='$TL_COMPILER_GFLAGS'"
  TL_BUILD_ENV="$c $cxx $objc $objcxx $TL_BUILD_ENV"
fi

test -d $TL_WORKDIR || mkdir $TL_WORKDIR
cd $TL_WORKDIR || exit 1

# allow override of configure location, just in case.
: ${TL_CONFIGURE=../configure}

# default to supporting large files as much as possible;
# see comments at --disable-largefile in README.config.
: ${TL_CONF_LARGEFILE=--enable-largefile}

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

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

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

# allow adding arbitrary other configure args, such as
# --with-banner-add='/SomeDistro'.
: ${TL_CONFIGURE_ARGS=}

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

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

# configure && make.  Keep the tee outside, so that we can detect
# failure at either step.
{
  echo "starting `date`"
  echo "on `uname -a`"
  echo "$0 $*"
  echo
  env | sort >buildenv.txt
  #
  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_SHARED \
        $TL_CONF_MISSING \
        $TL_CONF_LARGEFILE \
        $TL_CONF_XDVI_TOOLKIT \
        $TL_CONFIGURE_ARGS \
        "$@" \
  && 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`
echo "done (exit status $status)" `date` | tee -a build.log

exit $status