Skip to content

Commit 3230482

Browse files
committed
merge no-import matcher info
2 parents e8b501e + 20867be commit 3230482

File tree

378 files changed

+118139
-103270
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

378 files changed

+118139
-103270
lines changed

.claude/CLAUDE.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,21 @@ This PR adds a `num?` parameter to `mkPatternFromTheorem` to control how many
4646
leading quantifiers are stripped when creating a pattern.
4747
```
4848

49+
**Changelog labels:** Add one `changelog-*` label to categorize the PR for release notes:
50+
- `changelog-language` - Language features and metaprograms
51+
- `changelog-tactics` - User facing tactics
52+
- `changelog-server` - Language server, widgets, and IDE extensions
53+
- `changelog-pp` - Pretty printing
54+
- `changelog-library` - Library
55+
- `changelog-compiler` - Compiler, runtime, and FFI
56+
- `changelog-lake` - Lake
57+
- `changelog-doc` - Documentation
58+
- `changelog-ffi` - FFI changes
59+
- `changelog-other` - Other changes
60+
- `changelog-no` - Do not include this PR in the release changelog
61+
62+
If you're unsure which label applies, it's fine to omit the label and let reviewers add it.
63+
4964
## CI Log Retrieval
5065

5166
When CI jobs fail, investigate immediately - don't wait for other jobs to complete. Individual job logs are often available even while other jobs are still running. Try `gh run view <run-id> --log` or `gh run view <run-id> --log-failed`, or use `gh run view <run-id> --job=<job-id>` to target the specific failed job. Sleeping is fine when asked to monitor CI and no failures exist yet, but once any job fails, investigate that failure immediately.

.github/workflows/pr-release.yml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,19 @@ jobs:
4343
name: build-.*
4444
name_is_regexp: true
4545

46+
# Verify artifacts were downloaded before any side effects (tag creation, release deletion).
47+
- name: Verify release artifacts exist
48+
if: ${{ steps.workflow-info.outputs.pullRequestNumber != '' }}
49+
run: |
50+
shopt -s nullglob
51+
files=(artifacts/*/*)
52+
if [ ${#files[@]} -eq 0 ]; then
53+
echo "::error::No artifacts found matching artifacts/*/*"
54+
exit 1
55+
fi
56+
echo "Found ${#files[@]} artifacts to upload:"
57+
printf '%s\n' "${files[@]}"
58+
4659
- name: Push tag
4760
if: ${{ steps.workflow-info.outputs.pullRequestNumber != '' }}
4861
run: |
@@ -74,18 +87,6 @@ jobs:
7487
gh release delete --repo ${{ github.repository_owner }}/lean4-pr-releases pr-release-${{ steps.workflow-info.outputs.pullRequestNumber }}-${{ env.SHORT_SHA }} -y || true
7588
env:
7689
GH_TOKEN: ${{ secrets.PR_RELEASES_TOKEN }}
77-
# Verify artifacts were downloaded (equivalent to fail_on_unmatched_files in the old action).
78-
- name: Verify release artifacts exist
79-
if: ${{ steps.workflow-info.outputs.pullRequestNumber != '' }}
80-
run: |
81-
shopt -s nullglob
82-
files=(artifacts/*/*)
83-
if [ ${#files[@]} -eq 0 ]; then
84-
echo "::error::No artifacts found matching artifacts/*/*"
85-
exit 1
86-
fi
87-
echo "Found ${#files[@]} artifacts to upload:"
88-
printf '%s\n' "${files[@]}"
8990
# We use `gh release create` instead of `softprops/action-gh-release` because
9091
# the latter enumerates all releases to check for existing ones, which fails
9192
# when the repository has more than 10000 releases (GitHub API pagination limit).

CMakeLists.txt

Lines changed: 57 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,22 @@ option(USE_MIMALLOC "use mimalloc" ON)
1010
get_cmake_property(vars CACHE_VARIABLES)
1111
foreach(var ${vars})
1212
get_property(currentHelpString CACHE "${var}" PROPERTY HELPSTRING)
13-
if("${var}" MATCHES "STAGE0_(.*)")
13+
if(var MATCHES "STAGE0_(.*)")
1414
list(APPEND STAGE0_ARGS "-D${CMAKE_MATCH_1}=${${var}}")
15-
elseif("${var}" MATCHES "STAGE1_(.*)")
15+
elseif(var MATCHES "STAGE1_(.*)")
1616
list(APPEND STAGE1_ARGS "-D${CMAKE_MATCH_1}=${${var}}")
17-
elseif("${currentHelpString}" MATCHES "No help, variable specified on the command line." OR "${currentHelpString}" STREQUAL "")
17+
elseif(currentHelpString MATCHES "No help, variable specified on the command line." OR currentHelpString STREQUAL "")
1818
list(APPEND CL_ARGS "-D${var}=${${var}}")
19-
if("${var}" MATCHES "USE_GMP|CHECK_OLEAN_VERSION|LEAN_VERSION_.*|LEAN_SPECIAL_VERSION_DESC")
19+
if(var MATCHES "USE_GMP|CHECK_OLEAN_VERSION|LEAN_VERSION_.*|LEAN_SPECIAL_VERSION_DESC")
2020
# must forward options that generate incompatible .olean format
2121
list(APPEND STAGE0_ARGS "-D${var}=${${var}}")
22-
elseif("${var}" MATCHES "LLVM*|PKG_CONFIG|USE_LAKE|USE_MIMALLOC")
22+
elseif(var MATCHES "LLVM*|PKG_CONFIG|USE_LAKE|USE_MIMALLOC")
2323
list(APPEND STAGE0_ARGS "-D${var}=${${var}}")
2424
endif()
25-
elseif("${var}" MATCHES "USE_MIMALLOC")
25+
elseif(var MATCHES "USE_MIMALLOC")
2626
list(APPEND CL_ARGS "-D${var}=${${var}}")
2727
list(APPEND STAGE0_ARGS "-D${var}=${${var}}")
28-
elseif(("${var}" MATCHES "CMAKE_.*") AND NOT ("${var}" MATCHES "CMAKE_BUILD_TYPE") AND NOT ("${var}" MATCHES "CMAKE_HOME_DIRECTORY"))
28+
elseif((var MATCHES "CMAKE_.*") AND NOT (var MATCHES "CMAKE_BUILD_TYPE") AND NOT (var MATCHES "CMAKE_HOME_DIRECTORY"))
2929
list(APPEND PLATFORM_ARGS "-D${var}=${${var}}")
3030
endif()
3131
endforeach()
@@ -34,15 +34,15 @@ include(ExternalProject)
3434
project(LEAN CXX C)
3535

3636
if(NOT (DEFINED STAGE0_CMAKE_EXECUTABLE_SUFFIX))
37-
set(STAGE0_CMAKE_EXECUTABLE_SUFFIX "${CMAKE_EXECUTABLE_SUFFIX}")
37+
set(STAGE0_CMAKE_EXECUTABLE_SUFFIX "${CMAKE_EXECUTABLE_SUFFIX}")
3838
endif()
3939

4040
# Don't do anything with cadical on wasm
41-
if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")
41+
if(NOT CMAKE_SYSTEM_NAME MATCHES "Emscripten")
4242
find_program(CADICAL cadical)
4343
if(NOT CADICAL)
4444
set(CADICAL_CXX c++)
45-
if (CADICAL_USE_CUSTOM_CXX)
45+
if(CADICAL_USE_CUSTOM_CXX)
4646
set(CADICAL_CXX ${CMAKE_CXX_COMPILER})
4747
# Use same platform flags as for Lean executables, in particular from `prepare-llvm-linux.sh`,
4848
# but not Lean-specific `LEAN_EXTRA_CXX_FLAGS` such as fsanitize.
@@ -54,81 +54,101 @@ if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")
5454
set(CADICAL_CXX "${CCACHE} ${CADICAL_CXX}")
5555
endif()
5656
# missing stdio locking API on Windows
57-
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
57+
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
5858
string(APPEND CADICAL_CXXFLAGS " -DNUNLOCKED")
5959
endif()
6060
string(APPEND CADICAL_CXXFLAGS " -DNCLOSEFROM")
61-
ExternalProject_add(cadical
61+
ExternalProject_Add(
62+
cadical
6263
PREFIX cadical
6364
GIT_REPOSITORY https://github.com/arminbiere/cadical
6465
GIT_TAG rel-2.1.2
6566
CONFIGURE_COMMAND ""
66-
BUILD_COMMAND $(MAKE) -f ${CMAKE_SOURCE_DIR}/src/cadical.mk
67-
CMAKE_EXECUTABLE_SUFFIX=${CMAKE_EXECUTABLE_SUFFIX}
68-
CXX=${CADICAL_CXX}
69-
CXXFLAGS=${CADICAL_CXXFLAGS}
70-
LDFLAGS=${CADICAL_LDFLAGS}
67+
BUILD_COMMAND
68+
$(MAKE) -f ${CMAKE_SOURCE_DIR}/src/cadical.mk CMAKE_EXECUTABLE_SUFFIX=${CMAKE_EXECUTABLE_SUFFIX}
69+
CXX=${CADICAL_CXX} CXXFLAGS=${CADICAL_CXXFLAGS} LDFLAGS=${CADICAL_LDFLAGS}
7170
BUILD_IN_SOURCE ON
72-
INSTALL_COMMAND "")
73-
set(CADICAL ${CMAKE_BINARY_DIR}/cadical/cadical${CMAKE_EXECUTABLE_SUFFIX} CACHE FILEPATH "path to cadical binary" FORCE)
71+
INSTALL_COMMAND ""
72+
)
73+
set(
74+
CADICAL
75+
${CMAKE_BINARY_DIR}/cadical/cadical${CMAKE_EXECUTABLE_SUFFIX}
76+
CACHE FILEPATH
77+
"path to cadical binary"
78+
FORCE
79+
)
7480
list(APPEND EXTRA_DEPENDS cadical)
7581
endif()
7682
list(APPEND CL_ARGS -DCADICAL=${CADICAL})
7783
endif()
7884

79-
if (USE_MIMALLOC)
80-
ExternalProject_add(mimalloc
85+
if(USE_MIMALLOC)
86+
ExternalProject_Add(
87+
mimalloc
8188
PREFIX mimalloc
8289
GIT_REPOSITORY https://github.com/microsoft/mimalloc
8390
GIT_TAG v2.2.3
8491
# just download, we compile it as part of each stage as it is small
8592
CONFIGURE_COMMAND ""
8693
BUILD_COMMAND ""
87-
INSTALL_COMMAND "")
94+
INSTALL_COMMAND ""
95+
)
8896
list(APPEND EXTRA_DEPENDS mimalloc)
8997
endif()
9098

91-
if (NOT STAGE1_PREV_STAGE)
92-
ExternalProject_add(stage0
99+
if(NOT STAGE1_PREV_STAGE)
100+
ExternalProject_Add(
101+
stage0
93102
SOURCE_DIR "${LEAN_SOURCE_DIR}/stage0"
94103
SOURCE_SUBDIR src
95104
BINARY_DIR stage0
96105
# do not rebuild stage0 when git hash changes; it's not from this commit anyway
97106
# (however, CI will override this as we need to embed the githash into the stage 1 library built
98107
# by stage 0)
99108
CMAKE_ARGS -DSTAGE=0 -DUSE_GITHASH=OFF ${PLATFORM_ARGS} ${STAGE0_ARGS}
100-
BUILD_ALWAYS ON # cmake doesn't auto-detect changes without a download method
101-
INSTALL_COMMAND "" # skip install
109+
BUILD_ALWAYS
110+
ON # cmake doesn't auto-detect changes without a download method
111+
INSTALL_COMMAND
112+
"" # skip install
102113
DEPENDS ${EXTRA_DEPENDS}
103114
)
104115
list(APPEND EXTRA_DEPENDS stage0)
105116
endif()
106-
ExternalProject_add(stage1
117+
ExternalProject_Add(
118+
stage1
107119
SOURCE_DIR "${LEAN_SOURCE_DIR}"
108120
SOURCE_SUBDIR src
109121
BINARY_DIR stage1
110-
CMAKE_ARGS -DSTAGE=1 -DPREV_STAGE=${CMAKE_BINARY_DIR}/stage0 -DPREV_STAGE_CMAKE_EXECUTABLE_SUFFIX=${STAGE0_CMAKE_EXECUTABLE_SUFFIX} ${CL_ARGS} ${STAGE1_ARGS}
122+
CMAKE_ARGS
123+
-DSTAGE=1 -DPREV_STAGE=${CMAKE_BINARY_DIR}/stage0
124+
-DPREV_STAGE_CMAKE_EXECUTABLE_SUFFIX=${STAGE0_CMAKE_EXECUTABLE_SUFFIX} ${CL_ARGS} ${STAGE1_ARGS}
111125
BUILD_ALWAYS ON
112126
INSTALL_COMMAND ""
113127
DEPENDS ${EXTRA_DEPENDS}
114128
STEP_TARGETS configure
115129
)
116-
ExternalProject_add(stage2
130+
ExternalProject_Add(
131+
stage2
117132
SOURCE_DIR "${LEAN_SOURCE_DIR}"
118133
SOURCE_SUBDIR src
119134
BINARY_DIR stage2
120-
CMAKE_ARGS -DSTAGE=2 -DPREV_STAGE=${CMAKE_BINARY_DIR}/stage1 -DPREV_STAGE_CMAKE_EXECUTABLE_SUFFIX=${CMAKE_EXECUTABLE_SUFFIX} ${CL_ARGS}
135+
CMAKE_ARGS
136+
-DSTAGE=2 -DPREV_STAGE=${CMAKE_BINARY_DIR}/stage1 -DPREV_STAGE_CMAKE_EXECUTABLE_SUFFIX=${CMAKE_EXECUTABLE_SUFFIX}
137+
${CL_ARGS}
121138
BUILD_ALWAYS ON
122139
INSTALL_COMMAND ""
123140
DEPENDS stage1
124141
EXCLUDE_FROM_ALL ON
125142
STEP_TARGETS configure
126143
)
127-
ExternalProject_add(stage3
144+
ExternalProject_Add(
145+
stage3
128146
SOURCE_DIR "${LEAN_SOURCE_DIR}"
129147
SOURCE_SUBDIR src
130148
BINARY_DIR stage3
131-
CMAKE_ARGS -DSTAGE=3 -DPREV_STAGE=${CMAKE_BINARY_DIR}/stage2 -DPREV_STAGE_CMAKE_EXECUTABLE_SUFFIX=${CMAKE_EXECUTABLE_SUFFIX} ${CL_ARGS}
149+
CMAKE_ARGS
150+
-DSTAGE=3 -DPREV_STAGE=${CMAKE_BINARY_DIR}/stage2 -DPREV_STAGE_CMAKE_EXECUTABLE_SUFFIX=${CMAKE_EXECUTABLE_SUFFIX}
151+
${CL_ARGS}
132152
BUILD_ALWAYS ON
133153
INSTALL_COMMAND ""
134154
DEPENDS stage2
@@ -137,24 +157,14 @@ ExternalProject_add(stage3
137157

138158
# targets forwarded to appropriate stages
139159

140-
add_custom_target(update-stage0
141-
COMMAND $(MAKE) -C stage1 update-stage0
142-
DEPENDS stage1)
160+
add_custom_target(update-stage0 COMMAND $(MAKE) -C stage1 update-stage0 DEPENDS stage1)
143161

144-
add_custom_target(update-stage0-commit
145-
COMMAND $(MAKE) -C stage1 update-stage0-commit
146-
DEPENDS stage1)
162+
add_custom_target(update-stage0-commit COMMAND $(MAKE) -C stage1 update-stage0-commit DEPENDS stage1)
147163

148-
add_custom_target(test
149-
COMMAND $(MAKE) -C stage1 test
150-
DEPENDS stage1)
164+
add_custom_target(test COMMAND $(MAKE) -C stage1 test DEPENDS stage1)
151165

152-
add_custom_target(clean-stdlib
153-
COMMAND $(MAKE) -C stage1 clean-stdlib
154-
DEPENDS stage1)
166+
add_custom_target(clean-stdlib COMMAND $(MAKE) -C stage1 clean-stdlib DEPENDS stage1)
155167

156168
install(CODE "execute_process(COMMAND make -C stage1 install)")
157169

158-
add_custom_target(check-stage3
159-
COMMAND diff "stage2/bin/lean" "stage3/bin/lean"
160-
DEPENDS stage3)
170+
add_custom_target(check-stage3 COMMAND diff "stage2/bin/lean" "stage3/bin/lean" DEPENDS stage3)

script/fmt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
# This script expects to be run from the repo root.
5+
6+
# Format cmake files
7+
find -regex '.*/CMakeLists\.txt\(\.in\)?\|.*\.cmake\(\.in\)?' \
8+
! -path './build/*' \
9+
! -path "./stage0/*" \
10+
-exec \
11+
uvx gersemi --in-place --line-length 120 --indent 2 \
12+
--definitions src/cmake/Modules/ src/CMakeLists.txt \
13+
-- {} +

0 commit comments

Comments
 (0)