ocaml / opam-repository

Main public package repository for opam, the source package manager of OCaml.
https://opam.ocaml.org
Creative Commons Zero v1.0 Universal
524 stars 1.14k forks source link

conf-python-3 + Cygwin(mingw64) + opam 2.2.x = "python3: command not found" #26434

Open tahina-pro opened 3 months ago

tahina-pro commented 3 months ago

If, after removing any python3.exe in Windows' PATH, I try opam install conf-python-3 with the mingw64 compilers, either from a full-fledged Cygwin environment, or from a Windows opam with its own copy of Cygwin (under C:\Users\...\AppData\Local\opam\.cygwin\root), then Cygwin python3 installs successfully, but then opam fails with:

#=== ERROR while compiling conf-python-3.9.0.0 ================================#
"python3": command not found.

By contrast, if I install Windows (not Cygwin) Python 3.x "by hand", then opam install conf-python-3 succeeds. But that may not be the result I want, because if I then install an opam package such as z3.4.8.5-1, it fails to compile because of directory separators: \ with Windows Python, but I expect Cygwin / because I expect to compile z3.4.8.5-1 with the Cygwin mingw64 compilers.

Is this related to #26130 ? Thank you in advance @UnixJunkie , @dra27 for clarifying!

Output of opam var os: win32 Output of opam var os-distribution: cygwin

Output of opam config report:

# opam config report
# opam-version         2.2.1
# self-upgrade         no
# system               arch=x86_64 os=win32 os-distribution=cygwin os-version=10.0.22621
# solver               builtin-mccs+glpk
# install-criteria     -removed,-count[avoid-version,changed],-count[version-lag,request],-count[version-lag,changed],-count[missing-depexts,changed],-changed
# upgrade-criteria     -removed,-count[avoid-version,changed],-count[version-lag,solution],-count[missing-depexts,changed],-new
# jobs                 13
# repositories         1 (http) (default repo at e89899ac28c3c15f5a5ba4b01d63a5646a1f8a5d)
# pinned               0
# current-switch       default
# invariant            ocaml >= 4.05.0
# compiler-packages    arch-x86_64.1, conf-mingw-w64-gcc-x86_64.1, flexdll.0.43, mingw-w64-shims.0.2.0, ocaml-base-compiler.5.2.0, ocaml-env-mingw64.1, ocaml-options-vanilla.1, system-mingw.1
# mingw-w64-shims:runtime-x86_64 C:\cygwin64\usr\x86_64-w64-mingw32\sys-root\mingw\bin
# mingw-w64-shims:runtime-i686
# ocaml:native         true
# ocaml:native-tools   true
# ocaml:native-dynlink true
# ocaml:stubsdir       C:/Users/taramana/AppData/Local/opam/default/lib/ocaml/stublibs;C:/Users/taramana/AppData/Local/opam/default/lib/ocaml
# ocaml:preinstalled   false
# ocaml:compiler       5.2.0
tahina-pro commented 3 months ago

I suspect one possible reason may be that opam install is not running with a "full Cygwin PATH environment" such as the one that bash --login would provide. More precisely, python3 should be found as /usr/bin/python3 (a symlink to /etc/alternatives/python3, which is itself a symlink to python), but is not.

UnixJunkie commented 3 months ago

I know nothing about windows, and would not be able to test anything related to it. If you have a suggestion to fix this package, it is welcome and others will review it.

dra27 commented 3 months ago

This doesn't have an easy solution, I'm afraid. There are two parts to it:

anmaped commented 1 month ago

@dra27

Ugly workaround for Windows compilation using github actions

  buildonwindows:
    name: Build on windows
    runs-on: windows-latest
    steps:
      - name: Checkout tree
        uses: actions/checkout@v2

      - name: Set-up OCaml
        uses: ocaml/setup-ocaml@v3
        with:
          ocaml-compiler: 4

      - run: $env:Path = 'D:\cygwin\bin;' + $env:Path; setx /m PATH "$env:PATH"
      - run: opam install conf-python-3
      - run: opam exec -- python3 --version
      - run: cp D:\cygwin\bin\python3.9.exe D:\cygwin\bin\python3.exe
      - run: opam exec -- python3 --version
      - run: ls D:\cygwin ; ls D:\cygwin\bin ; $env:Path
      - run: opam install . --with-test

First shows python version 3.9.13 (windows), then 3.9.16 (cygwin).

May it helps someone.