diff --git a/.github/workflows/ci-conda.yml b/.github/workflows/ci-conda.yml index a91f2efe044..74e37b3a408 100644 --- a/.github/workflows/ci-conda.yml +++ b/.github/workflows/ci-conda.yml @@ -43,15 +43,8 @@ jobs: bash ~/miniconda.sh -b -p $HOME/miniconda echo "CONDA=$HOME/miniconda" >> $GITHUB_ENV - - name: Install bootstrap prerequisites - run: | - export PATH="$(pwd)/build/bin:$PATH" - SYSTEM=$(sage-guess-package-system) - eval $(sage-print-system-package-command $SYSTEM --sudo install $(sage-get-system-packages $SYSTEM _bootstrap)) - - # Create conda environment file - - name: Bootstrap - run: ./bootstrap + - name: Create conda environment files + run: ./bootstrap-conda - name: Cache conda packages uses: actions/cache@v2 @@ -80,6 +73,7 @@ jobs: shell: bash -l {0} continue-on-error: true run: | + ./bootstrap echo "::add-matcher::.github/workflows/configure-systempackage-problem-matcher.json" ./configure --enable-build-as-root --with-python=$CONDA_PREFIX/bin/python --prefix=$CONDA_PREFIX $(for pkg in $(./sage -package list :standard: --has-file spkg-configure.m4 --has-file distros/conda.txt); do echo --with-system-$pkg=force; done) echo "::remove-matcher owner=configure-system-package-warning::" @@ -88,8 +82,8 @@ jobs: - name: Build shell: bash -l {0} run: | - pip install --no-build-isolation -v -v -e pkgs/sage-conf pkgs/sage-setup - pip install --no-build-isolation -v -v -e src + pip install --no-build-isolation -v -v -e ./pkgs/sage-conf ./pkgs/sage-setup + pip install --no-build-isolation -v -v -e ./src env: SAGE_NUM_THREADS: 2 diff --git a/.gitignore b/.gitignore index 942a4388eeb..84c0c28eca8 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ /environment.yml /environment-optional.yml /src/environment.yml +/src/environment-dev.yml /src/environment-optional.yml /src/setup.cfg diff --git a/.vscode/settings.json b/.vscode/settings.json index 562b8dc479b..d63271ab85c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,4 +21,8 @@ "--doctest-modules", ], "python.testing.unittestEnabled": false, + "cSpell.words": [ + "Conda", + "Cython" + ], } diff --git a/Makefile b/Makefile index 9e8955a07f6..08c0d1b6beb 100644 --- a/Makefile +++ b/Makefile @@ -171,6 +171,7 @@ bootstrap-clean: rm -f src/doc/en/reference/repl/*.txt rm -f environment.yml rm -f src/environment.yml + rm -f src/environment-dev.yml rm -f environment-optional.yml rm -f src/environment-optional.yml rm -f src/Pipfile diff --git a/bootstrap b/bootstrap index afe67841f96..d059afc0482 100755 --- a/bootstrap +++ b/bootstrap @@ -158,6 +158,7 @@ SAGE_SPKG_FINALIZE([$pkgname], [$pkgtype], [$SPKG_SOURCE], [$SPKG_TREE_VAR])" # ONLY stderr, and to re-output the results back to stderr leaving # stdout alone. Basically we swap the two descriptors using a # third, filter, and then swap them back. + ./bootstrap-conda && \ src/doc/bootstrap && \ install_config_rpath && \ aclocal -I m4 && \ diff --git a/bootstrap-conda b/bootstrap-conda new file mode 100755 index 00000000000..356c621895b --- /dev/null +++ b/bootstrap-conda @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +######################################################################## +# Generate auto-generated conda environment files +######################################################################### + +STRIP_COMMENTS="sed s/#.*//;" +RECOMMENDED_SPKG_PATTERN="@(_recommended$(for a in $(head -n 1 build/pkgs/_recommended/dependencies); do echo -n "|"$a; done))" + +BOOTSTRAP_PACKAGES=$(echo $(${STRIP_COMMENTS} build/pkgs/_bootstrap/distros/conda.txt)) +SYSTEM_PACKAGES= +OPTIONAL_SYSTEM_PACKAGES= +SAGELIB_SYSTEM_PACKAGES= +SAGELIB_OPTIONAL_SYSTEM_PACKAGES= +RECOMMENDED_SYSTEM_PACKAGES= +for PKG_BASE in $(./sage --package list --has-file distros/conda.txt); do + PKG_SCRIPTS=build/pkgs/$PKG_BASE + SYSTEM_PACKAGES_FILE=$PKG_SCRIPTS/distros/conda.txt + PKG_TYPE=$(cat $PKG_SCRIPTS/type) + PKG_SYSTEM_PACKAGES=$(echo $(${STRIP_COMMENTS} $SYSTEM_PACKAGES_FILE)) + if [ -n "PKG_SYSTEM_PACKAGES" ]; then + if [ -f $PKG_SCRIPTS/spkg-configure.m4 ]; then + case "$PKG_BASE:$PKG_TYPE" in + *:standard) + SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" + ;; + $RECOMMENDED_SPKG_PATTERN:*) + RECOMMENDED_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" + ;; + *) + OPTIONAL_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" + ;; + esac + else + case "$PKG_TYPE" in + standard) + SAGELIB_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" + ;; + *) + SAGELIB_OPTIONAL_SYSTEM_PACKAGES+=" $PKG_SYSTEM_PACKAGES" + ;; + esac + fi + fi +done +echo >&2 $0:$LINENO: generate conda enviroment files +echo "name: sage-build" > environment.yml +echo "channels:" >> environment.yml +echo " - conda-forge" >> environment.yml +echo " - nodefaults" >> environment.yml +echo "dependencies:" >> environment.yml +for pkg in $SYSTEM_PACKAGES; do + echo " - $pkg" >> environment.yml +done +echo " # Packages needed for ./bootstrap" >> environment.yml +for pkg in $BOOTSTRAP_PACKAGES; do + echo " - $pkg" >> environment.yml +done +sed 's/name: sage-build/name: sage/' environment.yml > src/environment.yml +for pkg in $SAGELIB_SYSTEM_PACKAGES; do + echo " - $pkg" >> src/environment.yml +done +sed 's/name: sage/name: sage-dev/' src/environment.yml > src/environment-dev.yml +echo " # Additional dev tools" >> src/environment-dev.yml +echo " - openssh" >> src/environment-dev.yml +echo " - pycodestyle" >> src/environment-dev.yml +echo " - pytest" >> src/environment-dev.yml + +cp environment.yml environment-optional.yml + echo " # optional packages" >> environment-optional.yml +for pkg in $OPTIONAL_SYSTEM_PACKAGES; do + echo " - $pkg" >> environment-optional.yml + done +cp src/environment.yml src/environment-optional.yml + echo " # optional packages" >> src/environment-optional.yml +for pkg in $OPTIONAL_SYSTEM_PACKAGES $SAGELIB_OPTIONAL_SYSTEM_PACKAGES; do + echo " - $pkg" >> src/environment-optional.yml +done diff --git a/build/pkgs/jupyter_sphinx/distros/conda.txt b/build/pkgs/jupyter_sphinx/distros/conda.txt new file mode 100644 index 00000000000..e9b59e89755 --- /dev/null +++ b/build/pkgs/jupyter_sphinx/distros/conda.txt @@ -0,0 +1 @@ +jupyter_sphinx diff --git a/src/doc/bootstrap b/src/doc/bootstrap index 4a85f15d57e..90ae09160ba 100755 --- a/src/doc/bootstrap +++ b/src/doc/bootstrap @@ -27,7 +27,7 @@ shopt -s extglob RECOMMENDED_SPKG_PATTERN="@(_recommended$(for a in $(head -n 1 build/pkgs/_recommended/dependencies); do echo -n "|"$a; done))" -for SYSTEM in arch debian fedora cygwin homebrew conda; do +for SYSTEM in arch debian fedora cygwin homebrew; do SYSTEM_PACKAGES= OPTIONAL_SYSTEM_PACKAGES= SAGELIB_SYSTEM_PACKAGES= @@ -63,40 +63,13 @@ for SYSTEM in arch debian fedora cygwin homebrew conda; do fi fi done - if [ "${SYSTEM}" = "conda" ]; then - if [ "${BOOTSTRAP_QUIET}" = "no" ]; then - echo >&2 $0:$LINENO: installing environment.yml, environment-optional.yml, src/environment.yml and src/environment-optional.yml - fi - echo "name: sage-build" > environment.yml - echo "channels:" >> environment.yml - echo " - conda-forge" >> environment.yml - echo " - nodefaults" >> environment.yml - echo "dependencies:" >> environment.yml - for pkg in $SYSTEM_PACKAGES; do - echo " - $pkg" >> environment.yml - done - sed 's/name: sage-build/name: sage/' environment.yml > src/environment.yml - for pkg in $SAGELIB_SYSTEM_PACKAGES; do - echo " - $pkg" >> src/environment.yml - done - cp environment.yml environment-optional.yml - echo " # optional packages" >> environment-optional.yml - for pkg in $OPTIONAL_SYSTEM_PACKAGES; do - echo " - $pkg" >> environment-optional.yml - done - cp src/environment.yml src/environment-optional.yml - echo " # optional packages" >> src/environment-optional.yml - for pkg in $OPTIONAL_SYSTEM_PACKAGES $SAGELIB_OPTIONAL_SYSTEM_PACKAGES; do - echo " - $pkg" >> src/environment-optional.yml - done - else - if [ "${BOOTSTRAP_QUIET}" = "no" ]; then - echo >&2 $0:$LINENO: installing "$OUTPUT_DIR"/$SYSTEM"*.txt" - fi - echo "$(sage-print-system-package-command $SYSTEM --prompt --sudo install $(echo $(echo $SYSTEM_PACKAGES | xargs -n 1 echo | sort | uniq)))" > "$OUTPUT_DIR"/$SYSTEM.txt - 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 - 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 + + if [ "${BOOTSTRAP_QUIET}" = "no" ]; then + echo >&2 $0:$LINENO: installing "$OUTPUT_DIR"/$SYSTEM"*.txt" fi + echo "$(sage-print-system-package-command $SYSTEM --prompt --sudo install $(echo $(echo $SYSTEM_PACKAGES | xargs -n 1 echo | sort | uniq)))" > "$OUTPUT_DIR"/$SYSTEM.txt + 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 + 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 done OUTPUT_DIR="src/doc/en/reference/spkg" diff --git a/src/doc/en/installation/conda.rst b/src/doc/en/installation/conda.rst index a335c4fc7d9..751fbaecea6 100644 --- a/src/doc/en/installation/conda.rst +++ b/src/doc/en/installation/conda.rst @@ -65,25 +65,22 @@ conda-forge/sage-feedstock