lu-zero / cargo-c

build and install C-compatible libraries
MIT License
445 stars 55 forks source link

Use /mingw64 as default prefix on MSYS2/MinGW64 #245

Open mgeier opened 2 years ago

mgeier commented 2 years ago

Currently, the --prefix has to be specified explicitly:

https://github.com/lu-zero/cargo-c/blob/97a9d532dbcc4e59dee5631fa459202e76db556f/.github/workflows/example-project.yml#L116

It would be great if /mingw64 could be used as default on MSYS2/MinGW64, since /usr/local doesn't seem to be searched by default.

lu-zero commented 2 years ago

it requires to know that you are in mingw64 reliably and I'm afraid it is not straightforward, but if you come up with a patch for it I'd be happy to merge it. :)

mgeier commented 2 years ago

I have no idea, but I hope that somebody will come up with a solution eventually!

kmilos commented 1 year ago

FWIW, when packaging for MSYS2, we always have to specify the prefix explicitly, as there are many MinGW environments, not just /mingw64...

/ucrt64 is the new default btw, but don't know if that affects the setup-msys2 action defaults yet - if it does, you can't be installing mingw-w64-x86_64-* packages explicitly in your workflow above (without specifying your msystem is mingw64), it is much better to use the pacboy route and install e.g. agnostic rust:p which will pick the package for the matching environment...

If you're inside a MSYS2 shell (like the setup-msys2 action should be), one just uses $MINGW_PREFIX (w/ MSYS2_ARG_CONV_EXCL so it doesn't get converted to an absolute DOS path).

So parts of your action would ideally be something like:

      - name: Install MSYS2
        uses: msys2/setup-msys2@v2
        with:
          msystem: ucrt64
          install: >-
            make
          pacboy: >-
            pkg-config:p
            rust:p

This makes it easy to switch/add more msystems to the CI matrix.

And finally

      - name: Install C API for example project
        working-directory: example-project
        run: |
          MSYS2_ARG_CONV_EXCL="--prefix=" \
            cargo cinstall --verbose --release --prefix=${MINGW_PREFIX}

I'd remove the --target because that one should be figured out automatically, no? This should make this step completely agnostic of the chosen msystem...

Ideally, you'll want to add a matrix to also test e.g. clangarm64 eventually as well (no runners available just yet), so please add support for aarch64-pc-windows-gnullvm to cargo-c ;) @lu-zero

lu-zero commented 1 year ago

If you can provide a patch for it and a ci item to test it would be great :)