aboutsummaryrefslogtreecommitdiff
path: root/share/tools/dobuild.sh
blob: 9e1618712143f91acd6289703fbaf6017ae2188f (plain) (blame)
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
#!/bin/sh
# Copyright (c) 2001 Wolfram Schneider <wosch@FreeBSD.org>
# Copyright (c) 2001 Dima Dorfman <dd@FreeBSD.org>
# Copyright (c) 2004 Simon L. Nielsen <simon@FreeBSD.org>
#
# Build the FreeBSD docs from the Git repository.
#
#
# Major variables:
#
#	PATH		- The search path as interpreted by the shell.
#	DOCGIT		- Url to the FreeBSD doc Git repository.
#	BUILDDIR	- Where the checked out copies of the files are stored.
#	DESTDIR		- Where the rendered copies should wind up.
#	BUILDARGS	- Arguments to pass to make(1) when {build,install}ing.
#	INSTARGS	- Arguments to pass to make(1) when installing.
#	WEBMAILTO	- Address to send mail to if the build fails.
#
#	subtrees	- List of directores in $BUILDDIR which are from SCM.
#
# Variables which are in uppercase are derived from the environment
# unless they don't exist, in which case a value suitable for
# www.FreeBSD.org is used.  Variables in lowercase can't be safely
# changed without editing other parts of the script; thus, their value
# in the environment is ignored.
#
# Exit codes:
#
#	0	- success
#	1	- unknown failure
#	2	- failure in Git operations
#	3	- failure in make operations
#

#
# NOTE: This script is not automatically updated on the builder.
#

# WARNING!  This script depend on dobuild_wrap.sh setting the
# configuration variables in the enviroment.
#
if [ -z "${DOBUILDWRAP}" ]; then
	echo "Error: This script should only be called from dobuild_wrap.sh!"
	exit 1
fi

# Only install some compression types
INSTALL_COMPRESSED=${COMPTYPES}; export INSTALL_COMPRESSED

# Abort on all errors
set -e

umask 002
cd $BUILDDIR || exit 1

# Remove the old copies.
if [ -z "${NOCLEAN}" ]; then
	echo "===> Removing old stuff"
	rm -Rf doc out 2>/dev/null || true
	chflags -R noschg doc out 2>/dev/null || true
	rm -Rf doc out 2>/dev/null

	echo "===> Check out the new doc"
	git clone -b main ${DOCGIT} doc || exit 2
fi

cd $BUILDDIR/doc || exit 1
mkdir -p $DOCDIR
mkdir -p $DOCDIR/packages
rm -f ${BUILDDIR}/packages # TMP
ln -s ${DOCDIR}/packages ${BUILDDIR}/doc/packages

if [ -d ${PATCHDIR} -a -n "$(find ${PATCHDIR} -name \*.patch)" ]; then
	echo "===> Patching bugs in doc tree"
	for p in `echo ${PATCHDIR}/*.patch`; do
		patch < ${p}
	done
fi

echo "===> Building doc"
time make ${BUILDARGS} all || exit 3

echo "===> Installing doc package to temp roots"
time make ${INSTARGS} install || exit 3

#echo "===> Building doc packages"
#time make ${BUILDARGS} package || exit 3

# XXX TODO, check for correct string when tex run out of resources
#echo "===> Testing for broken tex output"
#grep 'hash' $LOGFILE > /dev/null && \
#    (echo "Error: Possible TeX out of resources."; false)

#OKFILENAME

# build a string to use with find(1) to identify
# uncompressed files to be copied
UNCOMP_FIND_STR=""
for fmt in ${UNCOMPRESSED_FORMATS}; do
  UNCOMP_FIND_STR="${UNCOMP_FIND_STR}( -name article.${fmt} -or -name book.${fmt} ) -or "
done
# add outer parens, remove the final "-or "
UNCOMP_FIND_STR="( ${UNCOMP_FIND_STR%-or } )"

if [ -n "${UNCOMP_FIND_STR}" ]; then
  echo "copying uncompressed formats: ${UNCOMPRESSED_FORMATS}"
  cd ${BUILDDIR}/doc
  find -X ??_* ${UNCOMP_FIND_STR} -print0 \
  | xargs -0 -I % install -v -C -o docbuild -g docbuild -m 444 % ${DOCDIR}/%
fi

rm -rf ${OUTDIR}/*
mkdir -p ${OUTDIR}
cp -Rp ${DOCDIR}/* ${OUTDIR}

exit 0