|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +######################################################################## |
| 4 | +# Regenerate auto-generated files, using information in SAGE_ROOT/build/ |
| 5 | +# |
| 6 | +# This script is run by SAGE_ROOT/bootstrap as part of the bootstrapping phase |
| 7 | +# (before configure, before creating source distributions). |
| 8 | +# |
| 9 | +# The BOOTSTRAP_QUIET variable is set by the top-level |
| 10 | +# bootstrap script and controls how verbose we are. |
| 11 | +######################################################################## |
| 12 | + |
| 13 | +set -e |
| 14 | + |
| 15 | +if [ -z "$SAGE_ROOT" ]; then |
| 16 | + echo Please run the top-level bootstrap script of the Sage distribution. |
| 17 | + exit 1 |
| 18 | +fi |
| 19 | + |
| 20 | +./bootstrap_m4 |
| 21 | + |
| 22 | +cd "$SAGE_ROOT" |
| 23 | + |
| 24 | +STRIP_COMMENTS="sed s/#.*//;" |
| 25 | +OUTPUT_DIR="src/doc/en/installation" |
| 26 | +mkdir -p "$OUTPUT_DIR" |
| 27 | + |
| 28 | +shopt -s extglob |
| 29 | + |
| 30 | +RECOMMENDED_SPKG_PATTERN="@(_recommended$(for a in $(head -n 1 build/pkgs/_recommended/dependencies); do echo -n "|"$a; done))" |
| 31 | +DEVELOP_SPKG_PATTERN="@(_develop$(for a in $(head -n 1 build/pkgs/_develop/dependencies); do echo -n "|"$a; done))" |
| 32 | + |
| 33 | +for SYSTEM in arch debian fedora cygwin homebrew opensuse; do |
| 34 | + SYSTEM_PACKAGES= |
| 35 | + OPTIONAL_SYSTEM_PACKAGES= |
| 36 | + SAGELIB_SYSTEM_PACKAGES= |
| 37 | + SAGELIB_OPTIONAL_SYSTEM_PACKAGES= |
| 38 | + RECOMMENDED_SYSTEM_PACKAGES= |
| 39 | + DEVELOP_SYSTEM_PACKAGES= |
| 40 | + for PKG_BASE in $(sage-package list --has-file distros/$SYSTEM.txt); do |
| 41 | + PKG_SCRIPTS=build/pkgs/$PKG_BASE |
| 42 | + SYSTEM_PACKAGES_FILE=$PKG_SCRIPTS/distros/$SYSTEM.txt |
| 43 | + PKG_TYPE=$(cat $PKG_SCRIPTS/type) |
| 44 | + PKG_SYSTEM_PACKAGES=$(echo $(${STRIP_COMMENTS} $SYSTEM_PACKAGES_FILE)) |
| 45 | + if [ -n "PKG_SYSTEM_PACKAGES" ]; then |
| 46 | + if [ -f $PKG_SCRIPTS/spkg-configure.m4 ]; then |
| 47 | + case "$PKG_BASE:$PKG_TYPE" in |
| 48 | + *:standard) |
| 49 | + SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" |
| 50 | + ;; |
| 51 | + $DEVELOP_SPKG_PATTERN:*) |
| 52 | + DEVELOP_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" |
| 53 | + ;; |
| 54 | + $RECOMMENDED_SPKG_PATTERN:*) |
| 55 | + RECOMMENDED_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" |
| 56 | + ;; |
| 57 | + *) |
| 58 | + OPTIONAL_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" |
| 59 | + ;; |
| 60 | + esac |
| 61 | + else |
| 62 | + case "$PKG_BASE:$PKG_TYPE" in |
| 63 | + $DEVELOP_SPKG_PATTERN:*) |
| 64 | + DEVELOP_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" |
| 65 | + ;; |
| 66 | + *:standard) |
| 67 | + SAGELIB_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" |
| 68 | + ;; |
| 69 | + *) |
| 70 | + SAGELIB_OPTIONAL_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" |
| 71 | + ;; |
| 72 | + esac |
| 73 | + fi |
| 74 | + fi |
| 75 | + done |
| 76 | + |
| 77 | + if [ "${BOOTSTRAP_QUIET}" = "no" ]; then |
| 78 | + echo >&2 $0:$LINENO: installing "$OUTPUT_DIR"/$SYSTEM"*.txt" |
| 79 | + fi |
| 80 | + echo "$(sage-print-system-package-command $SYSTEM --prompt --sudo install $(echo $(echo $SYSTEM_PACKAGES | xargs -n 1 echo | sort | uniq)))" > "$OUTPUT_DIR"/$SYSTEM.txt |
| 81 | + echo "$(sage-print-system-package-command $SYSTEM --prompt --sudo install $(echo $(echo $OPTIONAL_SYSTEM_PACKAGES | xargs -n 1 echo | sort | uniq)))" > "$OUTPUT_DIR"/$SYSTEM-optional.txt |
| 82 | + echo "$(sage-print-system-package-command $SYSTEM --prompt --sudo install $(echo $(echo $RECOMMENDED_SYSTEM_PACKAGES | xargs -n 1 echo | sort | uniq)))" > "$OUTPUT_DIR"/$SYSTEM-recommended.txt |
| 83 | + echo "$(sage-print-system-package-command $SYSTEM --prompt --sudo install $(echo $(echo $DEVELOP_SYSTEM_PACKAGES | xargs -n 1 echo | sort | uniq)))" > "$OUTPUT_DIR"/$SYSTEM-develop.txt |
| 84 | +done |
| 85 | + |
| 86 | +OUTPUT_DIR="src/doc/en/reference/spkg" |
| 87 | +mkdir -p "$OUTPUT_DIR" |
| 88 | +if [ "${BOOTSTRAP_QUIET}" = "no" ]; then |
| 89 | + echo >&2 $0:$LINENO: installing "$OUTPUT_DIR"/"*.rst" |
| 90 | +fi |
| 91 | +OUTPUT_INDEX="$OUTPUT_DIR"/index.rst |
| 92 | +cat > "$OUTPUT_INDEX" <<EOF |
| 93 | +
|
| 94 | +Packages and Features |
| 95 | +===================== |
| 96 | +
|
| 97 | +Standard Packages |
| 98 | +----------------- |
| 99 | +
|
| 100 | +The Sage distribution includes most programs and libraries on which |
| 101 | +Sage depends. It installs them automatically if it does not find |
| 102 | +equivalent system packages. |
| 103 | +
|
| 104 | +EOF |
| 105 | +for PKG_BASE in $(sage-package list --has-file SPKG.rst :standard: | grep -v '^sagemath_'); do |
| 106 | + echo "* :ref:\`spkg_$PKG_BASE\`" |
| 107 | +done >> "$OUTPUT_INDEX" |
| 108 | +cat >> "$OUTPUT_INDEX" <<EOF |
| 109 | +
|
| 110 | +Optional Packages |
| 111 | +----------------- |
| 112 | +
|
| 113 | +For additional functionality, you can install some of the following |
| 114 | +optional packages. |
| 115 | +
|
| 116 | +EOF |
| 117 | +for PKG_BASE in $(sage-package list --has-file SPKG.rst :optional: | grep -v '^sagemath_'); do |
| 118 | + echo "* :ref:\`spkg_$PKG_BASE\`" |
| 119 | +done >> "$OUTPUT_INDEX" |
| 120 | +cat >> "$OUTPUT_INDEX" <<EOF |
| 121 | +
|
| 122 | +Features |
| 123 | +-------- |
| 124 | +
|
| 125 | +.. toctree:: |
| 126 | + :maxdepth: 1 |
| 127 | +
|
| 128 | + sage/features |
| 129 | + sage/features/join_feature |
| 130 | + sage/features/all |
| 131 | + sage/features/sagemath |
| 132 | + sage/features/pkg_systems |
| 133 | + sage/features/bliss |
| 134 | + sage/features/csdp |
| 135 | + sage/features/databases |
| 136 | + sage/features/dvipng |
| 137 | + sage/features/ffmpeg |
| 138 | + sage/features/four_ti_2 |
| 139 | + sage/features/gap |
| 140 | + sage/features/graph_generators |
| 141 | + sage/features/graphviz |
| 142 | + sage/features/imagemagick |
| 143 | + sage/features/interfaces |
| 144 | + sage/features/internet |
| 145 | + sage/features/kenzo |
| 146 | + sage/features/latex |
| 147 | + sage/features/latte |
| 148 | + sage/features/lrs |
| 149 | + sage/features/mcqd |
| 150 | + sage/features/meataxe |
| 151 | + sage/features/mip_backends |
| 152 | + sage/features/normaliz |
| 153 | + sage/features/pandoc |
| 154 | + sage/features/pdf2svg |
| 155 | + sage/features/polymake |
| 156 | + sage/features/rubiks |
| 157 | + sage/features/tdlib |
| 158 | +EOF |
| 159 | +cat >> "$OUTPUT_INDEX" <<EOF |
| 160 | +
|
| 161 | +Distribution Packages of the Sage Library |
| 162 | +----------------------------------------- |
| 163 | +
|
| 164 | +EOF |
| 165 | +for PKG_BASE in $(sage-package list --has-file SPKG.rst | grep '^sagemath_'); do |
| 166 | + echo "* :ref:\`spkg_$PKG_BASE\`" |
| 167 | +done >> "$OUTPUT_INDEX" |
| 168 | +cat >> "$OUTPUT_INDEX" <<EOF |
| 169 | +
|
| 170 | +Experimental Packages |
| 171 | +--------------------- |
| 172 | +
|
| 173 | +Some packages that provide additional functionality are marked as |
| 174 | +"experimental". Developers are needed in order to improve the |
| 175 | +integration of these packages into the Sage distribution. |
| 176 | +
|
| 177 | +EOF |
| 178 | +for PKG_BASE in $(sage-package list --has-file SPKG.rst :experimental: | grep -v '^sagemath_'); do |
| 179 | + echo "* :ref:\`spkg_$PKG_BASE\`" |
| 180 | +done >> "$OUTPUT_INDEX" |
| 181 | + |
| 182 | +cat >> "$OUTPUT_INDEX" <<EOF |
| 183 | +
|
| 184 | +All External Packages |
| 185 | +--------------------- |
| 186 | +
|
| 187 | +.. toctree:: |
| 188 | + :maxdepth: 1 |
| 189 | +
|
| 190 | + index_alph |
| 191 | +
|
| 192 | +EOF |
| 193 | + |
| 194 | +OUTPUT_INDEX="$OUTPUT_DIR"/index_alph.rst |
| 195 | +cat >> "$OUTPUT_INDEX" <<EOF |
| 196 | +
|
| 197 | +Details of external packages |
| 198 | +============================ |
| 199 | +
|
| 200 | +Packages are in alphabetical order. |
| 201 | +
|
| 202 | +.. default-role:: code |
| 203 | +
|
| 204 | +.. toctree:: |
| 205 | + :maxdepth: 1 |
| 206 | +
|
| 207 | +EOF |
| 208 | +for PKG_BASE in $(sage-package list --has-file SPKG.rst); do |
| 209 | + PKG_SCRIPTS=build/pkgs/$PKG_BASE |
| 210 | + # Instead of just copying, we may want to call |
| 211 | + # a version of sage-spkg-info to format extra information. |
| 212 | + # for sphinx 4.4 we need to replace all direct links by some "extlink" (issue 33272) |
| 213 | + |
| 214 | + (echo ".. _spkg_$PKG_BASE:" && echo && OUTPUT_RST=1 sage-spkg-info $PKG_BASE) | sed -e "s|https://github.com/sagemath/sage/issues/\([0-9]*\)|:issue:\`\1\`|g" -e "s|https://arxiv.org/abs/cs/\([0-9]*\)|:arxiv:\`cs/\1\`|g" > "$OUTPUT_DIR"/$PKG_BASE.rst |
| 215 | + echo >> "$OUTPUT_INDEX" " $PKG_BASE" |
| 216 | +done |
| 217 | +cat >> "$OUTPUT_INDEX" <<EOF |
| 218 | +
|
| 219 | +.. default-role:: |
| 220 | +
|
| 221 | +EOF |
0 commit comments