From eee1040f62d375f7c49408b9e182bba44d2603a9 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Mon, 29 Dec 2025 18:13:23 +0100 Subject: drop Cygwin, it's obsolete --- .github/actions/build-foo-cygwin/action.yml | 15 ------- .github/actions/check-cc-cygwin/action.yml | 25 ----------- .github/workflows/test.yml | 37 ---------------- README.md | 13 +----- action.yml | 66 ++--------------------------- 5 files changed, 5 insertions(+), 151 deletions(-) delete mode 100644 .github/actions/build-foo-cygwin/action.yml delete mode 100644 .github/actions/check-cc-cygwin/action.yml diff --git a/.github/actions/build-foo-cygwin/action.yml b/.github/actions/build-foo-cygwin/action.yml deleted file mode 100644 index 5f110c5..0000000 --- a/.github/actions/build-foo-cygwin/action.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Build foo.exe -description: Build foo.exe (on Cygwin) -runs: - using: composite - steps: - - run: | - IFS= read -r src_dir <<'EOF' - ${{ github.workspace }} - EOF - echo "$src_dir" - src_dir="$( cygpath -ua "$src_dir" )" - cd -- "$src_dir" - clang++ --version - clang++ -std=c++14 -o foo.exe foo.cpp - shell: C:\tools\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}' diff --git a/.github/actions/check-cc-cygwin/action.yml b/.github/actions/check-cc-cygwin/action.yml deleted file mode 100644 index 432d1b8..0000000 --- a/.github/actions/check-cc-cygwin/action.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Check symlinks -description: Check symlinks (on Cygwin) -runs: - using: composite - steps: - - run: | - check_tool() { - local exe - for exe; do - full_path="$( command -v "$exe" )" - echo "$full_path" - - output="$( "$full_path" --version )" - echo "$output" - - if ! echo "$output" | grep -F -- "clang version"; then - echo 'Unexpected `'"$exe"' --version` output.' >&2 - exit 1 - fi - done - } - - check_tool cc - check_tool c++ - shell: C:\tools\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a2a6293..e2a8288 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -61,40 +61,3 @@ jobs: uses: ./.github/actions/check-cc with: version: '${{ matrix.version }}' - - cygwin: - strategy: - matrix: - hardlinks: [0, 1] - runs-on: windows-latest - name: 'Cygwin: hardlinks${{ matrix.hardlinks }}' - # As of January 2023, clang simply doesn't work on Cygwin. - # It's also marked "Unmaintained" in the installer. - continue-on-error: true - steps: - - name: Checkout - uses: actions/checkout@v6 - - name: Clean up PATH - uses: egor-tensin/cleanup-path@v4 - - name: Install Cygwin - uses: egor-tensin/setup-cygwin@v4 - - name: Set up Clang - uses: ./ - with: - cygwin: 1 - cc: 1 - hardlinks: '${{ matrix.hardlinks }}' - - name: Build foo.exe - uses: ./.github/actions/build-foo - if: matrix.hardlinks - - name: Build foo.exe - uses: ./.github/actions/build-foo-cygwin - if: '!matrix.hardlinks' - - name: Run foo.exe - uses: ./.github/actions/run-foo - - name: Check symlinks - uses: ./.github/actions/check-cc - if: matrix.hardlinks - - name: Check symlinks - uses: ./.github/actions/check-cc-cygwin - if: '!matrix.hardlinks' diff --git a/README.md b/README.md index 9f7440b..03d05bc 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,7 @@ Set up Clang This GitHub action sets up Clang & LLVM in your workflow run. -1. Installs either 32-bit or 64-bit Clang & LLVM on either Ubuntu, Windows or -Cygwin. +1. Installs either 32-bit or 64-bit Clang & LLVM on either Ubuntu or Windows. 2. Specify a version to install using the `version` parameter. Use it in your workflow like this: @@ -20,14 +19,10 @@ Use it in your workflow like this: * `latest` is the default value for the `version` parameter and can be omitted. * `x64` is the default value for the `platform` parameter and can be omitted. Use `x86` if you want to build 32-bit binaries. -* Set the `cygwin` parameter to `1` to set up Clang inside an existing Cygwin -installation (you can set up Cygwin itself using my action [setup-cygwin]). * `cc` and `c++` executables are set up, pointing to the `clang` and `clang++` executables. Disable this by setting the `cc` parameter to `0`. -[setup-cygwin]: https://github.com/egor-tensin/setup-cygwin - API --- @@ -37,12 +32,8 @@ API | | *any* | | Install a specific version if it's available (see below). | platform | x64 | ✓ | Install the x86_64 toolchain. | | *any* | | Install the i686 toolchain. -| cygwin | *any* | ✓ | Install native binaries. -| | 1 | | Install Cygwin packages. | cc | 1 | ✓ | Set up `cc`/`clang`/`c++`/`clang++` executables. | | *any* | | Don't set up the executables. -| hardlinks | *any* | ✓ | Cygwin: don't convert any symlinks. -| | 1 | | Cygwin: convert symlinks in /usr/bin to hardlinks. | Output | Example | Description | ------- | --------- | ----------- @@ -82,7 +73,7 @@ below. This table should be updated periodically; it's a work-in-progress. -On Windows and Cygwin, the `version` parameter is ignored. +On Windows, the `version` parameter is ignored. License ------- diff --git a/action.yml b/action.yml index 511433d..4d7f606 100644 --- a/action.yml +++ b/action.yml @@ -10,18 +10,10 @@ inputs: description: Target platform required: false default: x64 - cygwin: - description: Install Cygwin packages - required: false - default: 0 cc: description: Set up cc/clang/c++/clang++ executables required: false default: 1 - hardlinks: - description: On Cygwin, replace executable symlinks with hardlinks - required: false - default: 0 outputs: clang: @@ -39,8 +31,7 @@ runs: New-Variable os -Value '${{ runner.os }}' -Option Constant New-Variable linux_host -Value ($os -eq 'Linux') -Option Constant - New-Variable cygwin_host -Value ('${{ inputs.cygwin }}' -eq '1') -Option Constant - New-Variable windows_host -Value ($os -eq 'Windows' -and !$cygwin_host) -Option Constant + New-Variable windows_host -Value ($os -eq 'Windows') -Option Constant New-Variable version -Value ('${{ inputs.version }}') -Option Constant New-Variable latest -Value ($version -eq 'latest') -Option Constant @@ -64,9 +55,6 @@ runs: if ($script:linux_host) { sudo apt-get update sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends $Packages - } elseif ($script:cygwin_host) { - $choco = Locate-Choco - & $choco install $Packages -y --no-progress --source=cygwin } elseif ($script:windows_host) { $choco = Locate-Choco & $choco upgrade $Packages -y --no-progress --allow-downgrade @@ -141,21 +129,6 @@ runs: $packages = $pkg_clang,$pkg_llvm,$pkg_gxx Install-Package $packages - } elseif ($cygwin_host) { - if (!$x64) { - echo @' - ::warning :: - 32-bit-targeting Clang is unavailable on 64-bit Cygwin. - Please use 32-bit Cygwin instead. - If you _are_ using 32-bit Cygwin, please ignore this message. - '@ - } - - # IDK why, but without libiconv-devel, even a "Hello, world!" - # C++ app cannot be compiled as of December 2020. Also, libstdc++ - # is required; it's simpler to install gcc-g++ for all the - # dependencies. - Install-Package clang gcc-g++ libiconv-devel llvm } elseif ($windows_host) { Install-Package llvm @@ -173,8 +146,7 @@ runs: New-Variable os -Value '${{ runner.os }}' -Option Constant New-Variable linux_host -Value ($os -eq 'Linux') -Option Constant - New-Variable cygwin_host -Value ('${{ inputs.cygwin }}' -eq '1') -Option Constant - New-Variable windows_host -Value ($os -eq 'Windows' -and !$cygwin_host) -Option Constant + New-Variable windows_host -Value ($os -eq 'Windows') -Option Constant New-Variable cc -Value ('${{ inputs.cc }}' -eq '1') -Option Constant @@ -192,12 +164,10 @@ runs: $exe_path = (Get-Command $Exe).Path $link_dir = if ($script:windows_host) { Split-Path $exe_path } else { '/usr/local/bin' } $link_name = if ($script:windows_host) { "$LinkName.exe" } else { $LinkName } - $link_path = if ($script:cygwin_host) { "$link_dir/$link_name" } else { Join-Path $link_dir $link_name } + $link_path = Join-Path $link_dir $link_name echo "Creating link $link_path -> $exe_path" if ($script:linux_host) { sudo ln -f -s $exe_path $link_path - } elseif ($script:cygwin_host) { - ln.exe -f -s $exe_path $link_path } elseif ($script:windows_host) { New-Item -ItemType HardLink -Path $link_path -Value $exe_path -Force | Out-Null } @@ -215,36 +185,6 @@ runs: } shell: pwsh - - run: | - New-Variable cygwin_host -Value ('${{ inputs.cygwin }}' -eq '1') -Option Constant - New-Variable hardlinks -Value ('${{ inputs.hardlinks }}' -eq '1') -Option Constant - - if ($cygwin_host -and $hardlinks) { - # clang/clang++ are Cygwin symlinks, pointing to clang-X.exe. It's - # convenient to make proper executables instead so that they can be - # called from Windows' command prompt. - echo @' - while IFS= read -d '' -r link_path; do - dest_path="$( readlink --canonicalize-existing -- "$link_path" )" - dest_ext=".${dest_path##*.}" - [ "$dest_ext" == ".$dest_path" ] && dest_ext= - link_ext=".${link_path##*.}" - [ "$link_ext" == ".$link_path" ] && link_ext= - echo "Removing symlink $link_path" && rm -f -- "$link_path" - [ "$link_ext" != "$dest_ext" ] && echo "${PATHEXT//\;/ - }" | grep -q --ignore-case --line-regexp -F -- "$dest_ext" && link_path="$link_path$dest_ext" - echo "Creating hardlink $link_path -> $dest_path" && ln -- "$dest_path" "$link_path" - done < <( find /usr/local/bin /usr/bin \ - -type l '-(' \ - -path '/usr/bin/clang*' -o \ - -path '/usr/bin/llvm*' -o \ - -path /usr/local/bin/cc -o \ - -path /usr/local/bin/c++ \ - '-)' -print0 ) - '@ | & bash.exe --login -o errexit -o nounset -o pipefail -o igncr - } - shell: pwsh - branding: icon: star color: green -- cgit v1.3