conda-forge / xorg-libxrender-feedstock

A conda-smithy repository for xorg-libxrender.
BSD 3-Clause "New" or "Revised" License
0 stars 6 forks source link

Clobbering errors: conflict between xorg-xorgproto and xorg-renderproto #11

Open jameslamb opened 5 days ago

jameslamb commented 5 days ago

Solution to issue cannot be found in the documentation.

Issue

Installing the latest version of xorg-libxrender (0.9.11) on a linux-64 system results in clobbering because xorg-libx11 and xorg-renderproto appear to both include the X11 headers.

docker run \
    --rm \
    -it rapidsai/ci-conda:latest \
    bash

conda config --set path_conflict prevent

# NOTE: 0.9.11 is the latest version as of this report being written
conda install \
    --override-channels \
    -c conda-forge \
        'xorg-libxrender=0.9.11'

results in errors like the following:

ClobberError: This transaction has incompatible packages due to a shared path.
  packages: conda-forge/linux-64::xorg-renderproto-0.11.1-hb9d3cd8_1003, conda-forge/linux-64::xorg-xorgproto-2024.1-hb9d3cd8_1
  path: 'include/X11/extensions/render.h'
If you'd like to proceed anyway, re-run the command with the `--clobber` flag.
.

ClobberError: This transaction has incompatible packages due to a shared path.
  packages: conda-forge/linux-64::xorg-renderproto-0.11.1-hb9d3cd8_1003, conda-forge/linux-64::xorg-xorgproto-2024.1-hb9d3cd8_1
  path: 'include/X11/extensions/renderproto.h'
If you'd like to proceed anyway, re-run the command with the `--clobber` flag.
.

Its two xorg-* direct dependencies can be installed individually, but not together, so they eventually lead to this conflict.

Tried each of the following in a clean environment.

# success
conda install \
    --override-channels \
    -c conda-forge \
        'xorg-libx11>=1.8.6,<2.0a0'

# success
conda install \
    --override-channels \
    -c conda-forge \
        xorg-renderproto

# clobber errors
conda install \
    --override-channels \
    -c conda-forge \
        'xorg-libx11>=1.8.6,<2.0a0' \
        xorg-renderproto

I discovered this in https://github.com/rapidsai/cucim/pull/785#discussion_r1777636427.

Reporting it here because this feedstock introduces dependencies on these conflicting packages... but I only got here by first noticing this issue from openslide. Others might notice it if installing openslide or cairo, given this graph of dependency relationships:

openslide
|________cairo
         |____xorg-libxrender

Installed packages

_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
anaconda-client           1.12.3             pyhd8ed1ab_1    conda-forge
anyio                     3.7.1              pyhd8ed1ab_0    conda-forge
archspec                  0.2.3              pyhd8ed1ab_0    conda-forge
attrs                     24.2.0             pyh71513ae_0    conda-forge
beautifulsoup4            4.12.3             pyha770c72_0    conda-forge
boa                       0.17.0             pyhd8ed1ab_3    conda-forge
boltons                   24.0.0             pyhd8ed1ab_0    conda-forge
brotli-python             1.1.0           py312h2ec8cdc_2    conda-forge
bzip2                     1.0.8                h4bc722e_7    conda-forge
c-ares                    1.33.1               heb4867d_0    conda-forge
ca-certificates           2024.8.30            hbcca054_0    conda-forge
certifi                   2024.8.30          pyhd8ed1ab_0    conda-forge
cffi                      1.17.1          py312h06ac9bb_0    conda-forge
chardet                   5.2.0           py312h7900ff3_2    conda-forge
charset-normalizer        3.3.2              pyhd8ed1ab_0    conda-forge
click                     8.1.7           unix_pyh707e725_0    conda-forge
codecov-cli               0.7.4                    pypi_0    pypi
colorama                  0.4.6              pyhd8ed1ab_0    conda-forge
conda                     24.7.1          py312h7900ff3_0    conda-forge
conda-build               24.5.1          py312h7900ff3_0    conda-forge
conda-index               0.5.0              pyhd8ed1ab_0    conda-forge
conda-libmamba-solver     24.7.0             pyhd8ed1ab_0    conda-forge
conda-package-handling    2.3.0              pyh7900ff3_0    conda-forge
conda-package-streaming   0.10.0             pyhd8ed1ab_0    conda-forge
defusedxml                0.7.1              pyhd8ed1ab_0    conda-forge
distro                    1.9.0              pyhd8ed1ab_0    conda-forge
dunamai                   1.22.0             pyhd8ed1ab_0    conda-forge
exceptiongroup            1.2.2              pyhd8ed1ab_0    conda-forge
filelock                  3.16.1             pyhd8ed1ab_0    conda-forge
fmt                       10.2.1               h00ab1b0_0    conda-forge
frozendict                2.4.4           py312h66e93f0_1    conda-forge
gettext                   0.22.5               he02047a_3    conda-forge
gettext-tools             0.22.5               he02047a_3    conda-forge
git                       2.46.1          pl5321h59d505e_0    conda-forge
h11                       0.14.0                   pypi_0    pypi
h2                        4.1.0              pyhd8ed1ab_0    conda-forge
hpack                     4.0.0              pyh9f0ad1d_0    conda-forge
httpcore                  0.16.3                   pypi_0    pypi
httpx                     0.23.3                   pypi_0    pypi
hyperframe                6.0.1              pyhd8ed1ab_0    conda-forge
icu                       75.1                 he02047a_0    conda-forge
idna                      3.10               pyhd8ed1ab_0    conda-forge
ijson                     3.3.0                    pypi_0    pypi
importlib-metadata        8.5.0              pyha770c72_0    conda-forge
importlib_resources       6.4.5              pyhd8ed1ab_0    conda-forge
jinja2                    3.1.4              pyhd8ed1ab_0    conda-forge
joblib                    1.4.2              pyhd8ed1ab_0    conda-forge
jq                        1.7.1                hd590300_0    conda-forge
json5                     0.9.25             pyhd8ed1ab_0    conda-forge
jsonpatch                 1.33               pyhd8ed1ab_0    conda-forge
jsonpointer               3.0.0           py312h7900ff3_1    conda-forge
jsonschema                4.23.0             pyhd8ed1ab_0    conda-forge
jsonschema-specifications 2023.12.1          pyhd8ed1ab_0    conda-forge
jupyter_core              5.7.2              pyh31011fe_1    conda-forge
keyutils                  1.6.1                h166bdaf_0    conda-forge
krb5                      1.21.3               h659f571_0    conda-forge
ld_impl_linux-64          2.43                 h712a8e2_0    conda-forge
libarchive                3.7.4                hfca40fe_0    conda-forge
libasprintf               0.22.5               he8f35ee_3    conda-forge
libasprintf-devel         0.22.5               he8f35ee_3    conda-forge
libcurl                   8.10.1               hbbe4b11_0    conda-forge
libedit                   3.1.20191231         he28a2e2_2    conda-forge
libev                     4.33                 hd590300_2    conda-forge
libexpat                  2.6.3                h5888daf_0    conda-forge
libffi                    3.4.2                h7f98852_5    conda-forge
libgcc                    14.1.0               h77fa898_1    conda-forge
libgcc-ng                 14.1.0               h69a702a_1    conda-forge
libgettextpo              0.22.5               he02047a_3    conda-forge
libgettextpo-devel        0.22.5               he02047a_3    conda-forge
libgomp                   14.1.0               h77fa898_1    conda-forge
libiconv                  1.17                 hd590300_2    conda-forge
liblief                   0.14.1               h5888daf_2    conda-forge
libmamba                  1.5.10               h4cc3d14_0    conda-forge
libmambapy                1.5.10          py312h7fb9e8e_0    conda-forge
libnghttp2                1.58.0               h47da74e_1    conda-forge
libnsl                    2.0.1                hd590300_0    conda-forge
libsolv                   0.7.30               h3509ff9_0    conda-forge
libsqlite                 3.46.1               hadc24fc_0    conda-forge
libssh2                   1.11.0               h0841786_0    conda-forge
libstdcxx                 14.1.0               hc0a3c3a_1    conda-forge
libstdcxx-ng              14.1.0               h4852527_1    conda-forge
libuuid                   2.38.1               h0b41bf4_0    conda-forge
libxcrypt                 4.4.36               hd590300_1    conda-forge
libxml2                   2.12.7               he7c6b58_4    conda-forge
libzlib                   1.3.1                h4ab18f5_1    conda-forge
lz4-c                     1.9.4                hcb278e6_0    conda-forge
lzo                       2.10              hd590300_1001    conda-forge
mamba                     1.5.10          py312h9460a1c_0    conda-forge
markdown-it-py            3.0.0              pyhd8ed1ab_0    conda-forge
markupsafe                2.1.5           py312h66e93f0_1    conda-forge
mdurl                     0.1.2              pyhd8ed1ab_0    conda-forge
menuinst                  2.1.2           py312h7900ff3_1    conda-forge
more-itertools            10.5.0             pyhd8ed1ab_0    conda-forge
nbformat                  5.10.4             pyhd8ed1ab_0    conda-forge
ncurses                   6.5                  he02047a_1    conda-forge
oniguruma                 6.9.9                hd590300_0    conda-forge
openssl                   3.3.2                hb9d3cd8_0    conda-forge
packaging                 24.1               pyhd8ed1ab_0    conda-forge
patch                     2.7.6             h7f98852_1002    conda-forge
patchelf                  0.17.2               h58526e2_0    conda-forge
pcre2                     10.44                hba22ea6_2    conda-forge
perl                      5.32.1          7_hd590300_perl5    conda-forge
pip                       24.2               pyh8b19718_1    conda-forge
pkginfo                   1.11.1             pyhd8ed1ab_0    conda-forge
pkgutil-resolve-name      1.3.10             pyhd8ed1ab_1    conda-forge
platformdirs              4.3.6              pyhd8ed1ab_0    conda-forge
pluggy                    1.5.0              pyhd8ed1ab_0    conda-forge
prompt-toolkit            3.0.47             pyha770c72_0    conda-forge
prompt_toolkit            3.0.47               hd8ed1ab_0    conda-forge
psutil                    6.0.0           py312h66e93f0_1    conda-forge
py-lief                   0.14.1          py312h2ec8cdc_2    conda-forge
pybind11-abi              4                    hd8ed1ab_3    conda-forge
pycosat                   0.6.6           py312h98912ed_0    conda-forge
pycparser                 2.22               pyhd8ed1ab_0    conda-forge
pygments                  2.18.0             pyhd8ed1ab_0    conda-forge
pysocks                   1.7.1              pyha2e5f31_6    conda-forge
python                    3.12.6          hc5c86c4_1_cpython    conda-forge
python-dateutil           2.9.0              pyhd8ed1ab_0    conda-forge
python-fastjsonschema     2.20.0             pyhd8ed1ab_0    conda-forge
python-libarchive-c       5.1             py312h7900ff3_1    conda-forge
python_abi                3.12                    5_cp312    conda-forge
pytz                      2024.2             pyhd8ed1ab_0    conda-forge
pyyaml                    6.0.2           py312h66e93f0_1    conda-forge
rapids-dependency-file-generator 1.15.0                     py_0    rapidsai
readline                  8.2                  h8228510_1    conda-forge
referencing               0.35.1             pyhd8ed1ab_0    conda-forge
regex                     2024.9.11                pypi_0    pypi
reproc                    14.2.4.post0         hd590300_1    conda-forge
reproc-cpp                14.2.4.post0         h59595ed_1    conda-forge
requests                  2.32.3             pyhd8ed1ab_0    conda-forge
requests-toolbelt         1.0.0              pyhd8ed1ab_0    conda-forge
responses                 0.21.0                   pypi_0    pypi
rfc3986                   1.5.0                    pypi_0    pypi
rich                      13.8.1             pyhd8ed1ab_0    conda-forge
ripgrep                   14.1.0               he8a937b_0    conda-forge
rpds-py                   0.20.0          py312h12e396e_1    conda-forge
ruamel.yaml               0.18.6          py312h98912ed_0    conda-forge
ruamel.yaml.clib          0.2.8           py312h98912ed_0    conda-forge
setuptools                74.1.2             pyhd8ed1ab_0    conda-forge
six                       1.16.0             pyh6c4a22f_0    conda-forge
sniffio                   1.3.1              pyhd8ed1ab_0    conda-forge
soupsieve                 2.5                pyhd8ed1ab_1    conda-forge
test-results-parser       0.1.0                    pypi_0    pypi
tk                        8.6.13          noxft_h4845f30_101    conda-forge
tomlkit                   0.13.2             pyha770c72_0    conda-forge
tqdm                      4.66.5             pyhd8ed1ab_0    conda-forge
traitlets                 5.14.3             pyhd8ed1ab_0    conda-forge
tree-sitter               0.20.4                   pypi_0    pypi
truststore                0.9.2              pyhd8ed1ab_0    conda-forge
typing_extensions         4.12.2             pyha770c72_0    conda-forge
tzdata                    2024a                h8827d51_1    conda-forge
urllib3                   2.2.3              pyhd8ed1ab_0    conda-forge
watchgod                  0.8.2              pyhd8ed1ab_0    conda-forge
wcwidth                   0.2.13             pyhd8ed1ab_0    conda-forge
wheel                     0.44.0             pyhd8ed1ab_0    conda-forge
xz                        5.2.6                h166bdaf_0    conda-forge
yaml                      0.2.5                h7f98852_2    conda-forge
yaml-cpp                  0.8.0                h59595ed_0    conda-forge
zipp                      3.20.2             pyhd8ed1ab_0    conda-forge
zstandard                 0.23.0          py312hef9b889_1    conda-forge
zstd                      1.5.6                ha6fb4c9_0    conda-forge

Environment info

active environment : base
    active env location : /opt/conda
            shell level : 1
       user config file : /root/.condarc
 populated config files : /opt/conda/.condarc
                          /root/.condarc
          conda version : 24.7.1
    conda-build version : 24.5.1
         python version : 3.12.6.final.0
                 solver : libmamba (default)
       virtual packages : __archspec=1=broadwell
                          __conda=24.7.1=0
                          __glibc=2.35=0
                          __linux=5.4.0=0
                          __unix=0=0
       base environment : /opt/conda  (writable)
      conda av data dir : /opt/conda/etc/conda
  conda av metadata url : None
           channel URLs : https://conda.anaconda.org/rapidsai/linux-64
                          https://conda.anaconda.org/rapidsai/noarch
                          https://conda.anaconda.org/rapidsai-nightly/linux-64
                          https://conda.anaconda.org/rapidsai-nightly/noarch
                          https://conda.anaconda.org/dask/label/dev/linux-64
                          https://conda.anaconda.org/dask/label/dev/noarch
                          https://conda.anaconda.org/pytorch/linux-64
                          https://conda.anaconda.org/pytorch/noarch
                          https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://conda.anaconda.org/nvidia/linux-64
                          https://conda.anaconda.org/nvidia/noarch
          package cache : /opt/conda/pkgs
                          /root/.conda/pkgs
       envs directories : /opt/conda/envs
                          /root/.conda/envs
               platform : linux-64
             user-agent : conda/24.7.1 requests/2.32.3 CPython/3.12.6 Linux/5.4.0-182-generic ubuntu/22.04.5 glibc/2.35 solver/libmamba conda-libmamba-solver/24.7.0 libmambapy/1.5.10
                UID:GID : 0:0
             netrc file : None
           offline mode : False
pkgw commented 4 days ago

Ah, the conflict here is actually betwen xorg-xorgproto and xorg-renderproto. This makes sense because xorg-xorgproto is a new upstream package that merges together all of the xorg-*proto packages, except xcb-proto.

The individual packages are no longer maintained, so we're in the process of migrating everything to use xorg-xorgproto. This issue should be dealt with when xorg-libxrender is updated to use xorg-xorgproto, which is something that I plan to do in the very near future.

jakirkham commented 4 days ago

Thanks James and Peter! 🙏

So how should we handle existing packages using the legacy libraries?

pkgw commented 3 days ago

@jakirkham I've been migrating the proto packages as part of the r-base44_and_m2w64-ucrt migration which is propagating through the X.org stack right now, so basically there's already a migration for these happening. Also, FWIW the proto packages just contain C header files and pkg-config files, and in most cases they're the same, so it's OK to have a little mix-and-match going on for a little while.

jameslamb commented 1 day ago

Thanks very much @pkgw! It looks to me like merging #10 (and probably other PRs for other dependencies) has fixed the cases I'd reported here. The reproducible examples I'd reported here all now pull in the new build of libxrender and succeed.

I won't close this until @jakirkham has a chance to look though... I'm not sure about some of the questions from https://github.com/conda-forge/xorg-libxrender-feedstock/issues/11#issuecomment-2380240668 and what (if anything) needs to be done to use older packages.