Blob Blame History Raw
%bcond_without tests

Name:           conda
Version:        23.1.0
Release:        %autorelease
Summary:        Cross-platform, Python-agnostic binary package manager

License:        BSD-3-Clause AND Apache-2.0 
# The conda code is BSD-3-Clause
# adapters/ is Apache-2.0

# bash completion script moved to a separate project
Patch0:         conda_sys_prefix.patch
Patch1:         conda_gateways_disk_create.patch
# Do not test with conda-build
Patch2:         conda-conda-build.patch
# Use system cpuinfo
Patch3:         conda-cpuinfo.patch
# Fix tests on 32bit
Patch4:         conda-32bit.patch

Patch10004:     0004-Do-not-try-to-run-usr-bin-python.patch
Patch10006:     0006-shell-assume-shell-plugins-are-in-etc.patch
Patch10007:     0001-Add-back-conda-and-conda_env-entry-point.patch

BuildArch:      noarch

BuildRequires:  pkgconfig(bash-completion)
%global bash_completionsdir %(pkg-config --variable=completionsdir bash-completion 2>/dev/null || echo '/etc/bash_completion.d')
BuildRequires:  sed

Requires:       python%{python3_pkgversion}-conda = %{version}-%{release}
# Removed upstream in favour of calling "conda activate" in version 4.4.0
Obsoletes:      conda-activate < 4.4


%global _description %{expand:
Conda is a cross-platform, Python-agnostic binary package manager. It
is the package manager used by Anaconda installations, but it may be
used for other systems as well. Conda makes environments first-class
citizens, making it easy to create independent environments even for
C libraries. Conda is written entirely in Python.

The Fedora conda base environment is special.  Unlike a standard
anaconda install base environment it is essentially read-only.  You
can only use conda to create and manage new environments.}

%description %_description

%global _py3_reqs \
        python%{python3_pkgversion}-cpuinfo \
        python%{python3_pkgversion}-conda-package-handling >= 1.3.0 \
        python%{python3_pkgversion}-distro >= 1.0.4 \
        python%{python3_pkgversion}-frozendict >= 1.2 \
        python%{python3_pkgversion}-pluggy >= 1.0.0 \
        python%{python3_pkgversion}-pycosat >= 0.6.3 \
        python%{python3_pkgversion}-pyOpenSSL >= 16.2.0 \
        python%{python3_pkgversion}-pyyaml \
        python%{python3_pkgversion}-requests >= 2.18.4 \
        python%{python3_pkgversion}-ruamel-yaml >= 0.11.14 \
        python%{python3_pkgversion}-tqdm >= 4.22.0 \
        python%{python3_pkgversion}-urllib3 >= 1.19.1
%global py3_reqs %(c="%_py3_reqs"; echo "$c" | xargs)

%package -n python%{python3_pkgversion}-conda
Summary:        %{summary}

BuildRequires:  python%{python3_pkgversion}-devel
BuildRequires:  python%{python3_pkgversion}-setuptools
BuildRequires:  %py3_reqs
# When this is present, vendored toolz should not be used
%if 0%{?fedora} || 0%{?rhel} >= 8
# EPEL7 does not have new enough cytoolz
BuildRequires:  python%{python3_pkgversion}-cytoolz >= 0.8.2
# For tests
BuildRequires:  python-unversioned-command
BuildRequires:  python%{python3_pkgversion}-boto3
BuildRequires:  python%{python3_pkgversion}-pytest-mock
BuildRequires:  python%{python3_pkgversion}-pytest-rerunfailures
BuildRequires:  python%{python3_pkgversion}-pytest-timeout
BuildRequires:  python%{python3_pkgversion}-pytest-xprocess
BuildRequires:  python%{python3_pkgversion}-responses

Requires:       %py3_reqs
%if 0%{?fedora} || 0%{?rhel} >= 8
# EPEL does not have new enough cytoolz
Requires:       python%{python3_pkgversion}-cytoolz >= 0.8.2
Provides:       bundled(python%{python3_pkgversion}-appdirs) = 1.2.0
Provides:       bundled(python%{python3_pkgversion}-auxlib) = 0.0.43
Provides:       bundled(python%{python3_pkgversion}-boltons) = 18.0.0

%{?python_provide:%python_provide python%{python3_pkgversion}-conda}

%description -n python%{python3_pkgversion}-conda %_description

%autosetup -p1

sed -r -i 's/^(__version__ = ).*/\1"%{version}"/' conda/
# xdoctest not packaged
sed -i -e '/xdoctest/d' setup.cfg

# delete interpreter line, the user can always call the file
# explicitly as python3 /usr/lib/python3.6/site-packages/conda/_vendor/
# or so.
sed -r -i '1 {/#![/]usr[/]bin[/]env/d}' conda/_vendor/

# Use Fedora's cpuinfo since it supports more arches
rm -r conda/_vendor/cpuinfo

# Replaced by cytools, byte compilation fails under python3.7
%if 0%{?fedora} || 0%{?rhel} >= 8
# EPEL does not have new enough cytoolz
rm -r conda/_vendor/toolz

# Use system versions
rm -r conda/_vendor/{,frozendict,tqdm}
find conda -name \*.py | xargs sed -i -e 's/^\( *\)from .*_vendor\.\(\(distro\|frozendict\|tqdm\).*\) import/\1from \2 import/'

%ifnarch x86_64
# Tests on 32-bit
cp -a tests/data/conda_format_repo/linux-{64,32}
sed -i -e s/linux-64/linux-32/ tests/data/conda_format_repo/linux-32/*json
# Tests on non-x86_64
cp -a tests/data/conda_format_repo/{linux-64,%{python3_platform}}
sed -i -e s/linux-64/%{python3_platform}/ tests/data/conda_format_repo/%{python3_platform}/*json

# do not run coverage in pytest
sed -i -E '/--(no-)?cov/d' setup.cfg

# build conda executable

# install conda executable

mkdir -p %{buildroot}%{_sysconfdir}/conda/condarc.d
mkdir -p %{buildroot}%{_datadir}/conda/condarc.d
cat >%{buildroot}%{_datadir}/conda/condarc.d/defaults.yaml <<EOF
 - /var/cache/conda/pkgs
 - ~/.conda/pkgs

mkdir -p %{buildroot}%{_localstatedir}/cache/conda/pkgs/cache

# install does not create the directory on EL7
install -m 0644 -Dt %{buildroot}/etc/profile.d/ conda/shell/etc/profile.d/conda.{sh,csh}
sed -r -i -e '1i [ -z "$CONDA_EXE" ] && CONDA_EXE=%{_bindir}/conda' \
          -e '/PATH=.*condabin/s|PATH=|[ -d $(dirname "$CONDA_EXE")/condabin ] \&\& PATH=|' %{buildroot}/etc/profile.d/
sed -r -i -e '1i set _CONDA_EXE=%{_bindir}/conda\nset _CONDA_ROOT=' \
          -e 's/CONDA_PFX=.*/CONDA_PFX=/' %{buildroot}/etc/profile.d/conda.csh
install -m 0644 -Dt %{buildroot}/etc/fish/conf.d/ conda/shell/etc/fish/conf.d/
sed -r -i -e '1i set -gx CONDA_EXE "/usr/bin/conda"\nset _CONDA_ROOT "/usr"\nset _CONDA_EXE "/usr/bin/conda"\nset -gx CONDA_PYTHON_EXE "/usr/bin/python3"' \

# Install bash completion script
install -m 0644 -Dt %{buildroot}%{bash_completionsdir}/ %SOURCE1

%if %{with tests}
export PATH=%{buildroot}%{_bindir}:$PATH
PYTHONPATH=%{buildroot}%{python3_sitelib} conda info

# Integration tests generally require network, so skip them.

# TestJson.test_list does not recognize /usr as a conda environment
# These fail on koji with PackageNotFound errors likely due to network issues

# test_ProgressiveFetchExtract_prefers_conda_v2_format, test_subdir_data_prefers_conda_to_tar_bz2,
# test_use_only_tar_bz2 fail in F31 koji, but not with mock --enablerepo=local. Let's disable
# them for now.
# tests/conda_env/ requires network access
# tests/cli/test_main_{clean,rename}.py tests require network access
# tests/cli/ needs a conda_build fixture that we remove
# tests/ requires network access
# tests/core/ tries to unlink /usr/bin/python3 and fails when python is a release candidate
# tests/core/ fails on non-x86_64
py.test-%{python3_version} -vv -m "not integration" \
    --deselect=tests/ \
    --deselect=tests/ \
    --deselect=tests/ \
    --deselect=tests/ \
    --deselect=tests/ \
    --deselect=tests/ \
    --deselect=tests/conda_env/ \
    --deselect=tests/cli/ \
    --deselect=tests/cli/ \
    --deselect=tests/cli/ \
    --deselect=tests/core/ \
    --deselect=tests/core/ \
    --deselect=tests/core/ \
    --deselect=tests/core/ \
    --deselect=tests/core/ \
    conda tests

# TODO - better ownership/requires for fish
%dir /etc/fish
%dir /etc/fish/conf.d

%files -n python%{python3_pkgversion}-conda
%license LICENSE.txt