Commit Graph
91 Commits
Author SHA1 Message Date
Manlio Perillo 0b4ad6e99e build: use the old color style
In the `Zigling.printError` method, use a bold red color for the "error:"
string and a dim red color for the error message.

In the `Zigling.check_output` method, use the old color style.
2023-05-22 11:49:46 +02:00
Manlio Perillo 3e38a4fc84 build: in ZiglingStep.check_output panic in case of OOM
This is necessary since, when trimLines returns `std.mem.Allocator.Error`,
no error message will be displayed to the user.

An alternative is to use `std.Build.Step.fail`, but using @panic("OOM")
is simpler and consistent with existing code.
2023-05-20 07:25:53 +02:00
Manlio Perillo d0de9e5348 build: use std.Build.Step.fail to report errors
Have all error messages handled in a single place (printError), by using
the `std.Build.Step.fail` method.  Ensure that the first letter in the
error message is lower case and remove coloring, since it is done in the
`ZiglingStep.printError` method.

Additionally, in the `ZiglingStep.check_test` method, remove trailing
whitespace from stderr.
2023-05-19 19:27:44 +02:00
Manlio Perillo 699f877bd5 build: remove ZiglingStep.eval
Remove the `ZiglingStep.eval` method and the src/ipc.zig source code.
Use `Step.evalZigProcess`, instead. This greatly simplifies the code.

Print the error messages and error bundle in `ZiglingStep.make`, both in
case of error and success.

Additionally, remove the `ZiglingStep.is_testing` field, since it is no
longer necessary.
2023-05-19 19:27:33 +02:00
Manlio Perillo 54d5186982 Enable again the unit tests 2023-05-15 15:45:28 +02:00
Manlio Perillo 9ab9ebf33f Refactor testing support
Following the implementation in `std.Build.Step.Compile, add the Kind
type to differentiate between a normal executable and a test executable
running zig tests.  Replace `Exercise.run_test` field with `kind`.

Compile the exercise in both the exe and test cases, reducing code
duplication.

Add the `check_output` and `check_test` methods in ZiglingStep, in order
to differentiate the code checking a normal executable and a test
executable.

Update the tests to correctly check both the exe and test cases.  Remove
the temporary code added in commit 832772c.
2023-05-15 15:36:31 +02:00
Manlio Perillo 8deb6b4d95 build: remove extra comment for named mode
It was added in commit 879eeb6 (Execution of test exercises added.).
2023-05-14 17:27:14 +02:00
Manlio Perillo e7f62940eb tests: improve test case 3
Update test case 3 to check all exercises with an hint.
2023-05-14 17:22:03 +02:00
Manlio Perillo 1c184c2681 build: remove the install and uninstall steps
They are no longer used.
2023-05-14 17:22:03 +02:00
Manlio Perillo c393debe44 build: improve the help message in ZiglingStep
Add the Mode enum, so that ZiglingStep can detect if it was called in
normal mode or in named mode.

Update the help method to print the correct message based on the current
build mode.
2023-05-14 17:22:03 +02:00
Manlio Perillo 9b7ef7d8cf build: remove unused declarations
Remove the `Exercise.addExecutable` method and the `SkipStep` struct, since
they are no longer used.
2023-05-14 17:22:03 +02:00
Manlio Perillo 0304dc3d37 build: show the logo in named mode
When running `zig build -Dn=n`, ensure that the logo is printed.

Update the tests.

Closes #214
2023-05-14 17:22:03 +02:00
Manlio Perillo dc2539ec4e build: simplify the named build mode
Remove the following steps, since they are rarely (if never) used and
only increase the complexity of the `build.zig` file:

 - install step (zig build -Dn=n install)
 - test step (zig build -Dn=n test)
 - start step (zig build -Dn=n start)

The only remaining step is the default zigling step (zig build -Dn=n),
where the user can choose the exercise to solve.

Update the tests.  Additionally, update CheckNamedStep and CheckStep so
that they can share the same functions.

Closes #299
2023-05-14 17:22:03 +02:00
Manlio Perillo ede6671c27 build: remove the install step in the normal build mode
Removing the install step will simplify the current code.

Copying the exercise executable to the zig-out directory can be done in
`ZiglingStep.

Closes #298
2023-05-14 17:21:59 +02:00
Manlio Perillo 164df04618 build: remove the special eowyn build mode
The special eowyn mode was added in order to improve the performance of
the Eowyn Github workflow.

Remove it, since it adds unnecessary complexity to the `build.zig` file.

Closes #297
2023-05-14 17:20:47 +02:00
Manlio Perillo 7aa0737929 Restore unit tests
Commit dbd42bb (Cleaning up zig build output) broke the unit test.

Always use exit code 2, instead of 0.  This is the exit code used by the
build runner to notify the compiler to not report any further
diagnostics.

Move the Ziglings logo from the `build` function scope to the global
scope, and make it public so that tests.zig can use it to find the
number of lines to skip, instead of using an hard coded value.

Fixes #295
2023-05-09 17:28:41 +02:00
Manlio Perillo e4e096c680 build: make literal paths portable
Use fs.path.sep_str instead of a slash, in literal paths.
2023-05-09 11:11:11 +02:00
Manlio Perillo 728402c64f tests: remove the missing functions from RunStep
Use directly the RunStep.addCheck method, instead.
2023-05-09 11:11:11 +02:00
Manlio Perillo 14545778b2 build: improve code formatting
Avoid too long lines or too many line breaks.
2023-05-09 11:11:11 +02:00
Manlio Perillo ea4144a416 build: add the dumpArgs function
Use it in Zigling.compile, in order to reduce code duplication.
2023-05-09 11:11:03 +02:00
Manlio Perillo 9de89f6d60 build: fix doc-comments
Some functions and custom build steps incorrectly used a normal comment.
Use a doc-comment instead.

Additionally, use a present tense verb to describe the action of a
function or custom build step.
2023-05-09 11:07:22 +02:00
Manlio Perillo dd5df9f7cc build: use the blank identifier in the parameter list
Instead of marking a parameter as unused inside the function body.
2023-05-09 11:07:22 +02:00
Manlio Perillo bb42451b0f build: use self when using @fieldParentPtr
Update PrintStep and SkipStep to use the `self` variable when getting
the parent pointer from Step.

This convention is used in `std.Build`.
2023-05-09 11:07:22 +02:00
Manlio Perillo 4ae67ebf1b build: don't install skipped exercises
Update the code in `zig build install` and `zig build -Dn=n install`, so
that exercises that must be skipped are not installed, since it will
cause an error.  Ensure that a skip message is printed.
2023-05-09 11:07:22 +02:00
Manlio Perillo 185a40eb75 build: fix zig build -Dhealed install
The command fails because the path to the exercises directory was
incorrectly set to "exercises" instead of `work_path`.

The bug was introduced in commit b56bb7b
(build: enable full parallelism when -Dhealed is set).

Remove the comment about not using multi-object loop, since it is
confusing.
2023-05-09 11:07:22 +02:00
Manlio Perillo 3f81cdf3ac build: improve Exercise.addExecutable
Replace the file_path variable with path.
2023-05-06 18:18:08 +02:00
Manlio Perillo 1dd5852bec build: use multiline string literals when necessary
Update the output and hint fields in the `exercises` slice to use a
multiline string literal when the string have multiple lines or use the
`"` character.  This will greatly improve readability.
Additionally, remove the trailing whitespace on each line and check it
in the validate_exercises function.

Update the output comparison logic in ZiglingStep, since the current
code assumes that the string has only one line.

Update test/tests.zig to use the new `CheckNamedStep` in test case 1,
since RunStep.StdIo.Check is no longer able to correctly check the
output.

Fixes #283
2023-05-06 18:12:04 +02:00
Manlio Perillo 397c6671c0 build: remove assertion in Exercise.key
Use `orelse unreachable` instead, in order to simplify the code.

Fix doc-comments in the Exercise type.
2023-05-06 12:02:21 +02:00
Manlio Perillo be43e2d010 build: make Exercise.hint optional
Use an optional type, instead of an empty string, since it is more
idiomatic.
2023-05-06 11:50:42 +02:00
Manlio Perillo 0cd86d2f9b build: add the healed-path option
This is necessary in the unit tests, to ensure each test case use a
different exercises directory.

Update test/tests.zig to use the new healed-path option, ensuring that
each temp directory is removed.

In test case 3, 4 and 5, move case_step as the first step in the
dependency chain.  This will improve the build summary tree.

In test case 5, remove the dependency to heal_step, since it is not
necessary.
2023-05-05 16:22:50 +02:00
Manlio Perillo eda73b2fa8 test: remove obsolete comment in the heal function
Remove the comment about using POSIX patch variant, since we now use the
-s option.
2023-05-04 19:01:48 +02:00
Manlio Perillo 277c95db7a test: fix doc-comments
CheckStep, FailStep, fail, HealStep and heal incorrectly used a normal
comment, instead of a doc-comment.

Additionally, improve the documentation for FailStep and HealStep.
2023-05-04 18:48:35 +02:00
Manlio Perillo 5c488a1402 test: improve test case 1 and 2
In test case 1 and 2, remove the `i` variable and use `ex.number()`
instead.

In test case 2, when checking the exercise output from stderr, also
check that stdout is empty and vice versa.
2023-05-04 16:34:17 +02:00
Manlio Perillo a5d93c0b20 build: improve coding style in ZiglingStep
- Use an anonymous struct when initializing std.Build.Step.
  - Rename the builder parameter in the create method to b
  - Avoid lines too long

Additionally:
  - In the run method, rename output to raw_output in order to make the
    next variable names shorter.
  - In the compile method, rename zig_file to path.
2023-05-03 18:13:55 +02:00
Manlio Perillo 771b499cbc build: use @panic("OOM") instead of unreachable
The code in ZiglingStep copied the error handling used in std.Build in
the past.

Use @panic("OOM") when the error is caused by the allocator failing to
allocate memory.
2023-05-03 18:13:55 +02:00
Manlio Perillo c6c6a32270 build: improve the exercise output check
Make the error message consistent with the one in std.Build.RunStep,
using the "=" character instead of "-" and correctly aligning the text.
2023-05-03 18:13:55 +02:00
Manlio Perillo feeba51940 build: don't use @This() in ZiglingStep
Use ZiglingStep, instead.

This is consistent with the coding style in std.Build.
2023-05-03 18:13:55 +02:00
Manlio Perillo 3ec978d73f build: remove ZiglingStep.builder field
It is not necessary, since the builder is available in self.step.owner.
2023-05-03 18:13:55 +02:00
Manlio Perillo 11d8468539 build: use Child.exec in ZiglingStep.run
Update the run method to use Child.exec, instead of Child.spawn followed
by Child.wait.
This simplifies the code.
2023-05-03 18:13:55 +02:00
Manlio Perillo 40cbee8fa2 build: fix incorrect error handling in ZiglingStep.compile
When handling the error from the eval method, some possible errors are
ignored.  The make method will only print the exercise hint and the
help message.

Print the unexpected error message, in the else prong.
Note that FileNotFound can also be considered unexpected.
2023-05-03 18:13:55 +02:00
Manlio Perillo 27b941fdaf build: remove the ZiglingStep.makeInternal method
Rename the doCompile method to compile and add the run method.
The two methods are now called from the make method.

Add the help method, since the error handling of compile and run methods
are now separate.

Remove the obsolete comment for the compile method.
2023-05-03 18:13:55 +02:00
Manlio Perillo 7a40c4584e Restore unit tests 2023-05-02 11:13:31 +02:00
Manlio Perillo 74b48192e4 test: don't run heal during configuration phase
In order to simplify the code, the heal function is called during the
configuration phase, thus resulting in the function being always called
when the build.zig file is run.

This behavior unfortunately causes a serious issue when the user fix a
broken exercise and, during the next step, the heal function tries to heal
the fixed exercise resulting in GNU patch assuming an attempt to reverse
a patch, waiting for input from the terminal.

Run the heal function from the new HealStep step, so that it is called
only during tests.

Rename the outdir constant to work_path, for consistency with build.zig.

Fixes #272
2023-05-02 11:13:25 +02:00
Manlio Perillo a86d4c2795 build: don't override the top level steps
When running `zig build -Dn=n`, the install and uninstall steps where
overridden in order to improve the description.

In recent version of Zig this is no longer allowed.
2023-05-01 18:39:54 +02:00
Manlio Perillo 5c20e2b553 build: rename Exercise.baseName to name
The name "baseName" is confusing, since it refers to the UNIX basename
command, and not to the basename function in some programming languages
including Zig.

Use the std.fs.path.stem function to remove the file extension, instead
of slicing.

Remove the use of the assertion, since it is no longer necessary.
Instead, add a check to ensure that the exercise must be a Zig source
file in the validate_exercises function.

Update the validate_exercises function to check the last exercise, too.
2023-05-01 18:39:54 +02:00
Manlio Perillo 69103a3b82 build: add the Exercise.addExecutable method
Currently addExecutable is called 3 times, unnecessarily making the code
more complex.

The method takes as argument the path to the exercises directory.

Additionally, use the new std.Build.ExecutableOptions.link_libc field.
The new field was added in ziglang/zig@adc9b77d5f on 2023-04-13.

Update the required Zig compiler version.
Note that I added the **current** zig version to the changelog, since
the reason for the change is known only to the person updating the
version.
2023-05-01 18:39:54 +02:00
Manlio Perillo 123fd4b105 build: rename the Exercise.C field to link_libc
The name "C" does not follow the naming conventions for container
fields.
2023-05-01 18:39:54 +02:00
Manlio Perillo ec1976e9ab build: reduce code duplication when setting the work path
Currently, the code for defining the path to the exercises directory is
duplicate 4 times.

Add the constants `healed_path` and `work_path`, and use work_path
instead of the duplicated if expression.  Update ZiglingStep to take
`work_path` instead of `use_healed` as argument.

Reduce code length by using `join` instead of `std.fs.path.join` and
replace the use of a slice with a tuple.

Additionally, in case of an error from the `join` function, use @panic
instead of unreachable.

Document why the special branch, when the exercises are healed by the
eowyn script, has been disabled.
2023-05-01 18:39:54 +02:00
Manlio Perillo 070734a520 build: remove the Exercise.async field
The stage1 C++ compiler is gone forever.

Remove the custom support and documentation for the old stage1 compiler
in build.zig and README.md.
2023-05-01 18:39:54 +02:00
Manlio Perillo 6f482a1f7a build: move exercises at the end of the file
The exercises slice takes about 460 lines, making it hard to read the
source code of build.zig.

Closes #225
2023-05-01 18:39:42 +02:00
Manlio Perillo 0dc6b45770 eowyn.sh: remove checking formatting one file at a time
This avoids unnecessary output.
Also remove the comment, since the message to stdout makes it
unnecessary.
2023-04-29 16:59:33 +02:00
Manlio Perillo 11d2279f4f test: make the patch command silent
The POSIX standard says that the patch command should not use stdout,
but GNU patch writes the message:
patching file patches/healed/xxx.zig (read from exercises/xxx.zig).

Add the -s flag to suppress these messages.

Note that the heal function from test/tests.zig is called when running
`zig build -Dhealed` because it is executed in the configure phase.
2023-04-29 16:50:28 +02:00
Manlio Perillo 4b1e292ae4 test: fix deadlock on windows when running tests
The deadlock was caused by setting stdout behavior to ignore, when
spawning the patch command.  When the patch command writes to devnull it
causes some errors and a deadlock.

The cause of the bug is probably Zig using `\Device\Null` from `ntdll`
while git-bash uses `NUL` from `kernel32`.
2023-04-29 16:25:58 +02:00
Manlio Perillo 93e8b5710c workflows: remove the custom windows only jobs
Restore the job matrix to run on linux, macos and windows.

Remove lines with extra whitespace.

Improve the documentation of the Eowyn workflow.

Remove the single quoting of the workflow names.
2023-04-29 16:22:52 +02:00
Manlio Perillo fa335d4166 workflows: improve the jobs configuration
Reduce the timeout to 30 minutes for all the jobs, since it is enough.

Set strategy.fail-fast to false, so that we can see the full logs.
2023-04-26 10:55:36 +02:00
Manlio Perillo cac7391247 .gitattributes: remove support for old files, add python
Remove support for old .h, .cpp and .bat files.

Set eol mode to lf for Python scripts.

Closes #252
2023-04-25 16:13:59 +02:00
Manlio Perillo 9273fe2dd8 .gitignore: add zig-out, remove vim backup and swap files
Add the zig-out directory, since the install step is available.

Remove the vim backup and swap files, since it is possible to configure
vim to use a custom directory.

Ensure all the directories are anchored to the root directory.

Closes #251
2023-04-25 16:13:38 +02:00
Manlio Perillo 6effa7fe84 workflow: add a test job to ci.yml
Add a job to run the ziglings unit tests, using `zig build test`.
2023-04-25 15:35:42 +02:00
Manlio Perillo b5036b776a workflows: use actions/checkout@v3
Use the new version of actions/checkout, since all Github Actions will
begin running on Node16 instead of Node12.

See https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/.
2023-04-25 15:13:38 +02:00
Manlio Perillo 49e7c51f9a Fix formatting in exercise 99
The non-conforming formatting was not detected by the eowyn.sh script,
due to a bug.
2023-04-25 14:56:07 +02:00
Manlio Perillo fd6f3eebbb eowyn.sh: set the -e option
Currently, `zig fmt` exit status is ignored, making it useless.
Ensure that the script terminates early if there is an error.

Print a message to stdout before executing `zig fmt`, in order to make
the possible error more visible.
2023-04-25 14:52:05 +02:00
Manlio Perillo 4b58de26d3 eowyn: always quote variables
Quote all the variables, even though we know that it is safe.

Fix coding style.
2023-04-25 12:58:46 +02:00
Manlio Perillo 4f690b074a test: add a test for zig build -Dn=1
Add a test for `zig build -Dn=1` in order to test that a broken exercise
will print an hint.
2023-04-24 13:03:52 +02:00
Manlio Perillo 5b2e842157 test: change the order of zig build options
In test case 1 and 2, move the -Dhealed option before the -Dn option,
for consistency.

Fix a typo in cmd.setName in test case 1 and 2.

Remove a confusing comment in test case 1.
2023-04-24 12:19:00 +02:00
Manlio Perillo 131772edd7 test: add test for zig build and zig build -Dn=1 start
Add tests for `zig build` and `zig build -Dn=1 start`, in order to test
that the all the exercises are processed in the correct order.
2023-04-24 11:59:08 +02:00
Manlio Perillo 3dd7cdcb3b build: make exercise output more reliable
Currently, ZiglingStep prints the raw exercise output.  This is not a
problem when executing `zig build` from the shell, but in a unit test it
is necessary to know when the exercise output ends.

Document that Exercise.output should not have trailing whitespace.
Ensure this is true by adding a check in the validate_exercises
function.

Remove trailing whitespace in exercises 68 and 99.

Simplify the output validation in ZiglingStep.makeInternal.
Checking that the length of the actual and expected output is the same
is not necessary, since trailing whitespace has been removed.  Simply do
an exact comparison.

Print the trimmed exercise output, instead of the raw output.
This will ensure that the exercise output always ends with only one LF
character.

Fix some small coding style issues.
2023-04-24 11:31:16 +02:00
Manlio Perillo cec0aa51db test: fix incorrect cleanup code
The current cleanup code is incorrect, since it may delete the healed
directory while one test case is running.

The solution is to make each test case isolate, with its own setup and
teardown.  Unfortunately it is currently not possible, since each test
case modify the same directory.

Disable the cleanup step, until a better solution is found.
2023-04-24 10:32:08 +02:00
Manlio Perillo 108c145bdd test: refactorize the code
Currently, if there is an error when creating the patches/healed
directory, the error message will be printed on stderr, but the build
runner will report the test as being successful.

Add the fail function and the FailStep, so that the error will be
correctly handled by the build runner.

Remove the PatchStep, and instead add the heal function so that all the
exercises are healed before starting the tests.

The heal function executes at the configuration phase, but the possible
error is handled by the build runner.
2023-04-24 10:31:06 +02:00
Manlio Perillo c7697a4282 Ensure the patches are up-to-date and consistent
Add the update-patches.py tool.

Update all the patches, so that the files are up-to-date and use the
same patch file format.
2023-04-18 18:16:19 +02:00
Manlio Perillo 7d7be0482c eowyn: run zig fmt --check before zig build
Update the eowyn.sh script to check the healed exercises formatting,
before running `zig build`.
2023-04-18 18:16:19 +02:00
Manlio Perillo 6b17a18893 Ensure the exercises use the canonical format
Add the check-exercises.py tool in the new tools directory.  It is used
to check that the exercises are correctly formatted, printing on stderr
the invalid ones and the diff in the unified format.

Update the exercises that don't use the canonical zig fmt format.

Update some patches that cause the generated zig file to be incorrectly
formatted.
2023-04-18 18:16:19 +02:00
Manlio Perillo b59bef29b9 ci: add a CI workflow
Add a new github workflow named CI.

Add a job named compat, checking that and old Zig compiler will not fail
with a compiler error, but instead will print an useful error message.
2023-04-18 18:16:19 +02:00
Manlio Perillo 30db9d105a build: avoid intermixed messages on the same line
In same cases, the progress messages from the compiler are intermixed
with the messages printed by ZiglingStep.

This intermixing appears in two cases:
  - when printing, e.g., the message "Checking 0_arrays2.zig..."
  - when printing the compiler errors

Closes #230
2023-04-18 14:43:17 +02:00
Manlio Perillo c6e055dd83 build: don't print errors in ZiglingStep.eval
Move the code for printing compiler errors and messages to the new
ZiglingStep.printErrors method.

Call printErrors in the Zigling.doCompile method, both in the normal and
error flow.

When handling an error from the Zig IPC, add the case when the compiler
was unable to return the executable path.

Before using the IPC, the error was
  "The following command exited with error code 1"
now it is
  "The following command failed to communicate the compilation result"
2023-04-18 12:57:03 +02:00
Manlio Perillo b39c7e61ef build: restore compatibility support again
Commit e214c44 (build: update ZiglingStep to the new API) broke again
the compatibility support for old compilers, due to the use of the
multi-object for loop syntax.

Move the Zig IPC support code to src/ipc.zig.

Use the while statement, instead of the for statement.
2023-04-18 12:22:30 +02:00
Manlio Perillo e3c5cb2175 build: update ZiglingStep to the new API
Update the code to the breaking change in ziglang
commit c96cb98ad (CLI: remove --enable-cache option).

Replace the --enable-cache option with the --listen=- option and use the
Zig IPC to get the path to the executable.

Closes #236
2023-04-13 18:39:51 +02:00
Manlio Perillo e91c7a24f2 build: disable special case for zig build -Dhealed
The special case was added because it was used by the Eowyn github
workflow.

As a side effect, however, it prevents testing the normal case used by
users.

Disable it, until a better solution is found.
2023-04-13 17:47:17 +02:00
Manlio Perillo bc98057d66 Update the code to the new zig version
Update the code to the breaking change in ziglang commit
60eabc0ec (std.Build.CompileStep: remove run() and install())

Update the zig version in the README.md file.
2023-04-12 18:50:30 +02:00
Manlio Perillo 47876e6371 build: make PrintStep thread safe
Update PrintStep to always printing to stderr, using std.debug.print, so
that the message is written atomically.

Note that currently it is not an issue, since PrintStep prints the
message before everything else.
2023-04-11 12:52:48 +02:00
Manlio Perillo 1ee8aabcf3 build: simplify the code when solving all the exercises
Initialize the first step in the chain to the header_step, instead of
making the code more complex handling the first step as a special case
in the for loop.
2023-04-11 12:45:55 +02:00
Manlio Perillo be782af7a3 build: restore compatibility support
Commit 0d56ba3 (build: restore the exercise chain) broke the
compatibility support for old compilers, due to the use of the
multi-object for loop syntax.

Use the normal for loop syntax; the change still keep the code readable.

Use the variable `n`, instead of `i`, when referring to the exercise
number; this will improve the readability.

Closes #227
2023-04-11 12:45:55 +02:00
Manlio Perillo 647a24afae build: improve PrintStep, SkipStep and PatchStep names
Use lover case for the step names.

Add the exercise name for the SkipStep and PatchStep step name.
2023-04-11 12:45:55 +02:00
Manlio Perillo c656536d3f build: simplify code and add tests
Simplify the code finding the exercise number from the exercise index,
when the -Dn option is set.  This is now possible since the exercise
numbers have no holes.

Add the validate_exercises function to check that exercise number are in
the correct order, and call it at the start of the build function.

Add tests, with 2 test cases.
2023-04-11 12:45:55 +02:00
Manlio Perillo d43f19ded8 build: add support for skipping exercises
Currently, exercises not working with the current Zig compiler are
commented. This is problematic, since the exercise key and exercise
index are no longer consistent.

Add the skip field to the Excercise struct.  Update ZiglingStep to
support it and add a new SkipStep step to support it when using the
standard build step.
2023-04-11 12:45:55 +02:00
Manlio Perillo 67f369484c build: ensure the exercise links libc, when needed
When running, as an example, `zig build -Dhealed -Dn=93 test`, the build
fails, because the `test` step use the standard CompileStep, instead of
ZiglingStep.

Ensure that exercises using libc are correctly built.

Closes #229
2023-04-11 12:45:27 +02:00
Manlio Perillo 1cf910fb51 build: enable full parallelism when -Dhealed is set
The eowyn.sh script is used in a github workflow, but after
commit 0d56ba3 (build: restore the exercise chain), the github action
will take more time to complete.

Enable full build parallelism, when -Dhealed is true and -Dn is null.
Use the standard CompileStep and RunStep, instead of ZiglingStep.

On my PC, this change reduces the build time by about 30%.
2023-04-08 09:31:03 +02:00
Manlio Perillo 59e28987da build: restore the exercise chain
The new parallel build support in Zig broke the exercise chain, so that
each esercise check is no longer strictly serialized.

  1. Add the Dexno option, in order to isolate the chain starting from a
     named exercise from the normal chain, thus simplify the code.

     The current code have an additional issue: it added 4 x n steps,
     making reading the help message or the list of steps very hard.

     Add only the `install`, `uninstall`, `zigling`, `test` and `start`
     steps.  The last three steps match the old steps `n`, `n_test` and
     `n_start`.

     The default step is zigling (note the singular form).

     The `install` step override the builtin install step, showing a
     custom description and matches the old `n_install` step.
     The uninstall step was added for consistency, so that the
     description is consistent.

     Setup a new chain starting at `zig build -Dexno=n start` so that it
     is stricly serialized.

     The behavior should be the same as the old one.

  2. Handle the code for all the exercises separately.

     Add only the `ziglings step`, making it the default step, in
     addition to the install and uninstall steps.

     Setup a new chain starting at the first exercise, to that it is
     strictly serialized.

     The behavior should be the same as the old one.

The current code has a know issue: the messages from the ZiglingStep and
the ones from the compiler compilation progress are interleaved, but each
message is written atomically, due to the use of `std.debug.getStderrMutex()`.

Update the README.md file.

Closes #202
2023-04-07 11:36:26 +02:00
Manlio Perillo 75a1600626 build: fix the description of the named_install step
Replace the description of the named_install step from
"Install {s} to zig-cache/bin" to "Copy {s} to prefix path".  The latter
has been adapded from the description of the builtin install step.

Ad an empty line before the build_step variable, in order to improve
readability.

Closes #213
2023-04-05 21:19:17 +02:00
Manlio Perillo 36e3f577ca build: replace the logo step with the header step
Remove the logo step, and use PrintStep for the header step.

The logo step was added as a quick fix after the Builder.addLog function
was removed.

Now the logo is no longer shown when running `zig build -l` or
`zig build -h`.
2023-04-04 18:32:30 +02:00
Manlio Perillo 45713ec8ab build: restore support for Zig 0.6.0
The version check for Zig 0.6.0 was incorrect since commit
971ab7f (Use a zig build script to run ziglings).

Move compatibility support to a separate file, in order to simplify
build.zig.

In case of incompatible version, exit with code 3 instead of 0, in order
to detect the case of failure in a test (to be implemented).

Remove the use of comptime when checking compatibility at the start of
the build function, since it is not necessary.

Closes #210.
2023-04-03 11:37:12 +02:00
Manlio Perillo dd15cb94fd build: make the logo a build step
Currently, the logo is always printed when the build script is executed,
resulting in the logo being printed twice with `zig build -h` and
`zig build -l`.

Make the logo a build step, so that the logo is printed to stderr only
when necessary.

Closes #211
2023-04-02 15:09:51 +02:00