123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- #!/bin/bash -e
- #
- # Libreboot documentation build script
- # The function index() borrows from gendocs.sh, part of gnulib, the
- # GNU Portability Library (https://www.gnu.org/software/gnulib/). The
- # objective is to generate a html document which indexes the libreboot
- # documentation in its various formats.
- #
- # index() does not assume a certain set of formats have been
- # generated. It generates the index based on which files are located
- # in $man_dir.
- # INITIALIZATION #
- ##################
- # Initialization for manual directory
- [ -d docs/manual ] || mkdir docs/manual
- # Initialization for building manuals
- pkgname="libreboot"
- name=$(basename $1) # Always defined; users do not execute directly
- constants="docs/constants.texi"
- man_dir="docs/manual/"
- texinfo_src="docs/libreboot.texi"
- resources_dir="docs/resources" # for including in html tar.gz
- css_path="" # TODO: add css?
- # Default variables
- prefix="resources/"
- preprefix="../"
- make_cmd="makeinfo"
- comp_cmd="gzip -f -9 -c"
- c_ext=".gz"
- meta_type="man"
- type="reg"
- is_html="no"
- make_opts=""
- use_install=""
- # Initialization for generating eps images
- images_path="docs/resources/images"
- # Initialization for making index.html
- template_dir="docs/templates/"
- pkg_title="GNU Libreboot manual"
- pkg_email="example@libreboot.org" # sample
- pkg_name="libreboot"
- cur_date=`date '+%B %d, %Y'`
- # In case users try to build more than one format at once.
- if [ $# -gt 2 ]; then
- echo "ERROR: Only one docs format can be built at once."
- exit 1
- fi
- case "$2" in
- "w")
- meta_type="web";;
- "")
- :;; # This is the normal usage case
- *)
- echo "ERROR: Only one docs format can be built at once."
- echo "If you are building html files for the libreboot website, use:"
- echo "\$ ./build docs <html-type> w"
- exit 1;;
- esac
- ### FUNCTIONS ####
- ##################
- set_constants()
- {
- echo "@set docsdir $1" > $constants
- echo "@set useinstall $2" >> $constants
- }
- check_eps()
- {
- printf "INFO: Checking if jpgs have been converted to eps... "
- for i in $(find $images_path); do
- tdir_name=$(dirname $i)
- tfile_name=$(basename ${i,,})
- tfile_ext=${tfile_name##*.}
- tfile_base=$(basename -s .jpg ${i,,})
- if [ $tfile_ext = "jpg" ] && [ ! -e "${tdir_name}/${tfile_base}.eps" ]; then
- printf "converting ${i} >>>\n ${tdir_name}/${tfile_base}.eps ...\n\n"
- convert $i eps2:${tdir_name}/${tfile_base}.eps # using eps2 reduces file size
- fi
- done
- printf "Done.\n"
- }
- # FUNCTION COPIED FROM gendocs.sh
- # Return size of $1 in something resembling kilobytes.
- calcsize()
- {
- size=`ls -ksl $1 | awk '{print $1}'`
- echo $size
- }
- # Concatenation function called by index
- concat_index()
- {
- if [ -e $man_dir$1 ]; then
- if [ -d $man_dir$1 ]; then
- echo "<li><a href=\"$1/index.html\">$2</a>$3</li>" >> "${man_dir}index.html"
- else
- echo "<li><a href=\"$1\">$2</a>$3</li>" >> "${man_dir}index.html"
- fi
- fi
- }
- # Main index function
- build_index()
- {
- sed \
- -e "s!%%TITLE%%!$pkg_title!g" \
- -e "s!%%PACKAGE%%!$pkg_name!g" \
- -e "s!%%DATE%%!$cur_date!g" \
- ${template_dir}gendocs_template_header >"${man_dir}index.html"
- for i in $(ls $man_dir); do
- [ -d $man_dir$i ] || size=`calcsize "${man_dir}${i}"`
- case $i in
- ${pkg_name}.dvi.gz)
- dvi_gz_size=$size;;
- ${pkg_name}_by-node.tar.gz)
- html_node_tgz_size=$size;;
- ${pkg_name}_by-section.tar.gz)
- html_section_tgz_size=$size;;
- ${pkg_name}_one-page.html)
- html_mono_size=$size;;
- ${pkg_name}_one-page.tar.gz)
- html_mono_gz_size=$size;;
- ${pkg_name}.info.gz)
- info_gz_size=$size;;
- ${pkg_name}.pdf)
- pdf_size=$size;;
- ${pkg_name}.pdf.gz)
- pdf_gz_size=$size;;
- ${pkg_name}.ps.gz)
- ps_gz_size=$size;;
- ${pkg_name}.txt)
- plaintext_size=$size;;
- ${pkg_name}.txt.gz)
- plaintext_gz_size=$size;;
- ${pkg_name}.texi.gz)
- texinfo_gz_size=$size;;
- *)
- :;;
- esac
- done
- concat_index "${pkg_name}_one-page.html" "HTML (${html_mono_size}K bytes)" " - entirely on one web page."
- concat_index "${pkg_name}_by-node" "HTML" " - with one web page per node."
- concat_index "${pkg_name}_by-section" "HTML" " - with one web page per section."
- concat_index "${pkg_name}_one-page.tar.gz" "HTML compressed (${html_mono_gz_size}K gzipped tar file)" " - entirely on one web page."
- concat_index "${pkg_name}_by-node.tar.gz" "HTML compressed (${html_node_tgz_size}K gzipped tar file)" " - with one web page per node."
- concat_index "${pkg_name}_by-section.tar.gz" "HTML compressed (${html_section_tgz_size}K gzipped tar file)" " - with one web page per section."
- concat_index "${pkg_name}.info.gz" "Info document (${info_gz_size}K bytes gzipped)."
- concat_index "${pkg_name}.txt" "ASCII text (${plaintext_size}K bytes)."
- concat_index "${pkg_name}.txt.gz" "ASCII text compressed (${plaintext_gz_size}K bytes gzipped)."
- concat_index "${pkg_name}.dvi.gz" "TeX dvi file (${dvi_gz_size}K bytes gzipped)."
- concat_index "${pkg_name}.pdf" "PDF file (${pdf_size}K bytes)."
- concat_index "${pkg_name}.pdf.gz" "PDF file compressed (${pdf_gz_size}K bytes gzipped)."
- concat_index "${pkg_name}.ps.gz" "Postscript file compressed (${ps_gz_size}K bytes gzipped)."
- concat_index "${pkg_name}.texi.gz" "Texinfo source (${texinfo_gz_size}K bytes gzipped)."
- sed -e "s!%%EMAIL%%!$pkg_email!g" ${template_dir}gendocs_template_footer >>"$man_dir/index.html"
- }
- #### OPTIONS #####
- ##################
- # options to makeinfo/texi2dvi and file names
- case "$name" in
- "dvi")
- check_eps
- make_opts="-q -c -e -o"
- type="tex"
- basefile="${pkgname}.dvi";;
- "html")
- type="dir"
- is_html="yes"
- make_opts="--html --no-warn --split=node --css-include=$css_path -o"
- basefile="${pkgname}_by-node";;
- "html-by-section")
- type="dir"
- is_html="yes"
- make_opts="--html --no-warn --split=section --css-include=$css_path -o"
- basefile="${pkgname}_by-section";;
- "html-one-page")
- is_html="yes"
- make_opts="--html --no-warn --no-split --css-include=$css_path -o"
- basefile="${pkgname}_one-page.html";;
- "info")
- make_opts="--no-warn --no-split -o"
- basefile="${pkgname}.info";;
- "pdf")
- type="tex"
- make_opts="-q -c -e -p -o"
- basefile="${pkgname}.pdf";;
- "plaintext")
- make_opts="--no-warn --no-split --plaintext -o"
- basefile="${pkgname}.txt";;
- "postscript")
- check_eps
- make_opts="-q -c -e --ps -o"
- type="tex"
- basefile="${pkgname}.ps";;
- "texinfo-gz")
- basefile="${pkgname}.texi"
- type="texi";;
- esac
- # split html and pdf/postscript need special paths to resources
- case "$type" in
- "dir")
- preprefix="../../";;
- "tex")
- preprefix=""
- make_cmd="texi2dvi";;
- esac
- # compress html using tar
- if [ $is_html = "yes" ]; then
- comp_cmd="tar czf"
- c_ext=".tar.gz"
- fi
- # set up special paths for web mode
- if [ $meta_type = "web" ]; then
- if [ $is_html = "yes" ]; then
- echo "INFO: Using web mode for $name"
- prefix="docs/"
- use_install="install/"
- else
- echo "WARNING: Using web mode has no effect for non-html output."
- fi
- fi
- # write pathnames (prefixes) to file
- set_constants "$preprefix$prefix" "$use_install"
- outfile="$man_dir$basefile"
- ###### MAIN ######
- ##################
- if [ $type = "texi" ]; then
- echo "Making compressed manual: $outfile$c_ext..."
- gzip -f -9 -c $texinfo_src > $outfile$c_ext
- else # The normal case
- echo "Writing manual: $outfile..."
- $make_cmd $make_opts $outfile $texinfo_src
-
- # Don't compress anything if in web mode
- if [ ! $meta_type = "web" ]; then
- echo "Making compressed manual: ${outfile%\.html}$c_ext..."
- # tar and gzip have different usages
- if [ $is_html = "yes" ]; then
- # Include resources in html tar archives, but not .eps
- # and remove .html extension for html-one-page
- $comp_cmd ${outfile%\.html}$c_ext $outfile $resources_dir --exclude=*eps
- else
- $comp_cmd $outfile > $outfile$c_ext
- fi
- echo "Building index..."
- build_index # TODO: when building all, do this only once
- fi
- fi
- echo "Done."
|