aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2025-12-29 18:13:23 +0100
committerEgor Tensin <egor@tensin.name>2025-12-29 18:13:23 +0100
commiteee1040f62d375f7c49408b9e182bba44d2603a9 (patch)
tree50439af51f9d9230e0b603f52a2ce8ea2f6416db
parentworkflows/test: upgrade runner images and actions (diff)
downloadsetup-clang-eee1040f62d375f7c49408b9e182bba44d2603a9.tar.gz
setup-clang-eee1040f62d375f7c49408b9e182bba44d2603a9.zip
drop Cygwin, it's obsolete
-rw-r--r--.github/actions/build-foo-cygwin/action.yml15
-rw-r--r--.github/actions/check-cc-cygwin/action.yml25
-rw-r--r--.github/workflows/test.yml37
-rw-r--r--README.md13
-rw-r--r--action.yml66
5 files changed, 5 insertions, 151 deletions
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