Skip to content

Commit 59f3b72

Browse files
authored
Merge pull request #466 from yamacir-kit/release-candidate
Release candidate
2 parents fc2876f + 10f0155 commit 59f3b72

Some content is hidden

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

45 files changed

+2256
-1476
lines changed

CMakeLists.txt

+57-60
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ execute_process(
55
COMMAND tr -d "\n"
66
OUTPUT_VARIABLE CURRENT_VERSION)
77

8-
project(meevax DESCRIPTION "A programmable programming language"
9-
HOMEPAGE_URL "https://github.com/yamacir-kit/meevax"
10-
LANGUAGES CXX
11-
VERSION ${CURRENT_VERSION})
8+
project(meevax
9+
DESCRIPTION "A programmable programming language"
10+
HOMEPAGE_URL "https://github.com/yamacir-kit/meevax"
11+
LANGUAGES CXX
12+
VERSION ${CURRENT_VERSION})
1213

1314
include(GNUInstallDirs)
1415

@@ -20,9 +21,9 @@ string(JOIN " " AGGRESSIVE_OPTIMIZATION_OPTIONS
2021
)
2122

2223
set(CMAKE_CXX_EXTENSIONS OFF)
23-
set(CMAKE_CXX_FLAGS_DEBUG "-Og -gdwarf-4") # NOTE: The `-gdwarf-4` option is set due to the following issues with Clang 14 and Valgrind versions below 3.20: https://bugzilla.mozilla.org/show_bug.cgi?id=1758782
24-
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
25-
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG ${AGGRESSIVE_OPTIMIZATION_OPTIONS}")
24+
set(CMAKE_CXX_FLAGS_DEBUG "-Og -gdwarf-4") # NOTE: The `-gdwarf-4` option is set due to the following issues with Clang 14 and Valgrind versions below 3.20: https://bugzilla.mozilla.org/show_bug.cgi?id=1758782
25+
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
26+
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG ${AGGRESSIVE_OPTIMIZATION_OPTIONS}")
2627
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -gdwarf-4 -DNDEBUG")
2728
set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -pipe")
2829
set(CMAKE_CXX_STANDARD 17)
@@ -67,36 +68,27 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure/version.cpp ${CMAKE_CURRENT
6768

6869
add_library(kernel SHARED)
6970

70-
add_library(${PROJECT_NAME}::kernel ALIAS kernel)
71-
7271
file(GLOB_RECURSE ${PROJECT_NAME}_KERNEL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*/*.cpp)
7372

7473
target_sources(kernel PRIVATE ${${PROJECT_NAME}_KERNEL_SOURCES})
7574

76-
target_include_directories(kernel PUBLIC
77-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
78-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
79-
80-
target_link_libraries(kernel PRIVATE ${CMAKE_DL_LIBS}
81-
PUBLIC gmp)
82-
83-
set_target_properties(kernel PROPERTIES OUTPUT_NAME ${PROJECT_NAME} # Rename libkernel => libmeevax
84-
VERSION ${PROJECT_VERSION}
85-
SOVERSION ${PROJECT_VERSION_MAJOR}
86-
LINK_FLAGS_RELEASE -s)
87-
88-
# ---- Target format -----------------------------------------------------------
89-
90-
add_executable(format)
75+
target_include_directories(kernel
76+
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
77+
PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
9178

92-
target_sources(format PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/format.cpp)
79+
target_link_libraries(kernel
80+
PRIVATE ${CMAKE_DL_LIBS}
81+
PUBLIC gmp)
9382

94-
target_link_libraries(format PRIVATE kernel)
83+
set_target_properties(kernel PROPERTIES
84+
OUTPUT_NAME ${PROJECT_NAME} # Rename libkernel => libmeevax
85+
VERSION ${PROJECT_VERSION}
86+
SOVERSION ${PROJECT_VERSION_MAJOR}
87+
LINK_FLAGS_RELEASE -s)
9588

9689
# ---- Target basis ------------------------------------------------------------
9790

9891
add_custom_target(basis
99-
DEPENDS format
10092
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/configure/basis.cmake)
10193

10294
# ---- Target shell ------------------------------------------------------------
@@ -109,8 +101,9 @@ target_sources(shell PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
109101

110102
target_link_libraries(shell PRIVATE kernel)
111103

112-
set_target_properties(shell PROPERTIES OUTPUT_NAME ${PROJECT_NAME} # Rename shell => meevax
113-
LINK_FLAGS_RELEASE -s)
104+
set_target_properties(shell PROPERTIES
105+
OUTPUT_NAME ${PROJECT_NAME} # Rename shell => meevax
106+
LINK_FLAGS_RELEASE -s)
114107

115108
# ---- CMake Package -----------------------------------------------------------
116109

@@ -122,29 +115,30 @@ write_basic_package_version_file(
122115

123116
# ---- Target install ----------------------------------------------------------
124117

125-
# /usr/lib/libmeevax
126-
install(TARGETS kernel
127-
EXPORT ${PROJECT_NAME}-config
128-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
129-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
118+
install( # /usr/lib/libmeevax
119+
TARGETS kernel
120+
EXPORT ${PROJECT_NAME}-config
121+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
122+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
130123

131-
# /usr/bin/meevax
132-
install(TARGETS shell
133-
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
124+
install( # /usr/bin/meevax
125+
TARGETS shell
126+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
134127

135-
# /usr/include/meevax
136-
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
137-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
128+
install( # /usr/include/meevax
129+
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
130+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
138131

139-
# /usr/share/meevax/meevax-config.cmake
140-
install(EXPORT ${PROJECT_NAME}-config
141-
EXPORT_LINK_INTERFACE_LIBRARIES
142-
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}
143-
NAMESPACE Meevax::)
132+
install( # /usr/share/meevax/meevax-config.cmake
133+
EXPORT ${PROJECT_NAME}-config
134+
EXPORT_LINK_INTERFACE_LIBRARIES
135+
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}
136+
NAMESPACE Meevax::)
144137

145138
# /usr/share/meevax/meevax-config-version.cmake
146-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
147-
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
139+
install(
140+
FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
141+
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
148142

149143
# ---- Target package ----------------------------------------------------------
150144

@@ -164,20 +158,22 @@ enable_testing()
164158

165159
find_program(${PROJECT_NAME}_MEMORY_CHECK_COMMAND valgrind)
166160

167-
set(${PROJECT_NAME}_MEMORY_CHECK_COMMAND_OPTIONS --error-exitcode=1 # = EXIT_FAILURE)
168-
--leak-check=full
169-
--quiet
170-
--show-leak-kinds=all)
161+
set(${PROJECT_NAME}_MEMORY_CHECK_OPTIONS
162+
--error-exitcode=1 # = EXIT_FAILURE)
163+
--leak-check=full
164+
--quiet
165+
--show-leak-kinds=all)
171166

172167
file(GLOB ${PROJECT_NAME}_TEST_SS ${CMAKE_CURRENT_SOURCE_DIR}/test/*.ss)
173168

174169
foreach(EACH IN LISTS ${PROJECT_NAME}_TEST_SS)
175170
get_filename_component(FILENAME ${EACH} NAME_WE)
176-
add_test(NAME ${FILENAME}
177-
COMMAND ${${PROJECT_NAME}_MEMORY_CHECK_COMMAND}
178-
${${PROJECT_NAME}_MEMORY_CHECK_COMMAND_OPTIONS}
179-
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/meevax
180-
${EACH})
171+
add_test(
172+
NAME ${FILENAME}
173+
COMMAND ${${PROJECT_NAME}_MEMORY_CHECK_COMMAND}
174+
${${PROJECT_NAME}_MEMORY_CHECK_OPTIONS}
175+
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/meevax
176+
${EACH})
181177
endforeach()
182178

183179
file(GLOB ${PROJECT_NAME}_TEST_CPP ${CMAKE_CURRENT_SOURCE_DIR}/test/*.cpp)
@@ -187,10 +183,11 @@ foreach(EACH IN LISTS ${PROJECT_NAME}_TEST_CPP)
187183
add_executable(assert-${FILENAME} ${EACH})
188184
add_dependencies(assert-${FILENAME} basis)
189185
target_link_libraries(assert-${FILENAME} PRIVATE kernel)
190-
add_test(NAME assert-${FILENAME}
191-
COMMAND ${${PROJECT_NAME}_MEMORY_CHECK_COMMAND}
192-
${${PROJECT_NAME}_MEMORY_CHECK_COMMAND_OPTIONS}
193-
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/assert-${FILENAME})
186+
add_test(
187+
NAME assert-${FILENAME}
188+
COMMAND ${${PROJECT_NAME}_MEMORY_CHECK_COMMAND}
189+
${${PROJECT_NAME}_MEMORY_CHECK_OPTIONS}
190+
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/assert-${FILENAME})
194191
endforeach()
195192

196193
# ---- Additional Targets ------------------------------------------------------

README.md

+28-28
Original file line numberDiff line numberDiff line change
@@ -46,34 +46,34 @@ Procedures for each standard are provided by the following R7RS-style libraries:
4646
|:--------:|--------------|
4747
| R4RS | [`(scheme r4rs)`](./basis/r4rs.ss)
4848
| R5RS | [`(scheme r5rs)`](./basis/r5rs.ss)
49-
| R7RS | [`(scheme base)`](./basis/r7rs.ss) [`(scheme box)`](./basis/r7rs.ss) [`(scheme case-lambda)`](./basis/r7rs.ss) [`(scheme char)`](./basis/r7rs.ss) [`(scheme complex)`](./basis/r7rs.ss) [`(scheme cxr)`](./basis/r7rs.ss) [`(scheme eval)`](./basis/r7rs.ss) [`(scheme file)`](./basis/r7rs.ss) [`(scheme inexact)`](./basis/r7rs.ss) [`(scheme lazy)`](./basis/r7rs.ss) [`(scheme load)`](./basis/r7rs.ss) [`(scheme process-context)`](./basis/r7rs.ss) [`(scheme read)`](./basis/r7rs.ss) [`(scheme repl)`](./basis/r7rs.ss) [`(scheme time)`](./basis/r7rs.ss) [`(scheme write)`](./basis/r7rs.ss)
49+
| R7RS | [`(scheme base)`](./basis/r7rs.ss) [`(scheme box)`](./basis/r7rs.ss) [`(scheme case-lambda)`](./basis/r7rs.ss) [`(scheme char)`](./basis/r7rs.ss) [`(scheme complex)`](./basis/r7rs.ss) [`(scheme cxr)`](./basis/r7rs.ss) [`(scheme eval)`](./basis/r7rs.ss) [`(scheme file)`](./basis/r7rs.ss) [`(scheme inexact)`](./basis/r7rs.ss) [`(scheme lazy)`](./basis/r7rs.ss) [`(scheme list)`](./basis/r7rs.ss) [`(scheme load)`](./basis/r7rs.ss) [`(scheme process-context)`](./basis/r7rs.ss) [`(scheme read)`](./basis/r7rs.ss) [`(scheme repl)`](./basis/r7rs.ss) [`(scheme time)`](./basis/r7rs.ss) [`(scheme write)`](./basis/r7rs.ss)
5050

5151
### SRFIs
5252

53-
| Number | Title | Library name | Note |
54-
|--------------------------------------------------------:|--------------------------------------------------------|-------------------------------------|-----------------------------------|
55-
| [ 0](https://srfi.schemers.org/srfi-0/srfi-0.html) | Feature-based conditional expansion construct | [`(srfi 0)`](./basis/srfi-0.ss) | R7RS 4.2.1 |
56-
| [ 1](https://srfi.schemers.org/srfi-1/srfi-1.html) | List Library | [`(srfi 1)`](./basis/srfi-1.ss) | |
57-
| [ 4](https://srfi.schemers.org/srfi-4/srfi-4.html) | Homogeneous numeric vector datatypes | [`(srfi 4)`](./basis/srfi-4.ss) | R7RS 6.9 |
58-
| [ 6](https://srfi.schemers.org/srfi-6/srfi-6.html) | Basic String Ports | [`(srfi 6)`](./basis/srfi-6.ss) | R7RS 6.13 |
59-
| [ 8](https://srfi.schemers.org/srfi-8/srfi-8.html) | receive: Binding to multiple values | [`(srfi 8)`](./basis/srfi-8.ss) | |
60-
| [ 9](https://srfi.schemers.org/srfi-9/srfi-9.html) | Defining Record Types | [`(srfi 9)`](./basis/srfi-9.ss) | R7RS 5.5 |
61-
| [ 10](https://srfi.schemers.org/srfi-10/srfi-10.html) | #, external form | | |
62-
| [ 11](https://srfi.schemers.org/srfi-11/srfi-11.html) | Syntax for receiving multiple values | [`(srfi 11)`](./basis/srfi-11.ss) | R7RS 4.2.2 |
63-
| [ 16](https://srfi.schemers.org/srfi-16/srfi-16.html) | Syntax for procedures of variable arity | [`(srfi 16)`](./basis/srfi-16.ss) | R7RS 4.2.9 |
64-
| [ 23](https://srfi.schemers.org/srfi-23/srfi-23.html) | Error reporting mechanism | [`(srfi 23)`](./basis/srfi-23.ss) | R7RS 6.11 |
65-
| [ 30](https://srfi.schemers.org/srfi-30/srfi-30.html) | Nested Multi-line Comments | | R7RS 2.2 |
66-
| [ 31](https://srfi.schemers.org/srfi-31/srfi-31.html) | A special form rec for recursive evaluation | [`(srfi 31)`](./basis/srfi-31.ss) | |
67-
| [ 34](https://srfi.schemers.org/srfi-34/srfi-34.html) | Exception Handling for Programs | [`(srfi 34)`](./basis/srfi-34.ss) | R7RS 6.11 |
68-
| [ 38](https://srfi.schemers.org/srfi-38/srfi-38.html) | External Representation for Data With Shared Structure | [`(srfi 38)`](./basis/srfi-38.ss) | R7RS 6.13.3 |
69-
| [ 39](https://srfi.schemers.org/srfi-39/srfi-39.html) | Parameter objects | [`(srfi 39)`](./basis/srfi-39.ss) | R7RS 4.2.6 |
70-
| [ 45](https://srfi.schemers.org/srfi-45/srfi-45.html) | Primitives for Expressing Iterative Lazy Algorithms | [`(srfi 45)`](./basis/srfi-45.ss) | R7RS 4.2.5 |
71-
| [ 62](https://srfi.schemers.org/srfi-62/srfi-62.html) | S-expression comments | | R7RS 2.2 |
72-
| [ 78](https://srfi.schemers.org/srfi-78/srfi-78.html) | Lightweight testing | [`(srfi 78)`](./basis/srfi-78.ss) | Except `check-ec` |
73-
| [ 87](https://srfi.schemers.org/srfi-87/srfi-87.html) | => in case clauses | | R7RS 4.2.1 |
74-
| [ 98](https://srfi.schemers.org/srfi-98/srfi-98.html) | An interface to access environment variables | [`(srfi 98)`](./basis/srfi-98.ss) | R7RS 6.14 |
75-
| [111](https://srfi.schemers.org/srfi-111/srfi-111.html) | Boxes | [`(srfi 111)`](./basis/srfi-111.ss) | [`(scheme box)`](./basis/r7rs.ss) |
76-
| [149](https://srfi.schemers.org/srfi-149/srfi-149.html) | Basic syntax-rules template extensions | [`(srfi 149)`](./basis/srfi-149.ss) | R7RS 4.3.2 |
53+
| Number | Title | Library name | Note |
54+
|--------------------------------------------------------:|--------------------------------------------------------|-------------------------------------|------------------------------------|
55+
| [ 0](https://srfi.schemers.org/srfi-0/srfi-0.html) | Feature-based conditional expansion construct | [`(srfi 0)`](./basis/srfi-0.ss) | R7RS 4.2.1 |
56+
| [ 1](https://srfi.schemers.org/srfi-1/srfi-1.html) | List Library | [`(srfi 1)`](./basis/srfi-1.ss) | [`(scheme list)`](./basis/r7rs.ss) |
57+
| [ 4](https://srfi.schemers.org/srfi-4/srfi-4.html) | Homogeneous numeric vector datatypes | [`(srfi 4)`](./basis/srfi-4.ss) | R7RS 6.9 |
58+
| [ 6](https://srfi.schemers.org/srfi-6/srfi-6.html) | Basic String Ports | [`(srfi 6)`](./basis/srfi-6.ss) | R7RS 6.13 |
59+
| [ 8](https://srfi.schemers.org/srfi-8/srfi-8.html) | receive: Binding to multiple values | [`(srfi 8)`](./basis/srfi-8.ss) | |
60+
| [ 9](https://srfi.schemers.org/srfi-9/srfi-9.html) | Defining Record Types | [`(srfi 9)`](./basis/srfi-9.ss) | R7RS 5.5 |
61+
| [ 10](https://srfi.schemers.org/srfi-10/srfi-10.html) | #, external form | | |
62+
| [ 11](https://srfi.schemers.org/srfi-11/srfi-11.html) | Syntax for receiving multiple values | [`(srfi 11)`](./basis/srfi-11.ss) | R7RS 4.2.2 |
63+
| [ 16](https://srfi.schemers.org/srfi-16/srfi-16.html) | Syntax for procedures of variable arity | [`(srfi 16)`](./basis/srfi-16.ss) | R7RS 4.2.9 |
64+
| [ 23](https://srfi.schemers.org/srfi-23/srfi-23.html) | Error reporting mechanism | [`(srfi 23)`](./basis/srfi-23.ss) | R7RS 6.11 |
65+
| [ 30](https://srfi.schemers.org/srfi-30/srfi-30.html) | Nested Multi-line Comments | | R7RS 2.2 |
66+
| [ 31](https://srfi.schemers.org/srfi-31/srfi-31.html) | A special form rec for recursive evaluation | [`(srfi 31)`](./basis/srfi-31.ss) | |
67+
| [ 34](https://srfi.schemers.org/srfi-34/srfi-34.html) | Exception Handling for Programs | [`(srfi 34)`](./basis/srfi-34.ss) | R7RS 6.11 |
68+
| [ 38](https://srfi.schemers.org/srfi-38/srfi-38.html) | External Representation for Data With Shared Structure | [`(srfi 38)`](./basis/srfi-38.ss) | R7RS 6.13.3 |
69+
| [ 39](https://srfi.schemers.org/srfi-39/srfi-39.html) | Parameter objects | [`(srfi 39)`](./basis/srfi-39.ss) | R7RS 4.2.6 |
70+
| [ 45](https://srfi.schemers.org/srfi-45/srfi-45.html) | Primitives for Expressing Iterative Lazy Algorithms | [`(srfi 45)`](./basis/srfi-45.ss) | R7RS 4.2.5 |
71+
| [ 62](https://srfi.schemers.org/srfi-62/srfi-62.html) | S-expression comments | | R7RS 2.2 |
72+
| [ 78](https://srfi.schemers.org/srfi-78/srfi-78.html) | Lightweight testing | [`(srfi 78)`](./basis/srfi-78.ss) | Except `check-ec` |
73+
| [ 87](https://srfi.schemers.org/srfi-87/srfi-87.html) | => in case clauses | | R7RS 4.2.1 |
74+
| [ 98](https://srfi.schemers.org/srfi-98/srfi-98.html) | An interface to access environment variables | [`(srfi 98)`](./basis/srfi-98.ss) | R7RS 6.14 |
75+
| [111](https://srfi.schemers.org/srfi-111/srfi-111.html) | Boxes | [`(srfi 111)`](./basis/srfi-111.ss) | [`(scheme box)`](./basis/r7rs.ss) |
76+
| [149](https://srfi.schemers.org/srfi-149/srfi-149.html) | Basic syntax-rules template extensions | [`(srfi 149)`](./basis/srfi-149.ss) | R7RS 4.3.2 |
7777

7878
## Installation
7979

@@ -91,7 +91,7 @@ Procedures for each standard are provided by the following R7RS-style libraries:
9191
cmake -B build -DCMAKE_BUILD_TYPE=Release
9292
cd build
9393
make package
94-
sudo apt install build/meevax_0.5.32_amd64.deb
94+
sudo apt install build/meevax_0.5.63_amd64.deb
9595
```
9696

9797
or
@@ -123,9 +123,9 @@ sudo rm -rf /usr/local/share/meevax
123123

124124
| Target Name | Description
125125
|-------------|-------------
126-
| `all` | Build shared-library `libmeevax.0.5.32.so` and executable `meevax`
126+
| `all` | Build shared-library `libmeevax.0.5.63.so` and executable `meevax`
127127
| `test` | Test executable `meevax`
128-
| `package` | Generate debian package `meevax_0.5.32_amd64.deb`
128+
| `package` | Generate debian package `meevax_0.5.63_amd64.deb`
129129
| `install` | Copy files into `/usr/local` directly
130130

131131
## Usage

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.5.32
1+
0.5.63

]end(

Whitespace-only changes.

0 commit comments

Comments
 (0)